From 5e6110189e8995c12aa104dd629b468073181a27 Mon Sep 17 00:00:00 2001 From: Euan Mutch Date: Sun, 28 Nov 2021 23:59:26 +0000 Subject: [PATCH] Tweak settings for A50S hardware Limited duty cycle and lowered default switching frequency to reduce impact of using 2 low side shunts. Cleaned up formatting. --- hwconf/hw_a50s.h | 106 +++++++++++++++++++++++------------------------ 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/hwconf/hw_a50s.h b/hwconf/hw_a50s.h index bff21ac3..43a0a45f 100644 --- a/hwconf/hw_a50s.h +++ b/hwconf/hw_a50s.h @@ -33,21 +33,21 @@ * 0 (1): IN0 SENS1 * 1 (2): IN1 SENS2 * 2 (3): IN2 SENS3 - * 3 (1): IN10 CURR1 - * 4 (2): IN11 CURR2 - * 5 (3): IN12 CURR3 (not used) + * 3 (1): IN10 CURR1 + * 4 (2): IN11 CURR2 + * 5 (3): IN12 CURR3 (not used) * 6 (1): IN5 ADC_EXT1 * 7 (2): IN6 ADC_EXT2 * 8 (3): IN3 TEMP_MOS - * 9 (1): IN14 TEMP_MOTOR - * 10 (2): IN15 ADC_EXT3 - * 11 (3): IN13 AN_IN + * 9 (1): IN14 TEMP_MOTOR + * 10 (2): IN15 ADC_EXT3 + * 11 (3): IN13 AN_IN * 12 (1): Vrefint * 13 (2): IN0 SENS1 * 14 (3): IN1 SENS2 - * 15 (1): IN8 TEMP_MOS_2 - * 16 (2): IN9 TEMP_MOS_3 - * 17 (3): IN3 SENS3 + * 15 (1): IN8 TEMP_MOS_2 + * 16 (2): IN9 TEMP_MOS_3 + * 17 (3): IN3 SENS3 */ #define HW_ADC_CHANNELS 18 @@ -61,8 +61,8 @@ #define ADC_IND_CURR1 4 #define ADC_IND_CURR2 3 #define ADC_IND_CURR3 5 -#define ADC_IND_VIN_SENS 11 -#define ADC_IND_EXT 6 +#define ADC_IND_VIN_SENS 11 +#define ADC_IND_EXT 6 #define ADC_IND_EXT2 7 #define ADC_IND_EXT3 10 #define ADC_IND_TEMP_MOS 8 @@ -75,13 +75,13 @@ // Component parameters (can be overridden) #ifndef V_REG -#define V_REG 3.30 +#define V_REG 3.30 #endif #ifndef VIN_R1 -#define VIN_R1 12000.0 +#define VIN_R1 12000.0 #endif #ifndef VIN_R2 -#define VIN_R2 620.0 +#define VIN_R2 620.0 #endif #ifndef CURRENT_AMP_GAIN #define CURRENT_AMP_GAIN 20.0 @@ -99,8 +99,8 @@ #define NTC_RES(adc_val) ((4095.0 * 10000.0) / adc_val - 10000.0) #define NTC_TEMP(adc_ind) (1.0 / ((logf(NTC_RES(ADC_Value[adc_ind]) / 10000.0) / 3380.0) + (1.0 / 298.15)) - 273.15) -#define NTC_RES_MOTOR(adc_val) (10000.0 / ((4095.0 / (float)adc_val) - 1.0)) // Motor temp sensor on low side -#define NTC_TEMP_MOTOR(beta) (1.0 / ((logf(NTC_RES_MOTOR(ADC_Value[ADC_IND_TEMP_MOTOR]) / 10000.0) / beta) + (1.0 / 298.15)) - 273.15) +#define NTC_RES_MOTOR(adc_val) (10000.0 / ((4095.0 / (float)adc_val) - 1.0)) // Motor temp sensor on low side +#define NTC_TEMP_MOTOR(beta) (1.0 / ((logf(NTC_RES_MOTOR(ADC_Value[ADC_IND_TEMP_MOTOR]) / 10000.0) / beta) + (1.0 / 298.15)) - 273.15) // Voltage on ADC channel #define ADC_VOLTS(ch) ((float)ADC_Value[ch] / 4096.0 * V_REG) @@ -118,10 +118,10 @@ #endif // Unused -#define LED_GREEN_GPIO GPIOB +#define LED_GREEN_GPIO GPIOB #define LED_GREEN_PIN 0 #define LED_RED_GPIO GPIOB -#define LED_RED_PIN 1 +#define LED_RED_PIN 1 #define LED_GREEN_ON() palSetPad(LED_GREEN_GPIO, LED_GREEN_PIN) #define LED_GREEN_OFF() palClearPad(LED_GREEN_GPIO, LED_GREEN_PIN) @@ -130,17 +130,17 @@ // Phase filter #define PHASE_FILTER_OFF() palSetPad(GPIOB, 3); palSetPad(GPIOB, 4); palSetPad(GPIOB, 5) -#define PHASE_FILTER_ON() palClearPad(GPIOB, 3); palClearPad(GPIOB, 4); palClearPad(GPIOB, 5) +#define PHASE_FILTER_ON() palClearPad(GPIOB, 3); palClearPad(GPIOB, 4); palClearPad(GPIOB, 5) // Current filter -#define CURRENT_FILTER_OFF() palSetPad(GPIOH, 1); palSetPad(GPIOC, 2) -#define CURRENT_FILTER_ON() palClearPad(GPIOH, 1); palClearPad(GPIOC, 2) +#define CURRENT_FILTER_OFF() palSetPad(GPIOH, 1); palSetPad(GPIOC, 2) +#define CURRENT_FILTER_ON() palClearPad(GPIOH, 1); palClearPad(GPIOC, 2) // Aux -#define AUX_GPIO GPIOC -#define AUX_PIN 12 -#define AUX_ON() palSetPad(AUX_GPIO, AUX_PIN) -#define AUX_OFF() palClearPad(AUX_GPIO, AUX_PIN) +#define AUX_GPIO GPIOC +#define AUX_PIN 12 +#define AUX_ON() palSetPad(AUX_GPIO, AUX_PIN) +#define AUX_OFF() palClearPad(AUX_GPIO, AUX_PIN) // COMM-port ADC GPIOs #define HW_ADC_EXT_GPIO GPIOA @@ -149,7 +149,7 @@ #define HW_ADC_EXT2_PIN 6 // UART Peripheral -#define HW_UART_DEV SD3 +#define HW_UART_DEV SD3 #define HW_UART_GPIO_AF GPIO_AF_USART3 #define HW_UART_TX_PORT GPIOB #define HW_UART_TX_PIN 10 @@ -158,7 +158,7 @@ // SPI pins -#define HW_SPI_DEV SPID1 +#define HW_SPI_DEV SPID1 #define HW_SPI_GPIO_AF GPIO_AF_SPI1 #define HW_SPI_PORT_NSS GPIOB #define HW_SPI_PIN_NSS 11 @@ -171,7 +171,7 @@ // I2C Peripheral -#define HW_I2C_DEV I2CD2 +#define HW_I2C_DEV I2CD2 #define HW_I2C_GPIO_AF GPIO_AF_I2C2 #define HW_I2C_SCL_PORT GPIOB #define HW_I2C_SCL_PIN 10 @@ -185,7 +185,7 @@ #define HW_HALL_ENC_PIN2 7 #define HW_HALL_ENC_GPIO3 GPIOC #define HW_HALL_ENC_PIN3 8 -#define HW_ENC_TIM TIM3 +#define HW_ENC_TIM TIM3 #define HW_ENC_TIM_AF GPIO_AF_TIM3 #define HW_ENC_TIM_CLK_EN() RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE) #define HW_ENC_EXTI_PORTSRC EXTI_PortSourceGPIOC @@ -200,17 +200,17 @@ #define HW_USE_SERVO_TIM4 #define HW_ICU_TIMER TIM4 #define HW_ICU_TIM_CLK_EN() RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE) -#define HW_ICU_DEV ICUD4 +#define HW_ICU_DEV ICUD4 #define HW_ICU_CHANNEL ICU_CHANNEL_1 #define HW_ICU_GPIO_AF GPIO_AF_TIM4 -#define HW_ICU_GPIO GPIOB -#define HW_ICU_PIN 6 +#define HW_ICU_GPIO GPIOB +#define HW_ICU_PIN 6 // Measurement macros -#define ADC_V_L1 ADC_Value[ADC_IND_SENS1] -#define ADC_V_L2 ADC_Value[ADC_IND_SENS2] -#define ADC_V_L3 ADC_Value[ADC_IND_SENS3] -#define ADC_V_ZERO (ADC_Value[ADC_IND_VIN_SENS] / 2) +#define ADC_V_L1 ADC_Value[ADC_IND_SENS1] +#define ADC_V_L2 ADC_Value[ADC_IND_SENS2] +#define ADC_V_L3 ADC_Value[ADC_IND_SENS3] +#define ADC_V_ZERO (ADC_Value[ADC_IND_VIN_SENS] / 2) // Macros #define READ_HALL1() palReadPad(HW_HALL_ENC_GPIO1, HW_HALL_ENC_PIN1) @@ -218,26 +218,26 @@ #define READ_HALL3() palReadPad(HW_HALL_ENC_GPIO3, HW_HALL_ENC_PIN3) // Override dead time. See the stm32f4 reference manual for calculating this value. -#define HW_DEAD_TIME_NSEC 0.0 // FD6288Q has 200ns built in deadtime +#define HW_DEAD_TIME_NSEC 0.0 // FD6288Q has 200ns built in deadtime // Default setting overrides #ifndef MCCONF_L_MIN_VOLTAGE -#define MCCONF_L_MIN_VOLTAGE 8.0 // Minimum input voltage +#define MCCONF_L_MIN_VOLTAGE 8.0 // Minimum input voltage #endif #ifndef MCCONF_L_MAX_VOLTAGE -#define MCCONF_L_MAX_VOLTAGE 56.0 // Maximum input voltage +#define MCCONF_L_MAX_VOLTAGE 55.0 // Maximum input voltage #endif #ifndef MCCONF_DEFAULT_MOTOR_TYPE -#define MCCONF_DEFAULT_MOTOR_TYPE MOTOR_TYPE_FOC +#define MCCONF_DEFAULT_MOTOR_TYPE MOTOR_TYPE_FOC #endif #ifndef MCCONF_FOC_F_SW -#define MCCONF_FOC_F_SW 35000.0 +#define MCCONF_FOC_F_SW 25000.0 // Switching frequency reduced to allow rise time of low side shunts #endif #ifndef MCCONF_L_MAX_ABS_CURRENT -#define MCCONF_L_MAX_ABS_CURRENT 80.0 // The maximum absolute current above which a fault is generated +#define MCCONF_L_MAX_ABS_CURRENT 80.0 // The maximum absolute current above which a fault is generated #endif #ifndef MCCONF_FOC_SAMPLE_V0_V7 -#define MCCONF_FOC_SAMPLE_V0_V7 false // Run control loop in both v0 and v7 (requires phase shunts) +#define MCCONF_FOC_SAMPLE_V0_V7 false // Run control loop in both v0 and v7 (requires phase shunts) #endif #ifndef MCCONF_L_CURRENT_MAX #define MCCONF_L_CURRENT_MAX 20.0 // Current limit in Amperes (Upper) @@ -246,37 +246,37 @@ #define MCCONF_L_CURRENT_MIN -20.0 // Current limit in Amperes (Lower) #endif #ifndef MCCONF_L_IN_CURRENT_MAX -#define MCCONF_L_IN_CURRENT_MAX 20.0 // Input current limit in Amperes (Upper) +#define MCCONF_L_IN_CURRENT_MAX 20.0 // Input current limit in Amperes (Upper) #endif #ifndef MCCONF_L_IN_CURRENT_MIN -#define MCCONF_L_IN_CURRENT_MIN -10.0 // Input current limit in Amperes (Lower) +#define MCCONF_L_IN_CURRENT_MIN -10.0 // Input current limit in Amperes (Lower) #endif // Setting limits #ifdef HW_A50S_12S -#define HW_NAME "A50S V2.1 12S" +#define HW_NAME "A50S V2.1 12S" #define HW_LIM_CURRENT -40.0, 40.0 #define HW_LIM_CURRENT_IN -30.0, 30.0 #define HW_LIM_CURRENT_ABS 0.0, 80.0 -#define HW_LIM_VIN 4.0, 56.0 -#define HW_LIM_ERPM -200e3, 200e3 +#define HW_LIM_VIN 4.0, 56.0 +#define HW_LIM_ERPM -200e3, 200e3 #define HW_LIM_DUTY_MIN 0.0, 0.1 -#define HW_LIM_DUTY_MAX 0.0, 0.99 +#define HW_LIM_DUTY_MAX 0.0, 0.93 // Duty cycle limited to allow rise time of low side shunts #define HW_LIM_TEMP_FET -40.0, 100.0 #endif #ifdef HW_A50S_6S -#define HW_NAME "A50S V2.1 6S" +#define HW_NAME "A50S V2.1 6S" #define HW_LIM_CURRENT -50.0, 50.0 #define HW_LIM_CURRENT_IN -30.0, 30.0 #define HW_LIM_CURRENT_ABS 0.0, 80.0 -#define HW_LIM_VIN 4.0, 28.0 -#define HW_LIM_ERPM -200e3, 200e3 +#define HW_LIM_VIN 4.0, 28.0 +#define HW_LIM_ERPM -200e3, 200e3 #define HW_LIM_DUTY_MIN 0.0, 0.1 -#define HW_LIM_DUTY_MAX 0.0, 0.99 +#define HW_LIM_DUTY_MAX 0.0, 0.93 // Duty cycle limited to allow rise time of low side shunts #define HW_LIM_TEMP_FET -40.0, 100.0 #endif