You are on page 1of 60

INSTITUTO UNIVERSITARIO AERONAUTICO

TRABAJO FINAL DE LABORATORIO: CONTROL DE VELOCIDAD DE UN MOTOR DC MEDIANTE MODULACIN POR ANCHO DE PULSO

Informe Tcnico: Proyecto: / Fecha: 14/06/06

Revisin: /

Autor: Serrudo Mario Sebastin

Revis: Ing. Luis Murgio

Vo.Bo. :

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:1

INDICE Pgina. RESUMEN 1. INTRODUCCION 2. DESARROLLO 2.1 Diagrama en bloque del circuito 2.2 Hardware del circuito 2.3 Software 3. CONCLUSIN 2 3 4 4 7 10

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:2

CONTROL DE VELOCIDAD DE UN MOTOR DC MEDIANTE MODULACIN POR ANCHO DE PULSO

por: Serrudo Mario Sebastin.

Resumen
El propsito de este trabajo consiste en la realizacin de un mecanismo para controlar la velocidad (RPM) de un motor de corriente continua. El sistema que se emplea en este trabajo se basa en un microcontrolador que esta monitoreando la velocidad del motor a travs de un optoacoplador. La finalidad del controlador es mantener la velocidad constante del motor a cambios bruscos de carga , desplegar la velocidad de manera digital y de igual manera poder programar la velocidad deseada externamente mediante la utilizacin de una PC.

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:3

1.INTRODUCCIN
El control de velocidad del motor DC serie, es un sistema de control electrnico de lazo cerrado muy utilizado en la actualidad debido que dichos motores tienen caractersticas de velocidad y torque muy interesantes, las cuales pueden ser aprovechadas de manera muy sencilla mediante un sistema de control. Tpicamente el control de la velocidad de los motores DC se realiza de manera continua mediante la utilizacin de un restato, operacionales, etc. Este mtodo resulta en ocasiones deficientes en particular cuando se desea un control centralizado de bajo mantenimiento alta precisin y facilidad de monitoreo por lo que se recurre al control digital. En este trabajo se describir el diseo y la construccin de un Sistema de Control Digital de Velocidad de un motor de corriente continua tipo serie, mediante un microcontrolador basado en el PIC16F873. Se analizan las funciones de transferencia del Sistema y la implementacin de la estrategia de control por medio del microcontrolador. Asimismo se presentan las consideraciones del diseo del hardware y software y los resultados experimentales obtenidos. Este Sistema tiene numerosas aplicaciones donde se tiene disponible tensin continua como en vehculos elctricos, gras, carros mineros de arrastre, servos de corriente continua, etc

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:4

2.DESARROLLO A continuacin se realiza un breve desarrollo terico sobre el sistema de control a utilizar. 2.1.Teora. El sistema de control a utilizar en este trabajo se denomina Delta, y es de muy fcil implementacin en sistemas digitales pero de una deduccin terica muy compleja, por lo que se proceder a hacer una aproximacin mediante un control clsico continuo con el que se consigue muy buenos resultados. El diagrama de un sistema de control de lazo cerrado clsico es como el que se muestra a continuacin:

REF

+ -

MOTOR

RPM

En donde: La referencia es suministrada por la PC El bloque sumador y proporcional(K) se encuentran en el PIC El Bloque H es el opt acoplador con su conformador de onda. La funcin de transferencia de cada bloque es la siguiente :
Motor = FT = RPM Voltios = A ( s + B)

K = FT =

Voltios = Cte Pulsos

H = FT =

Pulsos = Cte 2 RPM

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:5

Si buscamos la funcin de transferencia del sistema se obtiene lo siguiente:


Sistema = RPM CteA = REF ( S + B + Cte 2CteA )

(1)

y transformando al dominio del tiempo se obtiene:

RPM (t ) =

CteA * REF (1 e B +Cte 2CteA ) B + Cte 2CteA

Como se puede observar el sistema se ha hecho mas lento pero mas estable y con un error menor por lo que es mas sencillo de controlar. Debido a que trabajamos con modulacin Delta consideraremos que el sistema es 10 veces mas lento aun, por lo que la formula final queda:
CteA * REF (1 e 10 ( B +Cte 2CteA ) ) B + Cte 2CteA
t

RPM (t ) =

De esta manera se concluye el estudio terico del comportamiento del sistema de control. 2.2Diagrama en bloques: A continuacin se realizara un diagrama en bloque del sistema de control de velocidad. PWM Comunicacin con la PC Tx Rx Potencia

Micro controlador

Motor RPM

Visualizacin

Puerto A y B Rb0

Modulo de Realimentacin o encode

2.3Hardware Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:6

El montaje de este sistema se realiz en Protoboard y bsicamente consiste de los subsistemas descriptos en el diagrama en bloque de la seccin anterior. 2.3.1Microcontrolador Se comienza el diseo del Hardware por el bloque principal el cual se basa en un microcontrolador que se encarga de las operaciones de control (Mediante un modulador PWM y un optoacoplador) y visualizacin (mediante display 7 segmentos) de las RPM del motor. Adems este microcontrolador debe permitir mantener una comunicacin serie (bajo norma RS-232) con la PC para poder transmitir las RPM actuales y recibir la seal de referencia o RPM deseadas necesaria para el proceso de control. En funcin de los requisitos anteriormente enunciados se procedi a la eleccin de un microcontrolador PIC16F873 debido a que posee las siguientes caractersticas : Procesador de arquitectura RISC avanzada. Juego de 35 instrucciones con 14 bits de longitud. Todas ellas se ejecutan en un ciclo de instruccin, menos las de salto que tardan dos. Frecuencia mxima de 20 MHz. Hasta 8 K palabras de 14 bits para la Memoria de Cdigo, tipo FLASH. Hasta 368 bytes de Memoria de Datos RAM. Hasta 256 bytes de Memoria de Datos EEPROM Hasta 14 fuentes de interrupcin internas y externas. Pila con 8 niveles. Modos de direccionamiento directo, indirecto y relativo. Perro Guardin (WDT). Cdigo de proteccin programable. Modo SLEEP de bajo consume. Voltaje de alimentacin comprendido entre 2y 5,5 V. Bajo consumo (menos de 2 mA a 5 V y 5 MHz). 3 TIMER 2 Mdulos de Captura-Comparacin-PWM Conversor A/D de 10 Bits Revisin: /

Fecha: 14/06/06

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:7

Puerto serie sncrono USART Interrupcin externa

Como se puede observar este microcontrolador cumple con los requisitos necesarios para este sistema. 2.3.2 Visualizacin El circuito visualizador de las RPM se basa en 4 display 7 segmentos conectados al PIC los cuales hay que determinar si van a ser activos por cero o por uno en otras palabras si van a ser nodo comn o ctodo comn. Para ello se realiza un estimacin de la potencia consumida o disipada por el microcontrolador si se decide que los diodos sean activos por alto o bajo. Para ello se observa las curvas de caractersticas elctricas del PIC IOH Vs VOH, corriente de salida Vs voltaje de salida en estado alto, y IOL Vs VOL, corriente de salida Vs voltaje de salida en estado bajo y con una corriente de 10mA por diodo, siendo activo por alto la cada interna del pic es de 1.25v consumiendo 12.25mW por diodo. En el otro caso, activo por bajo la cada del pic es de 0.5v con una potencia de 7.5 mW por diodo.

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:8

En conclusin se decide que los displays sean activos por bajo utilizndose entonces displays de nodo comn. La corriente solicitada por cada display en el peor caso, (todos los segmentos encendidos) es de 10mA x 7 =70mA para suministrarla se utiliza un transistor PNP BC327-25 polarizado en corte y saturacin que provee la intensidad de corriente requerida por el display. El circuito a disear para cualquier display es el siguiente
V CC 5V

Q1 RB BC327

CK

U1
A B C D E F G

RB1
Ln1 Ln2 Ln3 Ln4 Ln5

RB2 RB3 RB4 RB5 RB6

AL_PUERTO_B

Ln6

Ln7

RB7

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Rc se calcula a de la siguiente manera Pgina:9

Vcc Vec Vd IaRc VOL = 0


donde Vec= 0.3v es el voltaje de saturacin del transistor y VOL=0.5v es el voltaje en estado bajo del puerto B del PIC .

R = c

Vcc Vec Vd VOL 5v 0.3v 0.7v 0.5v = = 350 330 Ia 10 m A

Rb se calcula de la siguiente manera

Vcc Veb VOL = I Bsat RB I Bsat Ic min

donde IBsat es la corriente de base para saturar el transistor

RB

Vcc Veb VOL 5v 0.7v 0.5v min = 15 = 500 470 Ic 10 mA

de este modo quedan las resistencias Rc y Rb por los valores mas cercanos que se encuentran en el laboratorio. Los pines del puerto A (RA0, RA1, RA2 y RA3) son los encargados de la activacin de los displays a travs de las resistencias de base Rb. Los pines del puerto B (RB1-RB7) manejan los 7 segmentos de los displays a travs de las resistencias Rb1, Rb2,etc. De esta manera queda diseada el bloque visualizador display 7 segmentos.

2.3.3 Comunicacin con la PC Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:10

