Você está na página 1de 11

Pero.. Qu es el PWM?

A menudo necesitaremos algo ms que una seal de 0 o 1 en nuestros


proyectos, para variar la velocidad de giro de un motor, para variar la
intensidad con la que luce un diodo, para transmitir los grados de giro de un
servo, etc..
Para todo esto, y mucho ms, nos servir el PWM, que emula una seal
analgica a partir de una seal digital.
as siglas PWM vienen de Pulse Width Modultation, o Modulacin de Ancho de
Pulso.
o que hace este tipo de seal es emitir, en lugar de una seal continua en
nuestra salida, emite una serie de pulsos que podremos variar su duracin pero
con una !recuencia constante de apro"imadamente #$0%&, de manera que la
tensin promedio resultante, es directamente proporcional a la duracin de
estos dentro del rango de nuestro periodo, es decir, cuanto ms 'untos est(n
esos pulsos de )*v, mayor ser la tensin promedio de nuestra salida, y cuanto
ms distantes sean estos, menor ser dicha tensin+
, 000- . /ntrada Analgica y 0alida
PWM
1ienvenidos a un nuevo tutorial 2sico so2re Arduino con el que podremos
e"primir al m"imo nuestro 03A43/4.563 o A1.5637.
8ivel+ 1sico
9oste+ : ;* <
3iempo+ 1*=
Parte 1+ >?u( vamos a hacer@
/n este nuevo proyecto vamos a aprender utili&ar las entradas analgicas de
nuestro pequeo Arduino Ano para utili&arla en dos e'emplos, primero
variaremos la !recuencia de parpadeo de un diodo /B con un potencimetro
conectado a una entrada analgica y luego utili&aremos el mismo circuito para
reali&ar una modulacin del ancho de un pulso en una salida digital CPWMD.
/n el siguiente video podemos ver el resultado Enal de los dos e'emplosF
Material necesario para este proyecto+
1 " Arduino Ano
1 " Biodo ed
1 " 4esistencia #G0 H
1 " Potencimetro 15H
1 " Proto2oard
1 " Iuego de ca2les

Parte ;+ Biseando el %ardJareF
/n este proyecto Arduino vamos a reali&ar dos e'emplos con un mismo circuito,
la di!erencia entre ellos la o2servaremos es el apartado de programacin, en
cuanto a hardJare tenemos la novedad de este proyecto en el uso de un
potencimetro com2inado con una entrada analgica, asK que primero
aclararemos unos conceptos.
Qu es un potencimetro?
An potencimetro es una resistencia de tipo varia2le con tres patillas, entre las
dos de sus e"tremos tendremos siempre una resistencia E'a dada por del valor
m"imo de nuestro potencimetro, pero entre cualquiera de esos e"tremos y la
patilla central o2tendremos la variacin de resistencia, ten(is disponi2le un
tutorial so2re este componente A?A6.
/n este proyecto, vamos a utili&ar el potencimetro como un divisor de tensin,
primero veamos como se conecta para que esto sea posi2le.
9omo podemos ver, de2emos colocar uno de los e"tremos a masa, otro a )Lcc
y nuestra patilla central ser nuestra tensin de salida regula2le, esta salida
ser la que conectemos a Arduino y que variar de 0v a *v dependiendo de la
posicin de nuestro potencimetro.
Podemos ver la variacin de tensin en el siguiente video+
0i estamos utili&ando un Arduino Ano, las entradas analgicas vienen
identiEcadas desde A0 hasta A* como podemos ver en la siguiente imagen+
/n cuanto a la salida, colocaremos la ya conocida conEguracin de /B ms
resistencia, pero de2eremos tener algo en cuenta, para el primer e'emplo nos
darKa igual la salida digital a elegir, pero para el segundo es necesario que
seleccionemos una salida con PWM, si ten(is un Arduino Ano, las salidas sern
la -, *, M, $, 10 y 11 como se puede ver en la siguiente imagen+
Pero.. Qu es el PWM?
A menudo necesitaremos algo ms que una seal de 0 o 1 en nuestros
proyectos, para variar la velocidad de giro de un motor, para variar la
intensidad con la que luce un diodo, para transmitir los grados de giro de un
servo, etc..
Para todo esto, y mucho ms, nos servir el PWM, que emula una seal
analgica a partir de una seal digital.
as siglas PWM vienen de Pulse Width Modultation, o Modulacin de Ancho de
Pulso.
o que hace este tipo de seal es emitir, en lugar de una seal continua en
nuestra salida, emite una serie de pulsos que podremos variar su duracin pero
con una !recuencia constante de apro"imadamente #$0%&, de manera que la
tensin promedio resultante, es directamente proporcional a la duracin de
estos dentro del rango de nuestro periodo, es decir, cuanto ms 'untos est(n
esos pulsos de )*v, mayor ser la tensin promedio de nuestra salida, y cuanto
ms distantes sean estos, menor ser dicha tensin+
Leamos un video del PWM en accin, o2servar como se corresponde la
intensidad lumKnica del /B con el ancho de pulso o2servado en el osciloscopio+
a manera de controlar el nivel de salida en nuestro Arduino, la podremos ver
en la seccin de programacin de este tutorial.
/l monta'e nos quedarKa asK en nuestra proto2oard+
AquK podemos ver en detalle el esquema el(ctrico+
/l circuito en si mismo es muy sencillo, pero en el apartado de programacin
podremos ver la versatilidad del mismo para di!erentes aplicaciones, asK que no
esperemos msF
Parte 3: Programando
/l primer e'emplo que vamos a tratar es la adquisicin de datos en la entrada
analgica A0 para variar la !recuencia de parpadeo de un diodo /B conectado
a una salida digital cualquiera, veamos el cdigo al completo+
@
1
2
3
4
5
6
7
8
9
10
11
12
/*
Tutorial # 0003 Arduino Academy - Entrada analgica

Funcionamiento de las entradas analgicas configurando
el pin analgico A0 para tomar datos de una seal.
Esta toma de datos es utiliada para !ariar la !elocidad
de parpadeo de un diodo "E# conectado a la salida digital $.

Este proyecto es de dominio p%&lico.
*/

int pin'ensor ( A0) // Entrada para el potencimetro.
int pin"ed ( $) // 'eleccionamos pin para el "ed.
int !alor'ensor ( 0) // !aria&le para el !alor del sensor.
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

!oid setup*+ ,
// #eclaramos el pin del "ed como salida-
pin.ode*pin"ed/ 01T21T+)
3

!oid loop*+ ,
// "eemos el !alor del sensor y lo almacenamos-
!alor'ensor ( analog4ead*pin'ensor+)
// encendemo el diodo "E#-
digital5rite*pin"ed/ 6786+)
// #etenemos el programa durante 9!alor'ensor: milisegundos-
delay*!alor'ensor+)
// Apagamos el diodo "ed-
digital5rite*pin"ed/ "05+)
// #etenemos el programa durante 9!alor'ensor: milisegundos-
delay*!alor'ensor+)
3
/n este programa tenemos como novedad la siguiente instruccin+
@
1
analog4ead*pin'ensor+
/sta instruccin nos permite leer cualquier sensor que conectemos al pin
analgico esta2lecido en Npin0ensorO, por de!ecto, nuestra placa Arduino nos
reali&ar una conversin analgico.digital para toda seal C#0mA m"imoD de
0v a *v con una resolucin de 10 2it, lo que nos da ;
10
C10;#D valores de
re!erencia para nuestro programa, siendo 0 en 0v y 10;- en )*v, en posteriores
e'emplos veremos como ese rango de tensin en el que se reali&an las
mediciones se puede variar para que, por e'emplo, empiece a lan&arnos valores
a partir de ;,;v.
9on esto, y o2servando un poco el programa, podemor ver que el intervalo
entre encendido y apagado de nuestro diodo /B podr variar entre 0 y 10;-
milisegundos, si quisi(ramos aumentar ms el tiempo de los intervalos
podrKamos aplicar alguna operacin matemtica al valor de nuestro sensor, por
e'emplo, si aadi(ramos la lKnea de cdigo que se puede o2servar de2a'o de la
toma de datos del sensor o2tendrKamos un incremento del tiempo cuatro veces
mayor+
@
1
2
3
// "eemos el !alor del sensor y lo almacenamos-
!alor'ensor ( analog4ead*pin'ensor+)
!alor'ensor ( !alor'ensor*;)
0in variar el circuito, vamos a introducir un nuevo cdigo para reali&ar un
e'emplo di!erente, en este proyecto, nuestro diodo /B variar su intensidad
lumKnica en !uncin del valor que est( aportando el potencimetro a nuestra
entrada analgica, esto es el llamado e!ecto !ading CdesvanecimientoD, puede
o2servarse que se ha elegido la salida nPmero $, ya que esta sK que es
compati2le con la opcin PWM como se e"plica algo ms arri2a.
Leamos el cdigo al completo+
@
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
Tutorial Arduino # 0003 - Efecto Fading

En este tutorial/ mostramos como se des!anece un "E#
en funcin del !alor recogido en un entrada analgica.

Este proyecto es de dominio p%&lico.
*/

int pin'ensor ( A0) // Entrada para el potencimetro.
int pin"ed ( $) // 'eleccionamos pin para el "ed.
int !alor'ensor ( 0) // !aria&le para el !alor del sensor.

!oid setup*+ ,
pin.ode*pin"ed/ 01T21T+) // Esta&lecemos el pin como salida.
3

!oid loop*+ ,
// "eemos el !alor del sensor y lo almacenamos-
!alor'ensor ( analog4ead*pin'ensor+)
// Esta&lecemos el !alor analgico para la salida 25.
analog5rite*pin"ed/ !alor'ensor / ;+)
// #etenemos el programa durante 30 milisegundos-
delay*30+)
3
Podemos o2servar una nueva instruccin+
@
1
analog5rite*pin"ed/ !alor'ensor / ;+)
/sta ser la instruccin que nos permitir emular una seal analgica a partir
de una digital en nuestros circuitos, como e"plica2a algo ms arri2a.
/l rango de salida de esta instruccin varia de 0 a ;**, siendo 0 Q 0v y ;** Q
*v, por lo que es tan sencillo como introducir un valor determinado para la
tensin de salida que nosotros queramos conseguir, si quisi(ramos conseguir
;,*v el valor a asignar serKa 1;G.
AsK que lo Pnico que de2emos hacer es trans!ormar mediante una simple
operacin matemtica la seal tomada en nuestro potencimetro para
adaptarla a nuestra salida PWM.
9omo hemos visto en el e'emplo anterior, los niveles de entrada son de 0 a
10;-, y si los niveles de salida, de2en ser de 0 a ;**F Rs de'o a vosotros la
deduccin, y la lKnea de cdigo por si no ca(is en cuenta.
@
1
analog5rite*pin"ed/ !alor'ensor / ;+)
/sta es una manera algo tosca para reali&ar esta conversin, ms adelante
veremos como hay una instruccin que hace esto por nosotros.
1ueno, eso es todo por el momento77
0i necesitis algPn tipo de aclaracin no dud(is en de'ar un comentario77
%asta pronto777

Você também pode gostar