Estoy interesado en generar una señal PWM en software en un micro (no es posible usar hardware PWM en este caso). Es fácil de usar (por ejemplo) un bucle con un contador que cuenta hasta 255 y se ajusta, y las transiciones de alto-bajo cuando el contador llega a N y de bajo-alto cuando se ajusta, para un N de 255 pulsos.
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 para 2 de 255 conteos, me gustaría que la salida fuera alta durante el 0º y 127º cuentan, no el 0º y 1º. Si es 127 de 255, me gustaría hacer una transición de bajo-alto y alto-bajo en cada cuenta, en lugar de permanecer alto para el primer 127 y bajo para el último 128.
En otras palabras, los mínimos y máximos deben estar lo más uniformemente extendidos posible. Me doy cuenta de que cuando el PWM está cerca de cualquiera de los extremos del rango, todavía tendrá una ondulación grande, pero esto reducirá la ondulación mucho cerca de la mitad del rango. ¿Cómo hacer esto de una manera eficiente?
EDIT: Parece que he redescubierto Modulación de la densidad del pulso . Todavía no estoy seguro de cómo hacer esto en la práctica, especialmente en un bucle rápido.