La comunicacin con la computadora como ya se ha mencionado se realiza mediante el protocolo de comunicacin serie RS-232. Dicho protocolo establece una serie de condiciones necesarias para realizar una comunicacin exitosa. Bsicamente este tipo de comunicacin se realiza de manera asincrnica por lo que cada palabra de informacin se enva independientemente de las dems. Suele constar de 8 o 9 bits y van precedidos por un bit de START(inicio) y detrs de ellos se coloca un bit de STOP(parada), de acuerdo con la norma del formato NRZ(nonReturn-to-Zero).Los bits se transfieren a una frecuencia fija y normalizada. Toda esta operacin es realizada en el USAR del PIC o de la PC.

Un importante hecho que establece la norma son los voltajes de operacin los cuales se establecen en 12 o 12 voltios segn el nivel logico, el microcontrolador no tiene la posibilidad de generar dichos voltajes por lo que se necesita un conversor de niveles TTL a RS-232, este conversor viene en un circuito integrado denominado MAX232.

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:11

2.3.4 Modulo de potencia. Como se ha mencionado anteriormente el control del motor se realiza mediante un modulador por ancho de pulso que posee el microcontrolador. Se ha decidido utilizar este tipo de modulacin debido a que el motor no pierde sus propiedades de velocidad y par que son tan deseadas de conservar. Bsicamente la tcnica consiste en una seal cuadrada de frecuencia fija a la cual se le puede variar el ancho del impulso positivo como se observa en la siguiente figura.

Ahora si estudiamos el nivel de continua de dicha seal obtenemos lo siguiente.

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:12

Vdc =

1 T

T/x

Vccdt
0

VccT Vcc = TX X

Ahora si llamamos a m=1/X obtenemos:


Vc d = VC mC

En donde: Vcc: es el nivel de cresta de la seal X: es la relacin entre el periodo y el ancho del impulso M: es la relacin entre el ancho del impulso y el periodo En la siguiente figura se puede observar que a medida que los pulsos se hacen mas anchos el nivel de continua se hace superior por lo tanto se puede tomar a un modulador PWM como un controlador proporcional K como el propuesto en la seccin de teora.

Debido a que un motor de corriente continua puede tener consumos de varios cientos de miliamper hasta varios amperes el modulador que posee el pic no puede ser conectado directamente debido al alto consumo, para solucionar esto se coloca un transistor NPN TIP-31 el cual opera en corte y saturacin. La misin de este transistor es proporcionar la corriente necesaria al ritmo que el modulador por ancho de pulso lo imponga.

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD El circuito utilizado para esta tarea es el siguiente. Pgina:13

VCC

S1 MOTOR

D1 1N4148

pwm

R1 TIP31A

La resistencia R1 se calcula de la siguiente manera.

Vpwm max

IC

R1 Vce = 0

R1 =

IC

(Vpwm max Vce )

En donde : Vpwmmax = 5 vol IC=600mA Vce=0.6 V =100 quedando:


R1 = 100 (5 0.6) = 733 600

Debido a que el motor es un elemento inductivo, cuando se desconecta de manera abrupta tiende a elevar su potencial, para que esto no dae al transistor se coloca el diodo en paralelo con el motor de manera que cuando ocurra una desconexin abrupta el diodo cortocircuite al motor protegiendo al transistor. De esta manera concluye el estudio de la etapa de potencia del sistema.

Fecha: 14/06/06

Revisin: /

Q1

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD 2.3.5 Motor El motor utilizado en este proyecto es de un auto de juguete, dicho motor consume aproximadamente 500 mA mximo y puede ser alimentado desde 1.5 hasta 5 voltios. La funcin de transferencia del motor fue obtenida experimentalmente como se demuestra en el ANEXO 1
A 2834 = S +B S + 0.8034

Pgina:14

Ft =

2.3.6 Modulo de realimentacin o Encode Este modulo es el encargado de realimentar el sistema, bsicamente transforma las RPM en pulsos digitales para que el PIC pueda determinar la RPM del motor y en funcin de las mismas y la referencia efectu una correccin. Esto se logra colocando al eje del motor una rueda dentada y un optoacoplador para determinar el paso de una ranura tal como se muestra en la figura.

Como se puede observar el foto transistor entra en conduccin cuando es iluminado y en corte cuando no lo es, pero en la realidad este fototransistor no trabaja en corte y saturacin si no que produce una seal senoidal debido a que la iluminacin se produce de manera paulatina, por lo que a esta seal hay que acondicionarla mediante un circuito conformador de onda.

El circuito completo de realimentacin es el siguiente. Fecha: 14/06/06 Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:15

VDD R2 10k VDD


RB0

R3 10k R11 1.0k

5V R10 1K _LIN 50% Key = Space

5V
4 1 2 11

U1A
3

Disco
X1 R1 5.1k

LM324AD

LED1

Para simplificar el anlisis del circuito lo dividiremos en dos partes: 1. Circuito de toma de seal 2. Circuito conformador de onda. El circuito de toma de seal consiste de un fototransistor y de un diodo emisor junto con dos resistencia limitadora de corriente de la cuales una de ellas(R10) permite controlar la intensidad con que se iluminar al fototransistor. La segunda parte del circuito es el conformador de onda cuya funcin es tomar la onda senoidal proveniente de la etapa anterior y transformarla en una seal cuadrada de manera que pueda producir interrupciones en el microcontrolador. El calculo de las resistencia r1,r2,r3 se realiza de la siguiente manera. Primero suponemos que a la salida del operacional hay 5 voltios de manera que la resistencia R2 y R3 se encuentran en paralelo , por lo que la tensin en la entrada no inversora del operacional es:
V1 = 5 R1( R 2 + R3) R1R 2 + R1R3 + R 2 R3

por lo tanto cuando la tensin en la entrada inversora supere a V1 la salida del operacional pasara a valer 0 voltio.

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:16

Ahora si suponemos que a la salida del operacional hay 0 voltios de manera que la resistencia R1 y R2 se encuentran en paralelo , por lo que la tensin en la entrada no inversora del operacional es:
V2 = 5 R1R 2 R1R 2 + R1R3 + R 2 R3

por lo tanto cuando el valor en para inversora disminuya de v2 la salida del operacional pasa a 5 V. Ahora propongo una tensin de subida V1 de 2.5 Vol y y tensin de bajada de 1.2V por lo que las formulas quedan:

V1 =

5 R1( R 2 + R3) 2.5 R1R 2 + R1R 3 + R 2 R3

V2 =

5 R1R 2 =1.2 R1R 2 + R1R3 + R 2 R3

Haciendo el cociente entre ambas obtenemos:


V1 R3 1 = V2 R2 R3 2.5 = 1 = 1.083 R 2 1.2

Ahora trabajando con la formula de V2 se obtiene:


V2 = 5 5 = R3 R3 R3 1+ + 1 + 1.083 + R 2 R1 R1 R3 5 = 1 1.083 = 2.083 R1 V 2

Por lo tanto si elijo R2=10K entonces: R3=10.83K y R1=5.2K. De esta manera concluye el estudio del modulo de realimentacin y se procede a unir todos los mdulos en el siguiente circuito.

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:17

V DD 5V V CC 5V Q2 470 470 470 470


A B C D E F G

Q3

Q4

Q5

BC327
CK

BC327
CK

BC327
CK

BC327 MOTOR
CK

D1 1N4148

U4
A B C D E F G

U5
A B C D E F G

U6
A B C D E F G

U7

750 330 330 330 330 330 330 U2


1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 27 26 25 24 23 22 21 20 19 18 17 16 15

TIP31A

330

V DD 5V 10k V DD 5V
4 1 2 11

V DD 5V 10k 1.0k 1K _LIN 50% Key = Spac e

20pF

1uF- PO L

1uF-PO L U3
C1+ VCC C1C2+ C2VV+ T1OUT T2OUT R1I N R2I N

J1

U1A
3

HC- 49/U_3MHz

16f 873 20pF

1uF-POL

T1I N T2I N R1OUT R2OUT GND

HDR1X3

Disco
5.1k

LM324A D

1uF- POL

MA X232E

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:18

2.4Software: Para comprobar el correcto funcionamiento de cada parte de hardware se procedi a realizar diferentes programas cuyo objetivo era testear el funcionamiento de cada bloque. Comprobacin de funcionamiento de los display Para comprobar el correcto funcionamiento de los display se procedi a utilizar el programa cronometro, el cual fue utilizado en el trabajo practico numero 2, cuyo cdigo fuente se encuentra en la seccin de ANEXO. Luego de comprobar el correcto funcionamiento de los display se procedi a verificar la correcta operacin del bloque que posibilita la comunicacin con la PC Comprobacin del bloque comunicaciones de la PC Este bloque es el encargado de realizar la comunicacin entre en PIC y la PC. Para comprobar el correcto funcionamiento se realiz un programa para el PIC y otro para la PC los cuales permiten que la PC envi un dato al PIC y este lo reenvi a la PC todo mediante comunicacin serie asncrona. Transmisin Asncrono del PIC Cuando se desea transmitir datos de manera asncrona utilizando la USART , lo que se debe realizar es depositar en el registro TXREG el dato a transmitir, este registro es pasado a un registro de desplazamiento ,que va sacando los bits secuencialmente y la frecuencia establecida. Adems, antes de los bits del dato de informacin incluye un bit de INICIO y despus de sacar todos los bits aade un bit de PARADA. El corazn de este sistema es el registro de desplazamiento el cual obtiene el dato desde el registro TXREG y luego lo va desplazando y sacando bit a bit, en serie, por la patita RC6/TX/CK. La transferencia entre los dos registros se realiza en un ciclo y entonces el sealizador TXIF se pone a 1, para advertir que el registro de transmisin se ha vaciado. Tambin en este momento puede producirse una interrupcin si se ha posibilitado programando el sealizador TXIE= 1 en el registro pie 1. Cuando se escribe otro dato sobre TXREG, el sealizador TXIF se pone a 0 .

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:19

