Informe N°5
“Entrada analógica y salida PWM”
Segundo semestre 2019
Integrantes: Edison Alarcón.
Jared Araya.
Profesor: Alex Ulloa.
Fecha: 06 de enero, 2020.
INTRODUCCION
PWM son siglas en inglés que significan Pulse Width Modulation y que lo
podemos traducir a español como Modulación de ancho de pulso.
La modulación por ancho de pulsos de una señal o fuente de energía es
una técnica en la que se modifica el ciclo de trabajo de una señal periódica (una
senoidal o una cuadrada, por ejemplo), ya sea para transmitir información a través
de un canal de comunicaciones o para controlar la cantidad de energía que se
envía a una carga.
El ciclo de trabajo de una señal periódica es el ancho relativo de su parte
positiva en relación con el período. Expresado matemáticamente:
Lo
cierto es
que al
variar el ciclo
de
trabajo de
una señal
PWM, lo que estamos haciendo es variar su tensión media y esta es la clave por la
cual usamos tanto el PWM. Cunado una señal media de tensión atraviesa ciertos
componentes electrónicos, puede hacer que su comportamiento cambie. Por
ejemplo, los LED, los motores de corriente continua o ventiladores, incluso
altavoces y zumbadores.
Objetivo general.
Comprobar el funcionamiento de la entrada analógica y salida PWM de Arduino
UNO.
Objetivos específicos.
Comprender el funcionamiento de la entrada analógica.
Comprender el funcionamiento de una salida PWM.
Aplicar la salida PWM en el control de un Dimmer.
Controlar la salida PWM a través de la variación de la entrada analógica.
Marco teórico
PWM
La modulación por ancho o de pulso (o en inglés pulse width modulation PWM) es
un tipo de señal de voltaje utilizada para enviar información o para modificar la
cantidad de energía que se envía a una carga. Este tipo de señales es muy
utilizado en circuitos digitales que necesitan emular una señal analógica.
Este tipo de señales son de tipo cuadrada o sinusiodales en las cuales se les
cambia el ancho relativo respecto al período de la misma, el resultado de este
cambio es llamado ciclo de trabajo y sus unidades están representadas en
términos de porcentaje. Matemáticamente se tiene que:
t
D= ∗100
T
D = ciclo de trabajo
t = tiempo en que la señal es positiva
T = Período
Para emular una señal analógica se cambia el ciclo de trabajo (duty cicle en
inglés) de tal manera que el valor promedio de la señal sea el voltaje aproximado
que se desea obtener, pudiendo entonces enviar voltajes entre 0[V] y el máximo
que soporte el dispositivo PWM utilizado, en el caso de Arduino es 5[V].
En Arduino este tipo de señales sólo puede ser realizado con los pines que tienen
el símbolo ~ en sus números. En Arduino UNO son los pines 3, 5, 6, 9, 10 y 11.
La señal en Arduino tiene valores de 0[V] a 5[V] y una frecuencia de
aproximadamente 500[Hz]. En los pines 5 y 6 esta frecuencia es
aproximadamente el doble.
Las aplicaciones típicas para este tipo de señales son: Controlar intensidad de un
LED, mover servomotores, controlar LED RGB, controlar velocidad de motores de
corriente continua y controlar motores eléctricos de inducción o asincrónicos.
Entradas Analogicas
Una señal analógica es aquella que puede tomar diferentes valores. Su forma
característica es conocida como señal de onda senoidal y las representaciones se
realizan en el dominio del tiempo. La función principal de las salidas analógicas es
entregar una señal de control que le dará funcionalidad a un circuito electrónico
que será el encargado de cumplir con las funciones que el usuario requiera.
En arduino disponemos de 6 pines para entradas analógicas serigrafiados con los
números del A0 al A5. Estos pines son utilizados únicamente como entradas
analógicas. La entrada analógica toma los valores comprendidos entre 0 y 1023.
Es importante recordar que no podemos sobrepasar los límites de voltaje
permitidos, es decir, si se aplica un voltaje mayor a 5 voltios en una entrada digital,
la placa de arduino se quemará. Lo mismo aplica para voltajes negativos, por lo
que debemos asegurar que el voltaje aplicado a una entrada digital se encuentre
entre 0 y 5 voltios.
En arduino para tratar las entradas y salidas analógicas usamos las siguientes
funciones:
analogReference() – configura la referencia de voltaje usada para la
entrada analógica.
analogRead() – lee el valor del pin analógico especificado.
analogWrite() – escribe un valor analógico (onda PWM) al pin especificado.
No en todos los pines digitales se puede aplicar PWM.
Arduino:
ArduinoUno R3 utiliza el microcontrolador ATmega328. En adición a
todas las características de las tarjetas anteriores, el Arduino Uno utiliza
el ATmega16U2 para el manejo de USB en lugar del 8U2 (o del FTDI encontrado
en generaciones previas). Esto permite ratios de transferencia más rápidos y más
memoria. No se necesitan drivers para Linux o Mac (el archivo inf para Windows
es necesario y está incluido en el IDE de Arduino).
La tarjeta Arduino Uno R3 incluso añade pins SDA y SCL cercanos al AREF. Es
más, hay dos nuevos pines cerca del pin RESET. Uno es el IOREF, que permite a
los shields adaptarse al voltaje brindado por la tarjeta. El otro pin no se encuentra
conectado y está reservado para propósitos futuros. La tarjeta trabaja con todos
los shields existentes y podrá adaptarse con los nuevos shields utilizando esos
pines adicionales.
El Arduino es una plataforma computacional física open-source basada en una
simple tarjeta de I/O y un entorno de desarrollo que implementa el lenguaje
Processing/Wiring. El Arduino Uno R3 puede ser utilizado para desarrollar objetos
interactivos o puede ser conectado a software de tu computadora (por ejemplo,
Flash, Processing, MaxMSP). El IDE open-source puede ser descargado
gratuitamente (actualmente para Mac OS X, Windows y Linux).
Programación:
El ATmega328 en el Arduino Uno viene pre-programado con un gestor de
arranque (Bootloader) que le permite ser reprogramado sin el uso de un
programador de hardware externo. Se comunica utilizando el protocolo STK500
original.
El Arduino Uno se puede programar con el software Arduino (IDE). En este
seleccione " Herramientas> Tarjeta: 'Nombre'> Arduino/Genuino Uno" y el puerto
serial al que se encuentra conectado.
Características:
Microcontrolador ATmega328.
Voltaje de entrada 7-12V.
14 pines digitales de I/O (6 salidas PWM).
6 entradas análogas.
32k de memoria Flash.
Reloj de 16MHz de velocidad.
Potenciometro
Es una resistencia variable de un valor determinado
dado por el fabricante y que nosotros podemos ajustar
desde 0 a ese valor
Tiene 3 terminales, los dos de los extremos son fijos y
entre ellos habrá la resistencia máxima del
potenciómetro que será la marcada en el lateral del la
carcasa del mismo, el central es un terminal movil, que
podemos ajustar con el tornillo del potenciómetro.
Internamente el terminal central es un contacto que desliza entre la resistencia
formada por los dos terminales fijos de manera que podemos variar la resistencia
entre los terminales fijos y el cursor.
En reasumen, lo que tenemos es una resistencia dividida en dos y unidas por el
cursor de tal manera que la suma de ellas es la resistencia máxima entre los
terminales fijos.
En la representación en forma esquemática podemos ver que los terminales fijos
son el 1 y 2, mientras que el cursor es el número 3 que se representa con una
flecha.
Osciloscopio:
Osciloscopio Digital Portable 100
mhz 2 canales / INSTEK / GDS-
1102A-U
Características Generales
La serie GDS-1000A-U
proporciona una solución única. La línea GDS-1000A-U incluye tres modelos
GDS-1152A-U, GDS-1102A-U y GDS-1072A-U. Operando a 150, 100 o 70 MHz
con una tasa de muestreo en tiempo real de 1 GSa/s, el GDS-1000A-U emplea la
tecnología MemoryPrime. Al utilizar la tecnología MemoryPrime, el GDS-1000A-U
puede superar los problemas asociados con las limitaciones de memoria. Las
tasas de muestreo altas, que raramente se encuentran en DSO tradicionales, se
pueden mantener durante períodos de tiempo más largos, sin afectar el
rendimiento.
Junto con la pantalla TFT a color de alta resolución de 5.7", con una interfaz de
usuario amigable, el dispositivo USB y el puerto de host hacen que la serie GDS-
1000A-U sea rica en funciones.
Un Software para el computador está disponible gratis para todos los clientes,
descargable desde el sitio web de Instek. El software permite transferir la imagen
completa desde la Serie GDS-1000 hacia el computador vía puerto USB de
manera rápida, permitiendo al usuairo ver la imagen en el monitor del computador.
Especificaciones Técnicas
Marca: INSTEK
Modelo: GDS-1152A-U
Ancho de banda 100MHz
Velocidades de muestreo de tiempo real de 1GSa / s, tiempo equivalente de
25GSa / s
Longitud de registro de 2Mega Points
Escala vertical de 2mV ~ 10V
Rango horizontal 1ns ~ 50s
Hasta 27 mediciones automáticas
Pantalla LCD TFT 5.7 "
Interfaz de dispositivo y host USB compatibles
Función Go / NoGo
Registrador de datos
Accesorios Incluidos
1 x Manual de usuario
1 x Cable de alimentación
Sonda GTP-100A-4 o equivalente: 100MHz (10: 1/1: 1)
Sonda pasiva conmutable para GDS-1102A-U (uno por canal)
Display de 7 segmentos de Ánodo común y Cátodo común:
Existen dos tipos de display de 7 segmentos, su principal diferencia es la
conexión que debemos implementar para encenderlos, estos dos tipos se conocen
como Ánodo común y Cátodo común.
En los 7 segmentos de Cátodo Común, el punto en común para todos los
Led es el Cátodo (Gnd), cero volts, Mientras que el Ánodo común el punto de
referencia es Vcc (5 volt).
Teniendo en cuenta estas consideraciones la forma de encender los leds
debe realizase de diferente manera en función de que elemento tengamos (Ánodo
o Cátodo común).
Cada Led trabaja con tensiones y corrientes bajas por lo tanto se pueden
conectar directamente a compuertas lógicas o pines de salida de un micro
controlador, igualmente siempre es recomendable para aumentar la vida útil de los
mismos, conectarle una resistencia en serie entre el pin de salida del micro
controlador y el de entra de los 7 segmentos, la intensidad lumínica en este caso
dependerá del valor de la resistencia agregada.
Las aplicaciones más comunes de los display 7 segmentos son como contadores:
relojes de tiempo real
para desplegar marcadores
algún tipo de cuenta regresiva o incremental
Tablas de verdad de los display
Los siguientes pines (A-B-C-D-E-F-G) representan cada led interno de los 7
segmentos, en el caso del Cátodo Común se encenderán con un 1 lógico mientras
que en Ánodo Común se encenderá con un 0 Lógico.
Por ejemplo, si suponemos que estamos trabajando con un Cátodo Común
Si ponemos A-B-C en 1, los 7 segmentos nos mostraran un “7”
Si ponemos B-C-F-G en 1, los 7 segmentos nos mostraran un “4”
Si suponemos que estamos trabajando con un Ánodo Común
Si ponemos E en 1, los 7 segmentos nos mostraran un “9”
Si ponemos B en 1, los 7 segmentos nos mostraran un “6”
Multiplexado display 7 segmentos
Este es una técnica que se utiliza al momento de utilizar 2 o más display,
debido a que los pines de nuestro Arduino son limitados, y el control de cada
segmento de ambos display sobrepasa el número de pines del Arduino.
La multiplexación de un Display, simplemente consiste en encender un
único display, mostrar el número y luego apagarlo, para encender el display que le
sigue. El truco de encender y apagar el display a una alta velocidad, permite
engañar al ojo humano, y tener la sensación de que todos los displays se
encuentran energizados al mismo tiempo. La secuencia que se apreciaría en
cámara lenta seria como la siguiente:
Listado de materiales.
1 placa Arduino UNO.
1 protoboard.
1 osciloscopio.
Cable de programación.
1 potenciómetro de 250 kohms.
1 resistencia de 330 ohms.
1 diodo led.
Circuito de montaje: entrada analógica y salida PWM (variación brillo led)
En el siguiente esquema se utilizó la entrada analógica A0 de nuestro
Arduino que recibirá las variaciones de voltaje de nuestro potenciómetro.
Y nuestro LED se encuentra conectado en serie a su respectiva resistencia
para evitar daños en él, por intensidades altas de corriente, y a su vez es
alimentado por el pin 9(PWM).
Este circuito tiene como función la variación del brillo de nuestro
led, mediante el giro del potenciómetro. Esto quiere decir que mientras más
giremos el cursor del potenciómetro en sentido horario, más aumentara el
brillo del LED; al girar el cursor en sentido anti horario, el brillo disminuirá.
Además mediante la programación se debe visualizar en el monitor serial
un contador de nuestro potenciómetro con rango de 0 a 255.
Se debe analizar la modulación de la señal PWM con un osciloscopio y
variar el “delay” en nuestro programa.
Programa para el circuito
// declaramos las variables y sus respectivos pines dentro de arduino
int ledrojo = 9;
int potenciometro = 0;
int voltaje;
void setup() {
Serial.begin(9600); // iniciamos el puerto serial
pinMode(ledrojo, OUTPUT); // declaramos que la variable es una salida
}
// invocamos un ciclo
void loop() {
voltaje = analogRead(potenciometro)*0.25; // la variable voltaje es igual a la
lectura analógica de la variable potenciometro, multiplicado por 0.25(ajuste del
rango)
analogWrite(ledrojo, voltaje); // este comando modula los valores obtenidos en la
variable voltaje y asociarlos a la variable ledrojo
int sensorValue = voltaje; // ingresamos un comando para tomar lecturas de la
variable voltaje
Serial.print(“Potenciometro en “); // proyectamos en el monitor serial una frase o
palabra
Serial.println(analogRead(potenciometro)/4); // proyectamos en el monitor serial
la lectura analógica de la variable potenciometro, dividido en 4(ajuste de rango)
delay(500); // invocamos un retardo de medio segundo
}
Resutados del Osciloscopio:
En esta imagen podemos observar que
al encontrarse nuestro potenciómetro
totalmente orientado hacia la izquierda,
es decir en 0 beats, se tienen 0v y por
ende no existe periodo ni ciclo de
trabajo, lo que provoca que nuestro led
se mantenga apagado.
Al rotar levemente el potenciómetro
llegamos al 10% de beats, lo que nos
da un periodo de 2,044mS, para
obtener el ancho de pulso (PWM) es
necesario utilizar la siguiente formula:
Ton(ancho de pulso)
duty cicle %=
Ton+Tof f ( periodo)
Ton
10 %= =Ton=0,1∗2,044 mS
2,044 mS
Ton=0,2044 mS
Esta fórmula nos dice que el tiempo que permanece encendido el led a 10% de
beats es de 0,2044mS y apagado seria la diferencia es decir:
Toff =2,044 mS−0,2044 mS=1,8396 mS
Nuestro votaje es:
Vavg=0,1∗4,88 V =486 mV
Al llegar al 20%de beats nuestro
periodo se mantiene durante todo la
medición, pero aumenta nuestro ancho
de pulso
Ton=0,2∗2,044 mS=0,4088mS
Toff =2,044 mS−0,4088 mS=1,6352 mS
Por ende el led permanecerá más
tiempo encendido y comenzara a
parpadear más rápido.
Nuestro voltaje es:
Vavg=0,2∗4,88 v=976 mV
Avanzamos hasta el 40% de beats y
nuestro periodo es el mismo pero cada
vez nuestro ancho de pulso es mayor.
Ton=0,4∗2,044 mS=0 , 8176 mS
Toff =2,044 mS−0 , 8176 mS=1,2264 mS
Y así nuestro led comienza a
mantenerse más tiempo encendido y
por ende a parpadear más rápido.
Nuestro voltaje es:
Vavg=0,4∗4,88 V =1,9V
Alcanzamos el 60% de beats, nuestro
periodo se mantiene y nuestro ancho de
pulso continúa aumentando
Ton=0,6∗2,044 mS=1,2264 mS
Toff =2,044 mS−1,2264 mS=0,8176 mS
Nuestro led aumenta cada vez más su
tiempo de encendido y por ende su
velocidad de parpadeo es más rápido.
Nuestro voltaje es:
Vavg=0,6∗4,88 V =2,83 V
Hemos llegado al 80% de beats o giro del
potenciómetro, y nuestro ancho de pulso
llega casi al total del periodo
Ton=0,8∗2,044 mS=1, 6352 mS
Toff =2,044 mS−1 , 6352mS=0 , 4088 mS
Esta velocidad ya es casi imperceptible al
ojo humano y nos da la ilusión de que el led
esta encendido el total del periodo
Nuestro voltaje es:
Vavg=0,8∗4,88 V =3,77 V
%beats v/s Vavg
120%
100%
80%
60% V avg
40%
20%
0%
0,487V 0.960V 1,42V 1,9V 2,36V 2,83V 3,31V 3,77V 4,25V 4,88V
10% 0,487V
20% 0.960V
30% 1,42V
40% 1,9V
50% 2,36V
60% 2,83V
70% 3,31V
80% 3,77V
90% 4,25V
100% 4,88V
b) Desarrolle un código que le permita mediante Arduino mostrar en dos display de
7 segmentos el valor analógico del potenciómetro en escala de 00 a 99. Es decir,
con el potenciómetro completamente girado a la izquierda los display mostraran
00, mientras que con el potenciómetro completamente girado a la derecha los
display mostraran 99. Se siguiere usar parte del código implementado en el
laboratorio anterior respecto al funcionamiento de los display de 7 segmentos
conmutados y lo correspondiente al funcionamiento y escalamiento de una entrada
análoga. Para ello requiere escalar los valores digitales entregados por el
potenciómetro considerando que la entrada analógica de Arduino es de 10 bits.