From 5ed35b605bfab30d0b18b9aa58dade4872f7f836 Mon Sep 17 00:00:00 2001 From: hamza Date: Thu, 6 Jun 2024 16:46:57 +0300 Subject: [PATCH] changed the code for the PWM signals --- Core/Inc/PWM_control.h | 2 +- Core/Inc/common_defs.h | 4 ++-- Core/Inc/stm32f3xx_it.h | 2 ++ Core/Src/PWM_control.c | 8 ++++---- Core/Src/main.c | 17 ++--------------- Core/Src/state_machine.c | 34 ++++++++++++++++++++++------------ 6 files changed, 33 insertions(+), 34 deletions(-) diff --git a/Core/Inc/PWM_control.h b/Core/Inc/PWM_control.h index 640b277..ebdbaf7 100644 --- a/Core/Inc/PWM_control.h +++ b/Core/Inc/PWM_control.h @@ -24,7 +24,7 @@ CCR: 1/20 -> 500, 2/20 -> 1000 //#define BATTERY_COOLING_FREQ 20000 -void PWM_control_init(TIM_HandleTypeDef* powerground1, TIM_HandleTypeDef* powerground2, TIM_HandleTypeDef* battery_cooling); +void PWM_control_init(TIM_HandleTypeDef* powerground, TIM_HandleTypeDef* battery_cooling); void PWM_powerground_control(uint8_t percent); void PWM_battery_cooling_control(uint8_t percent); diff --git a/Core/Inc/common_defs.h b/Core/Inc/common_defs.h index 316cb67..faff2dd 100644 --- a/Core/Inc/common_defs.h +++ b/Core/Inc/common_defs.h @@ -8,7 +8,7 @@ #ifndef INC_COMMON_DEFS_H_ #define INC_COMMON_DEFS_H_ -#define N_CELLS 14 -#define N_TEMP_SENSORS 14 +#define N_CELLS 12 +#define N_TEMP_SENSORS 12 #endif /* INC_COMMON_DEFS_H_ */ diff --git a/Core/Inc/stm32f3xx_it.h b/Core/Inc/stm32f3xx_it.h index 3c19d5a..7e2721d 100644 --- a/Core/Inc/stm32f3xx_it.h +++ b/Core/Inc/stm32f3xx_it.h @@ -55,6 +55,8 @@ void SVC_Handler(void); void DebugMon_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); +void USB_LP_CAN_RX0_IRQHandler(void); +void CAN_RX1_IRQHandler(void); /* USER CODE BEGIN EFP */ /* USER CODE END EFP */ diff --git a/Core/Src/PWM_control.c b/Core/Src/PWM_control.c index 364b709..ce0f317 100644 --- a/Core/Src/PWM_control.c +++ b/Core/Src/PWM_control.c @@ -12,15 +12,15 @@ TIM_HandleTypeDef* powerground, *battery_cooling; the value of the TIMx_ARR register and a duty cycle determined by the value of the TIMx_CCRx register. */ -void PWM_control_init(TIM_HandleTypeDef* pg1, TIM_HandleTypeDef* pg2, TIM_HandleTypeDef* bat_cool){ +void PWM_control_init(TIM_HandleTypeDef* pg, TIM_HandleTypeDef* bat_cool){ powerground_status = 0; battery_cooling_status = 0; - HAL_TIM_PWM_Start(pg1, TIM_CHANNEL_1); //TIM15CH1 - HAL_TIM_PWM_Start(pg2, TIM_CHANNEL_2); //TIM15CH2 + HAL_TIM_PWM_Start(pg, TIM_CHANNEL_1); //TIM15CH1 + HAL_TIM_PWM_Start(pg, TIM_CHANNEL_2); //TIM15CH2 HAL_TIM_PWM_Start(bat_cool, TIM_CHANNEL_3); //TIM1CH3 - powerground = pg1; + powerground = pg; battery_cooling = bat_cool; __HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_1, 2000); __HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_2, 2000); diff --git a/Core/Src/main.c b/Core/Src/main.c index 5360001..5e91e46 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -123,7 +123,7 @@ int main(void) tmp1075_init(&hi2c1); AMS_Init(&hspi1); can_init(&hcan); - PWM_control_init(&htim15, &htim15, &htim1); + PWM_control_init(&htim15, &htim1); HAL_Delay(10); /* USER CODE END 2 */ @@ -134,18 +134,6 @@ int main(void) /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ - /* - int ttt = HAL_GetTick() + 45000; - PWM_powerground_control(0); - while (HAL_GetTick() < ttt){} - - state.current_state = STATE_ACTIVE; - sm_update(); - PWM_powerground_control(15); - ttt = HAL_GetTick() + 5000; - while (HAL_GetTick() < ttt){} - */ - AMS_Loop(); sm_update(); //sm_test_cycle_states(); @@ -433,7 +421,7 @@ static void MX_TIM15_Init(void) Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 10000; + sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; @@ -443,7 +431,6 @@ static void MX_TIM15_Init(void) { Error_Handler(); } - sConfigOC.Pulse = 0; if (HAL_TIM_PWM_ConfigChannel(&htim15, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) { Error_Handler(); diff --git a/Core/Src/state_machine.c b/Core/Src/state_machine.c index 144ae14..60856a5 100644 --- a/Core/Src/state_machine.c +++ b/Core/Src/state_machine.c @@ -46,6 +46,7 @@ void sm_update(){ } sm_set_relay_positions(state.current_state); + state.target_state = state.current_state; } State sm_update_inactive(){ @@ -63,9 +64,12 @@ State sm_update_precharge(){ switch (state.target_state) { case STATE_INACTIVE: // if CAN Signal 0000 0000 then immidiete shutdown return STATE_DISCHARGE; - case STATE_READY: - if (roundf(RELAY_BAT_SIDE_VOLTAGE) == roundf(RELAY_ESC_SIDE_VOLTAGE)) + case STATE_PRECHARGE: + if (RELAY_BAT_SIDE_VOLTAGE-RELAY_ESC_SIDE_VOLTAGE < 100) return STATE_READY; + break; + case STATE_DISCHARGE: + return STATE_DISCHARGE; default: return STATE_PRECHARGE; } @@ -95,8 +99,8 @@ State sm_update_active(){ State sm_update_discharge(){ switch (state.target_state) { - case STATE_INACTIVE: - if (RELAY_ESC_SIDE_VOLTAGE < 12) + case STATE_DISCHARGE: + if (RELAY_ESC_SIDE_VOLTAGE < 5000) return STATE_INACTIVE; case STATE_PRECHARGE: // if CAN Signal 1000 0000 then get ready return STATE_PRECHARGE; @@ -136,7 +140,7 @@ State sm_update_error(){ } void sm_set_relay_positions(State current_state){ - switch (state.target_state) { + switch (state.current_state) { case STATE_INACTIVE: sm_set_relay(RELAY_MAIN, 0); sm_set_relay(RELAY_PRECHARGE, 0); @@ -152,13 +156,18 @@ void sm_set_relay_positions(State current_state){ case STATE_ACTIVE: sm_set_relay(RELAY_MAIN, 1); sm_set_relay(RELAY_PRECHARGE, 0); + break; case STATE_DISCHARGE: sm_set_relay(RELAY_MAIN, 0); sm_set_relay(RELAY_PRECHARGE, 0); break; + case STATE_CHARGING_PRECHARGE: + sm_set_relay(RELAY_MAIN, 0); + sm_set_relay(RELAY_PRECHARGE, 1); + break; case STATE_CHARGING: sm_set_relay(RELAY_MAIN, 1); - sm_set_relay(RELAY_PRECHARGE, 1); + sm_set_relay(RELAY_PRECHARGE, 0); break; case STATE_ERROR: sm_set_relay(RELAY_MAIN, 0); @@ -181,7 +190,6 @@ void sm_set_relay(Relay relay, bool closed){ } } - void sm_check_charging(){ if (RELAY_BAT_SIDE_VOLTAGE < RELAY_ESC_SIDE_VOLTAGE && timestamp == 0) timestamp = HAL_GetTick() + 5000; @@ -199,13 +207,13 @@ void sm_check_cell_temps(int8_t *id, int16_t *temp){ void sm_handle_ams_in(const uint8_t *data){ switch (data[0]) { - case 0b00000000: + case 0x00: if (state.current_state != STATE_INACTIVE){ PWM_powerground_control(0); state.target_state = STATE_DISCHARGE; } break; - case 0b10000000: + case 0x01: if (state.target_state == STATE_INACTIVE || state.target_state == STATE_DISCHARGE){ PWM_powerground_control(0); state.target_state = STATE_PRECHARGE; @@ -214,9 +222,11 @@ void sm_handle_ams_in(const uint8_t *data){ state.target_state = STATE_READY; } break; - case 0b11000000: - PWM_powerground_control(data[1]); - state.target_state = STATE_ACTIVE; // READY -> ACTIVE + case 0x02: + if (state.current_state == STATE_READY){ + PWM_powerground_control(data[1]); + state.target_state = STATE_ACTIVE; // READY -> ACTIVE + } break; } }