La secuencia de pasos a seguir para implementar una transmisin Asncrona es la siguiente: 1. Hay que configurar la lneas RC6/TX/CK como salida y RC7/RX/DT como entrada. 2. Poner SYNC=0 y SPEN=1 para activar el USART en modo asncrono. 3. Si se desea trabajar con interrupciones, poner TXIE=1, adems de habilitar las interrupciones en general. 4. Se carga el valor X adecuado en el registro SPBR, para producir la frecuencia de trabajo deseada. Hay que controlar el bit BRGH (para transmisin de alta o baja velocidad) 5. Activar ela transmisin con TXEN=1.El bit TXIF tendr valor 1, ya que TXREG se encuentra vacio 6. Carga en TXREG el dato a transmitir. Comienza la transmisin Recepcin Asncrona del PIC Los dates se reciben en serie, bit a bit, por la patita RC7/RX/DT y se van introduciendo secuenciamente en el registro desplazamiento RSR, que funciona a una frecuencia 16 veces mas rpida que la de trabajo. Cuando el dato consta de 9 bits hay que programar el bit RX9 = 1 y el noveno bit de informacin se colocara en el bit RX9D del registro RCSTA. El control sobre el noveno bit se realiza con las puertas de control y las seales que se aplican (ADDEN = 1). Cuando CREN = 1 en el registro RCSTA<4>, se habilita la recepcin. Los pasos a seguir en el modo de recepcin son los siguientes. 1. Se carga con el valor X a! Registro SPBRG para trabajar con la frecuencia deseada, controlando adems el valor de BRGH. 2. Se habilita el USART en modo asncrono con SPEN = 1 y SYNC = 0. 3. Si se desea que se genere una interrupcin con la llegada del bit PARADA, se pone RCIE = 1, adems de habilitar las interrupciones en general. 4. Se habilita la recepcin poniendo CREN = 1. 5. Al completarse la recepcin RCIF se pondr a 1 y se produce una interrupcin si se haba permitido 6. Se lee el registro RCSTA y se averigua si se ha producido algn error 7. Leer los 8 bits del registro RCREG para obtener el dato

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:20

A continuacin se muestra un diagrama de flujo del programa implementado en el del PIC para corroborar el correcto funcionamiento del Hardware. Si se desea obtener el cdigo fuente dirigirse a la seccin de anexos.
Inicializacin rc7 entrada rc6 salida LEER DATO

RETRANSMITIR DATO Configuracin USART VOLVER USAR en escucha

bucle

Programa de la PC. El programa utilizado para el testeo del correcto funcionamiento de la transmisin asncrona fue realizado en lenguaje C, dicho programa se basa en la transmisin y recepcin de datos mediante el puerto serie (0X386) a una velocidad de 9000 baudios por segundo. Si se desea saber el cdigo fuente de dicho programa dirigirse a la seccin de anexo. Luego de comprobar el correcto funcionamiento de la transmisin y recepcin serie se procedia a la verificacin del bloque PWM y MOTOR Comprobacin del bloque PWM y del motor Para comprobar el correcto funcionamiento del modulo PWM con su respectiva etapa de potencia junto con el motor, se procedi a realizar un programa el cual varia la velocidad del motor desde 0 hasta alcanzar su velocidad mxima. Para ello se debe configurar al microcontrolador de la siguiente manera: 1. Asignar el periodo cargando el valor oportuno en PR2 y recordando que la formula de periodo es : Periodo = (Pr 2 + 1) * 4 * Tosc * Valor _ del _ predivisor _ TMR 2 2. Asignar la anchura del pulso cargando el registro CCPR1L y recordando que la formala que manera el ancho del pulso es: Ancho _ pulso = CCPRL1 * tosc * Pr edivisor _ Tmr 2 3. Configurar la linea CCP1 o CCP2 como salida. 4. Asignar el valor del predivisor y activar el TMR2 escribiendo T2CON 5. Configurar el modulo CCP1 en modo PWM El diagrama de flujo del programa se muestra a continuacin: Fecha: 14/06/06 Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:21

Inicializacin Rc1salida Predivisor TMR0 Velocidad=0

Activar motor

Incrementar velocidad hasta mxima

Parar motor

Si se desea el cdigo fuente del programa dirigirse a la seccin de anexos. Luego de comprobar que este bloque funciona correctamente se procedi a verificar el funcionamiento del modulo de realimentacin. Comprobacin del bloque de realimentacin Para comprobar el correcto funcionamiento de este bloque se realizo un programa que cuenta la cantidad de pulsos que se producen en un segundo y los visualiza en los display. El diagrama de flujo de este programa se muestra a continuacin.
Inicializacin Rb salida Rb0 entrada Ra Salida Configuracin del TMR0 Activacin de interrupciones interrupcin

Interna?

No

externa?

No

bucle

Si Si
Para cuenta la 1 Seg?

Si
Incremento aux

no
Guardar la cuenta en aux Mostrar en display

Restablecer interrupciones

volver

Para mas detalle dirigirse al Anexo en donde se encuentra en cdigo fuente. De esta manera queda comprobado el correcto funcionamiento de los diferentes mdulos del sistema. Fecha: 14/06/06 Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD A continuacin se realiza la descripcin del programa final. Software final Los programas que se explican a continuacin son los encargados de realizar el control de velocidad del motor de corriente continua, visualizar las RPM en los displays 7 segmentos y posibilitar la transmisin y recepcin de datos necesarios entre la PC y el microcontrolador . Para simplificar la explicacin se divide este software final en dos partes, la primera es la encargada de explicar el funcionamiento del programa del PIC y en la segunda parte se detalla el funcionamiento del programa de la PC. Programa del PIC. El programa a utilizar en el PIC bsicamente es una combinacin de los programas anteriores con el agregado de poseer el algoritmo que permite el control de la velocidad de giro motor. Debido a la extensin del programa se realiza un diagrama de flujo para as facilitar la comprensin del mismo y poder dar detalles de los bloques que se crea necesario.
Inicializacin de variables Puerto b Salida Rb0 entrada Puerto a Salida Rc1 Salida para PWM Rc6 Salida para Tx Serie Rc7 Entrada para Rx Serie Configuracin del PWM Configuro USAR Habilito interrupciones Carga al tmr0 Velocidad de giro =0

Pgina:22

BUCLE

INTERRUPCION

NO
Por TMR0? Por Rb0

NO
Recepcin serie

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD SI


1 Seg?

Pgina:23

Si Si Si
Realizo la cuenta de RPM Incremento Cuenta Cargo el nuevo valor de referencia

No
Comparo con la referencia

Mayor
Incremento el ancho de pulso

menor
Decremento el ancho de pulso

Trasmito a la PC

Visualizacin

Cuenta=0

Seteo de Banderas y variables

Seteo de Banderas

Seteo de Banderas

Salir de interrupcin

Como se puede observar el programa comienza realizando las configuraciones necesarias para que funcione de forma correcta: el modulador PWM, la transmisin y recepcin serie, configurando los puertos para la visualizacin de los display y seteando los predivisores y variables correspondientes para un correcto funcionamiento del servicio de interrupcin . Luego se puede observar que el programa entra en un bucle sin fin en espera de alguna de las 3 causas posibles de interrupcin. Las cuales pueden ser:

Por desbordamiento del TMR0 Por interrupcin producida por un flanco ascendente en la para RB0 Por la recepcin de un dato por puerto serie

Dependiendo del origen de la interrupcin el programa efecta distintas tareas: Fecha: 14/06/06 Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:24

Interrupcin por TMR0: En esta condicin el programa refresca los display para poder obtener una correcta visualizacin, si a su vez a pasado 1 segundo se realiza la cuenta para obtener las RPM con que esta girando el motor . Para obtener las RPM del motor se efecta la siguiente cuenta.

RPM =

cantidad

Cuenta * 60 _ de _ ranuras _ del _ disco

En donde: Cuenta: es una variable que se incrementa cada vez que entra una interrupcin por RB0 Cantidad de ranuras: En este caso es 40 debido a que esa es la cantidad de ranuras que posee el disco que gira solidariamente con el eje del motor. Por lo tanto la ecuacin anterior queda de la siguiente manera:

RPM =

Cuenta * 60 Cuenta * 3 = 40 2

De esta manera el error mximo que se produce es de 1,5 RPM con lo que se considera satisfactorio. Luego de obtener la cantidad de RPM con que esta girando el motor, se compara con la referencia enviada por la PC via puerto serie y se incrementa o decrementa el ancho del pulso del PWM en funcin del resultado de dicha comparacin como se muestra a continuacin. RPM con que esta girando el motor > Referencia entonces decremento el pulso de control RPM con que esta girando el motor < Referencia entonces incremento el pulso de control

