Memoria Control de Motor

14
Control de velocidad y sentido de un Motor-DC mediante PC JORGE CASACUBERTA GARCIA 08-07-2010

Transcript of Memoria Control de Motor

Page 1: Memoria Control de Motor

Control de velocidad y sentido de un

Motor-DC mediante PC

JORGE CASACUBERTA GARCIA

08-07-2010

Page 2: Memoria Control de Motor

Í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

Page 3: Memoria Control de Motor

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.

Page 4: Memoria Control de Motor

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.

Page 5: Memoria Control de Motor

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

Page 6: Memoria Control de Motor

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

Page 7: Memoria Control de Motor

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.

Page 8: Memoria Control de Motor

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

Page 9: Memoria Control de Motor

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

Page 10: Memoria Control de Motor

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.

Page 11: Memoria Control de Motor

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.

Page 12: Memoria Control de Motor

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.

Page 13: Memoria Control de Motor

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.

Page 14: Memoria Control de Motor

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