Está en la página 1de 25

INSTITUTO TECNOLÓGICO DE DURANGO

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

Durango, Dgo. 12 de diciembre 2021


Índice
Introducción ............................................................................................................. 3

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

Bracho Garduño, Adley ..................................................................................... 22

Ramos Galarza, José Ramos ............................................................................ 22

Díaz Gámiz, Erick Benjamín .............................................................................. 22

Torres Salazar, Darcy Gabrielle ......................................................................... 23

Referencias ........................................................................................................... 24

Índice de figuras
Figura 1 - Diagrama de un servomotor. ................................................................... 4

Figura 2 - Esquema de práctica 5. .......................................................................... 6

Figura 3 - PWM cambiando de frecuencias............................................................. 8

Figura 4 - Esquema de práctica 6. .......................................................................... 8

Figura 5 - Esquemático de práctica 7. ................................................................... 11

1
Figura 6 - Código práctica 7. ................................................................................. 12

Figura 7 - Esquema práctica 8. ............................................................................. 13

Figura 8 - Resultados de la práctica 8. .................................................................. 14

Figura 9 - Programa de la práctica 8. .................................................................... 15

Figura 10 - Gráfica de comportamiento de un servomotor. ................................... 15

Figura 11 - Esquema de práctica 9. ...................................................................... 16

Figura 12 - Resultados de la práctica 9. ................................................................ 17

Figura 13 - Programa de práctica 9. ...................................................................... 18

Figura 14 - Esquema de práctica 10. .................................................................... 19

Figura 15 - Salidas de PWM en serial plotter 1. .................................................... 20

Figura 16 - Salidas de PWM en serial plotter 2. .................................................... 21

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.

Figura 1 - Diagrama de un servomotor.

Entre la amplia gama de servomotores nos podemos encontrar con aquellos


cuya interfaz embebida es controlada mediante modulación de ancho de pulso
(PWM) debido a su costo reducido en comparación de aquellas interfaces mas
avanzadas. La señal PWM debe cumplir una seria de parámetros como son los
parámetros de frecuencia de funcionamiento fPWM, ancho de pulso PW operativo,
tiempo muerto TD, tiempo central TC y ángulo de operación θ (Castillo Martínez &
Carvajal Gamez, 2018).

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.

Figura 2 - Esquema de práctica 5.

Para lograr que el programa haga lo deseado necesitaremos establecer la


frecuencia a la que trabajara el PWM para poder cambiarla después según los
interruptores y demás valores que se desarrollaran más adelante en el programa.

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);

timealto = map(valpot, 0, 1023, 0, ciclo);

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

Figura 3 - PWM cambiando de frecuencias.

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.

Figura 4 - Esquema de práctica 6.

La imagen anterior muestra el diagrama eléctrico del circuito de práctica. Se


emplearon los puertos analógicos A0, A1 y A2 como entrada para los
potenciómetros y se emplearon 2 métodos para mostrar la salida PWM. Se
8
emplearon los puertos digitales 3, 4 y 5 como salida empleando una serie de LED´s
que aumentaran su brillo conforme aumente el ciclo de trabajo de la señal PWM. El
segundo método es mediante el puerto serial, mostrar los valores de entrada de los
potenciómetros (0 – 1023) y los valores arrojados por los puertos PWM (0-255).
El código empleado para realizar esta práctica es la siguiente:
1. Primero se definieron todos los puertos de entrada y salida que se emplearon
a lo largo del código.

#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);

4. Después los valores se mapean y se guardan en la variable “mapeo” para


cada uno de los potenciómetros.

int mapeo1 = map(valor1,0,1023,0,255);


int mapeo2 = map(valor2,0,1023,0,255);
int mapeo3 = map(valor3,0,1023,0,255);
9
5. Posteriormente se imprime en el puerto serial cada uno de los valores
generados por el potenciómetro en las entradas analógicas, así como los
valores de salida generados por los puertos PWM.

Serial.print("Valor POT 1: ");


Serial.print(valor1);
Serial.print("| Valor PWM 1: ");
Serial.println(mapeo1);
Serial.print("Valor POT 2: ");
Serial.print(valor2);
Serial.print("| Valor PWM 2: ");
Serial.println(mapeo2);
Serial.print("Valor POT 3: ");
Serial.print(valor3);
Serial.print("| Valor PWM 3: ");
Serial.println(mapeo3);
6. Por último se imprimen de forma analógica los mismos valores de salida
PWM en los LED´s los cuales atenuaran o aumentaran en función de los
valores de entrada de los potenciómetros, y se establece un delay para
retardar la impresión de dichos valores.

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.

Para la conexión de las entradas digitales de los botones se utilizaron los


puertos digitales 2, 3, 4 y 5 para las frecuencias respectivamente. La salida del PWM
se conectó en el puerto digital 6. Y la entrada analógica de la señal del
potenciómetro se conectó a la entrada A0.
Así mismo, la escritura del programa en el lenguaje C++, lenguaje de
programación para Arduino, se desarrolló de la siguiente manera:

11
Figura 6 - Código práctica 7.

Se puede afirmar que un PWM permite regular la velocidad de un motor de


corriente continua debido a la regulación de potencia que se le suministra al
componente. El utilizar un microcontrolador para la generación de un PWM para el

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.

Figura 7 - Esquema práctica 8.

Al simular este circuito, pudimos observar el comportamiento de un


servomotor, cuando se le manipula con una señal de PWM. Conseguimos que el
servo se posicionara de acuerdo a la señal obtenida del potenciómetro.
Como era de esperarse, la posición del servomotor, cambiaba cada que
nosotros movíamos la perilla del potenciómetro.

13
Algunos de los valores obtenidos y gráficas obtenidas durante el proceso fueron:

Figura 8 - Resultados de la práctica 8.

14
En cuanto al programa utilizado en esta práctica, fue el siguiente:

Figura 9 - Programa de la práctica 8.

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.

Figura 11 - Esquema de práctica 9.

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.

Figura 14 - Esquema de práctica 10.

De igual manera se desarrollará el programa en C para el funcionamiento de


dicho circuito. Requeriremos algunos de los términos que ya hemos visto
anteriormente como pueden ser la frecuencia, el tiempo en alto y en bajo y ahora
además controlaremos el ángulo.
float timeon=0, potval, timeoff;
int Frecuencia;
unsigned int angulo;

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);
}

Estableceremos el valor del potenciómetro como la lectura analógica del pin


correspondiente, en este caso A0, con este parámetro calcularemos el tiempo que
el pwm permanecerá en alto o en bajo, vendrán dados por (2000/180) por el angulo
+ 1000 y 20000-timeon correspondientemente. Y escribiremos el resultado a la
salida del servo para poder cambiar su posición como se muestra en las figuras.

void loop() {
potval = analogRead(A0);

angulo = map(potval, 0, 1023, 0, 179);


timeon = (2000/180)*(angulo)+1000;
timeoff = 20000-timeon;

for (Frecuencia = 0; Frecuencia < 50 ; Frecuencia++){


digitalWrite (7,HIGH);
delayMicroseconds(timeon);

digitalWrite (7,LOW);
delayMicroseconds(timeoff);
Serial.println(timeon);

}
}

Figura 15 - Salidas de PWM en serial plotter 1.

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.

Ramos Galarza, José Ramos


Este tipo de señales pueden llegar a ser muy útiles en ciertos tipos de
sistemas si son utilizadas correctamente y con las variaciones correctas. El uso
incorrecto en sistemas integrados puede llegar a resultar en una avería o mal uso
de los periféricos de la aplicación. El diseño debe ser bien establecido no sin antes
tomar en consideración diferentes cambios que pueden ocasionar los fenómenos
físicos, ya sean simples variaciones en los timers embebidos en los sistemas de
actuadores, como el servomotor, o la potencia con la que se manejara el uso del
microcontrolador. Si se toma todo esto en cuenta termina siendo una buena
aplicación para cualquier tipo de sistema donde se requiera aplicar variación
controlada polarmente donde los servomotores pueden ser de perfecta aplicación.
Siendo como anteriormente se mencionó uno de los actuadores más usados para
aplicaciones de robótica básica.

Díaz Gámiz, Erick Benjamín


Las señales de tipo PWM tienen un gran número de aplicaciones, de las
cuales ya se han explorado algunas con la práctica anterior, como lo son la variación

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.

Torres Salazar, Darcy Gabrielle


Las señales de PWM son sumamente útiles para controlar la cantidad de
energía que se envía a una carga, es una técnica utilizada para regular la velocidad
de giro de los motores (como lo realizado en esta práctica), regulación de intensidad
luminosa, controles de elementos termoeléctricos o controlar fuentes conmutadas
entre otros usos.
Una vez más, comprobamos la importancia de verificar los datos técnicos de
los componentes que utilizamos, ya que no todos los servomotores son iguales y
varios de los cálculos realizados se basaron en números específicos del modelo
escogido.

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

García, N. M., & Valdés, P. M. (2019). EVALUACIÓN POR SIMULACIÓN EN PROTEUSDE


SALIDAS PWM DE ARDUINO UNO. Revista Telemática, Vol. 18, 46-54. Obtenido
de https://revistatelematica.cujae.edu.cu/index.php/tele/article/view/350/326

González, V. R. (2002). platea. Obtenido de servomotores:


http://platea.pntic.mec.es/vgonzale/cyr_0204/ctrl_rob/robotica/sistema/motores_ser
vo.htm

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

Octopart. (2019). Micro Servo. Obtenido de LTC7804:


http://www.datasheet.es/PDF/791970/SG90-pdf.html

24

También podría gustarte