Este tipo de control es el denominado control Delta y como se puede observar es un control no lineal pero de muy fcil implementacin. Luego de hacer la correccin del ancho de pulso, se enva las RPM con que esta girando el motor a la PC y esta las guardas para poder hacer a posterior un anlisis del funcionamiento del sistema de control. Finalmente se comienza nuevamente con el proceso colocando la variable cuenta a 0 Fecha: 14/06/06 Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:25

Interrupcin por RB0: Cuando se produce una interrupcin por Rb0 se incrementa la variable cuenta, la cual cada 1 segundo es puesta a 0. Interrupcin por Recepcin de datos de la PC: Como se sabe en todo sistema de control se necesita una seal de referencia, en este caso es enviada desde la PC e indica la cantidad de RPM que se desea, de manera que el microcontrolador efecta las correcciones necesarias para cumplir con la referencia. De esta manera se ha descrito el programa del microcontrolador y cuyo cdigo fuente se encuentra en la seccin de anexo. Programa de la PC. El programa realizado para la Pc es relativamente sencillo, bsicamente lo que realiza es la transmisin de la referencia al sistema de control y la recepcin de los datos que enva el mismo almacenndolo en un archivo denominado datos.txt el cual luego ser utilizado para estudiar el comportamiento del sistema. El programa basa la recepcin de datos en el servicio de interrupcin que posee la PC y la transmisin de dato se realiza de manera directa como se puede observar en el cdigo fuente en la seccin de anexo.

3 .Resultados En esta seccin se analizan los resultados obtenidos de manera terica y practica. Para ello lo primero que se necesita es obtener la funcin de transferencia del motor. 3.1Obtencion de la funcin del motor : Fecha: 14/06/06 Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:26

Para obtener la funcin de transferencia del motor se desconecto el PWM del mismo por lo que de esta manera el sistema lo nico que realiza es medir las RPM del motor y transmitirla a la PC en donde fueron grabadas en el archivo datos.txt. Luego se lo xito mediante una pila mediana de 1,5 Voltios obtenindose la siguiente grafica.

En funcin de esta grafica obtendremos la funcin de transferencia del motor. Recordemos que la funcin de transferencia de un motor es la siguiente.

Ahora si excitamos a este sistema con un escaln de 1.5V como es en nuestro caso la expresin queda:

Anti-transformando la expresin al dominio del tiempo se obtiene lo siguiente:

por lo tanto si consideramos un

la formula queda:

Ahora si observamos la grafica podemos apreciar que el valor de RPM luego de los 45 Seg es aproximadamente constate y estable por lo que se puede considerar que ya han pasado todos los transitorio o sea que de esta manera se concluye que :

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:27

Ahora si observamos el tiempo transcurrido hasta que llegue a un 50% del rgimen podemos despejar el valor de las constante A y B De la grafica y la tabla de valores se observa que el tiempo transcurrido en llegar a 2664 rpm es de aproximadamente 1.5 segundos. Trabajando sobre la formula se obtiene lo siguiente.

Por lo tanto A es igual a:

Por lo que la formula queda:

Si graficamos esta funcin y la obtenida experimentalmente se observa lo siguiente.

Como se puede observar la aproximacin realizada concuerda con los resultados obtenidos de manera practico por lo que podemos definir a la funcin de transferencia del motor como: Fecha: 14/06/06 Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:28

3.2 Obtencin de la funcin de transferencia de los dems elementos Los dems elementos que componen el sistema de control tiene funciones de transferencias las cuales se pueden obtener de forma matemtica. Para el circuito de realimentacin se pude considerad que la funcin de transferencia es unitaria y para el modulador por ancho de pulso ya se ha deducido la funcin de transferencia:

3.3 Obtencin de la funcin de transferencia del sistema En la seccin de teora se ha llegado a la conclusin de que la funcin de transferencia del sistema es:

por lo que reemplazando los valores se obtiene:

y en el dominio del tiempo la formula es:

Formula sin correccin y teniendo en cuenta la consideracin de modulacin delta la formula queda:

Formula con correccin 3.4 Resultados del sistema de control en lazo cerrado Para observar el funcionamiento del sistema bajo el control de lazo cerrado, se procedi a excitar al sistema mediante una seal de referencia de 2000 Rpm y se obtuvo la siguiente grafica:

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:29

Como puede observarse la aproximacin realizada funciona correctamente al igual que el sistema de control. Como era de esperarse el sistema es mucho mas lento que cuando se lo excito en lazo abierto pero, esta demora puede compensarse con un aumento en la precisin y estabilidad.

4.CONCLUSIN Desde el punto de vista del trabajo se ha observado que el sistema nunca termina de estabilizarse, esto contradice con la teora de control la cual manifiesta que un sistema de control realimentado negativamente es mas estable que cuando se lo excita en lazo abierto. Controlando el sistema se observo que el sistema de realimentacin, (cuando el motor esta en funcionamiento y en rgimen) produce una seal cuadrada cuya frecuencia varia alrededor de una central , esto produce un error en la determinacin de las RPM del motor de aproximadamente 10 a 20 RPM, este error produce que el sistema constantemente este compensando por lo que nunca llega a estabilizarse. Fecha: 14/06/06 Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:30

Este error que produce el sistema de realimentacin no es un problema electrnico si no mecnico debido a que si se observa el funcionamiento del eje del motor este posee un pequeo juego el cual es transmitido a la rueda dentada y a sus vez esta lo transmite al sistema de realimentacin. Si se soluciona este inconveniente mecnico el sistema se estabilizara conforme a lo predicho tericamente. Obviando este problema de estabilidad se observ el correcto funcionamiento del proyecto CONTROL DE VELOCIDAD DE UN MOTOR DC en el cual se ha podido integrar conocimientos de diversas materias como Informtica II, Control I, y Digitales III. Cabe destacar que este proyecto a permitido observar de manera practica los diversos conceptos desarrollados por las distintas materias y la gran capacidad que posee la tecnologa de los microcontroladores para adaptarse a una gran variedad de proyectos con un costo muy reducido.

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:31

ANEXO 1 Programa de prueba de los display de 7 segmentos. ;Este programa simula el funcionamiento de un cronometro digital el cual tiene una precisin de centenas de segundos.
; La visualizacin se realiza mediante 4 display de 7 segmentos conectados al puerto A y B. #include<P16F873.INC> ;DECLARACIONES GUARDO_W GUARDO_S DISPLAY1 DISPLAY2 DISPLAY3 DISPLAY4 CONTADOR AUXILIAR MILISEGUNDO OPCION CONTROLAR REBOTE CONTADOR1 EQU EQU EQU EQU EQU EQU EQU 0X20
;EN ESTA DIRECCION SE GUARDA EL REGISTRO W CUALDO SE INGRESA A LA RUTINA DE INTERRUPCION INGRESA A LA RUTINA DE INTERRUPCION

0X21;EN ESTA DIRECCION SE GUARDA EL REGISTRO STATUS CUALDO SE EQU

0X22;EN ESTA DIRECCION SE ENCUENTRA EL VALOR EN DECIMAL DE LO MOSTRADO EN EL DISPLAY1

0X23;EN ESTA DIRECCION SE ENCUENTRA EL VALOR EN DECIMAL DE LO MOSTRADO EN EL DISPLAY2 0X24;EN ESTA DIRECCION SE ENCUENTRA EL VALOR EN DECIMAL DE LO MOSTRADO EN EL DISPLAY3 0X25;EN ESTA DIRECCION SE ENCUENTRA EL VALOR EN DECIMAL DE LO MOSTRADO EN EL DISPLAY4 0X26;ES EL ENCARGADO DE INDICAR QUE DISPLAY SE DEBE ENCENDER 0X27;ES EL ENCARGADO DE QUE EL CONTADOR ESTE ENTRE 0 Y 4 0X28;ES UNA VARIABLE QUE SE INCREMENTA CADA 50ms 0X81;ES EL REGISTRO OPTION 0X29;VARIABLE QUE CONTROLO SI SE DETIENE LA CUENTA O SE RESETEA 0X2A 0X2B 0X00 ;INDICO DONDE COMIENZA EL PROGRAMA

EQU EQU EQU EQU EQU ORG GOTO ORG GOTO ORG

PRINCIPAL 0X04 ;CARGO EL VECTOR DE INTERRUPCION

INTERUP 0X05

;PROGAMA PRINCIPAL ;SEREOS PRINCIPAL CLRF CONTADOR

MOVLW 0X02 MOVWF CONTROLAR; INCF


1 ES PARA COMENZAR PARADO EL RELOJ NCREMENTO EL CONTADOR DEBIDO A QUE NECESITO QUE COMIENCE EN

CONTADOR,F;I STATUS,RP0

BSF

MOVLW 0X10 MOVWF TRISA MOVLW 0X01

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


MOVWF TRISB; MOVLW 0X06 MOVWF OPCION BCF CLRF CALL
;CARGO EL PREDIVISOR EN 128,LO ASIGNO A TMR,EL CUAL ES EXITADO POR FUENTE INTERNA

Pgina:32

COLOCO AL PUERTO A Y B COMO SALIDA Y EL RB0 COMO ENTRADA

STATUS,RP0 PORTA SETEO


CARGO AL TMR CON 217 DE MANERA QUE LA ECUACION QUEDE TIEMPO=(256-217)*128*1us=4.99mS cada este tiempo se producira una interrupcion HABILITA INTERRUPCION GIE,TOIE,INTE

