From e230b029be3c05706e84a8cc7abcd3f702f0c282 Mon Sep 17 00:00:00 2001 From: Blake Jackson Date: Wed, 6 Nov 2024 22:54:23 -0500 Subject: [PATCH 1/4] Updated INA226 driver (#190) * (First draft) Added functions for reading/writing registers and converting to real current, power, and voltage * Removed some comments * Added public functions to INA226.h * Added missing #endif to INA226.h * Fixed various issues that were preventing building --- general/include/INA226.h | 10 +++++++--- general/src/INA226.c | 6 +++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/general/include/INA226.h b/general/include/INA226.h index f586d36..59c336d 100644 --- a/general/include/INA226.h +++ b/general/include/INA226.h @@ -6,6 +6,8 @@ #ifndef INA226_H #define INA226_H +#include +#include // REGISTERS #define INA226_CONFIGURATION 0x00 @@ -65,10 +67,12 @@ int ina226_configure(ina226_t *ina, uint8_t mode, uint8_t vshct, uint8_t vbusct, uint8_t avg); // Resets all registers to default values -int ina226_reset(ina226_t ina); +int ina226_reset(ina226_t *ina); // Reads manufacturer id register -int ina226_read_manufacturer_id(ina226_t ina, uint16_t *data); +int ina226_read_manufacturer_id(ina226_t *ina, uint16_t *data); // Reads die id -int ina226_read_die_id(ina226_t ina, uint16_t *data); \ No newline at end of file +int ina226_read_die_id(ina226_t *ina, uint16_t *data); + +#endif //INA226_H \ No newline at end of file diff --git a/general/src/INA226.c b/general/src/INA226.c index 16a98a3..0a440d1 100644 --- a/general/src/INA226.c +++ b/general/src/INA226.c @@ -108,14 +108,14 @@ int ina226_configure(ina226_t *ina, uint8_t mode, uint8_t vshct, uint8_t vbusct, } // Resets all registers to default values -int ina226_reset(ina226_t ina) +int ina226_reset(ina226_t *ina) { uint16_t reset = INA226_CONFIG_RESET_MASK; return ina226_write_reg(ina, INA226_CONFIGURATION, &reset); } // Reads manufacturer id register -int ina226_read_manufacturer_id(ina226_t ina, uint16_t *data) +int ina226_read_manufacturer_id(ina226_t *ina, uint16_t *data) { uint16_t manufacturer_id; @@ -131,7 +131,7 @@ int ina226_read_manufacturer_id(ina226_t ina, uint16_t *data) } // Reads die id -int ina226_read_die_id(ina226_t ina, uint16_t *data) +int ina226_read_die_id(ina226_t *ina, uint16_t *data) { uint16_t die_id; From 7ab9dd0c583773193bfb56752f649ef0f89ee05e Mon Sep 17 00:00:00 2001 From: Blake Jackson Date: Fri, 8 Nov 2024 15:41:46 -0500 Subject: [PATCH 2/4] Make ads131m driver agnostic (#182) * Removed HAL-specific code in ads131m04 drver and added function pointers * Fixed cs_pin data type in ads131m04 (changed from uint16_t to uint8_t) * Variable and function pointer name changes --- general/include/ads131m04.h | 18 +++++++++++------ general/src/ads131m04.c | 39 +++++++++++++++++++------------------ 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/general/include/ads131m04.h b/general/include/ads131m04.h index 6cb9719..b242d9d 100644 --- a/general/include/ads131m04.h +++ b/general/include/ads131m04.h @@ -3,18 +3,24 @@ #include "stm32xx_hal.h" +/* Function Pointers*/ +typedef void (*GPIO_WritePtr)(uint8_t pin, uint8_t PinState); +typedef void (*WritePtr)(uint8_t *pData, uint16_t size); +typedef int (*ReadPtr)(uint8_t *pData, uint16_t size); + typedef struct { - SPI_HandleTypeDef *spi; - GPIO_TypeDef *gpio; - uint8_t cs_pin; + uint8_t pin; + GPIO_WritePtr gpio_write; + WritePtr write; + ReadPtr read; } ads131_t; /* Method to initialize communication over SPI and configure the ADC into * Continuous Conversion Mode*/ -void ads131m04_init(ads131_t *adc, SPI_HandleTypeDef *hspi, GPIO_TypeDef *hgpio, - uint8_t cs_pin); +void ads131m04_init(ads131_t *adc, GPIO_WritePtr gpio_write, WritePtr write, + ReadPtr read); /* Method to read values out of the ADC */ -HAL_StatusTypeDef ads131m04_read_adc(ads131_t *adc, uint32_t *adc_values); +int ads131m04_read_adc(ads131_t *adc, uint32_t *adc_values); #endif /* ADS131M04_H */ diff --git a/general/src/ads131m04.c b/general/src/ads131m04.c index 693579e..a336906 100644 --- a/general/src/ads131m04.c +++ b/general/src/ads131m04.c @@ -22,14 +22,15 @@ static void ads131m04_send_command(ads131_t *adc, uint16_t cmd); /* Method to initialize communication over SPI and configure the ADC into * Continuous Conversion Mode*/ -void ads131m04_init(ads131_t *adc, SPI_HandleTypeDef *hspi, GPIO_TypeDef *hgpio, - uint8_t cs_pin) +void ads131m04_init(ads131_t *adc, GPIO_WritePtr gpio_write, WritePtr write, + ReadPtr read, uint8_t pin) { - adc->spi = hspi; - adc->gpio = hgpio; - adc->cs_pin = cs_pin; + adc->gpio_write = gpio_write; + adc->write = write; + adc->read = read; + adc->pin = pin; - HAL_GPIO_WritePin(adc->gpio, adc->cs_pin, GPIO_PIN_SET); + adc->gpio_write(adc->pin, 1); // Channel 0 has Gain default set to level 1, which is what we want for this // application We can try out different configurations later if we need to, @@ -54,10 +55,10 @@ static void ads131m04_write_reg(ads131_t *adc, uint8_t reg, uint16_t value) // Send command to write to the specified register immediately followed by // sending the value we want to write to that register - HAL_GPIO_WritePin(adc->gpio, adc->cs_pin, GPIO_PIN_RESET); - HAL_SPI_Transmit(adc->spi, &spi_word, 1, HAL_MAX_DELAY); - HAL_SPI_Transmit(adc->spi, &value, 1, HAL_MAX_DELAY); - HAL_GPIO_WritePin(adc->gpio, adc->cs_pin, GPIO_PIN_SET); + adc->gpio_write(adc->pin, 0); + adc->write(&spi_word, 1); + adc->write(&value, 1); + adc->gpio_write(adc->pin, 1); } /* Method to abstract reading from a register, will use SPI commands under the @@ -75,13 +76,13 @@ static uint16_t ads131m04_read_reg(ads131_t *adc, uint8_t reg) spi_word |= (reg << 7); // Register address (bits 7-12) spi_word |= (num_registers - 1); // Number of registers (bits 0-6) - HAL_GPIO_WritePin(adc->gpio, adc->cs_pin, GPIO_PIN_RESET); - HAL_SPI_Transmit(adc->spi, &spi_word, 1, HAL_MAX_DELAY); - HAL_GPIO_WritePin(adc->gpio, adc->cs_pin, GPIO_PIN_SET); + adc->gpio_write(adc->pin, 0); + adc->write(&spi_word, 1); + adc->gpio_write(adc->pin, 1); uint16_t res = 0; - if (HAL_SPI_Receive(adc->spi, (uint16_t *)&res, 1, 10) != HAL_OK) + if (adc->read((uint16_t *)&res, 1) != 0) return 1; return res; @@ -89,16 +90,16 @@ static uint16_t ads131m04_read_reg(ads131_t *adc, uint8_t reg) /* Method to read values out of the ADC, should be called immediately after the * DRDY interrupt is triggered */ -HAL_StatusTypeDef ads131m04_read_adc(ads131_t *adc, uint32_t *adc_values) +int ads131m04_read_adc(ads131_t *adc, uint32_t *adc_values) { - HAL_StatusTypeDef ret; + int ret; uint8_t data[6 * 3]; // Array to store SPI data (6 words * 3 bytes per word) // Read SPI data - HAL_GPIO_WritePin(adc->gpio, adc->cs_pin, GPIO_PIN_RESET); - ret = HAL_SPI_Receive(adc->spi, data, 6 * 3, HAL_MAX_DELAY); - HAL_GPIO_WritePin(adc->gpio, adc->cs_pin, GPIO_PIN_SET); + adc->gpio_write(adc->pin, 0); + ret = adc->read(data, 6 * 3); + adc->gpio_write(adc->pin, 1); // Process received data into ADC values for (int i = 0; i < 4; i++) { From a7015f1ec950b4b79340b6b2838ebec3c9ef087c Mon Sep 17 00:00:00 2001 From: Jack Rubacha Date: Fri, 8 Nov 2024 22:46:14 -0500 Subject: [PATCH 3/4] bms bitwise (#195) --- cangen/can-messages/bms.json | 254 ++++++++++++++++++++++++++++++++++- 1 file changed, 249 insertions(+), 5 deletions(-) diff --git a/cangen/can-messages/bms.json b/cangen/can-messages/bms.json index 9d2da6f..05e8aca 100644 --- a/cangen/can-messages/bms.json +++ b/cangen/can-messages/bms.json @@ -92,15 +92,259 @@ ] }, { - "name": "BMS/Status/Faults", + "name": "BMS/Status/F/Extra", + "unit": "", + "send": false, + "points": [ + { + "size": 13 + } + ] + }, + { + "name": "BMS/Status/F/Open_Wire", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/CCL_Enforce", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/Charger_Can", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/Battery_Therm", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/Charger_Safety", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/DCL_Enforce", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/External_Can", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/Weak_Pack", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/Low_Cell_Volts", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/Charge_Reading", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/Current_Sense", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/IC_Comm", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/Thermal_Err", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/Software", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/Open_Wire", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/Pack_Overheat", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/Cell_Undervoltage", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/Cell_Overvoltage", + "unit": "", + "sim_min": 0, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, + "points": [ + { + "size": 1 + } + ] + }, + { + "name": "BMS/Status/F/Cells_Not_Balancing", "unit": "", "sim_min": 0, - "sim_max": 131072, - "sim_inc_min": 4, - "sim_inc_max": 16, + "sim_max": 1, + "sim_inc_min": 0, + "sim_inc_max": 1, "points": [ { - "size": 32 + "size": 1 } ] }, From 07a0c6fa5aabdc371a2f8e69838335612ef33289 Mon Sep 17 00:00:00 2001 From: Caio DaSilva <145620095+caiodasilva2005@users.noreply.github.com> Date: Sun, 17 Nov 2024 17:59:01 -0500 Subject: [PATCH 4/4] Steering wheel (#199) * updated stm hal for f1 * fixed stmhalxx --- platforms/stm32f405/include/stm32xx_hal.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/platforms/stm32f405/include/stm32xx_hal.h b/platforms/stm32f405/include/stm32xx_hal.h index 0d9c798..ef6b42f 100644 --- a/platforms/stm32f405/include/stm32xx_hal.h +++ b/platforms/stm32f405/include/stm32xx_hal.h @@ -13,4 +13,8 @@ #include "stm32g4xx_hal.h" #endif +#ifdef STM32F103xB +#include "stm32f1xx_hal.h" +#endif + #endif /* STM32XX_HAL_H*/