This commit is contained in:
jazzpi 2022-07-20 12:43:57 +02:00
parent 665ee02bf2
commit 90b98f25c2
5 changed files with 130 additions and 110 deletions

View File

@ -34,6 +34,7 @@
#define AMS_LOGGING_ID 0x500
#define AMS_LOGGING_NUM_FRAMES 6
#define AMS_LOGGING_FRAMES_PER_LOOP 1
// Charger->Master IDs
#define CHARGER_START_CHARGING 0x446

View File

@ -26,7 +26,7 @@
#define GET_MEASUREMENTS 0x05
#define TOGGLE_STATUS_LED 0x06
#define NUMBEROFSLAVES 6
#define NUMBEROFSLAVES 7
#define N_CELLS_SERIES 10
#define N_CELLS_PARALLEL 9
#define NUMBEROFTEMPS 32

View File

@ -42,7 +42,10 @@ extern "C" {
/* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */
#define THRESH_UV 32768 /* 2.5V */
#define THRESH_OV 55050 /* 4.2V */
#define THRESH_UT 0 /* 0C */
#define THRESH_OT 880 /* 55C */
/* USER CODE END EC */
/* Exported macro ------------------------------------------------------------*/

View File

@ -208,122 +208,124 @@ void CAN_SendLoggingFrame(FDCAN_HandleTypeDef* hcan) {
uint8_t buffer[8];
buffer[0] = ((slavelognum << 4) | framelognum);
for (int i = 0; i < AMS_LOGGING_FRAMES_PER_LOOP; i++) {
buffer[0] = ((slavelognum << 4) | framelognum);
switch (framelognum) {
case 0:
buffer[1] = CAN_convert_logval(slaves[slavelognum].cellVoltages[0],
BATTERY_VOLTAGE_TYPE);
buffer[2] = CAN_convert_logval(slaves[slavelognum].cellVoltages[1],
BATTERY_VOLTAGE_TYPE);
buffer[3] = CAN_convert_logval(slaves[slavelognum].cellVoltages[2],
BATTERY_VOLTAGE_TYPE);
buffer[4] = CAN_convert_logval(slaves[slavelognum].cellVoltages[3],
BATTERY_VOLTAGE_TYPE);
buffer[5] = CAN_convert_logval(slaves[slavelognum].cellVoltages[4],
BATTERY_VOLTAGE_TYPE);
buffer[6] = CAN_convert_logval(slaves[slavelognum].cellVoltages[5],
BATTERY_VOLTAGE_TYPE);
buffer[7] = CAN_convert_logval(slaves[slavelognum].cellVoltages[6],
BATTERY_VOLTAGE_TYPE);
break;
switch (framelognum) {
case 0:
buffer[1] = CAN_convert_logval(slaves[slavelognum].cellVoltages[0],
BATTERY_VOLTAGE_TYPE);
buffer[2] = CAN_convert_logval(slaves[slavelognum].cellVoltages[1],
BATTERY_VOLTAGE_TYPE);
buffer[3] = CAN_convert_logval(slaves[slavelognum].cellVoltages[2],
BATTERY_VOLTAGE_TYPE);
buffer[4] = CAN_convert_logval(slaves[slavelognum].cellVoltages[3],
BATTERY_VOLTAGE_TYPE);
buffer[5] = CAN_convert_logval(slaves[slavelognum].cellVoltages[4],
BATTERY_VOLTAGE_TYPE);
buffer[6] = CAN_convert_logval(slaves[slavelognum].cellVoltages[5],
BATTERY_VOLTAGE_TYPE);
buffer[7] = CAN_convert_logval(slaves[slavelognum].cellVoltages[6],
BATTERY_VOLTAGE_TYPE);
break;
case 1:
buffer[1] = CAN_convert_logval(slaves[slavelognum].cellVoltages[7],
BATTERY_VOLTAGE_TYPE);
buffer[2] = CAN_convert_logval(slaves[slavelognum].cellVoltages[8],
BATTERY_VOLTAGE_TYPE);
buffer[3] = CAN_convert_logval(slaves[slavelognum].cellVoltages[9],
BATTERY_VOLTAGE_TYPE);
buffer[4] =
CAN_convert_logval(slaves[slavelognum].cellTemps[0], BATTERY_TEMP_TYPE);
buffer[5] =
CAN_convert_logval(slaves[slavelognum].cellTemps[1], BATTERY_TEMP_TYPE);
buffer[6] =
CAN_convert_logval(slaves[slavelognum].cellTemps[2], BATTERY_TEMP_TYPE);
buffer[7] =
CAN_convert_logval(slaves[slavelognum].cellTemps[3], BATTERY_TEMP_TYPE);
break;
case 1:
buffer[1] = CAN_convert_logval(slaves[slavelognum].cellVoltages[7],
BATTERY_VOLTAGE_TYPE);
buffer[2] = CAN_convert_logval(slaves[slavelognum].cellVoltages[8],
BATTERY_VOLTAGE_TYPE);
buffer[3] = CAN_convert_logval(slaves[slavelognum].cellVoltages[9],
BATTERY_VOLTAGE_TYPE);
buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[0],
BATTERY_TEMP_TYPE);
buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[1],
BATTERY_TEMP_TYPE);
buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[2],
BATTERY_TEMP_TYPE);
buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[3],
BATTERY_TEMP_TYPE);
break;
case 2:
buffer[1] =
CAN_convert_logval(slaves[slavelognum].cellTemps[4], BATTERY_TEMP_TYPE);
buffer[2] =
CAN_convert_logval(slaves[slavelognum].cellTemps[5], BATTERY_TEMP_TYPE);
buffer[3] =
CAN_convert_logval(slaves[slavelognum].cellTemps[6], BATTERY_TEMP_TYPE);
buffer[4] =
CAN_convert_logval(slaves[slavelognum].cellTemps[7], BATTERY_TEMP_TYPE);
buffer[5] =
CAN_convert_logval(slaves[slavelognum].cellTemps[8], BATTERY_TEMP_TYPE);
buffer[6] =
CAN_convert_logval(slaves[slavelognum].cellTemps[9], BATTERY_TEMP_TYPE);
buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[10],
BATTERY_TEMP_TYPE);
break;
case 2:
buffer[1] = CAN_convert_logval(slaves[slavelognum].cellTemps[4],
BATTERY_TEMP_TYPE);
buffer[2] = CAN_convert_logval(slaves[slavelognum].cellTemps[5],
BATTERY_TEMP_TYPE);
buffer[3] = CAN_convert_logval(slaves[slavelognum].cellTemps[6],
BATTERY_TEMP_TYPE);
buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[7],
BATTERY_TEMP_TYPE);
buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[8],
BATTERY_TEMP_TYPE);
buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[9],
BATTERY_TEMP_TYPE);
buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[10],
BATTERY_TEMP_TYPE);
break;
case 3:
buffer[1] = CAN_convert_logval(slaves[slavelognum].cellTemps[11],
BATTERY_TEMP_TYPE);
buffer[2] = CAN_convert_logval(slaves[slavelognum].cellTemps[12],
BATTERY_TEMP_TYPE);
buffer[3] = CAN_convert_logval(slaves[slavelognum].cellTemps[13],
BATTERY_TEMP_TYPE);
buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[14],
BATTERY_TEMP_TYPE);
buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[15],
BATTERY_TEMP_TYPE);
buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[16],
BATTERY_TEMP_TYPE);
buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[17],
BATTERY_TEMP_TYPE);
break;
case 3:
buffer[1] = CAN_convert_logval(slaves[slavelognum].cellTemps[11],
BATTERY_TEMP_TYPE);
buffer[2] = CAN_convert_logval(slaves[slavelognum].cellTemps[12],
BATTERY_TEMP_TYPE);
buffer[3] = CAN_convert_logval(slaves[slavelognum].cellTemps[13],
BATTERY_TEMP_TYPE);
buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[14],
BATTERY_TEMP_TYPE);
buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[15],
BATTERY_TEMP_TYPE);
buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[16],
BATTERY_TEMP_TYPE);
buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[17],
BATTERY_TEMP_TYPE);
break;
case 4:
buffer[1] = CAN_convert_logval(slaves[slavelognum].cellTemps[18],
BATTERY_TEMP_TYPE);
buffer[2] = CAN_convert_logval(slaves[slavelognum].cellTemps[19],
BATTERY_TEMP_TYPE);
buffer[3] = CAN_convert_logval(slaves[slavelognum].cellTemps[20],
BATTERY_TEMP_TYPE);
buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[21],
BATTERY_TEMP_TYPE);
buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[22],
BATTERY_TEMP_TYPE);
buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[23],
BATTERY_TEMP_TYPE);
buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[24],
BATTERY_TEMP_TYPE);
break;
case 4:
buffer[1] = CAN_convert_logval(slaves[slavelognum].cellTemps[18],
BATTERY_TEMP_TYPE);
buffer[2] = CAN_convert_logval(slaves[slavelognum].cellTemps[19],
BATTERY_TEMP_TYPE);
buffer[3] = CAN_convert_logval(slaves[slavelognum].cellTemps[20],
BATTERY_TEMP_TYPE);
buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[21],
BATTERY_TEMP_TYPE);
buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[22],
BATTERY_TEMP_TYPE);
buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[23],
BATTERY_TEMP_TYPE);
buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[24],
BATTERY_TEMP_TYPE);
break;
case 5:
buffer[1] = CAN_convert_logval(slaves[slavelognum].cellTemps[25],
BATTERY_TEMP_TYPE);
buffer[2] = CAN_convert_logval(slaves[slavelognum].cellTemps[26],
BATTERY_TEMP_TYPE);
buffer[3] = CAN_convert_logval(slaves[slavelognum].cellTemps[27],
BATTERY_TEMP_TYPE);
buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[28],
BATTERY_TEMP_TYPE);
buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[29],
BATTERY_TEMP_TYPE);
buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[30],
BATTERY_TEMP_TYPE);
buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[31],
BATTERY_TEMP_TYPE);
break;
}
case 5:
buffer[1] = CAN_convert_logval(slaves[slavelognum].cellTemps[25],
BATTERY_TEMP_TYPE);
buffer[2] = CAN_convert_logval(slaves[slavelognum].cellTemps[26],
BATTERY_TEMP_TYPE);
buffer[3] = CAN_convert_logval(slaves[slavelognum].cellTemps[27],
BATTERY_TEMP_TYPE);
buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[28],
BATTERY_TEMP_TYPE);
buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[29],
BATTERY_TEMP_TYPE);
buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[30],
BATTERY_TEMP_TYPE);
buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[31],
BATTERY_TEMP_TYPE);
break;
}
CAN_Transmit(hcan, AMS_LOGGING_ID, buffer, 8);
CAN_Transmit(hcan, AMS_LOGGING_ID, buffer, 8);
framelognum++;
if ((framelognum >= AMS_LOGGING_NUM_FRAMES)) {
framelognum = 0;
slavelognum++;
}
if ((slavelognum >= NUMBEROFSLAVES)) {
slavelognum = 0;
framelognum = 0;
framelognum++;
if ((framelognum >= AMS_LOGGING_NUM_FRAMES)) {
framelognum = 0;
slavelognum++;
}
if ((slavelognum >= NUMBEROFSLAVES)) {
slavelognum = 0;
framelognum = 0;
}
}
}

View File

@ -33,6 +33,8 @@
#include "SPI_Communication.h"
#include "USB_Shell.h"
#include "stm32g4xx_hal.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@ -77,6 +79,17 @@ void setAMSError();
void AMS_Error_Handler(uint8_t ErrorCode);
void Send_Can_Info_Frame(void);
void softTSAL(void);
void CheckCellLimits() {
if (HAL_GetTick() < 10000) {
return;
}
if (min_temp < THRESH_UT || max_temp > THRESH_OT || min_voltage < THRESH_UV ||
max_voltage > THRESH_OV) {
AMS_Error_Handler(0x10);
}
}
/* USER CODE END 0 */
/**
@ -145,6 +158,7 @@ int main(void) {
CAN_Receive(&hfdcan1);
CAN_SendAbxStatus(&hfdcan1);
CheckShuntLimits();
CheckCellLimits();
CAN_SendLoggingFrame(&hfdcan1);
HAL_GPIO_TogglePin(Status_LED_GPIO_Port, Status_LED_Pin);
Temp_Ctrl_Loop();