MOVLW 0XD9; MOVWF TMR0; MOVLW 0XB0; MOVWF INTCON CLRF CLRF REBOTE

CONTADOR1

BUCLE GOTO BUCLE;BUCLE PRINCIPAL

;RUTINA DE INTERRUPCION INTERUP MOVWF GUARDO_W; SWAPF STATUS,W MOVWF GUARDO_S; BTFSS GOTO INTCON,T0IF SIGUI GUARDO STATUS DEL PROGRMA PRINCIPAL
;VERIFICA SI LA INTERRUPCION ES CAUSADA POR EL DESBORDAMIENTO DE TMR0

GUARDO W DEL PROGRAMA PRINCIPAL

;SI NO ES CAUSADA POR EL DESBORDAMIENTO DE TMR0 ENTONCES COMPRUEBO SI POR CAUSA EXTERNA SI LA INTERRUPCION ES CAUSADA POR TMRO ENTONCES CARGO NUEVAMENTE AL TMR CON 217 Y CONTINUO EL PROGRAMA VERIFICO QUE PASEN 8*5=40ms ANTES DE PODER INGRESAR OTRA INTERRUPCION EXTERNA

MOVLW 0XD9; MOVWF TMR0; MOVF BTFSS INCF BTFSS GOTO CLRF CLRF GOTO

REBOTE,F; STATUS,Z CONTADOR1,F CONTADOR1,3 NUMERO CONTADOR1 REBOTE NUMERO

SIGUI

BTFSC GOTO

INTCON,INTF; FIJATE ;

VERIFICA SI LA INTERRUCPCION ES A CAUSA DE UNA INTERRUPCION EXTERNA SI ES CAUSADA SALTO A FIJATE

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


GOTO FIJATE INCF TERMINA ; REBOTE,F ;

Pgina:33

INTERRUPCION NO VALIDA NO PROSIGUE Y SALTO PARA TERMINAR LA INTERRUPCION CONTROLO QUE LA INTERRUPCION EXTERNA NO SEA PROVOCADA POR REBOTES

MOVLW 0X01 XORWF REBOTE,W BTFSS GOTO INCF STATUS,Z TERMINA


;SI ES PROVOCADA POR REBOTES ENTONCES NO PROSIGUE Y TERMINO CON LA RUTINA DE INTERRUPCION

CONTROLAR,F;DE LO CONTRARIO INCREMENTO EL CONTADOR PARA DETERMINAR LA FUNCION A REALIZAR

NUMERO MOVF

CONTROLAR,W SI ES LA TERCERA LA PULSACION SIGNIFICA QUE DESEO EMPEZAR

XORLW 0X03; BTFSC CLRF BTFSC GOTO BTFSC CALL STATUS,Z CONTROLAR CONTROLAR,0; PARAR CONTROLAR,1; SETEO

ME FIJO SI SE PULSO UNA VEZ EL BOTON ESTO SIGNIFICA QUE DEBO PARAR LA CUENTA

SI PULSO UNA SEGUNDA VEZ EL PULSADOR SIGNIFICA QUE DESEO RESETEAR LA CUENTA

INCF MOVF

MILISEGUNDO,F MILISEGUNDO,W;
INCREMENTEO MILISEGUNDO CADA 5mS Luego de que milisegundo se incrementea 2 veces osea se llega a 1 centesima de segundo entonces incrementamos el display 1 que es el que maneja el digito menor de centesima de

XORLW 0X02 BTFSS


segundo

STATUS,Z; SAL1 MILISEGUNDO DISPLAY1,F DISPLAY1,W;

GOTO CLRF INCF SAL1 MOVF

cuando el display1 llega a 10, entonces se incrementa el segundo display2 el cual maneja la desima de segundo

XORLW 0X0A BTFSS GOTO CLRF INCF SAL2 MOVF STATUS,Z SAL2 DISPLAY1 DISPLAY2,F DISPLAY2,W;
cuando el display2 llega a 10, entonces se incrementa el display el cual maneja el digito de los segundos

XORLW 0X0A BTFSS GOTO STATUS,Z SAL3

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


CLRF INCF SAL3 MOVF DISPLAY2 DISPLAY3,F DISPLAY3,W;
cuando el display3 llega a 10, entonces se incrementa el displaye el cual maneja el digito de decenas segundos

Pgina:34

XORLW 0X0A BTFSS GOTO CLRF INCF STATUS,Z SAL4 DISPLAY3 DISPLAY4,F

SAL4

MOVF

DISPLAY4,W;

cuando el display4 llega a 6, entonces se RESETEAN LOS DISPLAY

XORLW 0X06 BTFSC CLRF PARAR CALL STATUS,Z DISPLAY4 DISPLAY GUARDO_S,W
RECUPERO LAS VARIABLES W Y STATUS DEL PROGRAMA PRINCIPAL

TERMINA SWAPF

MOVWF STATUS; SWAPF GUARDO_W,F SWAPF GUARDO_W,W MOVLW 0XB0 MOVWF INTCON; RETFIE ;SUBRUTINA DEL DISPLAY

REACTIVA LAS INTERRUPCION TOIE,TMR0

;ESTA SUBRUTINA ES LA ENCARGADA DE MOSTRAR EN LOS DISPLAY LOS NUMEROS EN LAS VARIABLES DISPLAY1 A DISPLAY4 ;ESTOS DISPLAY SE CONTROLAN MEDIANTE EL PUERTO B(EL CUAL INDICA COMO SE DEBE ENCENDER) ;Y EL PUERTO A (CONTROLA CUAL DISPLAY SE ENCIENDER) ;TODO ESTA REALIZADO CON LOGICA 0 DISPLAY BTFSC GOTO PORTA,3;VERIFICO QUE EL PUERTO A SE ENCUENTRE DENTRO DE LOS LIMITES(OSEA QUE NO PASE DE 11110111) EMPIEZO;SI NO ESTA DENTRO DE LOS LIMITES COMIENZA A ENCENDERSE DESDE EL PRIMER DISPLAY(OSEA 11111110)

MOVLW 0XFE MOVWF PORTA EMPIEZO MOVF CONTADOR,W;LA VARIABLE CONTADOR DETERMINA CUAL DISPLAY DEBE ENCENDERSE

XORLW 0X01 BTFSC GOTO STATUS,Z ;ME FIJO SI TENGO QUE PRENDE EL DISPLAY 1 SALE1

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


MOVF CONTADOR,W

Pgina:35

XORLW 0X02 BTFSC GOTO MOVF STATUS,Z ;ME FIJO SI TENGO QUE PRENDE EL DISPLAY 2 SALE2 CONTADOR,W

XORLW 0X03 BTFSC GOTO GOTO SALE1 MOVF CALL GOTO SALE2 MOVF CALL GOTO SALE3 MOVF CALL GOTO SALE4 MOVF CALL STATUS,Z;ME FIJO SI TENGO QUE PRENDE EL DISPLAY 4 SALE3 SALE4;ME FIJO SI TENGO QUE PRENDE EL DISPLAY 3 DISPLAY1,W ;BUSCO EL CODIGO DEL DISPLAY 1 TABLA SALIR DISPLAY2,W;BUSCO EL CODIGO DEL DISPLAY 2 TABLA SALIR DISPLAY3,W;BUSCO EL CODIGO DEL DISPLAY 3 TABLA SALIR DISPLAY4,W;BUSCO EL CODIGO DEL DISPLAY 4 TABLA ;(OSEA QUE BUSCO LA SECUENCIA DE ENCENDIDO PARA EL DISPLAY DE MANERA MUESTRE EL NUMERO EN DECIMAL DE LA VARIABLE)

SALIR

MOVWF PORTB MOVF

;PRENDO PUERTO B EN FUNCION DEL CODIGO MANDADO POR LA TABLA

CONTADOR,W

MOVWF AUXILIAR BSF STATUS,C

DECFSZ AUXILIAR,F;ENCIENDO EL DISPLAY CORRESPONDIENTE RLF MOVF PORTA,F CONTADOR,W

XORLW 0X04 BTFSC CLRF INCF STATUS,Z;LLEGUE AL ULTIMO DISPLAY CONTADOR;SI ENTONCES EMPIEZO LA PROXIMA POR EL PRIMERO CONTADOR,F ;DE LO CONTRARIO SIGO CON EL PROXIMO

RETURN ;DEVUELVO EL CONTROL DEL PROGRAMA

;ESTA TABLA CONVIERTE DE NUMERO DECIMAL A SU MANIFESTACION EN LOS DISPLAY

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


TABLA ADDWF PCL,F

Pgina:36

RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW ;SETEOS SETEO

0X80 0XEC 0X42 0X48 0X2C 0X18 0X10 0XCC 0X00 0X08

;"0" 10000000 ;"1" 11101100 ;"2" 01000010 ;"3" 01001000 ;"4" 00101100 ;"5" 00011000 ;"6" 00010000 ;"7" 11001100 ;"8" 00000000 ;"9" 00001000

5 6| |4 7 3| |1 2 .8

CLRF CLRF CLRF CLRF CLRF RETURN END

