0% encontró este documento útil (0 votos)
54 vistas

PWM Output Arduino

Este documento describe la modulación de ancho de pulso (PWM) y cómo se puede usar PWM en un Arduino para controlar dispositivos como LED y motores CC. Explica que PWM funciona variando el ancho de los pulsos de voltaje para simular señales de CC y CA. También describe cómo configurar la salida PWM en un Arduino, relacionando el nivel de salida PWM con el voltaje efectivo. Finalmente, proporciona ejemplos de código para parpadear y controlar el brillo de un LED usando PWM.

Cargado por

Adriana Komyk
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
54 vistas

PWM Output Arduino

Este documento describe la modulación de ancho de pulso (PWM) y cómo se puede usar PWM en un Arduino para controlar dispositivos como LED y motores CC. Explica que PWM funciona variando el ancho de los pulsos de voltaje para simular señales de CC y CA. También describe cómo configurar la salida PWM en un Arduino, relacionando el nivel de salida PWM con el voltaje efectivo. Finalmente, proporciona ejemplos de código para parpadear y controlar el brillo de un LED usando PWM.

Cargado por

Adriana Komyk
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 7

EAS 199 Basic Pulse Width

Modulation
Fall 2011 Gerald Recktenwald
v: November 14, 2011 [email protected]

Propiedades básicas de PWM


La modulación de ancho de pulso o PWM es una técnica para suministrar energía eléctrica a una
carga que tiene una respuesta relativamente lenta. La señal de suministro consiste en un tren de
pulsos de voltaje de manera que el ancho de los pulsos individuales controla el nivel de voltaje
efectivo a la carga. Tanto las señales de CA como las de CC se pueden simular con PWM. En estas
notas describiremos el uso de PWM en un Arduino para controlar LED y motores de CC.
El tren de pulsos PWM actúa como una señal de CC cuando los dispositivos que reciben la señal
tienen un tiempo de respuesta electromecánica que es más lento que la frecuencia de los pulsos.
Para un motor de CC, el almacenamiento de energía en los devanados del motor suaviza
efectivamente las ráfagas de energía entregadas por los pulsos de entrada, de modo que el motor
experimenta una entrada de energía eléctrica menor o mayor dependiendo de la amplitud de los
pulsos. Para un LED, el uso de PWM hace que la luz se encienda y apague a una frecuencia que
nuestros ojos pueden detectar. Simplemente percibimos la luz como más brillante o más tenue
dependiendo de los anchos de los pulsos en la salida PWM.
La Figura 1 muestra una señal de voltaje compuesta por pulsos de duración τo que se repiten
cada τc unidades de tiempo. La salida de un canal PWM es Vs voltios durante el pulso o cero voltios
en caso contrario. Si esta señal se suministra como entrada a un dispositivo que tiene un tiempo de
respuesta mucho mayor que τc, el dispositivo experimentará la señal como una entrada de
aproximadamente CC con un voltaje efectivo de

Veff = V (1)
τo
s
τc

La relación τo / τc se denomina ciclo de trabajo de los pulsos de onda cuadrada. El voltaje de CC


efectivo suministrado a la carga se controla ajustando el ciclo de trabajo.

1 Usando PWM en un Arduino


Un Arduino Uno tiene 14 pines de entrada / salida digital (E / S) 1. El funcionamiento
convencional, es decir, no PWM, de los pines de E / S digitales se controla con las funciones
pinMode, digitalRead y digitalWrite. La función pinMode se utiliza para configurar un pin como
entrada o salida. Cuando se configura un pin de E / S digital como entrada, digitalRead lee el
estado del pin, que será HIGH o LOW. En un boceto de Arduino, HIGH es una constante
predefinida que se evalúa como "verdadera" en un condicional
1
http://arduino.cc/en/Main/ArduinoBoardUno

τo

V
s ...
τc

Figure 1: Nomenclature for definition of PWM duty cycle.


