Merge branch 'mvbms-test'
This commit is contained in:
		@ -1,4 +1,6 @@
 | 
			
		||||
#include "PWM_control.h"
 | 
			
		||||
#include "stm32f3xx_hal.h"
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
//uint32_t powerground1_CCR, powerground2_CCR, battery_cooling_CCR;
 | 
			
		||||
 | 
			
		||||
@ -11,32 +13,51 @@ TIM_HandleTypeDef *powerground, *battery_cooling, *esc_cooling;
 | 
			
		||||
 | 
			
		||||
void PWM_control_init(TIM_HandleTypeDef* pg, TIM_HandleTypeDef* bat_cool, TIM_HandleTypeDef* esc_cool){
 | 
			
		||||
  powerground_status = 0;
 | 
			
		||||
  battery_cooling_status = 0;
 | 
			
		||||
  
 | 
			
		||||
  powerground = pg;
 | 
			
		||||
  battery_cooling = bat_cool;
 | 
			
		||||
 | 
			
		||||
  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 = pg;
 | 
			
		||||
  battery_cooling = bat_cool;
 | 
			
		||||
  esc_cooling = esc_cool;
 | 
			
		||||
  
 | 
			
		||||
  __HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_1, 2000);
 | 
			
		||||
  __HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_2, 2000);
 | 
			
		||||
  __HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_1, 0);
 | 
			
		||||
  __HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_2, 0);
 | 
			
		||||
 | 
			
		||||
  //PWM_powerground_control(0);
 | 
			
		||||
  //__HAL_TIM_SET_COMPARE(battery_cooling, TIM_CHANNEL_3, 2000);
 | 
			
		||||
}              
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
  controls the duty cycle of the fans by setting the CCR of the channel percent/100 = x/ARR
 | 
			
		||||
  DUTYCYCLE = 40000 * X/100
 | 
			
		||||
*/
 | 
			
		||||
void PWM_powerground_control(uint8_t percent){
 | 
			
		||||
  if (percent > 100) //something went wrong
 | 
			
		||||
    return;
 | 
			
		||||
  powerground_status = percent;
 | 
			
		||||
 | 
			
		||||
  int ccr = 2000 + ((2000) * (percent/100.0));
 | 
			
		||||
  __HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_1, ccr);
 | 
			
		||||
  __HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_2, 2000 + ((2000) * (percent/100.0)));
 | 
			
		||||
  __HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_2, ccr);
 | 
			
		||||
  //TIM15->CCR1 = (TIM15->ARR*POWERGROUND_MAX_DUTY_CYCLE-TIM15->ARR*POWERGROUND_MIN_DUTY_CYCLE) * (percent/100.0) + TIM15->ARR*POWERGROUND_MIN_DUTY_CYCLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PWM_set_throttle(){
 | 
			
		||||
  uint32_t timestamp = HAL_GetTick() + 5000;
 | 
			
		||||
  while (timestamp > HAL_GetTick()) {}
 | 
			
		||||
 | 
			
		||||
  __HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_1, 4000);
 | 
			
		||||
  __HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_2, 4000);
 | 
			
		||||
  timestamp = HAL_GetTick() + 2000;
 | 
			
		||||
  while (timestamp > HAL_GetTick()) {}
 | 
			
		||||
 | 
			
		||||
  __HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_1, 2000);
 | 
			
		||||
  __HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_2, 2000);
 | 
			
		||||
  timestamp = HAL_GetTick() + 1000;
 | 
			
		||||
  while (timestamp > HAL_GetTick()) {}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PWM_battery_cooling_control(uint8_t percent){}
 | 
			
		||||
void PWM_esc_cooling(uint8_t percent){}
 | 
			
		||||
 | 
			
		||||
@ -75,8 +75,10 @@ State sm_update_precharge(){
 | 
			
		||||
    case STATE_INACTIVE:          // if CAN Signal 0000 0000 then immidiete shutdown
 | 
			
		||||
      return STATE_DISCHARGE;
 | 
			
		||||
    case STATE_PRECHARGE:
 | 
			
		||||
      if (RELAY_BAT_SIDE_VOLTAGE-RELAY_ESC_SIDE_VOLTAGE < 100)
 | 
			
		||||
      if (RELAY_BAT_SIDE_VOLTAGE-RELAY_ESC_SIDE_VOLTAGE < 100){
 | 
			
		||||
        PWM_set_throttle();
 | 
			
		||||
        return STATE_READY;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case STATE_DISCHARGE:
 | 
			
		||||
      return STATE_DISCHARGE;
 | 
			
		||||
@ -229,21 +231,18 @@ void sm_handle_ams_in(const uint8_t *data){
 | 
			
		||||
  switch (data[0]) {
 | 
			
		||||
    case 0x00:
 | 
			
		||||
      if (state.current_state != STATE_INACTIVE){
 | 
			
		||||
        PWM_powerground_control(0);
 | 
			
		||||
        state.target_state = STATE_DISCHARGE;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case 0x01:
 | 
			
		||||
      if (state.target_state == STATE_INACTIVE || state.target_state == STATE_DISCHARGE){
 | 
			
		||||
        PWM_powerground_control(0);
 | 
			
		||||
        state.target_state = STATE_PRECHARGE;
 | 
			
		||||
      } else if (state.target_state == STATE_ACTIVE){
 | 
			
		||||
        PWM_powerground_control(0);
 | 
			
		||||
        state.target_state = STATE_READY;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case 0x02:
 | 
			
		||||
      if (state.current_state == STATE_READY){
 | 
			
		||||
      if (state.current_state == STATE_READY || state.current_state == STATE_ACTIVE){
 | 
			
		||||
        PWM_powerground_control(data[1]);
 | 
			
		||||
        state.target_state = STATE_ACTIVE;        // READY -> ACTIVE
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user