DISPLAY1 DISPLAY2 DISPLAY3 DISPLAY4 MILISEGUNDO

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD ANEXO 2 Programa de prueba que permite comprobar el bloque comunicaciones de la PC Programa del pic
;ESTE PROGRAMA RECIBE UN BYTE POR TRASNMICIION SERIE Y LUEGO LOS ENVIA DE REGRESO #include <p16f873.inc> ORG GOTO ORG GOTO INICIO CLRF CLRF BSF BCF 0x00 INICIO 0X04 INTE PORTB PORTC ; Limpia salidas

Pgina:37

STATUS,RP0 STATUS,RP1 ;Me voy al banco 1 ;RC7 ENTRADA Y RC6 SALIDA

MOVLW 0XBF MOVWF TRISC MOVLW 0X24 MOVWF TXSTA MOVLW 0X19 MOVWF SPBRG BSF BCF PIE,RCIE

;CONFIGURACION DE LA USART

;TRANSMICION DE 9600 BAUDIOS

;HABILITA INTERRUPCION DE RECEPCIN

STATUS,RP0; AL BANCO 0

MOVLW 0X90 MOVWF RCSTA ;configuracin de la usart para recepcin continua MOVLW 0XC0 MOVWF INTCON; Habilitacin de interrupcin BUCLE GOTO INTE BTFSS GOTO BCF MOVF CALL VOLVER RETFIE BCF PIR,TXF;RESTAURO BANDERA DEL TRANSMISOR BUCLE PIR,RCIF ;recivi dato? VOLVER ;NO ENTONCES SALGO PIR1,RCIF;SI REPONER BANDERA RCREG,W;LEO EL DATO TX_DATO;TRANSMITO EL DATO

TX_DATO

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


MOVWF TXREG;MUEVO EL BYTE AL TRANSMISOR BSF BCF TX BTFSS GOTO BCF RETURN STATUS,RP0 STATUS,RP1;VOY AL BANCO 1 TXSTA,TRMT ;BYTE TRANSMITIDO? TX;NO ENTONCES ESPERO STATUS,RP0;SI VUELVO AL BANCO 0

Pgina:38

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:39

Programa de la PC
//ESTE PROGRAMA ENVIA UN BYTE POR TRANSMISIN SERIE Y CUANDO RECIBE EL REBOTE LO MUESTRA EN PANTALLA. #define INTVECT #define 0x0c //vector de interrupcin puerto serial //puerto serial

BASE 0x3f8

#include <dos.h> #include <conio.h> #include <stdio.h>

//libreras necesarias para ejecutar el programa

unsigned int k=0,in,resultado,teclas=10; //Variables generales void interrupt portint(...); //funcin de interrupcin de puerto serial void grafica1(void); void main() { int intmask,aux=0; disable(); setvect(INTVECT,portint); //desabilitacion de interrupciones para poder //asignar la funcin de interrupcin al //vector de interrupcin enable(); intmask=inp(0x21); intmask=intmask&0xef; outp(0x21,intmask); outp(BASE+3,128); outp(BASE+0,0x0C); outp(BASE+1,0x00); outp(BASE+3,0x03); outp(BASE+4,0x0b); intmask=inp(BASE); intmask=inp(BASE+5); outp(BASE+1,0x01); //habilitacin de interrupciones //asignacin de la mascara de interrupcin // // //programacin del puerto serial //divisor en 12 para 9600 baudios // //activa DTR RST // //asignacin de la mascara de interrupcin // //activa la recepcin serial

while (tecla!=1) { if(k==1) { //en caso de que alla ocurrido //una interrupcion k=1; se imprime

printf("%d",resultado); //el dato en pantalla

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


// k=0; //demora para poder apreciar el dato //espero una nueva interrupcion } if (kbhit()) { scanf("%d",&teclas); outp(0x3f8,teclas); } // //En caso de haber pulsado una tecla

Pgina:40

} outp(BASE+1,0x00); gotoxy(10,10); printf("Programa FINALIZADO\n"); delay(2000); fclose(P); } void interrupt portint(...) //subrutina de interrupcion serial { disable(); //desabilito las interupciones para //recibir el dato de entrada en el puerto 0x3F8 //desactiva la recepcion serial // // //

resultado=inp(BASE); k=1;

//aviso al programa principal que ha llegado un dato outp(0x20,0x20); enable(); } //actualizo las banderas //y habilito las inerrupciones

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD ANEXO 3 Programa de prueba que permite comprobar el bloque modulador pwm
#include<P16F873.INC> ORG GOTO ORG INICIO BSF BCF MOVLW MOVWF MOVLW MOVWF BCF BUCLE MOVLW MOVWF MOVLW PASO MOVWF CLRF MOVLW MOVWF PAS CALL INCF DECFSZ GOTO GOTO 0X0C CCP2CON 0XFF 0X20 ;MXIMA VELOCIDAD DESEADA ;CONFIGURO AL CCP2 STATUS,RP0 ;VOY AL BANCO 1 STATUS,RP1 0XFD TRISC 0XFF ;CARGO EL PERIODO DEL PULSO PR2 STATUS,RP0 ;VOY AL BANCO 0 ;CONFIGURO EL PUERTO C PARA SALIDA DE PWM2 0X00 INICIO 0X05

Pgina:41

CCPR2L ;Velocidad inicial nula 0X06 T2CON ;configural al tmr2 con predivisor por 16

DELAY ;Produzco un retardo CCPR2L,F ;incremento la velocidad del motor 0X20,F ;Llegue la maximo? PAS ;No

PASO;Si,entonces empiezo de nuevo

DELAY

MOVLW MOVWF

0X4E 0X21 0X21,F BU

BU

DECFSZ GOTO RETURN

END

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD ANEXO 4 Programa de prueba que permite comprobar el funcionamiento del circuito de realimentacin
#include<P16F873A.inc> RELOJ CONTADOR UNIDAD DECENA CENTENA MILLAR CONTADOR1 CONTBAJO ALT0 AUX_BAJO AUX_0X29 ELEGIR AUX AUX2 EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU 0X20 0X22 0X23 0X24 0X25 0X26 0X27 0X28 0X29 0X2A 0X2B 0X2C 0X2D 0X2E

Pgina:42

GOTO ORG GOTO ORG ;configuracion del pic INICIO BSF BCF

INICIO 0X04 INTERRUP 0X05

STATUS,RP0 STATUS,RP1 ;ME VOY A CONFIGURAR AL BANCO 1

MOVLW 0X86 ;10000110 CONFIGURO EL REGISTRO OPTION PARA PULL UP OFF, ;INTERRUPCION EXTERNA POR FLANCO DESENDENTE ON MOVWF OPTION_REG CLRF TRISA ;RELOJ INTERNO ON,DIVISOR AL RELOJ INTERNO,DIVISOR A 128 ;COLOCO AL PUERTO A COMO SALIDA

MOVLW 0X01 MOVWF TRISB ENTRAN LOS PULSOS MOVLW 0X90 MOVWF INTCON MOVLW 0X06 ;00000110;CONFIGURO AL PUERTO A COMO SALIDA DIGITAL ;COLOCO AL PUERTO B COMO SALIDA MENOS EL RB0 QUE ES POR DONDE ;10100000;CONFIGURO LA INTERRUPCION PARA INTERNA

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


MOVWF ADCON1 BCF BCF STATUS,RP0 STATUS,RP1 ;VUELVO AL BANCO 0

Pgina:43

MOVLW 0XFF MOVWF PORTA CLRF CLRF CLRF CLRF CLRF CLRF CLRF ADCON0 PORTB ELEGIR CONTBAJO RELOJ CONTADOR1 0X29 ;COLOCO PARA NO ENCENDER DISPLAY ;ME ASEGURO QUE NO FUNCIONE EL CONVERSOR AD ;SETEOS DE VARIABLES

MOVLW 0Xd9 MOVWF TMR0 BSF INTCON,T0IE

BUCLE

CLRWDT GOTO BUCLE ;COMO TENGO VARIAS PROCEDENCIA DE INTERRUPCION DEBO

INTERRUP ;SABER CUAL ES LA QUE CAUSO LA INTERRUPCION BTFSC GOTO BTFSC GOTO RETFIE INTERNA INCF RELOJ,F INTCON,T0IF INTERNA INTCON,INTF EXTERNA

;INTERRUPCION INTERNA

;INTERRUPCION EXTERNA

MOVLW 0XC8 XORWF RELOJ,W BTFSS GOTO CLRF CALL BCF STATUS,Z FIN RELOJ CUENTA INTCON,INTF ;NO LLEGUE AL SEGUNDO ENTONCES S0LTO ;SI LLEGUE AL SEGUNDO ENTONCES HAGO LA CUENTA DE LAS RPM ;ME FIJO SI LLEGUE A 1SEGUNDO

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


FIN CALL DISPLAY ;CARGO CON 217 AL TMR0 PARA QUE EL TIEMPO DE

Pgina:44

MOVLW 0Xd9 INTERRUPCION=1us*128*(256-217)=5ms MOVWF TMR0 BCF RETFIE CUENTA INTCON,T0IF

;BORRO LA BANDERA DE INTERRUPCION INTERNA

CLRF Y MILLAR CLRF CLRF CLRF MOVF BTFSS GOTO MOVF BTFSC RETURN ARRIBA

UNIDAD DECENA CENTENA MILLAR CONTBAJO,F STATUS,Z ARRIBA 0X29,F STATUS,Z

;DIVIDO AL NUMERO PARA QUE QUEDE EN UNIDAD, DECENA, CENTENA

