@@ -41,7 +41,7 @@ void _configureTimerFrequency(long pwm_frequency, mcpwm_dev_t* mcpwm_num, mcpwm
4141
4242 mcpwm_config_t pwm_config;
4343 pwm_config.counter_mode = MCPWM_UP_DOWN_COUNTER; // Up-down counter (triangle wave)
44- pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Active HIGH
44+ pwm_config.duty_mode = ( _isset (dead_zone) || SIMPLEFOC_PWM_ACTIVE_HIGH == true ) ? MCPWM_DUTY_MODE_0 : MCPWM_DUTY_MODE_1 ; // Normally Active HIGH (MCPWM_DUTY_MODE_0)
4545 pwm_config.frequency = 2 *pwm_frequency; // set the desired freq - just a placeholder for now https://github.com/simplefoc/Arduino-FOC/issues/76
4646 mcpwm_init (mcpwm_unit, MCPWM_TIMER_0, &pwm_config); // Configure PWM0A & PWM0B with above settings
4747 mcpwm_init (mcpwm_unit, MCPWM_TIMER_1, &pwm_config); // Configure PWM1A & PWM1B with above settings
@@ -50,9 +50,14 @@ void _configureTimerFrequency(long pwm_frequency, mcpwm_dev_t* mcpwm_num, mcpwm
5050 if (_isset (dead_zone)){
5151 // dead zone is configured
5252 float dead_time = (float )(_MCPWM_FREQ / (pwm_frequency)) * dead_zone;
53- mcpwm_deadtime_enable (mcpwm_unit, MCPWM_TIMER_0, MCPWM_ACTIVE_HIGH_COMPLIMENT_MODE, dead_time/2.0 , dead_time/2.0 );
54- mcpwm_deadtime_enable (mcpwm_unit, MCPWM_TIMER_1, MCPWM_ACTIVE_HIGH_COMPLIMENT_MODE, dead_time/2.0 , dead_time/2.0 );
55- mcpwm_deadtime_enable (mcpwm_unit, MCPWM_TIMER_2, MCPWM_ACTIVE_HIGH_COMPLIMENT_MODE, dead_time/2.0 , dead_time/2.0 );
53+ mcpwm_deadtime_type_t pwm_mode;
54+ if ((SIMPLEFOC_PWM_HIGHSIDE_ACTIVE_HIGH == true ) && (SIMPLEFOC_PWM_LOWSIDE_ACTIVE_HIGH == true )) {pwm_mode = MCPWM_ACTIVE_HIGH_COMPLIMENT_MODE;} // Normal, noninverting driver
55+ else if ((SIMPLEFOC_PWM_HIGHSIDE_ACTIVE_HIGH == true ) && (SIMPLEFOC_PWM_LOWSIDE_ACTIVE_HIGH == false )){pwm_mode = MCPWM_ACTIVE_HIGH_MODE;} // Inverted lowside driver
56+ else if ((SIMPLEFOC_PWM_HIGHSIDE_ACTIVE_HIGH == false ) && (SIMPLEFOC_PWM_LOWSIDE_ACTIVE_HIGH == true )) {pwm_mode = MCPWM_ACTIVE_LOW_MODE;} // Inverted highside driver
57+ else if ((SIMPLEFOC_PWM_HIGHSIDE_ACTIVE_HIGH == false ) && (SIMPLEFOC_PWM_LOWSIDE_ACTIVE_HIGH == false )){pwm_mode = MCPWM_ACTIVE_LOW_COMPLIMENT_MODE;} // Inverted low- & highside driver. Caution: This may short the FETs on reset of the ESP32, as both pins get pulled low!
58+ mcpwm_deadtime_enable (mcpwm_unit, MCPWM_TIMER_0, pwm_mode, dead_time/2.0 , dead_time/2.0 );
59+ mcpwm_deadtime_enable (mcpwm_unit, MCPWM_TIMER_1, pwm_mode, dead_time/2.0 , dead_time/2.0 );
60+ mcpwm_deadtime_enable (mcpwm_unit, MCPWM_TIMER_2, pwm_mode, dead_time/2.0 , dead_time/2.0 );
5661 }
5762 _delay (100 );
5863
0 commit comments