LABORATORIO DE CONTROL CON MICROPROSESADORES
Gr3
Practica 5: Motores DC y servos Gabriel Estupinan Preciado, Escuela Politécnica Nacional (EPN), Quito - Ecuador
Resumen – Resumen – En este artículo se presentara el manejo y control de motores DC y servomotores, por medio medio de señales pwm , ya que estas nos permiten controlar la velocidad y el Angulo de los motores, se manejara desde labview controlando los parámetros del motor DC que son velocidad y sentido de giro del motor, mientras que del servomotor solo se visualizara el angulo de giro. Este trabajo fue realizado en lenguaje C, LabView y probado en Proteus. Como resultado se observa la información obtenida del motor en el LCD y en el HDMI.
Fig. 2: Circuito de control del motor
I. CONSULTA A. Consultar el funcionamiento de los motores DC para el control de velocidad y el cambio de sentido de giro
Si se recorta la CC 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. [3]
Fig. 3: Control de giro de motor DC. [4] B. Consultar el funcionamiento de los servomotores servomotores y las características características de un servomotor comercial
Es un motor eléctrico que se puede controlar tanto la velocidad como la posición del eje que gira. Estos son capaces de girar hasta 180° hacia la izquierda o derecha
Fig. 1: Velocidad de giro de motor DC. [3]
Para controlar el sentido de giro del motor se hace uso de un puente H usando cuatro transistores los cuales se comportan como interruptores y dependiendo que transistores conducen y cuales no cambian la polarización del motor y el sentido sentido de giro. [4] [ 4]
El mecanismo consiste en programar el timer con el ancho del pulso (el período de la señal) y al comparador con el valor de duración del pulso a nivel alto. Cuando se produce una interrupción de overflow del timer, la subrutina de interrupción debe poner la señal PWM a nivel alto y cuando se produzca la interrupción del comparador, ésta debe poner la señal PWM a nivel bajo. Para el control de posición del eje es necesario enviarle continuamente el pulso correspondiente. De este modo, si existe alguna fuerza que le obligue a abandonar esta posición, intentará resistirse. Si se deja de enviar pulsos (o el intervalo entre pulsos es mayor que el máximo) entonces el servo perderá fuerza y dejará de intentar mantener su posición, de modo que cualquier fuerza externa podría desplazarlo. desplazarlo. [5]
LABORATORIO DE CONTROL CON MICROPROSESADORES
Gr3
IV. DIAGRAMA DE FLUJO
Fig. 4: Pulsos de control del servomotor. [5]
II. A NÁLISIS DE ENTRADAS, SALIDAS Y RECURSOS DEL MICROCONTROLADOR
Se requiere de: 7 pines de entrada para el control de velocidad del motor, cambio de sentido de giro del motor, detener-avanzar, y el control de ángulo del servomotor, 3 pines de salida para avisar que se el sistema está enfriando, calentando o en temperatura normal, 1 pin de salida para la alarma si la temperatura no está variando, 6 pines como salida para el LCD; uno para RS otro para E y el resto para bit de datos y 1 pin de entrada lectura y otro de salida para escritura que se utilizan para comunicación serial. Fig. 1. Diagrama de flujo de programación
Datos del servo Micro Servo SG90 •
V. ESQUEMA DEL CIRCUITO A IMPLEMENTARSE
Voltaje de operación: 4.8V(5V) Ancho de banda muerta: 10us Tiempo de operación: 1-2 ms.[7] III. JUSTIFICACIÓN DEL MICROCONTROLADOR A UTILIZAR . El microcontrolador utilizado es: ATmega 164P, debido a que este nos permite realizar la comunicación serial con el ordenador, interrupciones por cambio de estado y tres timers con dos salidas cada uno. Además, posee 32 puertos de entrada y salida los cuales son necesarios para los requerimientos del literal II.
Fig. 2. Esquema del circuito implementado. VI. TRABAJO PREPARATORIO A. Desarrollar un sistema basado en un microcontrolador que funcione de la siguiente manera •
•
Controlar la velocidad y sentido de giro de un motor DC,el control de velocidad y sentido de giro se realiza desde el microcontrolador o desde un HMI en la PC, en los dos HMI (pc) y uC se debe incluir un botón de parada de emergencia. Realizar el control de posición de un servomotor, para modificar el ángulo de posicionamiento se utilizan dos pulsadores conectados al microcontrolador, los cuales permiten modificar el ángulo en pasos de 10 grados, y mediante un tercer pulsador se da la orden para que el
LABORATORIO DE CONTROL CON MICROPROSESADORES El sistema dispone de un LCD en el que se muestra el porcentaje de velocidad del motor DC (0 a 100 %) y el ángulo del servomotor. Ambos controles tanto el del motor DC como el Servomotor debe funcionar simultáneamente con un solo microcontrolador •
Anexo 1: Programación en C Anexo2: Simulación en Proteus Anexo 3: Programación en LabView. Anexo 4: Simulación en LabView. B. Diseñar el sistema de potencia que permita controlar el motor DC, tomando en consideración las protecciones necesarias para no dañar el microcontrolador. El motor DC se les proporcionará en el laboratorio.
Para el control del motor DC se hará uso del LM298 el cual permite controlar dos motores o uno paso a paso bipolar de hasta 2A. El módulo cuenta con todos los componentes necesarios para funcionar sin necesidad de elementos adicionales, entre ellos diodos de protección y un regulador LM7805 que suministra 5V a la parte lógica del integrado L298N. Cuenta con jumpers de selección para habilitar cada una de las salidas del módulo (A y B). La salida A está conformada por OUT1 y OUT2 y la salida B por OUT3 y OUT4. Los pines de habilitación son ENA y ENB respectivamente. [6]
[6]. Electronilab. [Online]. Disponible: https://electronilab.co/tutoriales/tutorial-de-uso-driver-dual-l298n para-motores-dc-y-paso-a-paso-con-arduino/ [7]. SG90 9g Micro Servo[Online]. Disponible: http://akizukidenshi.com/download/ds/towerpro/SG90.pdf
Anexo1: #include
#include #include #include #include "lcd.h" #define F_CPU 8000000UL unsigned char velocidad_motor,giro_motor,boton_de_para_motor ,angulo,aux,velocidad_servo,porcentaje; char MSC[16]; void configurar(void); int main(void) { configurar(); /* Replace with your application code */ while (1){ porcentaje=(velocidad_motor*100)/249; lcd_clrscr(); sprintf(MSC,"VELOCIDAD= %i",porcentaje); lcd_puts(MSC); lcd_gotoxy(0,1); sprintf(MSC,"ANGULO= %i",angulo); lcd_puts(MSC); _delay_ms(200); } } void configurar(void){ lcd_init(LCD_DISP_ON); DDRD=0b00110010; PORTD=0b00001100; DDRC=0B00001100; PORTC=0B11110011; DDRB|=(1<<4); PORTB&=(1<<4); velocidad_motor=0; velocidad_servo=0;
Fig. 5: Circuito para el motor
VII. R EFERENCIAS Libros: [1]. Atmel. ATmega164P/V, DATASHEET COMPLETE. . [Online]. Disponible: http://www.atmel.com/Images/Atmel-42742ATmega164P_Datasheet.pdf [2]. Control con microprocesadores, N. Sotomayor Paginas wew : [3]. Control de motores de CC [Online]. Disponible : http://robotsargentina.com.ar/MotorCC_ControlAncho.htm [4]. Control velocidad y sentido de motor DC [Online]. Disponible: http://diymakers.es/control-velocidad-y-sentido-de-motor-dc/ [5]. Servomotores [Online]. Disponible:
Gr3
// interrupcion por cambio de estado PCMSK2=0B11110011; PCICR=0B00000100; PCIFR=0B00000000; //INTERRUPCIONES ESTERMNAS DE PARO EICRA=0b00001010; EIMSK=0b00000011; EIFR=0b00000000; //comunicacion serial UCSR0A=0b00000000; UCSR0B=0b10011000; UCSR0C=0b00000110; UBRR0=51; //TIMER 1
LABORATORIO DE CONTROL CON MICROPROSESADORES
ICR1=249; //TIMER 0 TCCR0A=0B00100011; TCCR0B=0B00001101; OCR0A=155; sei(); } ISR(PCINT2_vect){ if((PINC&(1<<0))==0){ PINC&=(1<<2); PINC|=(1<<3); giro_motor=1; } if((PINC&(1<<1))==0){ PINC&=(1<<3); PINC|=(1<<2); giro_motor=0; } if((PINC&(1<<4))==0){ if(velocidad_motor ==240){ velocidad_motor=240; }else{ velocidad_motor=velocidad_motor+24; } } if((PINC&(1<<5))==0){ if (velocidad_motor==0) { velocidad_motor=0; }else{ velocidad_motor=velocidad_motor-24; } } if((PINC&(1<<6))==0){ if(velocidad_servo==155){ velocidad_servo=155; }else{ velocidad_servo=velocidad_servo+(155/18); if (angulo==180) {angulo=180; }else{angulo=angulo+10; } } } if ((PINC&(1<<7))==0){ if (velocidad_servo==0) {velocidad_servo=0; }else{ velocidad_servo=velocidad_servo-(155/18); if (angulo==0) {angulo=0; }else{angulo=angulo-10;} } } OCR1A=velocidad_motor; } ISR(INT0_vect){ PINC&=(1<<3);
} ISR(INT1_vect){ OCR0B=velocidad_servo; } ISR(USART0_RX_vect){ aux=UDR0; if (aux==0) {// aumentar velocida if (velocidad_motor==240) { velocidad_motor=240; }else{ velocidad_motor=velocidad_motor+24; } } if (aux==1) {//disminuir velocidad if (velocidad_motor==0) {velocidad_motor=0; }else{ velocidad_motor=velocidad_motor-24; } } if (aux==2) {//giro a la izquierda PINC&=(1<<2); PINC|=(1<<3); } if (aux==3) {//giro a la derecha PINC&=(1<<3); PINC|=(1<<2); } if (aux==4) {//paro del motor PINC&=(1<<3); PINC&=(1<<2); } UDR0=porcentaje; while(!(UCSR0A &(1<
Gr3
LABORATORIO DE CONTROL CON MICROPROSESADORES
Anexo2
Fig3.: Simulación en Proteus
Anexo 3:
Gr3
LABORATORIO DE CONTROL CON MICROPROSESADORES
Fig4.: Programación en LabView
Anexo 4:
Fig5.:Simulación en LabView
Gr3