Pulse Width Modulation (PWM), es una técnica utilizada para recrear un comportamiento analógico mediante señales digitales. Dicha señal digital es una onda cuadrada, la cual tiene dos valores: valor alto (5V en el caso de las placas Arduino) y valor bajo (0V).
La relación entre el tiempo que la señal está en nivel alto y nivel bajo se conoce como ciclo de trabajo (Duty Cycle, expresa en %). Por lo tanto, una señal que está 1ms en nivel alto y 1ms en nivel bajo, será una señal con 50% Duty Cycle. Entonces, ¿qué porcentaje queremos utilizar? Dependiendo de la tensión final que queramos tener. Es decir, se multiplican los 5 V de nivel alto que tienes por el % del ciclo de trabajo y tendrás la tensión final que tendremos en la salida PWM.
Ejemplo: 5V*50%= 2,5 V.
Ahora bien, ¿cómo generar la señal deseada en Arduino? Primero, hay que tener claro que no todas las salidas digitales valen, sólo las que están señaladas en la placa con las siglas PWM. Segundo, el generador PWM de la placa tien una resolución de 8 bits, por lo tanto, podrá trabajar con 256 valores (de 0 a 255).
Con estas dos premisas claras, basta con utilizar la función «analogWrite(pinPWM, valor);» y así obtener la señal cuadrada deseada. En la siguiente imagen se recogen ejemplos de la función analogWrite con la relación directa entre %DutyCycle y valor del generador PWM.