Estoy interesado en generar una señal PWM por software en un micro (no es posible utilizar PWM por hardware en este caso). Es simple usar (por ejemplo) un bucle con un contador que cuenta hasta 255 y se envuelve, y transiciones alto-bajo cuando el contador llega a N y bajo-alto cuando se envuelve, para un pulso N de 255.
Sin embargo, debido a que este PWM es bastante lento, me gustaría suavizarlo, de la siguiente manera: si la salida es (por ejemplo) alta durante 2 de 255 cuentas, me gustaría que la salida fuera alta durante la cuenta 0 y 127, no la 0 y la 1. Si la salida es 127 de 255, me gustaría que la transición fuera alta-alta y alta-baja en cada cuenta, en lugar de permanecer alta durante los primeros 127 y baja durante los últimos 128.
En otras palabras, las bajas y las altas deben estar lo más repartidas posible. Me doy cuenta de que cuando el PWM está cerca de cualquiera de los extremos del rango todavía tendría una gran ondulación, pero esto reducirá mucho la ondulación cerca del medio del rango. ¿Cómo hacer esto de una manera eficiente?
EDITAR: Parece que he redescubierto Modulación de la densidad de impulsos . Todavía no estoy seguro de cómo hacer esto en la práctica, especialmente en un bucle rápido.