Paso 1: Pulse Width Modulation
- Amplitud - el importe de la señal cambia entre dentro y fuera de los Estados
- Frecuencia - el número de veces que la señal se repite en un determinado período de tiempo
- Ciclo de trabajo - la proporción de tiempo a fuera de tiempo, normalmente expresado como un porcentaje
En estos sistemas digitales la amplitud es fijo entre 0 y 1, entre 0V y VCC. En mis pruebas fue + 5V.
En él está la forma más simple de que una onda cuadrada del PWM se puede crear con unas pocas líneas de código. El siguiente código produciría una señal con un frecuencia de 1 segundo y un ciclo de trabajo 10%. Esto sería funcional pero el Arduino se dedicarían a producir esta señal todo el tiempo y no hacer nada. Por esta razón es tan importante aprender el ejemplo blink sin demora .
digitalWrite (IOPin, alto);
delayMicroseconds(100);
digitalWrite (IOPin, LOW);
delayMicroseconds(900);
Con una señal de software generado por cualquier variación en el tiempo de ejecución de código puede provocar variaciones en la salida. Condicionales no podrán ejecutar en cada bucle, así que es difícil garantizar que cada lazo tendrá exactamente la misma cantidad de tiempo. Los microcontroladores modernos han dedicado módulos hardware para generar una onda cuadrada independiente del código. Valores de frecuencia y ciclo de trabajo se escriben en los registros en el controlador y el hardware genera la señal apropiada de la clavija de salida deseado.
Los registros del módulo Hardware PWM pueden escribirse directamente como se describe aquí, pero la alegría del entorno de Arduino es que alguien es probable que haya escrito una biblioteca para simplificar ese proceso. La biblioteca de TimerOne proporciona control sobre el módulo de HardwarePWM conectado al temporizador 1 (acierto). Esta librería tiene funciones fácil para ajustar el ciclo de la frecuencia y el deber de la onda cuadrada generada
- pwm (pin, duty, período) - genera una forma de onda PWM en el pin especificado.
El freqeuncy mínimo el apoyo de la biblioteca es 1ms y el máximo es 8.3s. El deber se especifica como un valor de 10 bits, entre 0 y 1023, y esto se correlaciona con los valores 0% y 100% respectivamente.