@@ -41,7 +41,7 @@ void _configureTimerFrequency(long pwm_frequency, mcpwm_dev_t* mcpwm_num, mcpwm
41
41
42
42
mcpwm_config_t pwm_config;
43
43
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)
45
45
pwm_config.frequency = 2 *pwm_frequency; // set the desired freq - just a placeholder for now https://github.com/simplefoc/Arduino-FOC/issues/76
46
46
mcpwm_init (mcpwm_unit, MCPWM_TIMER_0, &pwm_config); // Configure PWM0A & PWM0B with above settings
47
47
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
50
50
if (_isset (dead_zone)){
51
51
// dead zone is configured
52
52
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 );
56
61
}
57
62
_delay (100 );
58
63
0 commit comments