MOVLW 0X01 ADDWF AUX_BAJO,F BTFSC INCF STATUS,C AUX_0X29,F

INCF CLRWDT

UNIDAD,F

MOVLW 0X0A XORWF UNIDAD,W BTFSS GOTO CLRF INCF DEC STATUS,Z DEC UNIDAD DECENA,F

MOVLW 0X0A XORWF DECENA,W BTFSS GOTO STATUS,Z CEN

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


CLRF INCF CEN DECENA CENTENA,F

Pgina:45

MOVLW 0X0A XORWF CENTENA,W BTFSS GOTO CLRF INCF STATUS,Z MIL CENTENA MILLAR,F

MIL

MOVLW 0X0A XORWF MILLAR,W BTFSS GOTO CLRF STATUS,Z SAL MILLAR AUX_0X29,W

SAL

MOVF

XORWF 0X29,W BTFSS GOTO MOVF STATUS,Z ARRIBA AUX_BAJO,W

XORWF CONTBAJO,W BTFSS GOTO CLRF CLRF RETURN STATUS,Z ARRIBA CONTBAJO 0X29

DISPLAY SEGMENTOS MOVF CALL ELEGIR,W PUERTOA

;ESTA SUBSUTINA ES LA ENCARGADA DE MANEJAR LOS DISPLAY 7

MOVWF PORTA MOVLW UNIDAD ADDWF ELEGIR,W MOVWF FSR MOVF CALL INDF,W PUERTOB

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


MOVWF PORTB INCF ELEGIR,F

Pgina:46

MOVLW 0X04 XORWF ELEGIR,W BTFSC CLRF RETURN PUERTOA ADDWF PCL,F RETLW RETLW RETLW RETLW 0XFE 0XFD 0XFB 0XF7 ;RA0 ;RA1 ;RA2 ;RA3 STATUS,Z ELEGIR

PUERTOB RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW

ADDWF PCL,F 0X80 0XEC 0X42 0X48 0X2C 0X18 0X10 0XCC 0X00 0X08 ;"0" 10000000 ;"1" 11101100 5 -

;"2" 01000010 6| |4 ;"3" 01001000 7 ;"4" 00101100 3| |1 ;"5" 00011000 ;"6" 00010000 ;"7" 11001100 ;"8" 00000000 ;"9" 00001000 2 .8

EXTERNA MOVLW 0X01 ADDWF CONTBAJO,F BTFSC INCF BCF RETFIE END STATUS,C 0X29,F INTCON,INTF ;BORRO BANDERA DE INTERUPCION

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD ANEXO 5 Programa Final Programa del PIC
#include<p16f873.inc> RELOJ BANDERASS CONTADOR UNIDAD DECENA CENTENA MILLAR CONTADOR1 CONTBAJO ALT0 AUX_BAJO AUX_0X29 ELEGIR AUX AUX2 REFB EQU REFH EQU BANDAS EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU 0X2F 0X30 0X31 0X20 0X21 0X22 0X23 0X24 0X25 0X26 0X27 0X28 0X29 0X2A 0X2B 0X2C 0X2D 0X2E ;DECLARACIN DE VARIABLES

Pgina:47

ORG GOTO ORG GOTO ORG ;configuracion del pic INICIO BSF BCF INICIO

0X00

0X04 INTERRUP 0X05

STATUS,RP0 STATUS,RP1 ;ME VOY A CONFIGURAR AL BANCO 1 ;10000110 CONFIGURO EL REGISTRO OPTION PARA PULL UP OFF, ;INTERRUPCION ;RELOJ INTERNO ON,DIVISOR AL RELOJ INTERNO,DIVISOR A 128 ;COLOCO AL PUERTO A COMO SALIDA

MOVLW 0X86 EXTERNA POR FLANCO DESENDENTE ON MOVWF OPTION_REG CLRF TRISA

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


MOVLW 0X01 MOVWF TRISB ENTRAN LOS PULSOS MOVLW 0XF0 MOVWF INTCON MOVLW 0XBD SALIDA RS232 MOVWF TRISC MOVLW 0X06 MOVWF ADCON1 MOVLW 0XFF MOVWF PR2 TMR2= 4.096 ms MOVLW 0X24 BITS MOVWF TXSTA MOVLW 0X19 MOVWF SPBRG BSF BSF BCF BCF ;CONFIGURO A 9615 BAUDIOS ;00100100 Configuro LA USAR COMO TRANSMICION ASINCRONA DE ALTA VELOCIDAD DE 8 ;CARGO EL VALOR DEL PERIORDO DEL PULSO=(PR2+1)*4*Tosc*Predivisor ;00000110;CONFIGURO AL PUERTO A COMO SALIDA DIGITAL ;COLOCO AL PUERTO C PARA EL MODULADOR DE ANCHO DE PULSO Y ENTRADA Y ;COLOCO AL PUERTO B COMO SALIDA MENOS EL RB0 QUE ES POR DONDE ;11110000;CONFIGURO LA INTERRUPCION PARA INTERNA

Pgina:48

PIE1,RCIE ;HABILITO LA INTERRUPCION PARA LA RECEPCION TXSTA,TXEN STATUS,RP0 STATUS,RP1 ;VUELVO AL BANCO 0

MOVLW 0X90 MOVWF RCSTA BSF

;10010000 Configuro PARA RECEPCION CONTINUA A LA USAR

RCSTA,SPEN

MOVLW 0X0C MOVWF CCP2CON MOVLW 0X07 MOVWF T2CON MOVLW 0XFF MOVWF PORTA CLRF CLRF CLRF CLRF CLRF CLRF ADCON0 PORTB ELEGIR CONTBAJO RELOJ CONTADOR1 ;COLOCO PARA NO ENCENDER DISPLAY ;ME ASEGURO QUE NO FUNCIONE EL CONVERSOR AD ;SETEOS DE VARIABLES ; habilitacion del tmr2 con un predivisor de 16 ;Configuro como modulador por ancho de pulso al ccp2

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


CLRF CLRF CLRF BANDERASS BANDAS 0X29

Pgina:49

MOVLW 0X07 MOVWF REFH MOVLW 0XD0 MOVWF REFB MOVLW .37 MOVWF CCPR2L MOVLW 0Xd9 iNTERRUPCION=1us*128*(256-217)=5ms MOVWF TMR0 BSF BCF BSF BCF BCF STATUS,RP0 STATUS,RP1 TXSTA,TXEN STATUS,RP0 STATUS,RP1 ; Transmisin habilitada ; Banco 0 ; Velocidad de giro inicial DEL MOTOR nula ;CARGO CON 217 AL TMR0 PARA QUE EL TIEMPO DE

BUCLE

CLRWDT GOTO BUCLE

INTERRUP ;COMO TENGO VARIAS PROCEDENCIA DE INTERRUPCION DEBO SABER CUAL ES LA QUE CAUSO LA INTERRUPCION BTFSC GOTO BTFSC GOTO BTFSC GOTO RETFIE RECEPCION BCF PIR1,RCIF ;COMO EL DATO VIENE PARTIDO EN 2 MITADES ENTONCES TENGO QUE TENER LA PRECAUSION DE COLOCAR EL DATO DONDE CORRESPONDA MOVF BTFSC GOTO REFERENCIA MOVWF REFH RCREG,W BANDERASS,0 SALTITO ;LA PRIMERA PARTE LA GUARDO EN LA PARTE ALTA DE LA INTCON,T0IF INTERNA INTCON,INTF EXTERNA PIR1,RCIF RECEPCION ;POR QUE INGRESO UN DATO EXTERNO PR RS232 ;INTERRUPCION EXTERNA ;INTERRUPCION INTERNA

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


INCF RETFIE SALTITO MOVWF REFB CLRF RETFIE INTERNA INCF RELOJ,F BANDERASS ;LA SEGUNDA PARTE LA GUARDO EN LA PARTE BAJA DE LA REFERENCIA BANDERASS,F

Pgina:50

MOVLW 0XC8 XORWF RELOJ,W BTFSS GOTO CLRF CALL BCF STATUS,Z FIN RELOJ CUENTA INTCON,INTF ;NO LLEGUE AL SEGUNDO ENTONCES SALTO ;SI LLEGUE AL SEGUNDO ENTONCES HAGO LA CUENTA DE LAS RPM ;ME FIJO SI LLEGUE A 1SEGUNDO

FIN

CALL

DISPLAY ;CARGO CON 217 AL TMR0 PARA QUE EL TIEMPO DE

MOVLW 0Xd9 INTERRUPCION=1us*128*(256-217)=5ms MOVWF TMR0 BCF RETFIE CUENTA CLRF CLRF CLRF MOVF CONTADOR1 AUX_BAJO AUX_0X29 CONTBAJO,W INTCON,T0IF

;BORRO LA BANDERA DE INTERRUPCION INTERNA

;MULTIPLICO POR 3

MOVWF AUX MOVF 0X29,W

MOVWF AUX2 BU MOVF AUX,W

ADDWF CONTBAJO,F BTFSC INCF MOVF STATUS,C 0X29,F AUX2,W

ADDWF 0X29,F

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


INCF CONTADOR1,F

Pgina:51

MOVLW 0X02 XORWF CONTADOR1,W BTFSS GOTO BCF RRF RRF STATUS,Z BU STATUS,C 0X29,F CONTBAJO,F ;DIVIDI POR 2 DE ESTA MANERA YA TENGO EL VALOR DE RPM

