Está en la página 1de 19

Ingeniera en Automatizacin y Control Industrial Departamento de Ciencia y Tecnologa

S I S T E M A S

D I G I T A L E S

Proyecto Final de Materia

PROGRAMACIN EN C DE UN MICROCONTROLADOR MOTOROLA JK3 OBJETIVO: CONTROL DE UN MOTOR DE CC CON EJE FLEXIBLE

Alumno: Leandro Martn Pagnanini Legajo: 6558 Ao 2005

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

INDICE 1. Objetivo 2. Requerimientos 3. Datos Tcnicos 4. Desarrollo 4.1 Programacin del microcontrolador 4.2 Realizacin del Kit Motor-Encoder 4.3 Detalles del programa 5. Temas que abarca el proyecto 6. Archivos adjuntos 7. Conclusin

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

1- OBJETIVO: Aprender a programar microcontroladores Motorola jk3 en C e interactuar con componentes electrnicos asociados al microcontrolador. Con la finalidad de realizar un Driver con un microcontrolador Motorola MC68HC908JK3CP programado en C, para controlar un motor de CC (corriente continua) con un algoritmo de control, que pueda comunicarse con una PC por RS-232 para modificar dinmicamente los set point y las constantes del control de manera interactiva. Detallado: Se realizara un control de posicin y velocidad a lazo cerrado de un motor unido a travs de un eje flexible a una masa que reporta su posicin por medio de un encoder incremental. El algoritmo de control esta programado en C en un microcontrolador MC68HC908JK3CP de Motorola que lee los pulsos y sentido de giro del encoder y acta sobre el PWM y el sentido de giro del motor para posicionar la masa donde lo indique el set point. Los parmetros de control Kp, Ki, Kd para el control PID (control proporcional integral y derivativo) y el set point deseado es transmitido al microcontrolador por RS-232 por un programa realizado exclusivamente para este proyecto en Visual Basic 6.0. El microcontrolador es el encargado de obtener el error, la derivada del error y la integral del error que combinados a los parmetros antes mencionados obtendr la actuacin necesaria para llegar al set point deseado. El microcontrolador transmite a la PC la posicin real cada 1 segundo para realizar un grafico que representa la evolucin de la posicin en el tiempo. 2 - REQUERIMIENTOS Microcontrolador MC68HC908JK3CP Placa de programacin Software de programacin en C y C++: CodeWarrior Manuales del microcontrolador Motor y encoder Visual Studio 6.0 para realizar el soft de monitoreo 3 DATOS TECNICOS Microcontrolador MC68HC908JK3CP de Motorola Internal RAM 128 bytes Internal Flash 4096 bytes 1 Timer con 2 canales Max Bus Frequency 8 MHz A/D Converter 10 canales de 8 bits Pulse Width Modulators 16 bits Input Output Pins 15
3

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

Motor Alimentacin 24 V de corriente continua corriente nominal 1.4 Amper Encoder Alimentacin 5-24 V de corriente continua Corriente nominal 0.7 mA 2500 pulsos por vuelta canales A, B y Z. 4 - DESARROLLO 4.1 Programacin del microcontrolador Se comenz realizando la placa programadora para los microcontroladores Motorola JK3. Desde un comienzo se diseo el grabador propuesto en el Technical Data del microcontrolador. Este circuito fue util para transitar los primeros pasos en la programacin de este tipo de microcontroladores, sin embargo se opto por realizar un programador en circuito impreso y mas completo para poder sacar el mayor provecho posible al microcontrolador. Esquemticos: estos son lo circuitos utilizados para realizar la placa programadora utilizada para programar el microcontrolador. Esta familia de micros tiene un modulo (MON) que es el llamado modo monitor utilizado para programarlos y debagear los programas. Este modo permite la programacin de la memoria Flash y adems permite correr el programa y debagear paso a paso la aplicacin en circuito.

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

La conexin a la pc se realiza por el puerto serie a travs del protocolo RS232 y las conexiones de los pines se realizan de la siguiente manera.

Una de los requerimientos para ingresar al modo monitor es alimentar el micro con Vdd = 5V y aplicar en la pata 1 correspondiente a IRQ una tensin mayor de 1.5*Vdd, que en este caso usamos 8.2V. En el siguiente esquemtico se muestra el circuito para obtener estas dos tensiones usando un transformador de 10 a 24 V de corriente continua.

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

