Working version

This commit is contained in:
jazzpi 2022-07-18 16:56:38 +02:00
parent 1d70429708
commit 665ee02bf2
8 changed files with 67 additions and 23 deletions

View File

@ -33,6 +33,11 @@
#define AMS_PANIC_ID 0x42
#define AMS_LOGGING_ID 0x500
#define AMS_LOGGING_NUM_FRAMES 6
// Charger->Master IDs
#define CHARGER_START_CHARGING 0x446
#define BATTERY_VOLTAGE_TYPE 1
#define BATTERY_TEMP_TYPE 2
#define LOG_BAT_LOW_VOLTAGE 32768

View File

@ -12,7 +12,7 @@
#include "main.h"
#define SHUNT_OVERCURRENT 0x0FFFFFFF // Shunt Overcurrent Limit
#define SHUNT_TIMEOUT 3000 // Timeout after 500ms
#define SHUNT_TIMEOUT 500 // Timeout after 500ms
#define SHUNT_OVERTEMP 0xFFFFFFFF // Overtermperature of the Busbar
void CheckShuntLimits();

View File

@ -16,6 +16,8 @@
#define TS_DISCHARGE 3
#define TS_ERROR 4
#define TS_ACTIVE 1
#define TS_CHARGING_CHECK 5
#define TS_CHARGING 6
#define SEND_SHUNTDATA 0x01
#define SET_TSSTATE 0x02
@ -73,6 +75,7 @@ typedef struct {
} ErrorFlagHandler;
extern SlaveHandler slaves[NUMBEROFSLAVES];
extern uint16_t min_voltage, max_voltage, min_temp, max_temp;
extern ErrorFlagHandler errorflags;
extern TSHandler ctrltsstate;

View File

@ -4,7 +4,7 @@
#include "SPI_Communication.h"
#define SOCE_SHUNT_CURRENT_OFF_THRESH 20 /* mA */
#define CELL_VOLTAGE_CONVERSION_FACTOR 5.0f / 65535 /* V/quantum */
#define CELL_VOLTAGE_CONVERSION_FACTOR (5.0f / 65535) /* V/quantum */
#define BATTERY_CAPACITY (N_CELLS_PARALLEL * 2.5f * 3600) /* As */
extern uint8_t current_soc;

View File