CALL CALL CLRF Y MILLAR CLRF CLRF CLRF MOVF BTFSS GOTO MOVF BTFSC RETURN ARRIBA

MODULADOR TRANSMITIR UNIDAD DECENA CENTENA MILLAR CONTBAJO,F STATUS,Z ARRIBA 0X29,F STATUS,Z

;HAGO LAS CUENTAS PARA EL MODULADOR POR ANCHO DE PULSO ;TRANSMITO LOS DATOS A LA PC ;DIVIDO AL NUMERO PARA QUE QUEDE EN UNIDAD, DECENA, CENTENA

MOVLW 0X01 CLRWDT ADDWF AUX_BAJO,F BTFSC INCF INCF STATUS,C AUX_0X29,F UNIDAD,F ;DIVIDE EN UNIDAD

MOVLW 0X0A XORWF UNIDAD,W BTFSS GOTO CLRF INCF DEC STATUS,Z DEC UNIDAD DECENA,F

MOVLW 0X0A

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


XORWF DECENA,W BTFSS GOTO CLRF INCF CEN STATUS,Z CEN DECENA CENTENA,F ;DIVIDE EN DECENA

Pgina:52

MOVLW 0X0A XORWF CENTENA,W BTFSS GOTO CLRF INCF STATUS,Z MIL CENTENA MILLAR,F ;DIVIDE EN CENTENA

MIL

MOVLW 0X0A XORWF MILLAR,W BTFSS GOTO CLRF STATUS,Z SAL MILLAR AUX_0X29,W ;DIVIDE EN MILLAR

SAL

MOVF

XORWF 0X29,W BTFSS GOTO MOVF STATUS,Z ARRIBA AUX_BAJO,W

XORWF CONTBAJO,W BTFSS GOTO CLRF CLRF RETURN STATUS,Z ARRIBA CONTBAJO 0X29 ;HAGO LAS CUENTAS PARA EL MODULADOR POR ANCHO DE PULSO

MODULADOR MOVF 0X29,W ;ES IGUAL LA PARTE ALTA DE LA REFERENCIA Y LA DE LAS ACTUALES?

XORWF REFH,W BTFSC GOTO STATUS,Z SI_IGUAL ;SI IGUAL ;NO IGUAL MOVF REFH,W ;Si REFH<CONTH ENTONCES MODULADOR A 0

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


SUBWF 0X29,W BTFSS GOTO STATUS,C NO_MAYOR

Pgina:53

MOVLW 0X02 SUBWF CCPR2L,F BTFSC RETURN MOVLW .37 MOVWF CCPR2L RETURN NO_MAYOR MOVLW 0X02 ADDWF CCPR2L,F BTFSS RETURN MOVLW 0XFF MOVWF CCPR2L RETURN ; Si LLEGO AL LIMITE SUPERIOR LO PONDO EN 255 DECIMAL AL MODULADOR ;DE ESTA MANERA ESTAMOS EN LA MXIMA SATURACION STATUS,C ;Si LLEGO AL LIMITE INFERIOR LO PONDO EN 37 DECIMAL AL MODULADOR ;DE ESTA MANERA ESTAMOS EN EL CORTE JUSTO EN EL TRANSISTOR STATUS,C

SI_IGUAL MOVF CONTBAJO,W ;Si REFB<=CONTB ENTONCES MODULADOR A 0

SUBWF REFB,W BTFSC GOTO STATUS,C RESTA

MOVLW 0X01 SUBWF CCPR2L,F BTFSC RETURN MOVLW .37 MOVWF CCPR2L RETURN RESTA MOVLW 0X01 ADDWF CCPR2L,F BTFSS RETURN STATUS,C ;Si LLEGO AL LIMITE INFERIOR LO PONDO EN 37 DECIMAL AL MODULADOR ;DE ESTA MANERA ESTAMOS EN EL CORTE JUSTO EN EL TRANSISTOR STATUS,C

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


MOVLW 0XFF MOVWF CCPR2L RETURN

Pgina:54

TRANSMITIR LOS DATOS MOVF 0X29,W

;ESTA SUBRUTINA ES LA ENCARGADA DE REALIZAR LA TRANSMISIN DE

MOVWF TXREG BSF BCF NO BTFSS GOTO BCF BCF MOVF STATUS,RP0 STATUS,RP1 TXSTA,TRMT NO STATUS,RP0 STATUS,RP1 CONTBAJO,W

;PRIMERO TRANSMITO LA PARTE ALTA DEL CONTADOR ; VOY AL BANCO 1

;Se puede transmitir?

;VOY AL BANCO 0

;Transmito la parte baja

MOVWF TXREG RETURN DISPLAY ;Esta subrutina es la encargada de encender los display en la secuencia correcta con el numero correspondiente MOVF CALL ELEGIR,W PUERTOA

MOVWF PORTA MOVLW UNIDAD ADDWF ELEGIR,W MOVWF FSR MOVF CALL INDF,W PUERTOB

MOVWF PORTB INCF ELEGIR,F

MOVLW 0X04 XORWF ELEGIR,W BTFSC CLRF RETURN PUERTOA ADDWF PCL,F RETLW 0XFE ;RA0 STATUS,Z ELEGIR

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


RETLW RETLW RETLW 0XFD 0XFB 0XF7 ;RA1 ;RA2 ;RA3

Pgina:55

PUERTOB RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW

ADDWF PCL,F 0X80 0XEC 0X42 0X48 0X2C 0X18 0X10 0XCC 0X00 0X08 ;"0" 10000000 ;"1" 11101100 5 -

;"2" 01000010 6| |4 ;"3" 01001000 7 ;"4" 00101100 3| |1 ;"5" 00011000 ;"6" 00010000 ;"7" 11001100 ;"8" 00000000 ;"9" 00001000 2 .8

EXTERNA MOVLW 0X01

;Si viene una interrupcion externa incremento el contbajo y si se desborda incremento la parte alta

ADDWF CONTBAJO,F BTFSC INCF BCF RETFIE END STATUS,C 0X29,F INTCON,INTF ;BORRO BANDERA DE INTERUPCION

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Pgina:56

Programa de la PC
#define INTVECT #define BASE 0x3f8 #include <dos.h> #include <conio.h> #include <stdio.h> unsigned int k=0,in,resultado,tecla=2000,teclas=10; //Variables generales void interrupt portint(...); //funcion de inerrupcion de puerto serial void grafica1(void); void main() { int intmask,aux=0; FILE *P; disable(); setvect(INTVECT,portint); //desabilitacion de interrupciones para poder //asignar la funcion de interrupcion al //vector de interrupcion enable(); intmask=inp(0x21); intmask=intmask&0xef; outp(0x21,intmask); outp(BASE+3,128); outp(BASE+0,0x0C); outp(BASE+1,0x00); outp(BASE+3,0x03); outp(BASE+4,0x0b); intmask=inp(BASE); intmask=inp(BASE+5); outp(BASE+1,0x01); grafica1(); //habilitacion de interrupciones //asigancion de la mascara de interrupcion // // //programacion del puerto serial //divisor en 12 para 9600 baudios // //activa DTR RST // //asignacion de la mascara de interrupcion // //activa la recepcion serial //pantalla de presentacion //Apertura del Archivo datos.txt 0x0c //vector de interrupcion puerto serial

//puerto serial //librerias necesarias para ejecutar el programa

if((P=fopen("datos.txt","w"))==NULL) printf("no puedo abrir el archivo"); fprintf(P,"%s while (tecla!=1) { %s

%s\n","tiempo","valor deseado","valor obtenido");

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


if(k==1) { gotoxy(60,2); printf("RPM actuales: gotoxy(74,2); printf("%d",resultado); // k=0; //demora para poder apreciar el dato //espero una nueva interrupcion } if (kbhit()) { gotoxy(2,2); printf("RPM deseadas: gotoxy(15,2); scanf("%d",&tecla); teclas=tecla>>8; outp(0x3f8,teclas); delay(10); teclas=tecla&0xFF; outp(0x3f8,teclas); } delay(1000); fprintf(P,"%d } outp(BASE+1,0x00); gotoxy(10,10); printf("Programa FINALIZADO\n"); delay(2000); fclose(P); } void interrupt portint(...) //subrutina de interrupcion serial { disable(); in=inp(BASE); //desabilito las interupciones para //recibir el dato de entrada en el puerto 0x3F8 //desactiva la recepcion serial // // // %d // %d\n",aux++,tecla,resultado); "); // //En caso de haber pulsado una tecla "); //el dato en pantalla //en caso de que alla ocurrido //una interrupcion k=1; se imprime

Pgina:57

Fecha: 14/06/06

Revisin: /

INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD


if(k==1) { resultado=resultado|in; } if(k==0) { resultado=in<<8; k=1; } //aviso al programa principal que ha llegado un dato outp(0x20,0x20); enable(); } void grafica1() { int i; clrscr(); textcolor(WHITE); textbackground(BLUE); clrscr(); cprintf("PROGRAMA REGULADOR DE VELOCIDAD DE MOTOR DC"); for(i=0;i<=46;i++) cprintf(" "); } //actualizo las banderas //y habilito las inerrupciones

Pgina:58

cprintf("");

Fecha: 14/06/06

Revisin: /

You might also like