Circuito impreso: Este es el circuito impreso que se utiliz para realizar la placa programadora utilizada durante el proyecto. Posee jumpers que permiten se programar y utilizar el microcontrolador sin sacarlo del socket, adems posee un potencimetro conectado a la patita PTB7 del micro que es la usada por el ADC7 (conversor analgico digital), y otros jumpers que simulan entradas binarias.

La tcnica utilizada para la transferencia fue imprimir la imagen anterior sobre una hora para fotografas (las que son mas brillantes de un lado) con una impresora lser. Luego el lado impreso de esta hoja se apoya sobre el lado cobreado de una placa de pertinax previamente pulida con birulna para retirar suciedades y oxido indeseados. Con una plancha para ropa se plancha la hoja de 3 a 4 minutos y el calor mas la presin transfiere el toner que se encuentra sobre la hora a la placa de cobre. Luego sumergir la placa y el papel que quedan pegados en agua para ablandar el papel y lograr que se desarme al raspar con los dedos. Una vez que las pistas queden dibujadas sobre la placa de cobre, hay que sumergirla en cloruro frrico por unos 10 o 15 minutos, esta solucin disuelve el cobre con el que toma contacto y solo queda el cobre que esta oculto por el toner. Ahora solo queda retirar el toner con una birulana y agujerear para colocar los componentes. Una vez listo el circuito impreso se deben colocar los componentes que figuran en la lista de componentes de la forma indicada en el esquemtico. El cable usado para unir la placa programadora a la PC tendr una ficha RJ11 en el extremo de la placa programadora y una ficha DB9 en el extremo que ira conectada a la PC. Este mismo cable ser usado ms adelante para comunicar la placa en la que se aloja el microcontrolador que es usada para controlar el motor DC.

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

Lista de Materiales para la placa programadora.

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

Una vez terminada la placa programadora tiene este aspecto:

Software de programacin: El soft utilizado para programar en C estos microcontroladores es el CodeWarrior 3.1, es un programa proporcionado por Motorola que permite realizar aplicaciones hasta de 4kb en forma libre, y si se requiere programar aplicaciones mayores hay que adquirir una licencia, como en nuestro caso el micro que usamos tiene 4kbyte de memoria nos es suficiente la versin libre. El programa puede bajarse de la web desde la siguiente direccin: http://www.metrowerks.com/MW/download/default.asp Una vez instalado, siga los siguientes pasos para crear un nuevo proyecto: (a) Abra el CodeWarrior 3.1 (c) Seleccione HC(s)08 New Project Wizard y escriba el nombre de su proyecto. (d) El dispositivo de trabajo, p.e. MC68HC908JL3. (e) El cdigo de trabajo, p.e. C solamente. (f) No utilizar Processor Expert. (g) No incluir un proyecto con PC-lint. (h) El formato a utilizar sobre el tipo de punto flotante, p.e. None. (i) El modelo de tipo de memoria a utilizar, p.e. Small. (j) El tipo de conexiones, p.e. P&E Full Chip Simulation.

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

Finalmente se abre una ventana con el proyecto, de todos los archivos vinculados al proyecto los mas importantes son: main.c y P&E_FCS_Linker.prm. (b) main.c contiene el cdigo de nuestro programa. (c) P&E_FCS_Linker.prm contiene la informacin de reas como FLASH, ROM y Vectores de Interrupcin.

Una vez agregado el cdigo necesario para que el micro realice las operaciones requeridas se deben seguir los siguientes pasos para grabar el programa en la memoria flash. En la opcin de Debug, el CodeWarrior nos deriva a la aplicacin True Time Simulator & Real Time Debuger. Esta aplicacin tiene tres modos de funcionamiento: 1 modo Full Chip Simulator, simula el micro por software, sin conexion. 2 modo In Circuit Simulator, sin grabar el cdigo en la memoria flash es posible debaguear y ver los cambios en el circuito. 3 modo In Circuit Debug/Programming, graba el programa en la memoria flash del micro y permite el debugeo real tieme de la aplicacin.
9

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

Al intentar comunicarse con el micro que ya debe estar en modo monitor. En la pantalla de parmetros de conexin se debe elegir clase 3, que es la clase de programador que detallamos arriba.