@ -105,7 +105,9 @@ uint8_t CAN_Receive(FDCAN_HandleTypeDef* hcan) {
(rxFrame.data[4] << 8) | (rxFrame.data[5]);
shuntlastmessage = framebuffer[framebufferreadpointer].timestamp;
break;
case CHARGER_START_CHARGING:
TSTargetState = TS_CHARGING;
break;
case AUTOBOX_INFO:
currentlap = rxFrame.data[0] >> 2;
TSTargetState = rxFrame.data[0] & 0x01;
@ -122,7 +124,7 @@ uint8_t CAN_Transmit(FDCAN_HandleTypeDef* hcan, uint16_t frameid,
txheader.Identifier = frameid;
txheader.IdType = FDCAN_STANDARD_ID;
txheader.TxFrameType = FDCAN_FRAME_CLASSIC;
txheader.TxFrameType = FDCAN_DATA_FRAME;
txheader.DataLength = ((uint32_t)datalen) << 16;
txheader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
txheader.BitRateSwitch = FDCAN_BRS_OFF;
@ -208,16 +210,6 @@ void CAN_SendLoggingFrame(FDCAN_HandleTypeDef* hcan) {
buffer[0] = ((slavelognum << 4) | framelognum);
framelognum++;
if ((framelognum > 6)) {
framelognum = 0;
slavelognum++;
}
if ((slavelognum > NUMBEROFSLAVES)) {
slavelognum = 0;
framelognum = 0;
}
switch (framelognum) {
case 0:
buffer[1] = CAN_convert_logval(slaves[slavelognum].cellVoltages[0],
@ -323,12 +315,22 @@ void CAN_SendLoggingFrame(FDCAN_HandleTypeDef* hcan) {
}
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;
}
}
uint8_t CAN_convert_logval(uint16_t value, uint8_t type) {
if (type == BATTERY_VOLTAGE_TYPE) {
return (uint8_t)value >> 8;
return value >> 8;
} else if (type == BATTERY_TEMP_TYPE) {
return (uint8_t)value >> 4;
return value >> 4;
}
}

View File

@ -10,6 +10,8 @@
#include "stm32g4xx_hal.h"
#include "stm32g4xx_hal_spi.h"
#include <stdint.h>
#define GET_ERROR_RESPONSE_LEN 14
#define GET_TS_STATE_RESPONSE_LEN 23
@ -19,6 +21,7 @@ uint8_t spitxbuf[1024];
uint8_t spirxbuf[1024];
SlaveHandler slaves[NUMBEROFSLAVES] = {0};
uint16_t min_voltage = 0, max_voltage = 0, min_temp = 0, max_temp = 0;
ErrorFlagHandler errorflags = {0};
TSHandler ctrltsstate = {0};
@ -234,6 +237,10 @@ void InterSTMFrame(uint8_t targettsstate) {
return;
}
uint16_t min_v = 0xFFFF;
uint16_t max_v = 0;
uint16_t min_t = 0xFFFF;
uint16_t max_t = 0;
for (int n = 0; n < NUMBEROFSLAVES; n++) {
slaves[n].slaveID = spirxbuf[n * 89];
slaves[n].timestamp = (spirxbuf[n * 89 + 1] << 24) |
@ -241,15 +248,32 @@ void InterSTMFrame(uint8_t targettsstate) {
(spirxbuf[n * 89 + 3] << 8) | (spirxbuf[n * 89 + 4]);
for (int i = 0; i < N_CELLS_SERIES; i++) {
slaves[n].cellVoltages[i] =
((uint16_t)spirxbuf[n * 89 + 5 + 2 * i] << 8) |
spirxbuf[n * 89 + 6 + 2 * i];
uint16_t v = ((uint16_t)spirxbuf[n * 89 + 5 + 2 * i] << 8) |
spirxbuf[n * 89 + 6 + 2 * i];
slaves[n].cellVoltages[i] = v;
if (v < min_v) {
min_v = v;
}
if (v > max_v) {
max_v = v;
}
}
for (int i = 0; i < NUMBEROFTEMPS; i++) {
slaves[n].cellTemps[i] = ((uint16_t)spirxbuf[n * 89 + 25 + 2 * i] << 8) |
spirxbuf[n * 89 + 26 + 2 * i];
uint16_t t = ((uint16_t)spirxbuf[n * 89 + 25 + 2 * i] << 8) |
spirxbuf[n * 89 + 26 + 2 * i];
slaves[n].cellTemps[i] = t;
if (t < min_t) {
min_t = t;
}
if (t > max_t) {
max_t = t;
}
}
}
min_voltage = min_v;
max_voltage = max_v;
min_temp = min_t;
max_temp = max_t;
uint16_t errorflagbaseaddress = NUMBEROFSLAVES * 89 + 1;

View File

@ -20,10 +20,10 @@
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "SoC_Estimation.h"
#include "app_fatfs.h"
#include "usb_device.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "CAN_Communication.h"
@ -151,6 +151,7 @@ int main(void) {
softTSAL();
InterSTMFrame(TSTargetState);
estimate_soc();
HAL_Delay(10);
}
/* USER CODE END 3 */

View File

@ -41,6 +41,7 @@ Core/Src/Check_Shunt_Limits.c \
Core/Src/Fan_Control.c \
Core/Src/SD_SPI_Driver.c \
Core/Src/SPI_Communication.c \
Core/Src/SoC_Estimation.c \
Core/Src/USB_Shell.c \
Core/Src/main.c \
Core/Src/stm32g4xx_hal_msp.c \
@ -48,6 +49,7 @@ Core/Src/stm32g4xx_it.c \
Core/Src/syscalls.c \
Core/Src/sysmem.c \
Core/Src/system_stm32g4xx.c \
Core/Src/util.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_cortex.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_dma.c \
@ -177,7 +179,8 @@ CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-
CXXFLAGS = $(MCU) $(CXX_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections -feliminate-unused-debug-types
ifeq ($(DEBUG), 1)
CFLAGS += -g -gdwarf-2
CFLAGS += -g -gdwarf -ggdb
CXXFLAGS += -g -gdwarf -ggdb
endif
# Add additional flags
@ -266,6 +269,12 @@ erase: $(BUILD_DIR)/$(TARGET).elf
clean:
-rm -fR $(BUILD_DIR)
#######################################
# custom makefile rules
#######################################
#######################################
# dependencies
#######################################