From cf017cbcc755c13e9b90d01c5707cedbed691eee Mon Sep 17 00:00:00 2001 From: Marcos Chaparro Date: Sun, 2 Feb 2020 10:36:58 -0300 Subject: [PATCH 1/3] BBSHD: Temp, current sense and deadtime tuning Set temperature sensors coefficients, more current sense sensitivity and tighter deadtime. Signed-off-by: Marcos Chaparro --- hwconf/hw_luna_bbshd.c | 2 +- hwconf/hw_luna_bbshd.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/hwconf/hw_luna_bbshd.c b/hwconf/hw_luna_bbshd.c index a2646b34..cf09d76d 100644 --- a/hwconf/hw_luna_bbshd.c +++ b/hwconf/hw_luna_bbshd.c @@ -120,7 +120,7 @@ void hw_setup_adc_channels(void) { ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 3, ADC_SampleTime_15Cycles); // 6 ADC_IND_EXT2 ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 4, ADC_SampleTime_15Cycles); // 9 TEMP_MOTOR ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 5, ADC_SampleTime_15Cycles); // 12 V_GATE_DRIVER - ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 6, ADC_SampleTime_15Cycles); // 15 UNUSED + ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 6, ADC_SampleTime_15Cycles); // 15 TEMP_FET // ADC2 regular channels ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 1, ADC_SampleTime_15Cycles); // 1 SENS2 diff --git a/hwconf/hw_luna_bbshd.h b/hwconf/hw_luna_bbshd.h index 28320872..b1feab0c 100644 --- a/hwconf/hw_luna_bbshd.h +++ b/hwconf/hw_luna_bbshd.h @@ -66,8 +66,8 @@ #define ADC_IND_EXT 10 #define ADC_IND_EXT2 6 #define ADC_IND_EXT3 13 -#define ADC_IND_TEMP_MOS 8 -#define ADC_IND_TEMP_MOS_2 15 +#define ADC_IND_TEMP_MOS 15 +#define ADC_IND_TEMP_MOS_2 8 #define ADC_IND_TEMP_MOS_3 16 #define ADC_IND_TEMP_MOTOR 9 #define ADC_IND_VREFINT 16 @@ -88,7 +88,7 @@ #define CURRENT_AMP_GAIN 20.0 #endif #ifndef CURRENT_SHUNT_RES -#define CURRENT_SHUNT_RES (0.0005 / 3.0) +#define CURRENT_SHUNT_RES (0.0005 / 2.0) #endif // Input voltage @@ -96,7 +96,7 @@ // NTC Termistors #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_TEMP(adc_ind) (1.0 / ((logf(NTC_RES(ADC_Value[adc_ind]) / 10000.0) / 3984.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 @@ -202,7 +202,7 @@ #define READ_HALL3() palReadPad(HW_HALL_ENC_GPIO3, HW_HALL_ENC_PIN3) // Override dead time. -#define HW_DEAD_TIME_NSEC 660.0 +#define HW_DEAD_TIME_NSEC 460.0 // Default setting overrides #ifndef MCCONF_L_MAX_VOLTAGE From 278f7678540a329ccdc33047da28311d1ff940a3 Mon Sep 17 00:00:00 2001 From: Marcos Chaparro Date: Sat, 7 Mar 2020 10:48:18 -0300 Subject: [PATCH 2/3] BBSHD: monitor 12V rail Signed-off-by: Marcos Chaparro --- hwconf/hw_axiom.h | 1 + hwconf/hw_luna_bbshd.h | 9 ++++++++- mc_interface.c | 4 ++-- terminal.c | 4 ++-- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/hwconf/hw_axiom.h b/hwconf/hw_axiom.h index 0683f559..71de7279 100644 --- a/hwconf/hw_axiom.h +++ b/hwconf/hw_axiom.h @@ -35,6 +35,7 @@ #define HW_HAS_3_SHUNTS #define HW_HAS_PHASE_SHUNTS #define HW_HAS_SIN_COS_ENCODER +#define HW_HAS_GATE_DRIVER_SUPPLY_MONITOR // Macros #define ENABLE_GATE() palSetPad(GPIOC, 14) diff --git a/hwconf/hw_luna_bbshd.h b/hwconf/hw_luna_bbshd.h index b1feab0c..eeda6b5a 100644 --- a/hwconf/hw_luna_bbshd.h +++ b/hwconf/hw_luna_bbshd.h @@ -26,6 +26,7 @@ // HW properties #define HW_HAS_3_SHUNTS #define HW_HAS_PHASE_SHUNTS +#define HW_HAS_GATE_DRIVER_SUPPLY_MONITOR #define HW_USE_BRK // Macros @@ -62,7 +63,7 @@ #define ADC_IND_CURR2 4 #define ADC_IND_CURR3 5 #define ADC_IND_VIN_SENS 11 -#define ADC_IND_GATE_DRV 12 +#define ADC_IND_VOUT_GATE_DRV 12 #define ADC_IND_EXT 10 #define ADC_IND_EXT2 6 #define ADC_IND_EXT3 13 @@ -94,6 +95,9 @@ // Input voltage #define GET_INPUT_VOLTAGE() ((V_REG / 4095.0) * (float)ADC_Value[ADC_IND_VIN_SENS] * ((VIN_R1 + VIN_R2) / VIN_R2)) +// 12V supply voltage +#define GET_GATE_DRIVER_SUPPLY_VOLTAGE() ((float)ADC_VOLTS(ADC_IND_VOUT_GATE_DRV) * 11.0) + // NTC Termistors #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) / 3984.0) + (1.0 / 298.15)) - 273.15) @@ -237,6 +241,9 @@ #define HW_LIM_DUTY_MAX 0.0, 0.99 #define HW_LIM_TEMP_FET -40.0, 110.0 +#define HW_GATE_DRIVER_SUPPLY_MIN_VOLTAGE 10.0 +#define HW_GATE_DRIVER_SUPPLY_MAX_VOLTAGE 14.0 + // HW-specific functions #endif /* HW_LUNA_BBSHD_H_ */ diff --git a/mc_interface.c b/mc_interface.c index daa02bda..7a7994cf 100644 --- a/mc_interface.c +++ b/mc_interface.c @@ -1660,7 +1660,7 @@ void mc_interface_mc_timer_isr(bool is_second_motor) { } #endif -#ifdef HW_VERSION_AXIOM +#ifdef HW_HAS_GATE_DRIVER_SUPPLY_MONITOR if(motor->m_gate_driver_voltage > HW_GATE_DRIVER_SUPPLY_MAX_VOLTAGE) { mc_interface_fault_stop(FAULT_CODE_GATE_DRIVER_OVER_VOLTAGE, is_second_motor); } @@ -1917,7 +1917,7 @@ static void update_override_limits(volatile motor_if_state_t *motor, volatile mc UTILS_LP_FAST(motor->m_temp_motor, temp_motor, 0.1); -#ifdef HW_VERSION_AXIOM +#ifdef HW_HAS_GATE_DRIVER_SUPPLY_MONITOR UTILS_LP_FAST(motor->m_gate_driver_voltage, GET_GATE_DRIVER_SUPPLY_VOLTAGE(), 0.01); #endif diff --git a/terminal.c b/terminal.c index 75277300..76f83c1a 100644 --- a/terminal.c +++ b/terminal.c @@ -128,7 +128,7 @@ void terminal_process_string(char *str) { commands_printf("Current : %.1f", (double)fault_vec[i].current); commands_printf("Current filtered : %.1f", (double)fault_vec[i].current_filtered); commands_printf("Voltage : %.2f", (double)fault_vec[i].voltage); -#ifdef HW_VERSION_AXIOM +#ifdef HW_HAS_GATE_DRIVER_SUPPLY_MONITOR commands_printf("Gate drv voltage : %.2f", (double)fault_vec[i].gate_driver_voltage); #endif commands_printf("Duty : %.3f", (double)fault_vec[i].duty); @@ -194,7 +194,7 @@ void terminal_process_string(char *str) { commands_printf("Current 2 sample: %u\n", current2_samp); } else if (strcmp(argv[0], "volt") == 0) { commands_printf("Input voltage: %.2f\n", (double)GET_INPUT_VOLTAGE()); -#ifdef HW_VERSION_AXIOM +#ifdef HW_HAS_GATE_DRIVER_SUPPLY_MONITOR commands_printf("Gate driver power supply output voltage: %.2f\n", (double)GET_GATE_DRIVER_SUPPLY_VOLTAGE()); #endif } else if (strcmp(argv[0], "param_detect") == 0) { From c821710d492588c3d8283430e4ece59b09420ae4 Mon Sep 17 00:00:00 2001 From: Marcos Chaparro Date: Sat, 21 Mar 2020 10:23:29 -0300 Subject: [PATCH 3/3] BBSHD: Add DAC support Signed-off-by: Marcos Chaparro --- hwconf/hw_luna_bbshd.c | 33 +++++++++++++++++++++++++++++++++ hwconf/hw_luna_bbshd.h | 3 +++ 2 files changed, 36 insertions(+) diff --git a/hwconf/hw_luna_bbshd.c b/hwconf/hw_luna_bbshd.c index cf09d76d..750d61fa 100644 --- a/hwconf/hw_luna_bbshd.c +++ b/hwconf/hw_luna_bbshd.c @@ -28,6 +28,8 @@ // Variables static volatile bool i2c_running = false; +void hw_luna_bbshd_setup_dac(void); + // I2C configuration static const I2CConfig i2cfg = { OPMODE_I2C, @@ -99,7 +101,11 @@ void hw_init_gpio(void) { palSetPadMode(GPIOA, 1, PAL_MODE_INPUT_ANALOG); palSetPadMode(GPIOA, 2, PAL_MODE_INPUT_ANALOG); palSetPadMode(GPIOA, 3, PAL_MODE_INPUT_ANALOG); +#ifdef HW_BBSHD_USE_DAC + hw_luna_bbshd_setup_dac(); +#else palSetPadMode(GPIOA, 5, PAL_MODE_INPUT_ANALOG); +#endif palSetPadMode(GPIOA, 6, PAL_MODE_INPUT_ANALOG); palSetPadMode(GPIOB, 0, PAL_MODE_INPUT_ANALOG); @@ -243,3 +249,30 @@ void hw_try_restore_i2c(void) { i2cReleaseBus(&HW_I2C_DEV); } } + +void hw_luna_bbshd_setup_dac(void) { + // GPIOA clock enable + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); + + // DAC Periph clock enable + RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); + + // DAC channel 1 & 2 (DAC_OUT1 = PA.4)(DAC_OUT2 = PA.5) configuration + palSetPadMode(GPIOA, 4, PAL_MODE_INPUT_ANALOG); + palSetPadMode(GPIOA, 5, PAL_MODE_INPUT_ANALOG); + + // Enable both DAC channels with output buffer disabled to achieve rail-to-rail output + DAC->CR |= DAC_CR_EN1 | DAC_CR_BOFF1 | DAC_CR_EN2 | DAC_CR_BOFF2; + + // Set DAC channels at 1.65V + hw_luna_bbshd_DAC1_setdata(0x800); + hw_luna_bbshd_DAC2_setdata(0x800); +} + +void hw_luna_bbshd_DAC1_setdata(uint16_t data) { + DAC->DHR12R1 = data; +} + +void hw_luna_bbshd_DAC2_setdata(uint16_t data) { + DAC->DHR12R2 = data; +} diff --git a/hwconf/hw_luna_bbshd.h b/hwconf/hw_luna_bbshd.h index eeda6b5a..1adee8ec 100644 --- a/hwconf/hw_luna_bbshd.h +++ b/hwconf/hw_luna_bbshd.h @@ -28,6 +28,7 @@ #define HW_HAS_PHASE_SHUNTS #define HW_HAS_GATE_DRIVER_SUPPLY_MONITOR #define HW_USE_BRK +#define HW_BBSHD_USE_DAC // Macros #define LED_GREEN_GPIO GPIOB @@ -245,5 +246,7 @@ #define HW_GATE_DRIVER_SUPPLY_MAX_VOLTAGE 14.0 // HW-specific functions +void hw_luna_bbshd_DAC1_setdata(uint16_t data); +void hw_luna_bbshd_DAC2_setdata(uint16_t data); #endif /* HW_LUNA_BBSHD_H_ */