PWM Arduino, Pulse Width Modulation

Tutorial de Arduino PWM

En este Tutorial de Arduino PWM, vas a aprender sobre lo que es PWM y cómo puedes obtener la salida de PWM de los pines digitales de Arduino. Primero controlaremos el brillo del LED a través del código y luego lo controlaremos manualmente añadiendo el potenciómetro. arduino uno pwm pins

Qué es PWM

PWM significa Modulación de Ancho de Pulso y es una técnica usada para controlar el brillo del LED, el control de velocidad del motor DC, el control de un servomotor o donde usted tiene que obtener salida analógica con medios digitales.

Los pines digitales Arduino nos dan 5V (cuando están en ALTO) o 0V (cuando están en BAJO) y la salida es una señal de onda cuadrada. Así que si queremos atenuar un LED, no podemos obtener el voltaje entre 0 y 5V del pin digital pero podemos cambiar la hora de encendido y apagado de la señal. Si cambiamos el tiempo de encendido y apagado lo suficientemente rápido, entonces el brillo del led cambiará.

Antes de seguir adelante, veamos algunos términos asociados con PWM.

  • TON (On-Time, Tiempo de encendido): Es el momento en que la señal es alta.
  • TOFF (Off-Time, Hora de apagado): Es el momento en que la señal está baja.
  • Punto: Es la suma de tiempo de encendido y apagado.
  • Ciclo de trabajo: Es el porcentaje de tiempo en que la señal estuvo alta durante el período.

Por lo tanto, con un ciclo de trabajo del 50% y una frecuencia de 1 Hz, el led estará a nivel alto durante medio segundo y a nivel bajo durante el otro medio segundo. Si aumentamos la frecuencia a 50Hz (50 veces ON y OFF por segundo), entonces el led se verá iluminado a media luz por el ojo humano.

Qué es PWM

Arduino y PWM

El IDE de Arduino tiene incorporada una función «analogWrite()» que puede ser usada para generar una señal PWM. La frecuencia de esta señal generada para la mayoría de los pines será de aproximadamente 490Hz y podemos dar el valor de 0-255 usando esta función.

  • analogWrite(0) es una señal de ciclo de trabajo del 0%.
  • analogWrite(127) es una señal de un ciclo de trabajo del 50%.
  • analogWrite(255) es una señal de ciclo de trabajo del 100%.

En Arduino Uno, los pines del PWM son 3, 5, 6, 9, 10 y 11. La frecuencia de la señal PWM en los pines 5 y 6 será de aproximadamente 980Hz y en otros pines será de 490Hz. Los pines del PWM están etiquetados con el signo ~.

Componentes necesarios para el tutorial de Arduino PWM

Los componentes que se requieren para este tutorial son los siguientes

  • Arduino Uno
  • LED
  • Resistencia de 220 ohmios
  • Potenciómetro de 10k
  • Protoboard
  • Cables de conexión

Control del brillo del LED a través del código

En primer lugar, realiza las conexiones como se describe a continuación.

Control del brillo del LED a través del código

Conecta la pata positiva del LED, que es la pata más larga, a la clavija digital 6 de Arduino. Luego conecta la resistencia de 220 ohmios a la pata negativa del LED y conecta el otro extremo de la resistencia a la clavija de tierra de Arduino.

Ahora escribamos un código para cambiar el brillo del LED usando PWM.

Código de Arduino

Sube el código en el IDE de Arduino y el LED comenzará a apagarse.

//Initializing LED Pin
int led_pin = 6;
void setup() {
//Declaring LED pin as output
pinMode(led_pin, OUTPUT);
}
void loop() {
//Fading the LED
for(int i=0; i<255; i++){
analogWrite(led_pin, i);
delay(5);
}
for(int i=255; i>0; i--){
analogWrite(led_pin, i);
delay(5);
}
}

Código Arduino para controlar manualmente el brillo del LED

En las conexiones anteriores, añadir el potenciómetro de 10k ohmios y conectar los dos extremos del potenciómetro a 5V y GND de Arduino y luego conectar el centro del potenciómetro al pin A0 de Arduino.

controlar manualmente el brillo del LED

Código de Arduino

Sube el código en el IDE de Arduino y al mover la perilla del potenciómetro, el brillo del LED cambiará.

int led_pin = 6;
int pot_pin = A0;
int output;
int led_value;
void setup() {
pinMode(led_pin, OUTPUT);
}
void loop() {
//Reading from potentiometer
output = analogRead(pot_pin);
//Mapping the Values between 0 to 255 because we can give output
//from 0 -255 using the analogwrite funtion
led_value = map(output, 0, 1023, 0, 255);
analogWrite(led_pin, led_value);
delay(1);
}

analogWrite() Función

La función analogWrite() escribe un valor analógico (onda PWM) en un pin. Se puede utilizar para iluminar un LED con diferentes brillos o para accionar un motor a diferentes velocidades. Después de una llamada de la función analogWrite(), el pin generará una onda cuadrada constante del ciclo de trabajo especificado hasta la siguiente 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 tarjetas 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 el ATmega168 o ATmega328), esta función funciona en los pines 3, 5, 6, 9, 10 y 11. En el Arduino Mega, funciona en los pines 2 – 13 y 44 – 46. Las placas Arduino más antiguas con un ATmega8 sólo soportan analogWrite() en los pines 9, 10 y 11.

El Arduino Due soporta analogWrite() en los pines 2 a 13, y en los 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 establecer el pin como salida antes de analogWrite().

analogWrite() Function Syntax

analogWrite ( pin , value ) ;

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

Ejemplo

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
}

Pin It on Pinterest

Shares