low-speed PWM slowing down Beaglebone Black clock

I’m facing an irksome problem – I’m looking to drive 8 servos via PWM. I’ve got the pins muxed correctly, but I’ve noticed when I drive the PWM frequency below 600 Hz (599 and below), my code slows down by 1.5 orders of magnitude. It’s a cumulative effect that occurs for each PWM channel with a frequency below 600 Hz. I’m assuming it’s something deep in the chipset driver software that reduces clockspeed to make the PWM more accurate for smaller frequencies, so I figure there must be some sort of hack to drive the processor speed back higher (or alter whatever is slowing down). Anyone have any ideas about exactly what is happening, and maybe what to do about it?

Hi Richard!

I never used the chipset driver, so no idea what is happening.

You can solve the problem by using libpruio. PWM signals are generated by hardware, using the modules ePWM (f > 0.42 Hz) and eCAP (f > 0.0233 Hz) in the subsystems PWMSS. 8 channels maximum. The ARM CPU is only active during configuration or when setting new values for frequency / duty cycle.

Ie. check out the examples pwm_cap or pwm_adc.