EAS 199 :: Basic PWM Output 2

int PWM_out_pin = 9; // Must be one of 3, 5, 6, 9, 10, or 11


// for Arduino Uno
void setup() {
pinMode(PWM_out_pin, OUTPUT);
}

void loop() {
byte PWM_out_level;

PWM_out_level = ... // Code logic to set output level

analogWrite( PWM_out_pin, PWM_out_level);


}

Listado 1: Esqueleto de un boceto de Arduino para demostrar el uso de pinMode y analogWrite para
controlar la salida PWM.

expresión, y es equivalente a un valor numérico de 1. Eléctricamente, un valor de ALTO significa


que el voltaje del pin está cerca de 5 V. De manera similar, la constante BAJA se interpreta como
"falsa" en expresiones condicionales, es numéricamente equivalente a 0, y eléctricamente el voltaje
del pin es 0. Cuando un pin de E / S digital está configurado para salida, digitalWrite se utiliza para
establecer el voltaje del pin en ALTO o BAJO.
En un Arduino Uno, la salida PWM es posible en los pines de E / S digitales 3, 5, 6, 9, 10 y 11. En
estos pines, la función analogWrite se usa para establecer el ciclo de trabajo de un tren de pulsos
PWM que opera a aproximadamente 500 Hz2. Así, con una frecuencia fc = 500 Hz, el período es τc
= 1 / fc 2 ms. Al igual que con las E / S digitales convencionales, la función pinMode debe llamarse
primero para configurar el pin digital para la salida.
El esqueleto de un boceto en el Listado 1 muestra los componentes básicos del código para usar
PWM en un Arduino. Se utilizan dos variables enteras, PWM_out_pin y PWM_out_level, para
indicar el número de pin y el nivel de salida, respectivamente. En la función de configuración, la
declaración pinMode (PWM_out_pin, OUTPUT); configura el PWM_out_pin para la salida. El
símbolo de SALIDA es una constante definida por las herramientas de programación de
Arduino (el IDE o Entorno de Desarrollo Integrado). La declaración

analogWrite( PWM_out_pin, PWM_out_level);

establece el pin PWM_out_pin al valor del ciclo de trabajo PWM y, por lo tanto, al voltaje efectivo
de acuerdo con la Ecuación (1). El parámetro que establece el ciclo de trabajo es un entero sin
signo de 8 bits, es decir, un valor en el rango 0 PWM_out_level 255.
El voltaje de salida digital de un Arduino Uno es 0 V o 5 V. Por lo tanto, en la Ecuación (1), Vs =
5 V. El nivel de salida PWM especificado con analogWrite es un valor de 8 bits que corresponde a
un rango de voltaje efectivo de 0 a 5 V. La Figura 2 muestra las relaciones entre los parámetros de
salida de PWM. Las cantidades de la Figura 2 están relacionadas linealmente. Por lo tanto,
τo Veff
PWM_out_level = 255 × = 255 ×
τc Vs
Remember that the second input to analogWrite is an unsigned 8-bit value, so
PWM_out_level should be an byte variable type. Since Vs = 5 V always, for routine
calculations, we can use the simple formula
PWM_out_level = 255
× Veff
5
(2)
2
See h t t p: / / w ww. ard ui n o. cc/ en / Tu to ri al /P WM and http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM.
1 1
5V 255

τo τc Veff
Vs Vef PWM_out_level
f

0 0 0 0

Figura 2: Relaciones de escala para parámetros PWM. El nivel de salida PWM es el valor de 8 bits
utilizado como segundo parámetro para la función analogWrite.

Por tanto, para suministrar una tensión efectiva de


3 V utilice
PWM_out_level 255
= × 3 = 153
5

3 Ejemplos de implementación
Ahora mostramos cómo se puede aplicar PWM a dos situaciones prácticas: controlar el
brillo de un LED y controlar la velocidad de un motor de CC. El código Arduino para ambos
casos es el mismo.

