MCPWM: "Active low duty" cannot be set - bug or feature?
Posted: Tue Mar 15, 2022 12:28 pm
Hi guys
I am trying to set PWM mode in active Low duty mode.
For this purpose I use MCPWM_DUTY_MODE_1 when configuring the PWM.
For some reason oscilloscope shows me the same diagram as it would be for MCPWM_DUTY_MODE_0 - a "Active high duty" mode.
Is it a bug or I missed something?
Here is the code I use for testing:
I am trying to set PWM mode in active Low duty mode.
For this purpose I use MCPWM_DUTY_MODE_1 when configuring the PWM.
For some reason oscilloscope shows me the same diagram as it would be for MCPWM_DUTY_MODE_0 - a "Active high duty" mode.
Is it a bug or I missed something?
Here is the code I use for testing:
Code: Select all
#define GPIO_PWM0A_OUT 27 //Set GPIO 26 as PWM0A
#define GPIO_PWM0B_OUT 26 //Set GPIO 27 as PWM0B
...
//1. mcpwm gpio initialization
mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0A, GPIO_PWM0A_OUT);
mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0B, GPIO_PWM0B_OUT);
//2. initial mcpwm configuration
mcpwm_config_t pwm_config;
pwm_config.frequency = 20000; //frequency = 20000Hz,
pwm_config.cmpr_a = 0; //duty cycle of PWMxA = 0
pwm_config.cmpr_b = 0; //duty cycle of PWMxb = 0
pwm_config.counter_mode = MCPWM_UP_DOWN_COUNTER;
pwm_config.duty_mode = MCPWM_DUTY_MODE_1;
mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config); //Configure PWM0A & PWM0B with above settings
mcpwm_set_signal_low(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_A);
mcpwm_set_signal_low(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_B);
mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_A, 50.0);
mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_B, 10.0);
mcpwm_set_duty_type(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_A, MCPWM_DUTY_MODE_0);
mcpwm_set_duty_type(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_B, MCPWM_DUTY_MODE_0);