Arduino - Modulación de ancho de pulso

La modulación por ancho de pulso o PWM es una técnica común que se utiliza para variar el ancho de los pulsos en un tren de pulsos. PWM tiene muchas aplicaciones, como el control de servos y controladores de velocidad, limitando la potencia efectiva de motores y LED.

Principio básico de PWM

La modulación por ancho de pulso es básicamente una onda cuadrada con un tiempo variable alto y bajo. En la siguiente figura se muestra una señal PWM básica.

Hay varios términos asociados con PWM:

  • On-Time - La duración de la señal de tiempo es alta.

  • Off-Time - La duración de la señal de tiempo es baja.

  • Period - Se representa como la suma del tiempo de activación y desactivación de la señal PWM.

  • Duty Cycle - Se representa como el porcentaje de señal de tiempo que permanece encendida durante el período de la señal PWM.

Período

Como se muestra en la figura, T on indica el tiempo de activación y T off indica el tiempo de desactivación de la señal. El período es la suma de los tiempos de activación y desactivación y se calcula como se muestra en la siguiente ecuación:

$$ T_ {total} = T_ {encendido} + T_ {apagado} $$

Ciclo de trabajo

El ciclo de trabajo se calcula como el tiempo de activación del período de tiempo. Utilizando el período calculado anteriormente, el ciclo de trabajo se calcula como:

$$ D = \ frac {T_ {on}} {T_ {on} + T_ {off}} = \ frac {T_ {on}} {T_ {total}} $$

Función analogWrite ()

los analogWrite()La función escribe un valor analógico (onda PWM) en un pin. Se puede usar para encender un LED con brillo variable o impulsar un motor a varias velocidades. Después de una llamada a la función analogWrite (), el pin generará una onda cuadrada constante del ciclo de trabajo especificado hasta la próxima llamada a analogWrite () o una llamada a digitalRead () o digitalWrite () en el mismo pin. La frecuencia de la señal PWM en la mayoría de los pines es de aproximadamente 490 Hz. En las placas Uno y similares, los pines 5 y 6 tienen una frecuencia de aproximadamente 980 Hz. Los pines 3 y 11 del Leonardo también funcionan a 980 Hz.

En la mayoría de las placas Arduino (aquellas con ATmega168 o ATmega328), esta función funciona en los pines 3, 5, 6, 9, 10 y 11. En Arduino Mega, funciona en los pines 2 - 13 y 44 - 46. Arduino anterior placas con un soporte solo ATmega8 analogWrite() en los pines 9, 10 y 11.

El Arduino Due admite analogWrite()en los pines 2 a 13 y pines DAC0 y DAC1. A diferencia de los pines PWM, DAC0 y DAC1 son convertidores de digital a analógico y actúan como verdaderas salidas analógicas.

No es necesario llamar a pinMode () para configurar el pin como salida antes de llamar a analogWrite ().

Sintaxis de la función analogWrite ()

analogWrite ( pin , value ) ;

value - el ciclo de trabajo: entre 0 (siempre apagado) y 255 (siempre encendido).

Example

int ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value

void setup() {
   pinMode(ledPin, OUTPUT); // sets the pin as output
}

void loop() {
   val = analogRead(analogPin); // read the input pin
   analogWrite(ledPin, (val / 4)); // analogRead values go from 0 to 1023, 
      // analogWrite values from 0 to 255
}