DEPARTAMENTO METAL-MECÁNICA
MICROCONTROLADORES
INGENIERÍA MECATRÓNICA
GRUPO 7U
“PRÁCTICAS DE LA 5 A LA 10”
MAESTRO: ING. VANEGAS VÁSQUEZ ERIK ARTURO
ESTUDIANTES: NO. DE CONTROL:
Adley Bracho Garduño 18041093
Erick Benjamín Díaz Gámiz 18041106
José Alberto Ramos Galarza 18041148
Darcy Gabrielle Torres Salazar 18041163
Desarrollo ................................................................................................................ 6
Práctica 5 ............................................................................................................. 6
Práctica 6 ............................................................................................................. 8
Práctica 7 ........................................................................................................... 10
Práctica 8 ........................................................................................................... 13
Práctica 9 ........................................................................................................... 16
Práctica 10 ......................................................................................................... 19
Conclusiones ......................................................................................................... 22
Referencias ........................................................................................................... 24
Índice de figuras
Figura 1 - Diagrama de un servomotor. ................................................................... 4
1
Figura 6 - Código práctica 7. ................................................................................. 12
2
Introducción
La Modulación por Ancho de Pulso (PWM) es muy utilizada en las
telecomunicaciones. En la actualidad gran parte de estos sistemas se basa en el
empleo de microprocesadores. Sin embargo, no todos ellos son capaces de dar
salidas moduladas por ancho de pulso. El microprocesador Atmega de la plataforma
Arduino de código y hardware abiertos, es capaz de entregar salidas moduladas por
ancho de pulso (García & Valdés, 2019).
El PWM es un tipo de señal de tensión que usamos en electrónica con
muchos objetivos distintos y para muchas tareas distintas.
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, y se ha vuelto cada vez
más importante en las comunicaciones modernas por su relativa sencillez y robustez
(González, 2002).
Una señal PWM, está formada por una señal de onda cuadrada que no
siempre tiene la misma relación entre el tiempo que está en alto y el tiempo que está
en bajo.
La variación de ancho de pulso consiste en variar los tiempo de encendido y
apagado. Al cambiar el valor de un PWM, en realidad se están modificando estos
tiempos. Una de las características más importantes de una señal PWM es su ciclo
de trabajo o Duty Cycle, en inglés.
El ciclo de trabajo no es otra cosa que la relación entre el tiempo de
encendido y el periodo o tiempo total del PWM. Cuanto mayor sea el Duty Cycle,
mayor tiempo estará la señal de tensión en alto, sin variar el periodo.
Por lo general, todo sistema que procesa información binaria para controlar
un proceso analógico requiere una etapa de entrada analógica – digital y una etapa
de salida digital –analógica (convertidores ADC y DAC). Para reducir costos en los
diseños que no requieren alta resolución en la etapa de salida, es posible sustituir
el DAC por un algoritmo de Modulación por Ancho de PulsosUna unidad PWM
permite asignar cierta duración de tiempo en alto o en bajo a un dato digital de n
bits que se considera salida de la etapa procesadora (Herrera Lozada, 2010).
3
La señal de PWM, es utilizada ampliamente para el control de motores. La
Regulación por Ancho de Pulso de un motor de corriente continua está basada en
el hecho de que si se recorta la corriente de alimentación en forma de una onda
cuadrada, la energía que recibe el motor disminuirá de manera proporcional a la
relación entre la parte alta (habilita corriente) y baja (cero corriente) del ciclo de la
onda cuadrada. Controlando esta relación se logra variar la velocidad del motor de
una manera bastante aceptable.
Uno de los actuadores más comunes en robótica básica son los
servomotores. Un servomotor consiste en un motor de cd o corriente directa,
controlado por un sistema embebido interno, el cual se encarga de transferir energía
mecánica mediante una serie de engranes hasta un eje externo. El sistema interno
embebido se encarga de comparar una posición angular, determinada por una señal
de control, y la posición actual del eje externo, como se muestra en el siguiente
diagrama.
4
Una señal PWM con Arduino puede utilizarse para generar una salida
analógica tomando su valor promedio. Esto no es válido para todas las aplicaciones,
sin embargo, es perfectamente viable para muchos casos comunes como el control
de la iluminación de un LED. Cuando utilizamos una señal PWM con Arduino para
este fin, el LED se enciende durante el ciclo de trabajo y se apaga durante el resto
del periodo. Cuando la señal está en HIGH el LED está encendido y cuando está en
LOW se apaga.
Esto sucede a mucha velocidad. La frecuencia de una señal PWM con
Arduino es de 490 Hz, es decir que se encenderá y apagará 490 veces en un
segundo. El ojo humano es incapaz de detectar estos cambios tan rápidos. El efecto
percibido es que, en las prácticas que lo tengan, el LED brillará con menor
intensidad, aunque en realidad se está apagando y encendiendo muy rápido. Al
variar el ciclo de trabajo, se percibe con un aumento o disminución del brillo del LED.
5
Desarrollo
Práctica 5
Esta práctica generara una señal PWM y esta ira cambiando según la condición
de los push buttons correspondientes a diferentes frecuencias como son 100, 250,
500 y 1000Hz correspondientemente, al presionar el push button o interruptor
variara la frecuencia. La señal es mostrada mediante un led en físico, además de
mostrarse en el puerto serial, y mediante un osciloscopio digital en simulación del
circuito.
Para el desarrollo de la presente práctica se llevan a cabo los pasos requeridos
tanto en programación como en conexión para establecer las entradas digitales 2,
3, 4, 5, que llevaran las diferentes frecuencias en sus pulsaciones del respectivo
botón. La entrada analógica A0 igualmente es establecida para llevar la resistencia
variable que controlara el circuito. Además, la salida estará programada para ser el
pin 9.
6
unsigned int frec = 100;
unsigned int timealto = 0, timebajo = 0, ciclo = 0;
int valpot;
Se establece el modo de cada pin en este caso los pines 2,3,4,5 son entradas
void setup() {
Serial.begin(115200);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
}
Estableceremos las condiciones para que la variable de frec correspondiente
a la frecuencia pueda verse afectada al pulsar los botones e inicializaremos el valor
del pin 9 a la salida como 255. La frecuencia se calculará como 1 × 10 6 / frec lo que
dará el paso del ciclo PWM y en base a este valor y el valor del potenciómetro leído
en el pin A0 veremos el cambio en la onda generada por pulsos obteniendo el tiempo
en que estará en estado alto y bajo.
void loop() {
analogWrite(9, 255);
if(digitalRead(2)==HIGH){
frec = 100;
}
if(digitalRead(3)==HIGH){
frec = 250;
}
if(digitalRead(4)==HIGH){
frec = 500;
}
if(digitalRead(5)==HIGH){
frec = 1000;
}
ciclo = 1000000/frec;
valpot = analogRead(A0);
timebajo = ciclo-timealto;
digitalWrite(9, HIGH);
delayMicroseconds(timealto);
digitalWrite(9, LOW);
delayMicroseconds(timebajo);
7
Serial.println(timealto);
}
100 Hz 250 Hz
500 Hz 1000 Hz
Práctica 6
El objetivo principal de la practica numero 6 es demostrar el funcionamiento
de los puertos PWM de la placa Arduino, cambiando solo el ciclo de trabajo sin
necesidad de cambiar la frecuencia de dichos puertos. La frecuencia se estableció
en 500Hz y se emplearon potenciómetros para variar el ciclo de trabajo.
#define LED1 3
#define LED2 4
#define LED3 5
#define POT1 A0
#define POT2 A1
#define POT3 A2
2. Después se configuraron dichos puertos como entradas o salidas según
correspondiera. También se inició el puerto serial.
void setup()
{
Serial.begin(9600);
pinMode(POT1,INPUT);
pinMode(LED1,OUTPUT);
pinMode(POT2,INPUT);
pinMode(LED2,OUTPUT);
pinMode(POT3,INPUT);
pinMode(LED3,OUTPUT);
}
3. A continuación, se leen los valores de entrada de los potenciómetros y se
guardan en la variable “valor” de cada uno de los potenciómetros.
void loop()
{
int valor1 = analogRead(POT1);
int valor2 = analogRead(POT2);
int valor3 = analogRead(POT3);
analogWrite(LED1,mapeo1);
analogWrite(LED2,mapeo2);
analogWrite(LED3,mapeo3);
delay(1000);
Práctica 7
Esta práctica tiene como objetivo principal controlar la velocidad de un motor
de corriente continua por medio de la modulación PWM generada por el
microcontrolador ATMEGA que posee Arduino. La velocidad será ordenada
físicamente mediante un potenciómetro. Además, la frecuencia de la onda cuadrada
será controlada mediante 4 botones, los cuales seleccionaran la frecuencia de 100
Hz, 200 Hz, 500 Hz, y 1000 Hz respectivamente.
Para ello se ha realizado la conexión de un Arduino UNO con los respectivos
componentes necesarios:
10
Figura 5 - Esquemático de práctica 7.
11
Figura 6 - Código práctica 7.
12
control de motores es un método eficaz debido a su relativa sencillez y compacidad
y gran capacidad de funcionamiento.
Además, es verdadera el aislamiento que se genera al utilizar un
optoacoplador para separar eléctricamente la parte de gran potencia relativa del
motor de la parte del microcontrolador.
El desarrollo del algoritmo nos permite evaluar constantemente las
condiciones de los botones externos para realizar la decisión de utilizar diferentes
frecuencias.
Práctica 8
Sin utilizar librerías, creamos una señal de PWM para controlar la posición
de un servomotor mediante una PWM. La señal generada se visualiza en un
osciloscopio y en el Serial Plotter del IDE de Arduino.
13
Algunos de los valores obtenidos y gráficas obtenidas durante el proceso fueron:
14
En cuanto al programa utilizado en esta práctica, fue el siguiente:
Se comprobó el funcionamiento
esperado del servomotor con respecto a un
PWM introducido. La señal de onda
cuadrada, fue variando su magnitud de
acuerdo a las manipulaciones del
potenciómetro y conforme aumentaba la
resistencia, los grados de avance del
Figura 10 - Gráfica de comportamiento de un
servomotor disminuían. La función map (),
servomotor.
transformó nuestra señal con valores de 0 a
1023, a una señal dentro del rango establecido en las especificaciones del servo
que se utilizó. Los cálculos determinados de acuerdo a las especificaciones se
basaron en que, en su ciclo normal, el servomotor tarda en completar los 180
15
grados, 2ms (de ahí el 2000) de la fórmula. Después, también obtuvimos el dato
que para empezar su ciclo, forzosamente tiene que pasar 1ms. Es por eso que en
nuestro programa, se tomó en cuenta tanto el tiempo en el servo recorría un grado,
como las condiciones iniciales (Octopart, 2019).
Práctica 9
Para esta práctica, se realizó lo mismo que en la pasada, pero ahora se tuvo
que controlar a 3 servomotores.
Simulando esta práctica, se encontró que los resultados eran menos precisos
que al realizarla solo con un servomotor, esto debido a la configuración del Arduino
y su interfaz que tiende a llevar a cabo las instrucciones de manera consecutiva y
no simultáneamente.
Se realizó el mismo procedimiento que en la práctica 8, pero ahora con 3
servomotores. Se tuvo especial cuidado de seleccionar los puertos digitales de
PWM que tuvieran las mismas frecuencias, para obtener homogeneidad en las
señales.
16
Figura 12 - Resultados de la práctica 9.
El programa utilizado para esta práctica es parecido al anterior, pero con el triple de
variables.
17
Figura 13 - Programa de práctica 9.
18
En esta práctica, nuevamente se comprobó el funcionamiento de los
servomotores al recibir una señal de PWM.
El detalle que se pudo observar, y que se mencionó anteriormente, fue la falla
de los servomotores en cuanto a continuidad, ya que la interfaz de Arduino no
permite operaciones simultaneas, solo consecutivas.
Práctica 10
Este circuito llevará como objetivo el girar un actuador, en este caso un
servomotor, por medio de pulsos PWM generados por el microcontrolador Atmel
ATmega328P, a un determinado ángulo condicionado este por el giro del
potenciómetro conectado a la entrada analógica A0.
Para poder llevar a cabo dicho circuito simplemente se conectará la salida
PWM al pin 7 que llevará a su vez la conexión del pin de señal del servomotor.
19
En este caso simplemente configuraremos el pin 7 en modo de entrada donde
ira conectado el servomotor.
void setup() {
pinMode (7, OUTPUT);
Serial.begin(115200);
}
void loop() {
potval = analogRead(A0);
digitalWrite (7,LOW);
delayMicroseconds(timeoff);
Serial.println(timeon);
}
}
20
Figura 16 - Salidas de PWM en serial plotter 2.
21
Conclusiones
Bracho Garduño, Adley
El PWM es un método eficaz y útil para generar una onda cuadrada para el
control de un motor de corriente directa, un servomotor o bien cualquier otra
aplicación de variación de potencia o señal. Un microcontrolador nos permite echar
mano de su temporizador para realizar varias instrucciones ordenadamente y con
el uso de su retraso, poder generar las pulsaciones deseadas. Además de la
generación de pulsos, podemos acceder a su capacidad de cálculos, generación de
señales y lectura de datos para distintas aplicaciones que nos permiten solucionar
una gran variedad de problemas.
Así también, es de gran seguridad utilizar un optoacoplador para aislar
eficazmente la parte de mayor potencia de la parte del circuito de control.
22
en la intensidad de brillo emitida por un LED, así como la variación de velocidad de
un motor de DC y el control de movimiento de un servo motor. Todas estas
aplicaciones funcionan de una manera muy similar. 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.
23
Referencias
Castillo Martínez, M. A., & Carvajal Gamez, B. E. (15 de Mayo de 2018). Efectos en la
resolución de servomotores con interfaz PWM por la generación de señales en
microcontroladores ISSN 1870-4069. Obtenido de IPN:
https://www.rcs.cic.ipn.mx/2018_147_7/Efectos%20en%20la%20resolucion%20de
%20servomotores%20con%20interfaz%20PWM%20por%20la%20generacion%20
de%20senales.pdf
Herrera Lozada, J. C. (2010). Teoría PWM (Modulación por Ancho de Pulsos). Obtenido de
IPN CIDETEC: http://www.embebidos-
cidetec.com.mx/profesores/jcrls/doctos/aplic_cidetec.pdf
24