Memoria Control de Motor
-
Upload
ericsoncruz -
Category
Documents
-
view
32 -
download
1
Transcript of Memoria Control de Motor
Control de velocidad y sentido de un
Motor-DC mediante PC
JORGE CASACUBERTA GARCIA
08-07-2010
ÍNDICE
1- OBJETIVO DEL PROYECTO
2- CONCEPTOS IMPORTANTES
i. PIC 18F 2550
ii. Comunicación USB
iii. PWM
iv. Puente-H
3- FIRMWARE
4- APLICACIÓN PC
5- DISEÑO ESQUEMÁTICO
6- SIMULACIÓN EN PROTEUS
i. Datos a tener en cuenta
ii. Puesta en marcha
iii. Uso del osciloscopio en Proteus
7- BIBLIOGRAFIA
1 OBJETIVO DEL PROYECTO
Queremos diseñar un control de velocidad y sentido para un motor que tenemos instalado en
un telescopio que tiene incorporada una webcam, de este modo queremos crear un
autoenfoque. Este proyecto solo incluye el control del motor.
Antes de saber si la imagen está enfocada debemos de comprobarlo mediante algoritmos de
análisis de imagen. Por este motivo el control de motor tiene que ser dirigido desde un
computador donde se analice la imagen.
Teniendo estas condiciones en cuenta, nos dimos cuenta que hacía falta una comunicación
entre PCMOTOR, vamos a usar el microcontrolador PIC 18F 2550 (de MICROCHIP que ya
usamos en otra asignatura) de puente para crear esta comunicación mediante USB entre
PC PIC y el microcontrolador se encargará de mandar las señales adecuadas al motor.
2 CONCEPTOS IMPORTANTES
Antes de hacer el montaje debemos de comprender que necesitamos y porque motivo.
I. PIC 18F 2550
En las asignaturas SES y PEI hemos trabajado con el microcontrolador de la marca MICROCHIP.
La familia 18 de MICROCHIP tiene la capacidad de Trabajar con USB, convertir señales
analógicas en digitales, generar señales PWM, entre otras. Por lo tanto es más que suficiente
para lo que necesitamos.
Para más información mirar el enlace, donde detalla el trabajo realizado en las asignaturas.
Tenemos disponible el DATASHEET del Pic y explicaciones de cómo debemos utilizarlo.
http://personales.alumno.upv.es/jorcaga1/pei/trabajofase1.html
II. Comunicación USB
Trabaja como interfaz para transmisión de datos y distribución de energía, que ha sido
introducida en el mercado de PC´s y periféricos para mejorar las lentas interfaces serie (RS-
232) y paralelo. Esta interfaz de 4 hilos, 12 Mbps y "plug and play", distribuye 5V para
alimentación, transmite datos y está siendo adoptada rápidamente por la industria
informática.
Es un bus basado en el paso de un testigo, semejante a otros buses como los de las redes
locales en anillo con paso de testigo y las redes FDDI. El controlador USB distribuye testigos por
el bus. El dispositivo cuya dirección coincide con la que porta el testigo responde aceptando o
enviando datos al controlador. Este también gestiona la distribución de energía a los
periféricos que lo requieran.
Emplea una topología de estrellas apiladas que permite el funcionamiento simultáneo de 127
dispositivos a la vez. En la raíz o vértice de las capas, está el controlador anfitrión o host que
controla todo el tráfico que circula por el bus. Esta topología permite a muchos dispositivos
conectarse a un único bus lógico sin que los dispositivos que se encuentran más abajo en la
pirámide sufran retardo. A diferencia de otras arquitecturas, USB no es un bus de
almacenamiento y envío, de forma que no se produce retardo en el envío de un paquete de
datos hacia capas inferiores.
Controlador
Reside dentro del PC y es responsable de las comunicaciones entre los periféricos USB y la CPU
del PC. Es también responsable de la admisión de los periféricos dentro del bus, tanto si se
detecta una conexión como una desconexión. Para cada periférico añadido, el controlador
determina su tipo y le asigna una dirección lógica para utilizarla siempre en las comunicaciones
con el mismo. Si se producen errores durante la conexión, el controlador lo comunica a la CPU,
que, a su vez, lo transmite al usuario. Una vez se ha producido la conexión correctamente, el
controlador asigna al periférico los recursos del sistema que éste precise para su
funcionamiento.
El controlador también es responsable del control de flujo de datos entre el periférico y la CPU.
En nuestro caso vamos a trabajar con USB CDC que se trata de virtualizar la comunicación
mediante un puerto COM virtual.
III.PWM
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 sinusoidal 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. La principal
desventaja que presentan los circuitos PWM es la posibilidad de que haya interferencias
generadas por radiofrecuencia. Éstas pueden minimizarse ubicando el controlador cerca de la
carga y realizando un filtrado de la fuente de alimentación.
IV. Puente-H
Un Puente H o Puente en H es un circuito electrónico que permite a un motor eléctrico DC
girar en ambos sentidos, avance y retroceso. Son ampliamente usados en robótica y como
convertidores de potencia. Los puentes H están disponibles como circuitos integrados, pero
también pueden construirse a partir de componentes discretos.
El término "puente H" proviene de la típica representación gráfica del circuito. Un puente H se
construye con 4 interruptores (mecánicos o mediante transistores). Cuando los interruptores
Q1 y SQ4 (ver figura) están cerrados (y Q2 y Q3 abiertos) se aplica una tensión positiva en el
motor, haciéndolo girar en un sentido. Abriendo los interruptores S1 y S4 (y cerrando S2 y S3),
el voltaje se invierte, permitiendo el giro en sentido inverso del motor.
3 FIRMWARE En nuestro proyecto vamos a utilizar el MPLAB. MPLAB es una herramienta para escribir y
desarrollar código en lenguaje ensamblador para los microcontroladores PIC. MPLAB incorpora
todas las herramientas necesarias para la realización de cualquier proyecto, ya que además de
un editor de textos cuenta con un simulado en el que se puede ejecutar el código paso a paso
para ver así su evolución y el estado en el que se encuentran sus registros en cada momento.
Es un software gratuito que se encuentra disponible en la página de Microchip, la versión
actual (al momento de escribir estas palabras) es la 7.51.
Para más información consultar:
http://personales.alumno.upv.es/jorcaga1/pei/configuracionMplab.html
Para facilitar la tarea usaremos librerías de USB y PWM ya implementadas y preparadas para trabajar en los PIC 18F. De esta forma evitaremos trabajar con registros internos del PIC y conseguiremos un código más intuitivo, sencillo y entendible. El código lo podemos dividir en 3 partes: 1ª inicialización de librerías y opciones del dispositivo: Siempre debemos de configurar el PIC de modo que sepa en que modo está trabajando y que a velocidad (además de otras configuraciones). En este caso trabajaremos a la velocidad máxima que no permite para conseguir una buena velocidad con el USB. El USB lo conectamos mediante un puerto COM virtual. #include<18f2550.h> #fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN // Fuses utilizados: /* HSPLL: utilizamos un cristal HS de alta velocidad, en conjunto con el PLL para generar los 48Mhz. NOMCLR: Utilizamos reset por software, y dejamos el pin 1 del micro como entrada/salida digital. NOWDT: No utilizamos el perro guardián. NOPROTECT: Desactivamos la protección de código. NOLVP: Desactivamos la programación a bajo voltaje. NODEBUG: No entramos al modo debug. USBDIV: significa que el clock del usb se tomará del PLL/2 = 96Mhz/2 = 48Mhz. PLL5: significa que el PLL prescaler dividirá en 5 la frecuencia del cristal. para HS = 20Mhz/5 = 4Mhz. CPUDIV1: El PLL postscaler decide la división en 2 de la frecuencia de salida del PLL de 96MHZ, si queremos 48MHZ, lo dejamos como está. VREGEN: habilita el regulador de 3.3 volts que usa el módulo USB */ #use delay(clock=48000000) // Frecuencia máxima de trabajo. #include "usb_cdc.h" // Descripción de funciones del USB. #include "usb_desc_cdc.h" // Descriptores del dispositivo USB.
2ª inicialización de variables e inicio del dispositivo: Configuramos las salidas B del PIC para que envíe datos al PC, y el pin C0 para mandar la señal PWM y el C1 para enviar el sentido al MOTOR-DC. TA es el tiempo en Alto que va a estar la señal PWM y TC es el tiempo total de ciclo. #byte LATC = 0xf8B // LATC como byte #bit PWM = LATC.0 // LATC0 como bit #bit DIREC = LATC.1 // LARC1 como bit #byte PORTB = 0xf81 // PORTB como byte void main() { unsigned char datoIN; // Dato que llega por la USART
unsigned char aux=20; // Limite para el control de sentido del motor unsigned char TA=10,TC=20; //Tiempo en alto y tiempo de ciclo del PWM usb_cdc_init(); // Configuramos al puerto virtual. usb_init(); // Inicializamos el stack USB. output_high(PIN_C0); output_low(PIN_C1);
3ª código ejecutable: Es un bucle que se mantiene mientras siga conectado. Lee los datos del registro USB y actualizamos la variable TA para que cambie la señal PWM mediante los delays. while(!usb_cdc_connected()) {} // espera a detectar una transmisión de la PC (Set_Line_Coding). output_high(PIN_C1); output_low(PIN_C0); do{ usb_task(); if (usb_enumerated()){ // Espera a que el dispositivo sea enumerado por el host. if(usb_cdc_kbhit()){ // En espera de nuevos caracteres en el buffer de recepción. datoIN=usb_cdc_getc(); // Lee lo que llego al buffer if (datoIN=='?') // Prueba comunicación printf(usb_cdc_putc,"OK"); else{ if (datoIN > 20){ // como la barra de la aplicación va de 0 a 40 usamos de 0 a 20 en una dirección y de 21 a 40 la otra. datoIN = datoIN - aux; // comprobamos en qué dirección debe de ir el motor de modificamos el dato si conviene. DIREC = 1; } else {DIREC = 0;} TA=datoIN; // Actualiza PWM } } PWM = 1; // PWM Sube delay_ms(TA); // Tiempo en alto PWM = 0; // PWM Baja delay_ms(TC-TA); // Tiempo en bajo TC = TA + TB usb_cdc_putc(PORTB); // Lee PORTB y lo envía por la USART } }while (TRUE); // bucle infinito. }
4 APLICACIÓN PC Con el fin de controlar el motor desde un computador, hemos creado una interfaz para hacer
pruebas con el motor antes de añadir el proyecto al autoenfoque. Es una sencilla aplicación
creada con visual basic 2008.
El código consta de 4 partes:
1º Carga programa (se podría cambiar por otro botón)
Consigue los nombres de los puertos COM, ya que al trabajar con USB_ CDC virtualizamos el
bus como un puerto COM.
Imports System.IO Public Class frmMain Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim coms() As String = Ports.SerialPort.GetPortNames cbCOM.DataSource = coms End Sub
2º Barra de desplazamiento
Cuando el dispositivo está conectado, manda el valor que tiene en la barra mediante USB. De
la parte izquierda hasta el medio, el motor funciona en una dirección. De la parte derecha al
medio en la otra dirección.
Private Sub tbPWM_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbPWM.Scroll If serial.IsOpen Then serial.Write(Chr(Me.tbPWM.Value)) End If End Sub
3º Botón conectar
Comprueba si el dispositivo está conectado e intenta conectarse.
Private Sub btnConectar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConectar.Click Try If btnConectar.Text = "Conectar" Then btnConectar.Text = "Desconectar" If Not serial.IsOpen Then serial.PortName = cbCOM.Text serial.Open() cbCOM.Enabled = False tmrDato.Enabled = True End If Else btnConectar.Text = "Conectar" If serial.IsOpen Then serial.Close() cbCOM.Enabled = True tmrDato.Enabled = False End If End If Catch ex As Exception MessageBox.Show("Error No: " & Err.Number & vbNewLine & Err.Description, "Error en la conexion", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub
4º Valor del puerto B
Muestra los datos que recibe el PC desde los pines B del PIC.
Private Sub tmrDato_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrDato.Tick If serial.IsOpen AndAlso serial.BytesToRead > 0 Then lblPORTB.Text = "Valor del puerto B:" & vbNewLine & serial.ReadByte End If End Sub Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles label1.Click End Sub End Class
5 DISEÑO ESQUEMÁTICO Utilizamos el PROTEUS para diseñar y simular el hardware, para más información acerca del
programa revisaremos los enlaces a la web de PEI.
http://personales.alumno.upv.es/jorcaga1/pei/trabajofase1.html
http://personales.alumno.upv.es/jorcaga1/pei/nuevoDiseno.html
Esta es la vista preliminar del diseño. Podemos apreciar 5 partes fundamentales:
1 El PIC 18F 2550
2 El Cristal da la señal de reloj
3 El conector USB (podemos conectarlo y desconéctalo como si fuera un pincho real)
4 Puertas NAND que nos ayudaran a la selección del sentido del motor
5 Puente en H
En el Proteus los microcontroladores tiene patillas ocultas como la VCC o GRN por están
alimentadas por defecto y no hace falta poner un Cristal ya que lo tienen internamente. De
todos modos en el esquema hemos lo hemos puesto también por si queremos montar el
dispositivo. El reloj se uniría a los pines 9 y 10 del PIC.
Es el esquema del cristal. 2 condensadores de 15pF (22pF también valdría) y un cristal de
20MHZ.
El conector USB tiene 2 pines para alimentación (VCC y GND) y los otros 2 se utilizan para
transferir datos. Está alimentado a 5v
Las puertas lógicas son CMOS 4011 NAND. Y los transistores que forman el puente en H son
IRF9530 (PNP) para Q2 y Q5, IRF630 (NPN) para Q3 y Q4. El motor es un MOTOR-DC activo
simple a 5V, 10 revoluciones y una resistencia de 100hms.
6 SIMULACIÓN EN PROTEUS Antes de simular debemos seguir los pasos que tenemos en el enlace (pero cargando el .Hex
de este proyecto)
http://personales.alumno.upv.es/jorcaga1/pei/simulacionProteus.html
I. Datos a tener en cuenta
Cuando conectamos por primera vez el dispositivo virtual tendremos que instalar el driver (que
viene con los archivos).
Para que funcione todo el proyecto hace falta trabajar desde Windows XP. Hemos intentado
trabajar con Windows Vista / 7 pero no podemos porque la conexión USB virtual que general
el Proteus da problemas. Hemos buscado un driver para 64bits y tampoco, ni si quiera con el
modo de compatibilidad que nos ofrece el Windows 7 nos permitía conectar adecuadamente.
Antes de encender nuestra aplicación de PC, debemos simular en Proteus y que detecte el
dispositivo. La aplicación busca en los puertos cuando se enciende, y da problemas si se
detecta después de iniciarla.
Si queremos volver a compilar el .hex debemos de tener un plugin para MPLAB para poder
compilar en CCS. Ya que la librerías de USB_CDC están en esté código. Si encontramos unas en
C18 serian fáciles de cambiar.
II. Puesta en marcha
Como hemos comentado antes, el orden de puesta en marcha seria: comenzar con la
simulación en Proteus, instalar el driver cuando se detecte el dispositivo (solo hay que hacerlo
la primera vez), encender la aplicación una vez reconocido el dispositivo, pulsar el botón
conectar y empezar a mover la barra para ver el resultado.
III. Uso del osciloscopio en Proteus
El Proteus dispone de varios dispositivos para visualizar como trabajan las señales. En este caso vamos a visualizar la señal PWM con un osciloscopio que debemos conectar de la siguiente forma. Pin A salida PWM Pin B salida U1 B Pin C salida U2 D Pin D salida U2 A
Una vez comencemos la simulación saldrá un ventana simulando un osciloscopio y tendremos una visión más clara del manejo del motor. Si no nos sale la ventana debemos de pulsar Debuj-> 3.Digital oscilloscope durante la simulación.
7 BIBLIOGRAFIA http://es.wikipedia.org/wiki/Modulaci%C3%B3n_por_ancho_de_pulsos http://es.wikipedia.org/wiki/Puente_H_%28electr%C3%B3nica%29 http://personales.alumno.upv.es/jorcaga1/index.html http://www.codeproject.com/KB/cs/USB_HID.aspx http://dynamoelectronics.multiforos.es/viewtopic.php?t=12 http://shibuvarkala.blogspot.com/2009/02/pulse-width-modulation-or-pwm-tutorial.html http://ingenet.com.mx/mcpiebot/2010/01/15/practicas-con-puerto-usb-con-pic-18f2550/ http://www.ccsinfo.com/downloads.php