PWM Output Arduino
PWM Output Arduino
Modulation
Fall 2011 Gerald Recktenwald
v: November 14, 2011 [email protected]
Veff = V (1)
τo
s
τc
τo
V
s ...
τc
void loop() {
byte PWM_out_level;
Listado 1: Esqueleto de un boceto de Arduino para demostrar el uso de pinMode y analogWrite para
controlar la salida PWM.
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.
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.
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
// 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;
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.
5V
Digital
output
Digital
output
void setup() {
pinMode(LED_pin, OUTPUT); // Initialize pin for output
}
void loop() {
analogWrite(LED_pin, V1);
delay(dtwait);
analogWrite(LED_pin, V2);
delay(dtwait);
analogWrite(LED_pin, V3);
delay(dtwait);
}
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.
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
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 ().