3.1 Parpadeo de un LED


El primer programa para la mayoría de los usuarios de Arduino es encender y apagar un
LED. El diagrama de cableado para el LED se muestra en el lado izquierdo de la Figura 3. El
programa de parpadeo básico está disponible como blink.pde y es parte de la instalación
estándar del Arduino Integrated Development Environment (IDE). Realice las siguientes
selecciones de menú desde una ventana abierta de Arduino
Archivo → Ejemplos → Conceptos básicos → Blink
Tenga en cuenta que el programa blink.pde no utiliza PWM.

3.2 LED Brightness


Hacer parpadear un LED implica enviar una señal al LED que está encendido o apagado, verdadero
o falso, 5 V o 0 V. El ajuste del brillo de un LED requiere el envío de valores de voltaje en el rango
entre 0 V y 5 V utilizando la técnica PWM descrita anteriormente.

Ejemplo 3.1 Modificación del programa Blink para usar PWM

Controlar el brillo de un LED con PWM es sencillo. El circuito LED está conectado a uno de
los pines de salida PWM y el ciclo de trabajo para la salida PWM se controla con el comando
analogWrite.
El Listado 2 muestra dos programas para hacer parpadear un LED con un Arduino. El
programa de la izquierda (blink.pde) es una ligera variación del programa Blink.pde que
viene como parte estándar de la distribución Arduino. Blink.pde usa el comando
digitalWrite para encender y apagar un LED. Durante el estado "encendido", el pin de salida
digital se suministra con 5V.
EAS 199 :: Basic PWM Output 4

// File: Blink.pde // File: Blink_dim.pde


// //
// Turns on an LED on for one second, // Turns on an LED on for one second,
// then off for one second, repeatedly. // then off for one second, repeatedly.
// For digital I/O the brightness is set // Use PWM to control variable level of
// to maximum during the "on" phase. // brightness of the "on" phase.

// Use pins be 0, 1, ..., 13 for digital I/O // Use pins 3, 5, 6, 9, 10 or 11 for PWM
int LED_pin = 11; int LED_pin = 11;
// must be in the range 0 <= level <= 255
int level = 20;

void setup() { void setup() {


pinMode(LED_pin, OUTPUT); pinMode(LED_pin, OUTPUT);
} }

void loop() { void loop() {


digitalWrite(LED_pin, HIGH); analogWrite(LED_pin, level);
delay(1000); delay(1000);
digitalWrite(LED_pin, LOW); analogWrite(LED_pin, 0);
delay(1000); delay(1000);
} }

Listado 2: Arduino usando PWM para controlar el brillo de un LED.

El programa Blink dim.pde en el lado derecho del Listado 2 usa la función analogWrite para
suministrar un nivel de voltaje variable al LED.

Ejemplo 3.2 Control PWM del brillo del LED


En este ejemplo, el brillo del LED se establece en tres niveles en una secuencia que se repite sin fin. Esto nos
permite verificar que el control de brillo PWM está funcionando como debería. El circuito LED es el mismo.

5V

Digital
output
Digital
output

Figura 3: Circuito eléctrico para el programa de parpadeo básico a la izquierda y el programa de


parpadeo controlado por transistor. Tenga en cuenta que el programa para controlar estos dos
circuitos puede ser idéntico siempre que se utilice el mismo pin de salida digital para ambos
circuitos.
// File: LED_three_levels.pde
//
// Use PWM to control the brightness of an LED
// Repeat a pattern of three brightness levels

int LED_pin = 11; // must be one of 3, 5, 6, 9, 10 or 11 for PWM

void setup() {
pinMode(LED_pin, OUTPUT); // Initialize pin for output
}

void loop() {

int dtwait = 1000; // Pause interval, milliseconds


int V1=20, V2=220, V3=120; // 8-bit output values for PWM duty cycle

analogWrite(LED_pin, V1);
delay(dtwait);

analogWrite(LED_pin, V2);
delay(dtwait);

analogWrite(LED_pin, V3);
delay(dtwait);
}

