Hi,
I'm trying to use the pwm driver to turn off or on a dc motor (which the speed will variate via the pwm signal).
I need to achieve a frequency between 20kHz and 100kHz and to variate the dutycyle.
I do understand that the frequency is my main frequency divided by the top value, so for example if I put 500kHz with a top value of 6, I'll have a frequency of 83,33kHz. (is it correct ?)
But I don't understand how the duty cycle is working. I saw that there is a comparaison logic behind it, but I didn't understand how it works...
I saw an example that they made, which the dutycyle is updated like this :
static uint16_t const m_top = 6; static nrf_pwm_values_individual_t seq_values; static nrf_pwm_sequence_t const seq = { .values.p_individual = &seq_values, .length = NRF_PWM_VALUES_LENGTH(seq_values), .repeats = 0, .end_delay = 0 }; void update_pwm(uint16_t duty_forward, uint16_t duty_reverse) { seq_values.channel_0 = m_top-duty_forward; seq_values.channel_1 = m_top-duty_reverse; nrf_drv_pwm_simple_playback(&m_pwm0, &seq, 1, NRF_DRV_PWM_FLAG_LOOP); }
Is it correct to make the top value minus the duty cycle (which duty_forward is a uint16_t, so his value is from 0 to 65535) to get the correct comparaison ?
Thanks for your answers,
Chris