Esta es una captura de pantalla del entorno de programacin CodeWarrior 3.1 en el momento en que estaba programando el micro para controlar el motor de cc.

10

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

4.2 Realizacin del Kit Motor-Encoder En conjunto con Mauricio Chaparro (encargado del paol de la universidad), se realiz un kit compuesto por un motor de CC acoplado por un eje flexible a una masa y un encoder de alta resolucin como un aporte a la carrera de Ingeniera en Automatizacin y Control. Este es un modelo terico tpico de control, que puede usarse en otras materias para modelarlo, identificarlo y probar distintas tcnicas de control. En este informe slo usaremos un control PID que como veremos nos otorga una respuesta muy deficiente ya que es un sistema relativamente complejo para este tipo de control.

Un modelo de este sistema es el siguiente: X 1 = 1 2 X 2 = 1/ 0 X 3 = 2 / 0

k ( j1 + j 2) j1. j 2 0 0 1 . X + .u + .v 2 0 0 1

X Y

1 0 = 0 . 1 1 2 0 = [0 0 0] .X j1 = j1 + j 2 d 1 = j 1 . 0 d 2 = j 2 . 0 k1 = j 1 . 0 1 = j 1 . 0

d k1 j1 j2 v

Factor de amortiguamiento viscoso Constante de corriente del motor Momento de inercia 1 Momento de inercia 2 Torque de perturbacin en j1

11

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

Esta es una imagen de la planta terminada:

En la imagen se aprecian las 3 placas que componen el control. La primer placa es la que recibe la seal del encoder y obtiene el sentido de giro al pasar por un 74LS175 (Hex-Quad D Flip-Flops with Clear) y por tres 74LS161 (DECADE COUNTER 4BIT BINARY COUNTER) para disminuir la frecuencia de pulsos. La segunda placa es la etapa de potencia, el ella se encuentra un L298 (Puente H) que permite al microcontrolador indicar el sentido de giro del motor. Este es un diagrama de la conexin del puente H.

La tercer placa es en la que se aloja el microcontrolador y en donde se encuentra el control del sistema. Esta placa tiene un terminal RJ11 que permite la conexin a la PC por medio del una conexin RS232.

12

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

El programa que se comunica con el microcontrolador es el de la siguiente figura:

Con este programa se le puede indicar al microcontrolador que tipo de control se desea hacer: posicin o velocidad. Adems se puede seleccionar 5 set point predefinidos y observar la evaluacin del sistema en una pantalla grafica que grafica los ltimos 60 segundos de la posicin real de la masa M2. Se observa en la parte inferior de la pantalla grafica unos valores relevantes de la evolucin, como ser el promedio, mximo, mnimo y excursin de la seal. Otra de las opciones es poder modificar las constantes Kp, Ki, Kd del control PID.

13

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

4.3 Detalles del programa Una de las primeras llamadas que hacemos es a la librera <MC68HC908JK3.h>, en esta libreras se encuentran definidos los registros y las direcciones del microcontrolador, as en la siguiente programacin solo se llamara al PTD como Puerto D, al ADR como registro del analgico digital, y as con los dems registros. Estas son las patas del microcontrolador que usamos para interactuar con la planta, leer la posicin de la masa M1 y controlar el PWM. // IRQ1 entrada cuenta los pulsos del encoder // PTB4 entrada indica el sentido de giro // PTB5 entrada set_point 1 // PTB6 entrada set_point 2 // PTB7 entrada potenciometro indica mximo TON del PWM // PTD2 salida sentido de giro y stop PWM // PTD3 salida sentido de giro y stop PWM // PTD4 salida PWM // PTD6 TX RS-232 // PTD7 RX RS-232 Como resumen de las funcionalidades que utilizamos en el proyecto podemos mencionar: Interrupciones por hardware Interrupciones por software Entradas digitales Salidas digitales Entradas analgicas (conversor Analgico digital) Comunicacin RS-232 con la PC Manejo del TIM (timer interface module) Generacin de PWM