Listing 3: Arduino using PWM to control the brightness of an LED.

El bosquejo de LED three levels.pde en el Listado 3 hace que un LED se ilumine en tres niveles
de brillo diferentes especificados por las variables V1, V2 y V3. Cada nivel se mantiene durante un
intervalo de tiempo especificado por la variable dtwait.

Ejemplo 3.3 Control PWM basado en transistores del brillo del LED
Los pines de salida digital Arduino pueden suministrar una corriente máxima de 40 mA. En muchas aplicaciones, es
necesario conmutar cargas de corriente más altas. Para cargas de corriente modestamente más grandes, digamos hasta 1A,
se pueden usar transistores NPN simples. Para corrientes más altas, se necesitan MOSFET o relés. En este ejemplo, se
demuestra el principio básico de usar un transistor para cambiar una carga. La carga es un LED, que no necesita un
transistor para cambiar.
El boceto de Arduino es el mismo que en los ejemplos anteriores. La única diferencia está en el circuito eléctrico,
donde el pin de salida PWM está vinculado a la base de un transistor NPN, como se muestra en la mitad derecha de la
Figura 3.

Continue Writing Here:


Ejemplo 3.4 Control PWM de un motor de CC

• Circuito del motor de CC: control por transistor; Amortiguador de diodos


• Bosquejo

3.2 Límites de hardware


Cada pin de salida digital de un Arduino Uno no puede suministrar más de 40 mA. Para
impulsar cargas de corriente moderadamente más altas, la salida PWM se puede usar con un
transistor que cambia la carga. Esa estrategia funciona con pequeños motores de CC. Por ejemplo,
un transistor P2N2222 de ON Semiconductor tiene un límite de corriente de 600 mA, un factor 30
más alto que un pin digital de un Arduino.
El control de cargas de CA o CC de mayor potencia introduce la posibilidad de peligros eléctricos
y no debe intentarse sin una experiencia sustancial y abundantes precauciones de seguridad.
Se puede usar un dispositivo MOSFET (Transistor de efecto de campo de óxido metálico) para
controlar cargas de CC a corrientes más altas. Los escudos Arduino que usan controles MOSFET se
pueden comprar en Sparkfun 3 u otros proveedores.
Una solución para controlar cargas resistivas de CA, como calentadores, es un producto llamado
Power-SwitchTail, que está disponible del fabricante (http://powerswitchtail.com/) o Adafruit
(http://www.adafruit.com/products/ 268).

3.3 Lecturas adicionales


Los secretos de Arduino PWM en el sitio web oficial de Arduino4 explica algunos de los detalles
de bajo nivel de Arduino PWM y cómo tomar un control de nivel fino sobre las salidas de PWM.

3 Consulte, por ejemplo, el Power Driver Shield http://www.sparkfun.com/products/10618 o el mini FET Shield http:

//www.sparkfun.com/products/9627

4http: //arduino.cc/en/Tutorial/SecretsOfArduinoPWM

+5V
+ Orient the diode so
– that the black stripe
is at the same voltage
as the positive motor
motor terminal
control
pin 330Ω Collector. Connect to
negative terminal
of motor

Base. Connect to motor


control pin on Arduino
Emitter: Connect to
ground

Figure 4: Electrical circuit for using PWM to control the speed control of a DC motor.
3.4 Preguntas de estudio
1. ¿Cuál es el voltaje efectivo Veff para Vs = 5V y ciclos de trabajo de 25 por ciento, 38 por
ciento y 64 por ciento?
2. Un pequeño motor de CC está conectado al pin de salida digital 7 de un Arduino Uno.
¿Cuáles son los comandos de Arduino para establecer el voltaje de salida efectivo en 2V, 3V
y 4.5V? Solo escriba el comando analogWrite ().

También podría gustarte