7 slaves
This commit is contained in:
		@ -34,6 +34,7 @@
 | 
				
			|||||||
#define AMS_LOGGING_ID 0x500
 | 
					#define AMS_LOGGING_ID 0x500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define AMS_LOGGING_NUM_FRAMES 6
 | 
					#define AMS_LOGGING_NUM_FRAMES 6
 | 
				
			||||||
 | 
					#define AMS_LOGGING_FRAMES_PER_LOOP 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Charger->Master IDs
 | 
					// Charger->Master IDs
 | 
				
			||||||
#define CHARGER_START_CHARGING 0x446
 | 
					#define CHARGER_START_CHARGING 0x446
 | 
				
			||||||
 | 
				
			|||||||
@ -26,7 +26,7 @@
 | 
				
			|||||||
#define GET_MEASUREMENTS 0x05
 | 
					#define GET_MEASUREMENTS 0x05
 | 
				
			||||||
#define TOGGLE_STATUS_LED 0x06
 | 
					#define TOGGLE_STATUS_LED 0x06
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define NUMBEROFSLAVES 6
 | 
					#define NUMBEROFSLAVES 7
 | 
				
			||||||
#define N_CELLS_SERIES 10
 | 
					#define N_CELLS_SERIES 10
 | 
				
			||||||
#define N_CELLS_PARALLEL 9
 | 
					#define N_CELLS_PARALLEL 9
 | 
				
			||||||