El tren de pulsos generados por el encoder se debe convertir a un numero que represente el desplazamiento de la masa desde el origen. Se considera origen a la posicin cero que es en la que se encuentra el sistema en el momento en que energizamos el microcontrolador o presionamos Reset. El mejor mtodo es usar un acumulador de pulsos, pero como este microcontrolador no dispone de un acumulador de pulsos o external clock source tenemos que recurrir a las interrupciones, por eso entramos con el canal A del encoder en la pata IRQ y de esta manera contamos los pulsos que indican la posicin de la masa M1. El siguiente es el cdigo utilizado para atender la interrupcin por hardware generada por el flanco desendente del pin asociado a IRQ, vemos que despus de indicarle al micro que aceptamos la interrupcin se modifica el valor de una variable dependiendo de el sentido de giro del motor que esta indicado en el pin 4 del puerto B.

14

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

#pragma TRAP_PROC void IRQ_Interrupcion(void){ INTSCR_ACK1=1; if(PTB_PTB4){ if(pos_encoder<32000) pos_encoder++; }else{ if(pos_encoder>-32000) pos_encoder--; } }

// ACK interrupcin

La interrupcin por software siguiente nos indica que el conversor analgico digital a terminado de convertir la seal proveniente desde el potencimetro conectado al pin PTB7. Con esta entrada definimos la saturacin de la seal de actuacin, que traducido al tipo de actuador que tenemos en este proyecto representa el mximo Ton (tiempo activo) de la seal PWM. #pragma TRAP_PROC void ADC_Fin_Conversion(void){ pote_ADC7=ADR; if(ipass<10000) ipass++;
}

Ahora veremos las funciones utilizadas en este proyecto con una breve descripcin de su funcionalidad.
void delay(unsigned int ms) void set_TON_PWM(int TON) void set_Sentido(int Sentido) void send_byte(char byte) char rec_byte(void) void itochar(int inum,unsigned char cadena[5]) void send_pos(void) void analizar_entrada(unsigned char br)

Es un retardo utilizado para formar la trama en la transmisin RS-232 Configura los parmetros del PWM Configura las salidas 2 y 3 del Puerto D que definen el sentido de giro Enva un byte a la PC por Puerto serie Recibe un byte de la PC Convierte un entero en string Enva la posicin actual de la masa M1 a la PC cada 1 segundo. Actualiza los parmetros del control respecto a lo que llega desde la PC

Sin embargo el corazn del programa se encuentra en la funcin <void main(void)> en la que se encuentra el control propiamente dicho, en este caso en forma de PID (control proporcional integral y derivativo). El programa contiene la inicializacin de los mdulos y un if que selecciona el tipo de lgica para obtener la actuacin segn si estamos controlando posicin o velocidad.

15

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

Lo primero que se debe hacer al empezar el programa es configurar los registros del microcontrolador para que funcionen los mdulos que luego utilizaremos.
CONFIG1_COPD=1; ADSCR = 0x67; ADICLK = 0x80; CONFIG2_IRQPUD=1; TSC = 0x33; TMODH = 0x00; TMODL = 0xFF; TCH0H = 0x00; TCH0L = 0x80; TSC0 = 0x1A; TSC_TSTOP = 0; DDRD = 0x8C; // Deshabilitamos el monitor Wathdog // habilito ADC7 en modo ciclico con interrupciones // divido por 16 internal ADC clock // disable pull-up en IRQ // limpio TIM y divido por 8 el clock // periodo inicial del PWM // TON inicial del PWM // selecciono PWM en canal 0 // prendo el modulo TIM // configuro algunos pin como salida

Luego el if que define el tipo de control se administra as:


