Code: Select all
mcpwm_unit_t unit = MCPWM_UNIT_1;
mcpwm_io_signals_t pin = MCPWM0A;
int gpio = 27;
mcpwm_timer_t timer = MCPWM_TIMER_0;
mcpwm_generator_t generator = MCPWM_GEN_A;
float defaultDuty = 50;
uint32_t frequency = 1;
unsigned long int resolution = 32;
int res = mcpwm_gpio_init(unit, pin, gpio);
Serial.println(res);
if (res != 0) return;
res = mcpwm_timer_set_resolution(unit, timer, resolution);
Serial.println(res);
if (res != 0) return;
mcpwm_config_t pwm_config = {
frequency, // frequency /*!<Set frequency of MCPWM in Hz*/
0.0F, // cmpr_a /*!<Set % duty cycle for operator a(MCPWMXA)
0.0F, // cmpr_b /*!<Set % duty cycle for operator b(MCPWMXB)
MCPWM_DUTY_MODE_0, // duty_mode /*!<Set type of duty cycle*/
MCPWM_UP_COUNTER // counter_mode /*!<Set type of MCPWM counter*/
};
res = mcpwm_init(unit, timer, &pwm_config);
Serial.println(res);
if (res != 0) return;
res = mcpwm_set_duty(unit, timer, generator, defaultDuty);
Serial.println(res);
if (res != 0) return;
res = mcpwm_start(unit, timer);
Serial.println(res);
if (res != 0) return;
E.g., I change this line:
mcpwm_io_signals_t pin = MCPWM0A;
to
mcpwm_io_signals_t pin = MCPWM0B;
then it won't produce output.
I cannot understand why.
Similarly, setting the timer to MCPWM_TIMER_1 won't produce an output signal.
And one more question. Using this setting, I can generate a (barely) 1Hz PWM. You see, the resolution is set to 32. I assume the timer clock has a frequency of 40MHz. The frequency is set to 1Hz. What is the math behind this?