#define NUMBEROFTEMPS 32
 | 
					#define NUMBEROFTEMPS 32
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,10 @@ extern "C" {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* Exported constants --------------------------------------------------------*/
 | 
					/* Exported constants --------------------------------------------------------*/
 | 
				
			||||||
/* USER CODE BEGIN EC */
 | 
					/* 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 */
 | 
					/* USER CODE END EC */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Exported macro ------------------------------------------------------------*/
 | 
					/* Exported macro ------------------------------------------------------------*/
 | 
				
			||||||
 | 
				
			|||||||
@ -208,122 +208,124 @@ void CAN_SendLoggingFrame(FDCAN_HandleTypeDef* hcan) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  uint8_t buffer[8];
 | 
					  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) {
 | 
					    switch (framelognum) {
 | 
				
			||||||
  case 0:
 | 
					    case 0:
 | 
				
			||||||
    buffer[1] = CAN_convert_logval(slaves[slavelognum].cellVoltages[0],
 | 
					      buffer[1] = CAN_convert_logval(slaves[slavelognum].cellVoltages[0],
 | 
				
			||||||
                                   BATTERY_VOLTAGE_TYPE);
 | 
					                                     BATTERY_VOLTAGE_TYPE);
 | 
				
			||||||
    buffer[2] = CAN_convert_logval(slaves[slavelognum].cellVoltages[1],
 | 
					      buffer[2] = CAN_convert_logval(slaves[slavelognum].cellVoltages[1],
 | 
				
			||||||
                                   BATTERY_VOLTAGE_TYPE);
 | 
					                                     BATTERY_VOLTAGE_TYPE);
 | 
				
			||||||
    buffer[3] = CAN_convert_logval(slaves[slavelognum].cellVoltages[2],
 | 
					      buffer[3] = CAN_convert_logval(slaves[slavelognum].cellVoltages[2],
 | 
				
			||||||
                                   BATTERY_VOLTAGE_TYPE);
 | 
					                                     BATTERY_VOLTAGE_TYPE);
 | 
				
			||||||
    buffer[4] = CAN_convert_logval(slaves[slavelognum].cellVoltages[3],
 | 
					      buffer[4] = CAN_convert_logval(slaves[slavelognum].cellVoltages[3],
 | 
				
			||||||
                                   BATTERY_VOLTAGE_TYPE);
 | 
					                                     BATTERY_VOLTAGE_TYPE);
 | 
				
			||||||
    buffer[5] = CAN_convert_logval(slaves[slavelognum].cellVoltages[4],
 | 
					      buffer[5] = CAN_convert_logval(slaves[slavelognum].cellVoltages[4],
 | 
				
			||||||
                                   BATTERY_VOLTAGE_TYPE);
 | 
					                                     BATTERY_VOLTAGE_TYPE);
 | 
				
			||||||
    buffer[6] = CAN_convert_logval(slaves[slavelognum].cellVoltages[5],
 | 
					      buffer[6] = CAN_convert_logval(slaves[slavelognum].cellVoltages[5],
 | 
				
			||||||
                                   BATTERY_VOLTAGE_TYPE);
 | 
					                                     BATTERY_VOLTAGE_TYPE);
 | 
				
			||||||
    buffer[7] = CAN_convert_logval(slaves[slavelognum].cellVoltages[6],
 | 
					      buffer[7] = CAN_convert_logval(slaves[slavelognum].cellVoltages[6],
 | 
				
			||||||
                                   BATTERY_VOLTAGE_TYPE);
 | 
					                                     BATTERY_VOLTAGE_TYPE);
 | 
				
			||||||
    break;
 | 
					      break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  case 1:
 | 
					    case 1:
 | 
				
			||||||
    buffer[1] = CAN_convert_logval(slaves[slavelognum].cellVoltages[7],
 | 
					      buffer[1] = CAN_convert_logval(slaves[slavelognum].cellVoltages[7],
 | 
				
			||||||
                                   BATTERY_VOLTAGE_TYPE);
 | 
					                                     BATTERY_VOLTAGE_TYPE);
 | 
				
			||||||
    buffer[2] = CAN_convert_logval(slaves[slavelognum].cellVoltages[8],
 | 
					      buffer[2] = CAN_convert_logval(slaves[slavelognum].cellVoltages[8],
 | 
				
			||||||
                                   BATTERY_VOLTAGE_TYPE);
 | 
					                                     BATTERY_VOLTAGE_TYPE);
 | 
				
			||||||
    buffer[3] = CAN_convert_logval(slaves[slavelognum].cellVoltages[9],
 | 
					      buffer[3] = CAN_convert_logval(slaves[slavelognum].cellVoltages[9],
 | 
				
			||||||
                                   BATTERY_VOLTAGE_TYPE);
 | 
					                                     BATTERY_VOLTAGE_TYPE);
 | 
				
			||||||
    buffer[4] =
 | 
					      buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[0],
 | 
				
			||||||
        CAN_convert_logval(slaves[slavelognum].cellTemps[0], BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[5] =
 | 
					      buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[1],
 | 
				
			||||||
        CAN_convert_logval(slaves[slavelognum].cellTemps[1], BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[6] =
 | 
					      buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[2],
 | 
				
			||||||
        CAN_convert_logval(slaves[slavelognum].cellTemps[2], BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[7] =
 | 
					      buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[3],
 | 
				
			||||||
        CAN_convert_logval(slaves[slavelognum].cellTemps[3], BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    break;
 | 
					      break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  case 2:
 | 
					    case 2:
 | 
				
			||||||
    buffer[1] =
 | 
					      buffer[1] = CAN_convert_logval(slaves[slavelognum].cellTemps[4],
 | 
				
			||||||
        CAN_convert_logval(slaves[slavelognum].cellTemps[4], BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[2] =
 | 
					      buffer[2] = CAN_convert_logval(slaves[slavelognum].cellTemps[5],
 | 
				
			||||||
        CAN_convert_logval(slaves[slavelognum].cellTemps[5], BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[3] =
 | 
					      buffer[3] = CAN_convert_logval(slaves[slavelognum].cellTemps[6],
 | 
				
			||||||
        CAN_convert_logval(slaves[slavelognum].cellTemps[6], BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[4] =
 | 
					      buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[7],
 | 
				
			||||||
        CAN_convert_logval(slaves[slavelognum].cellTemps[7], BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[5] =
 | 
					      buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[8],
 | 
				
			||||||
        CAN_convert_logval(slaves[slavelognum].cellTemps[8], BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[6] =
 | 
					      buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[9],
 | 
				
			||||||
        CAN_convert_logval(slaves[slavelognum].cellTemps[9], BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[10],
 | 
					      buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[10],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    break;
 | 
					      break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  case 3:
 | 
					    case 3:
 | 
				
			||||||
    buffer[1] = CAN_convert_logval(slaves[slavelognum].cellTemps[11],
 | 
					      buffer[1] = CAN_convert_logval(slaves[slavelognum].cellTemps[11],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[2] = CAN_convert_logval(slaves[slavelognum].cellTemps[12],
 | 
					      buffer[2] = CAN_convert_logval(slaves[slavelognum].cellTemps[12],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[3] = CAN_convert_logval(slaves[slavelognum].cellTemps[13],
 | 
					      buffer[3] = CAN_convert_logval(slaves[slavelognum].cellTemps[13],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[14],
 | 
					      buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[14],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[15],
 | 
					      buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[15],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[16],
 | 
					      buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[16],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[17],
 | 
					      buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[17],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    break;
 | 
					      break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  case 4:
 | 
					    case 4:
 | 
				
			||||||
    buffer[1] = CAN_convert_logval(slaves[slavelognum].cellTemps[18],
 | 
					      buffer[1] = CAN_convert_logval(slaves[slavelognum].cellTemps[18],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[2] = CAN_convert_logval(slaves[slavelognum].cellTemps[19],
 | 
					      buffer[2] = CAN_convert_logval(slaves[slavelognum].cellTemps[19],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[3] = CAN_convert_logval(slaves[slavelognum].cellTemps[20],
 | 
					      buffer[3] = CAN_convert_logval(slaves[slavelognum].cellTemps[20],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[21],
 | 
					      buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[21],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[22],
 | 
					      buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[22],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[23],
 | 
					      buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[23],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[24],
 | 
					      buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[24],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    break;
 | 
					      break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  case 5:
 | 
					    case 5:
 | 
				
			||||||
    buffer[1] = CAN_convert_logval(slaves[slavelognum].cellTemps[25],
 | 
					      buffer[1] = CAN_convert_logval(slaves[slavelognum].cellTemps[25],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[2] = CAN_convert_logval(slaves[slavelognum].cellTemps[26],
 | 
					      buffer[2] = CAN_convert_logval(slaves[slavelognum].cellTemps[26],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[3] = CAN_convert_logval(slaves[slavelognum].cellTemps[27],
 | 
					      buffer[3] = CAN_convert_logval(slaves[slavelognum].cellTemps[27],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[28],
 | 
					      buffer[4] = CAN_convert_logval(slaves[slavelognum].cellTemps[28],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[29],
 | 
					      buffer[5] = CAN_convert_logval(slaves[slavelognum].cellTemps[29],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[30],
 | 
					      buffer[6] = CAN_convert_logval(slaves[slavelognum].cellTemps[30],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[31],
 | 
					      buffer[7] = CAN_convert_logval(slaves[slavelognum].cellTemps[31],
 | 
				
			||||||
                                   BATTERY_TEMP_TYPE);
 | 
					                                     BATTERY_TEMP_TYPE);
 | 
				
			||||||
    break;
 | 
					      break;
 | 
				
			||||||
  }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CAN_Transmit(hcan, AMS_LOGGING_ID, buffer, 8);
 | 
					    CAN_Transmit(hcan, AMS_LOGGING_ID, buffer, 8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  framelognum++;
 | 
					    framelognum++;
 | 
				
			||||||
  if ((framelognum >= AMS_LOGGING_NUM_FRAMES)) {
 | 
					    if ((framelognum >= AMS_LOGGING_NUM_FRAMES)) {
 | 
				
			||||||
    framelognum = 0;
 | 
					      framelognum = 0;
 | 
				
			||||||
    slavelognum++;
 | 
					      slavelognum++;
 | 
				
			||||||
  }
 | 
					    }
 | 
				
			||||||
  if ((slavelognum >= NUMBEROFSLAVES)) {
 | 
					    if ((slavelognum >= NUMBEROFSLAVES)) {
 | 
				
			||||||
    slavelognum = 0;
 | 
					      slavelognum = 0;
 | 
				
			||||||
    framelognum = 0;
 | 
					      framelognum = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -33,6 +33,8 @@
 | 
				
			|||||||
#include "SPI_Communication.h"
 | 
					#include "SPI_Communication.h"
 | 
				
			||||||
#include "USB_Shell.h"
 | 
					#include "USB_Shell.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "stm32g4xx_hal.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* USER CODE END Includes */
 | 
					/* USER CODE END Includes */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Private typedef -----------------------------------------------------------*/
 | 
					/* Private typedef -----------------------------------------------------------*/
 | 
				
			||||||
@ -77,6 +79,17 @@ void setAMSError();
 | 
				
			|||||||
void AMS_Error_Handler(uint8_t ErrorCode);
 | 
					void AMS_Error_Handler(uint8_t ErrorCode);
 | 
				
			||||||
void Send_Can_Info_Frame(void);
 | 
					void Send_Can_Info_Frame(void);
 | 
				
			||||||
void softTSAL(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 */
 | 
					/* USER CODE END 0 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@ -145,6 +158,7 @@ int main(void) {
 | 
				
			|||||||
    CAN_Receive(&hfdcan1);
 | 
					    CAN_Receive(&hfdcan1);
 | 
				
			||||||
    CAN_SendAbxStatus(&hfdcan1);
 | 
					    CAN_SendAbxStatus(&hfdcan1);
 | 
				
			||||||
    CheckShuntLimits();
 | 
					    CheckShuntLimits();
 | 
				
			||||||
 | 
					    CheckCellLimits();
 | 
				
			||||||
    CAN_SendLoggingFrame(&hfdcan1);
 | 
					    CAN_SendLoggingFrame(&hfdcan1);
 | 
				
			||||||
    HAL_GPIO_TogglePin(Status_LED_GPIO_Port, Status_LED_Pin);
 | 
					    HAL_GPIO_TogglePin(Status_LED_GPIO_Port, Status_LED_Pin);
 | 
				
			||||||
    Temp_Ctrl_Loop();
 | 
					    Temp_Ctrl_Loop();
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user