if(control_pos){ // CONTROL DE POSICIN error = set_point - pos_encoder; integral_error = integral_error + error; // integral derivada_error = error - error_anterior; // derivada if(integral_error>4000) integral_error=4000; // anti-windup if(integral_error<-4000) integral_error=-4000; actuacion = (int)( Kp*error // PID + Ki*integral_error/100 + Kd*derivada_error ); error_anterior=error; }else{ // CONTROL DE VELOCIDAD if(pos_encoder<set_point/10){ if(actuacion<30000) actuacion++; }else{ if(actuacion>-30000) actuacion--; } if(set_point==0) actuacion=0; pos_encoder=0; for(i=0;i<1000;i++){ br=rec_byte(); if(br>0) analizar_entrada(br); } }

Como vemos en la aplicacin es necesario comunicarse con la PC por puerto serie, pero este microcontrolador no tiene modulo SCI que es el que administra este tipo de conexiones. Por lo tanto fue necesario manipular una entrada y una salida estndar del microcontrolador para comunicarse con la PC. Para eso fue necesario para realizar una Interfase Serie Asincrnica capaz de funcionar sobre cualquier pin I/O. Los requerimientos para que las rutinas funcionen correctamente son mnimos, el problema es que poseen pequeos errores de Timming (sincronismo) que fueron solucionados utilizando eco, esto significa que el microcontrolador le enva a la PC lo que el entendi, entonces la PC decide si es necesario reenviar el dato o no.

16

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

Los clculos estn basados en un cristal de 9.8304MHz lo que proporciona un T=0.406901useg de bus y en base a esto debemos calcular el tiempo de bit utilizado en la transmisin. Tiempos de bit en RS-232 /****************************************************************************************************** Baudios Ancho_de_Bit (useg) Error de encuadre (X*T/Br) 57600 17.36 2.12 38400 26.04 1.56 19200 52.08 1.15 9600 104.2 1.05 4800 208.3 0.62 2400 416.7 0.46 ******************************************************************************************************/ Se desarrollaron 3 funciones principales: send_byte, rec_byte y delay Transmisin: se realiza con la funcin send_byte, es la mas simple puesto a que una vez que comienza la transmisin con el bit de start solo se trata de cambiar el estado lgico del bit TXD configurado como salida hasta contar los 8 bits del byte y al final concluir con un bit de stop. El formato de transmisin estndar NRZ n,8,1 y el orden de los bits es el siguiente: bit START bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 bit STOP Recepcion: es la ms difcil de programar, ya que en la recepcin es donde se debe considerar el ruido debido a la lnea de transmisin y al sincronismo. La funcin rec_byte verifica el estado de la entrada RXD, si la entrada esta en uno la funcin devuelve un cero, pero si la entrada esta en cero indica que estamos en el bit de start y que la PC esta transmitiendo un byte por eso en este caso se debe prestar absoluta atencin a esta entrada y evaluar en intervalos correspondientes al tiempo de bit el valor de la entrada que representa el byte correspondiente. Para convertir la seal TTL del microcontrolador en niveles de tensin CMOS correspondientes a la norma RS-232 usamos un MAX232. Del cual solo nos sirve un canal de salida y un canal de entrada.

17

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

5 TEMAS QUE ABARCA EL PROYECTO Programacin en lenguaje de alto nivel en el software de control (Visual Basic). Programacin en lenguaje de bajo nivel en el microcontrolador (C). Redes y Protocolos. Diseo de circuitos electrnicos. Desarrollo de hardware. Fundamentos de control. 6 ARCHIVOS ADJUNTOS Se entrega el informe adjunto a los cdigos fuente utilizados en la programacin del microcontrolador y el programa con el que se cambian los parmetros desde la pc. Tambin estn incluidos en los datos adjuntos los datasheet de los componentes utilizados en las placas de electrnica asociada al microcontrolador.

18

Proyecto Final de Materia

Sistemas Digitales
Programacin en C de un microcontrolador Motorola JK3

7 - CONCLUSIN En esta colusin evaluaremos dos aspectos principales. El primero es la programacin del microcontrolador, esta familia de microcontroladores posee un entorno de desarrollo (CodeWarrior) muy bien logrado. Al momento de escribir el programa resulta muy sencillo utilizar los mdulos y registros del micro ya que se muestran como objetos desplegables de amplia versatilidad. Tambin provee herramientas de testeo por soft y en circuito que aceleran notablemente la deteccin de errores. Con respecto al microcontrolador elegido, nos encontramos con muchas limitaciones a la hora de pretender un uso intensivo. La falta de un acumulador de pulsos y un modulo SCI de comunicacin serie nos limit en la optimizacin del control. Para lograr un control del sistema con una fluida comunicacin con la PC es imprescindible usar un microcontrolador que disponga de estos mdulos. Aunque en el transcurso de este proyecto se emularon estos mdulos, nos vimos desbordado de interrupciones y eso repercuta en la perdida de referencia (posicin cero) que obligaron a usar divisores de frecuencia y baja tasa de transmisin de datos.

19