Setting 100% PWM duty cycle.

Hello,

I use nRF52840 in a project in which I read a potentiometer and set PWM output from 0 to 100%.
Setting [0 .. 100%) is OK,but when I try set exactly 100% duty cycle, I see at the oscilloscope 0%.

I use following function to set PWM DC:

void ol_set_output(void)
{
    pwm_set_pulse_dt(get_pwmmotor_device(), ol_DC_movingsetting);
}

ol_DC_movingsetting is the pulse width.  The period is set in the device tree of the project this way

    pwmmotor {
        compatible = "pwm-leds";
        pwm_motor0: pwm_motor_0 {
            pwms = <&pwm0 0 PWM_USEC(64) PWM_POLARITY_NORMAL>;
        };
    };

So the period is 64000 nanoseconds = 15.625 kHz.

When I set pulse to 64000, I receive duty cycle 0 (the PWM output stays low all the time).

When I set the pulse to 63999 nanoseconds, I see a glitch 1->0->1.

Here is my question: How to remove this 1->0->1 transition at the end of the period.

Regards,
Ivan

Parents Reply
  • Hi!

    It does not work - produces low level at the PWM output.

    // PWM output
    static struct pwm_dt_spec pwmmotor = PWM_DT_SPEC_GET(DT_ALIAS(pwmmotor0));
    
    const struct pwm_dt_spec* get_pwmmotor_device(void)
    {
        return &pwmmotor;
    }
    
    void ol_set_output(void)
    {
        pwm_set_dt(get_pwmmotor_device(), 100u, 100u);
    }

    I do not know if following in the device can produce this problem

    compatible = "pwm-leds";

    However I cannot figure what "pwm-leds" could be changed with...

Children
Related