INSTITUTO UNIVERSITARIO AERONAUTICO TRABAJO FINAL DE LABORATORIO: \u201cCONTROL DE VELOCIDAD DE UN MOTOR DC MED MODULACI\u00d3N POR ANCHO DE PULSO\u201d
Informe T\u00e9cnico:
Revisi\u00f3n: /
Proyecto: / Fecha: 14/06/06
Autor:
Revis\u00f3:
Vo.Bo. :
Serrudo Mario Sebasti\u00e1n
Ing. Luis Murgio
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
P\u00e1gina:1
INDICE P\u00e1gina. RESUMEN
2
1. INTRODUCCION
3
2. DESARROLLO 2.1 Diagrama en bloque del circuito
4
2.2 Hardware del circuito
4
2.3 Software
7
3. CONCLUSI\u00d3N
10
Fecha: 14/06/06
Revisi\u00f3n: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:2
“CONTROL DE VELOCIDAD DE UN MOTOR DC MEDIAN MODULACIÓN POR ANCHO DE PULSO”
por: Serrudo Mario Sebastián. Resumen
El propósito de este trabajo consiste en la realización de un mecanismo para c velocidad (RPM) de un motor de corriente continua.
El sistema que se emplea en este trabajo se basa en un microcontrolador que esta m
la velocidad del motor a través de un optoacoplador. La finalidad del controlador es ma velocidad constante del motor a cambios bruscos de carga , desplegar la velocidad de
digital y de igual manera poder programar la velocidad deseada externamente median utilización de una PC.
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:3
1.INTRODUCCIÓN
El control de velocidad del motor DC serie, es un sistema de control electrónico de l
muy utilizado en la actualidad debido que dichos motores tienen características de vel torque muy interesantes, las cuales pueden ser aprovechadas de manera muy sencilla sistema de control.
Típicamente el control de la velocidad de los motores DC se realiza de manera conti
mediante la utilización de un reóstato, operacionales, etc. Este método resulta en oca
deficientes en particular cuando se desea un control centralizado de bajo mantenimien precisión y facilidad de monitoreo por lo que se recurre al control digital.
En este trabajo se describirá el diseño y la construcción de un S istema de Control Di Velocidad de un motor de corriente continua tipo serie, mediante un microcontrolador
PIC16F873. Se analizan las funciones de transferencia del Sistema y la implementació
estrategia de control por medio del microcontrolador. Asimismo se presentan las consi del diseño del hardware y software y los resultados experimentales obtenidos. E ste S numerosas aplicaciones donde se tiene disponible tensión continua como en vehículos grúas, carros mineros de arrastre, servos de corriente continua, etc
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:4
2.DESARROLLO A continuación se realiza un breve desarrollo teórico sobre el sistema de control 2.1.Teoría.
El sistema de control a utilizar en este trabajo se denomina “ Delta”, y es de muy fáci
implementación en sistemas digitales pero de una deducción teórica muy compleja, po
se procederá a hacer una aproximación mediante un control clásico continuo con el qu consigue muy buenos resultados.
El diagrama de un sistema de control de lazo cerrado clásico es como el que se mue continuación:
REF
+
K
RPM
MOTOR
H
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 función de transferencia de cada bloque es la siguiente : Motor
=
K
H
Fecha: 14/06/06
=
=
FT
=
FT
=
FT
RPM
=
Voltios
Voltios Pulsos
=
Pulsos =
RPM
=
A
(s
+
B
Cte
Cte 2
Revisión: /
)
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:5
Si buscamos la función de transferencia del sistema se obtiene lo siguiente: Sistema
=
RPM
CteA
=
REF
(S
+
B
(1)
2CteA )
Cte
+
y transformando al dominio del tiempo se obtiene:
RPM
(t )
*
CteA
=
B
+
Cte
REF
2CteA
−t
(1
−
e
B
+ Cte
2 CteA
)
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 modulación “Delta” consideraremos que el sistema es mas lento aun, por lo que la formula final queda: RPM
(t )
=
CteA B
+
*
Cte
REF
2CteA
−
(1
−
e
10 ( B
+
t
Cte
2 CteA )
)
De esta manera se concluye el estudio teórico del comportamiento del sistema de co 2.2Diagrama en bloques:
A continuación se realizara un diagrama en bloque del sistema de control de velo
Comunicación con la PC
PWM
Tx Rx
Potencia
Micro controlador
Motor RPM
VisualizaciónPuerto A y B
Rb0
Modulo de Realimentación o encode
.
2.3Hardware
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:6
El montaje de este sistema se realizó en Protoboard y básicamente consiste de los s descriptos en el diagrama en bloque de la sección anterior. 2.3.1Microcontrolador Se comienza el diseño 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 u optoacoplador) y visualización (mediante display 7 segmentos) de las RPM del motor.
Además este microcontrolador debe permitir mantener una comunicación serie (ba 232) con la PC para poder transmitir las RPM actuales y recibir la señal de referencia deseadas necesaria para el proceso de control. En función de los requisitos anteriormente enunciados se procedió a la elección de microcontrolador PIC16F873 debido a que posee las siguientes características : •
Procesador de arquitectura RISC avanzada.
•
Juego de 35 instrucciones con 14 bits de longitud. Todas ellas se ejecutan en un ciclo de instrucción, menos las de salto que tardan dos.
•
Frecuencia máxima de 20 MHz.
•
Hasta 8 K palabras de 14 bits para la Memoria de Código, tipo FLASH.
•
Hasta 368 bytes de Memoria de Datos RAM.
•
Hasta 256 bytes de Memoria de Datos EEPROM
•
Hasta 14 fuentes de interrupción internas y externas.
•
Pila con 8 niveles.
•
Modos de direccionamiento directo, indirecto y relativo.
•
Perro Guardián (WDT).
•
Código de protección programable.
•
Modo SLEEP de bajo consume.
•
Voltaje de alimentación comprendido entre 2y 5,5 V.
•
Bajo consumo (menos de 2 mA a 5 V y 5 MHz).
•
3 TIMER
•
2 Módulos de Captura-Comparación-PWM
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD •
Conversor A/D de 10 Bits
•
Puerto serie síncrono
•
USART
•
Interrupción externa
Página:7
Como se puede observar este microcontrolador cumple con los requisitos necesarios sistema. 2.3.2 Visualización El circuito visualizador de las RPM se basa en 4 display 7 segmentos conectados al P
cuales hay que determinar si van a ser activos por cero o por uno en otras palabras si van a ánodo común o cátodo común. Para ello se realiza un estimación de la potencia consumida o disipada por el
microcontrolador si se decide que los diodos sean activos por alto o bajo. Para ello se obs
curvas de características eléctricas del PIC IOH Vs VOH, corriente de salida Vs voltaje de
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 caída interna del pic es de 1.25v
consumiendo 12.25mW por diodo. En el otro caso, activo por bajo la caída del pic es de 0.5 una potencia de 7.5 mW por diodo.
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:8
En conclusión se decide que los displays sean activos por bajo utilizándose entonces di
de ánodo común. La corriente solicitada por cada display en el peor caso, (todos los segme
encendidos) es de 10mA x 7 =70mA para suministrarla se utiliza un transistor PNP BC327
polarizado en corte y saturación que provee la intensidad de corriente requerida por el dis circuito a diseñar para cualquier display es el siguiente VCC 5V
Q1
RB
BC327
CK
U1 A B C D E F G
RB1 Ln1 Ln2
Ln3
AL_PUERTO_B
Ln4
Ln5
Ln6
Ln7
Fecha: 14/06/06
RB2 RB3 RB4 RB5
RB6
RB7
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:9
Rc se calcula a de la siguiente manera Vcc −Vec −Vd −IaRc−VOL =0
donde Vec= 0.3v es el voltaje de saturación del transistor y V OL=0.5v es el voltaj bajo del puerto B del PIC .
Rc
− Vec
Vcc
=
− Vd
− V
OL
Ia
=
5 v − 0 .3 v − 0 .7 v − 0 .5 v 10 mA
= 350 Ω
≈ 330 Ω
Rb se calcula de la siguiente manera Vcc −Veb −VOL RB I Bsat ≥
= I Bsat
Ic
β min
donde IBsat es la corriente de base para saturar el transistor
R
B
≤
V
cc
− Veb
I
c
−V
OL
β
min
=
5 v − 0 .7 v − 0 .5 v 10 mA
15 = 500 Ω
≈ 470 Ω
de este modo quedan las resistencias Rc y Rb por los valores mas cercanos que se en el laboratorio.
Los pines del puerto A (RA0, RA1, RA2 y RA3) son los encargados de la activació displays a través de las resistencias de base Rb.
Los pines del puerto B (RB1-RB7) manejan los 7 segmentos de los displays a trav resistencias Rb1, Rb2,etc. De esta manera queda diseñada el bloque visualizador display 7 segmentos.
2.3.3 Comunicación con la PC Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:10
La comunicación con la computadora como ya se ha mencionado se realiza mediante
protocolo de comunicación serie RS -232. Dicho protocolo establece una serie de condicio necesarias para realizar una comunicación exitosa.
Básicamente este tipo de comunicación se realiza de manera asincrónica por lo que cada
de información se envía independientemente de las demás. Suele constar de 8 o 9 bits y va
precedidos por un bit de START(inicio) y detrás de ellos se coloca un bit de STOP(parada),
acuerdo con la norma del formato NRZ(nonReturn-to-Zero).Los bits se transfieren a una f fija y normalizada. Toda esta operación es realizada en el USAR del PIC o de la PC.
Un importante hecho que establece la norma son los voltajes de operación los cuales s
establecen en –12 o 12 voltios según el nivel logico, el microcontrolador no tiene la posibil 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
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:11
2.3.4 Modulo de potencia.
Como se ha mencionado anteriormente el control del motor se realiza mediante un mod
por ancho de pulso que posee el microcontrolador. Se ha decidido utilizar este tipo de mod
debido a que el motor no pierde sus propiedades de velocidad y par que son tan deseadas d conservar. Básicamente la técnica consiste en una señal cuadrada de frecuencia fija a la cual variar el ancho del impulso positivo como se observa en la siguiente figura.
Ahora si estudiamos el nivel de continua de dicha señal obtenemos lo siguiente. Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Vdc
1 =
T
T
/x
VccT
∫Vccdt
=
0
TX
Página:12
Vcc =
X
Ahora si llamamos a m=1/X obtenemos: Vdc
=
mVCC
En donde: Vcc: es el nivel de cresta de la señal X: es la relación entre el periodo y el ancho del impulso M: es la relación entre el ancho del impulso y el periodo
En la siguiente figura se puede observar que a medida que los pulsos se hacen mas anc
nivel de continua se hace superior por lo tanto se puede tomar a un modulador PWM como controlador proporcional K como el propuesto en la sección de teoría.
Debido a que un motor de corriente continua puede tener consumos de varios ciento 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 NP N TI
cual opera en corte y saturación. La misión de este transistor es proporcionar la corriente al ritmo que el modulador por ancho de pulso lo imponga.
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:13
El circuito utilizado para esta tarea es el siguiente.
VCC
S1 MOTOR
M
D1 1N4148
Q1 R1
pwm
TIP31A
La resistencia R1 se calcula de la siguiente manera.
Vpwm
R1
=
max
β
IC
−
IC
β
R1
−
Vce
(Vpwm max
−
=
0
Vce )
En donde : Vpwmmax = 5 vol IC=600mA Vce=0.6 V β=100
quedando: R1 =
100 600
( 5 − 0 .6 )
=
733 Ω
Debido a que el motor es un elemento inductivo, cuando se desconecta de manera abr
tiende a elevar su potencial, para que esto no dañe al transistor se coloca el diodo en paral el motor de manera que cuando ocurra una desconexión abrupta el diodo cortocircuite al protegiendo al transistor. De esta manera concluye el estudio de la etapa de potencia del sistema. Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:14
2.3.5 Motor
El motor utilizado en este proyecto es de un auto de juguete, dicho motor aproximadamente 500 mA máximo y puede ser alimentado desde 1.5 hasta 5 voltios.
La función de transferencia del motor fue obtenida experimentalmente como se dem ANEXO 1 Ft
=
A S
+
B
=
2834
S
+
0 . 8034
2.3.6 Modulo de realimentación o Encode
Este modulo es el encargado de realimentar el sistema, básicamente transforma las
pulsos digitales para que el PIC pueda determinar la RPM del motor y en función de la referencia efectué una corrección.
Esto se logra colocando al eje del motor una rueda dentada y un optoacoplador para el paso de una ranura tal como se muestra en la figura.
Como se puede observar el foto transistor entra en conducción cuando es iluminado
cuando no lo es, pero en la realidad este fototransistor no trabaja en corte y saturación
produce una señal senoidal debido a que la iluminación se produce de manera paulatin a esta señal hay que acondicionarla mediante un circuito conformador de onda.
El circuito completo de realimentación es el siguiente. Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:15
VDD R2
R3
10k VDD
10k
5V R10 R11 1.0k
5V
RB0
4
U1A
Disco
3
1K _LIN 50% Key = Space
1
X1
2 11
LM324AD
LED1
R1 5.1k
Para simplificar el análisis del circuito lo dividiremos en dos partes: 1. Circuito de toma de señal 2. Circuito conformador de onda.
El circuito de toma de señal consiste de un fototransistor y de un diodo emisor junto resistencia limitadora de corriente de la cuales una de ellas(R10) permite controlar la que se iluminará al fototransistor.
La segunda parte del circuito es el conformador de onda cuya función es tomar la o
senoidal proveniente de la etapa anterior y transformarla en una señal cuadrada de ma 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 r
R2 y R3 se encuentran en paralelo , por lo que la tensión en la entrada no inversora de es: V
1=
5 R 1( R 2 + R 1R
2+
R 1R
R
3+
3) R
2R 3
por lo tanto cuando la tensión en la entrada inversora supere a V1 la salida del operaci a valer 0 voltio.
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:16
Ahora si suponemos que a la salida del operacional hay 0 voltios de manera que la res
y R2 se encuentran en paralelo , por lo que la tensión en la entrada no inversora del op V 2
5 R1R 2
=
R1R 2
R1R 3
+
+
R2R3
por lo tanto cuando el valor en para inversora disminuya de v2 la salida del operaciona Ahora propongo una tensión de subida V1 de 2.5 Vol y y tensión de bajada de 1.2V por formulas quedan:
V
5 R 1( R 2 +
1=
V 2
=
R 1R
2+
R 1R
R
3)
3+
R
5 R1R 2 R 1R 2
+
R1R 3
+
2 .5
2R 3
R 2R 3
=
1 .2
Haciendo el cociente entre ambas obtenemos: V1 V 2
−
R3 R2
=
1
R3 =
2 .5 1 .2
R2 −
1 = 1 . 083
Ahora trabajando con la formula de V2 se obtiene: V 2
5
=
1+ R3 R1
=
5 V 2
R3 R2 −
+
R3
5
=
R1
1 − 1 . 083
1 + 1 . 083
=
+
R3 R1
2 . 083
Por lo tanto si elijo R2=10K entonces: R3=10.83K y R1=5.2K.
De esta manera concluye el estudio del modulo de realimentación y se procede a un módulos en el siguiente circuito.
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:17
VDD 5V
VCC 5V
Q2 470
Q3
Q4
Q5 M
BC327
470
BC327
BC327
D1 1N4148
BC327 MOTOR
CK
470
CK
470
CK
U4 A B C D E F G
CK
U5 A B C D E F G
U6 A B C D E F G
U7 A B C D E F G
750
TIP31A
330 330 330 330 330 330 U2
20pF
HC-49/U_3MHz
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
16f873 20pF
330
VDD
VDD
5V
5V
1uF-POL
1uF-POU3 L C1+ VCC C1C2+ C2-
1uF-POL
T1I N T2I N
GND
4 V+
1.0k
U1A 3
HDR1X3
1K _LIN 50% Key = Space
1
Disco
2
R1I N R2I N
11
1uF-POL
MAX232E
Fecha: 14/06/06
10k
5V
V-
T1OUT T2OUT
R1OUT R2OUT
10k VDD
J1
Revisión: /
LM324AD 5.1k
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:18
2.4Software:
Para comprobar el correcto funcionamiento de cada parte de hardware se proced diferentes programas cuyo objetivo era testear el funcionamiento de cada bloque. Comprobación de funcionamiento de los display
Para comprobar el correcto funcionamiento de los display se procedió a utilizar el prog
cronometro, el cual fue utilizado en el trabajo practico numero 2, cuyo código fuente se en en la sección de ANEXO.
Luego de comprobar el correcto funcionamiento de los display se procedió a verific operación del bloque que posibilita la comunicación con la PC Comprobación del bloque comunicaciones de la PC
Este bloque es el encargado de realizar la comunicación entre en PIC y la PC. Para com
el correcto funcionamiento se realizó un programa para el PIC y otro para la PC los cuales que la PC envié un dato al PIC y este lo reenvié a la PC todo mediante comunicación serie asíncrona. Transmisión Asíncrono del PIC
Cuando se desea transmitir datos de manera asíncrona utilizando la USART , lo que se d realizar es depositar en el registro TXREG el dato a transmitir, este registro es pasado
registro de desplazamiento ,que va sacando los bits secuencialmente y la frecuencia estab
Además, antes de los bits del dato de información incluye un bit de INICIO y despu todos los bits añade un bit de PARADA.
El corazón de este sistema es el registro de desplazamiento el cual obtiene el dato desde
registro TXREG y luego lo va desplazando y sacando bit a bit, en serie, por la patita RC6/TX transferencia entre los dos registros se realiza en un ciclo y entonces el señalizador TX a 1, para advertir que el registro de transmisión se ha vaciado. También en este momento
producirse una interrupción si se ha posibilitado programando el señalizador TX IE= 1 en pie 1. Cuando se escribe otro dato sobre TXREG, el señalizador TXIF se pone a 0 . Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:19
La secuencia de pasos a seguir para implementar una transmisión Asíncrona es la si
1. Hay que configurar la líneas RC6/TX/CK como salida y RC7/RX/DT como entra 2. Poner SYNC=0 y SPEN=1 para activar el USART en modo asíncrono. 3. Si se desea
trabajar con interrupciones, poner TXIE=1, además de hab
interrupciones en general.
4. Se carga el valor X adecuado en el registro SPBR, para producir la frecuencia
deseada. Hay que controlar el bit BRGH (para transmisión de alta o baja veloc
5. Activar ela transmisión con TXEN=1.El bit TXIF tendrá valor 1, ya que T encuentra vacio 6. Carga en TXREG el dato a transmitir. Comienza la transmisión Recepción Asíncrona del PIC
Los dates se reciben en serie, bit a bit, por la patita RC7/RX /DT y se van introducien secuenciamente en el registro desplazamiento RSR, que funciona a una frecuencia 16
rápida que la de trabajo. Cuando el dato consta de 9 bits hay que programar el bit RX9
noveno bit de información se colocara en el bit RX9D del registro RCSTA. El control so noveno bit se realiza con las puertas de control y las señales que se aplican (A DDEN CREN = 1 en el registro RCSTA<4>, se habilita la recepción. Los pasos a seguir en el modo de recepción son los siguientes.
1. Se carga con el valor X a! Registro SPBRG para trabajar con la frecuencia desea controlando además el valor de BRGH. 2. Se habilita el USART en modo asíncrono con SPEN = 1 y SYNC = 0. 3. Si se desea que se genere una interrupción con la llegada del bit PA RADA, se pone RCIE = 1, además de habilitar las interrupciones en general. 4. Se habilita la recepción poniendo CREN = 1.
5. Al completarse la recepción RCIF se pondrá a 1 y se produce una interrupción s permitido 6. Se lee el registro RCSTA y se averigua si se ha producido algún error 7. Leer los 8 bits del registro RCREG para obtener el dato
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:20
A continuación se muestra un diagrama de flujo del programa implementado en el del P
corroborar el correcto funcionamiento del Hardware. Si se desea obtener el código fuente la sección de anexos. LEER DATO
Inicialización rc7 entrada rc6 salida
RETRANSMITIR DATO Configuración USART
VOLVER
USAR en escucha bucle
Programa de la PC.
El programa utilizado para el testeo del correcto funcionamiento de la transmisión asín
realizado en lenguaje C, dicho programa se basa en la transmisión y recepción de datos m
el puerto serie (0X386) a una velocidad de 9000 baudios por segundo. Si se desea saber e fuente de dicho programa dirigirse a la sección de anexo.
Luego de comprobar el correcto funcionamiento de la transmisión y recepción seri a la verificación del bloque PWM y MOTOR Comprobación del bloque PWM y del motor
Para comprobar el correcto funcionamiento del modulo PWM con su respectiva etapa d
potencia junto con el motor, se procedió a realizar un programa el cual varia la velocidad d
desde 0 hasta alcanzar su velocidad máxima. Para ello se debe configurar al microcontrol siguiente manera: 1. Asignar el periodo cargando el valor oportuno en PR2 y recordando que la =(Pr2 +1) * 4 * Tosc* Valor _ del_ predivisor_ TMR2 periodo esPeriodo :
2. Asignar la anchura del pulso cargando el registro CCPR1L y recordando que _ pulso=CCPRL1* tosc* Predivisor_ Tmr2 Ancho que manera el ancho del pulso es:
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 continuación: Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:21
Inicialización Rc1salida Predivisor TMR0 Velocidad=0 Activar motor Incrementar velocidad hasta máxima Parar motor
Si se desea el código fuente del programa dirigirse a la sección de anexos.
Luego de comprobar que este bloque funciona correctamente se procedió a v funcionamiento del modulo de realimentación. Comprobación del bloque de realimentación
Para comprobar el correcto funcionamiento de este bloque se realizo un programa q 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 continuación. Inicialización Rb salida Rb0 entrada Ra Salida Configuración del TMR0 Activación de interrupciones
interrupción
No
¿Interna?
¿externa?
Si
bucle
No
Si
Si Para la cuenta
Guardar la cuenta en aux
1 Seg?
Incremento aux
no Mostrar en display
Restablecer interrupciones volver
Para mas detalle dirigirse al Anexo en donde se encuentra en código fuente. De esta manera queda comprobado el correcto funcionamiento de los diferentes sistema. Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:22
A continuación se realiza la descripción del programa final. Software final
Los programas que se explican a continuación son los encargados de realizar el contr
velocidad del motor de corriente continua, visualizar las RPM en los displays 7 segmentos
posibilitar la transmisión y recepción de datos necesarios entre la P C y el microcontro
Para simplificar la explicación se divide este software final en dos partes, la primera es
encargada de explicar el funcionamiento del programa del PIC y en la segunda parte se de funcionamiento del programa de la PC. Programa del PIC.
El programa a utilizar en el PIC básicamente es una combinación de los programa
con el agregado de poseer el algoritmo que permite el control de la velocidad de giro m Debido a la extensión del programa se realiza un diagrama de flujo para así comprensión del mismo y poder dar detalles de los bloques que se crea necesario. Inicialización de variables Puerto b Salida Rb0 entrada Puerto a Salida Rc1 Salida para PWM Rc6 Salida para Tx Serie Rc7 Entrada para Rx Serie Configuración del PWM Configuro USAR Habilito interrupciones Carga al tmr0 Velocidad de giro =0
BUCLE
INTERRUPCION
Por TMR0?
Fecha: 14/06/06
NO
NO
Por Rb0
Revisión: /
Recepción serie
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD SI
Página:23
Si Si
1 Seg?
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
Visualización
Cuenta=0
Seteo de Banderas y variables
Seteo de Banderas
Seteo de Banderas
Salir de interrupción
Como se puede observar el programa comienza realizando las configuraciones necesa
que funcione de forma correcta: el modulador PWM, la transmisión y recepción serie, con los puertos para la visualización de los display
y seteando los predivisores y variables
correspondientes para un correcto funcionamiento del servicio de interrupción .
Luego se puede observar que el programa entra en un bucle sin fin en espera de alg causas posibles de interrupción. Las cuales pueden ser:
•
Por desbordamiento del TMR0
•
Por interrupción producida por un flanco ascendente en la para RB0
•
Por la recepción de un dato por puerto serie
Dependiendo del origen de la interrupción el programa efectúa distintas tareas: Fecha: 14/06/06 Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:24
Interrupción por TMR0: En esta condición el programa refresca los display para poder ob
correcta visualización, si a su vez a pasado 1 segundo se realiza la cuenta para obtener la
con que esta girando el motor . Para obtener las RPM del motor se efectúa la siguiente
RPM
=
* 60
Cuenta cantidad
_
de
_
ranuras
_
del
_
disco
En donde: Cuenta: es una variable que se incrementa cada vez que entra una interrupción
Cantidad de ranuras: En este caso es 40 debido a que esa es la cantidad de ra posee el disco que gira solidariamente con el eje del motor. Por lo tanto la ecuación anterior queda de la siguiente manera:
RPM
Cuenta =
* 60
40
Cuenta =
* 3
2
De esta manera el error máximo 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 co
referencia enviada por la PC via puerto serie y se incrementa o decrementa el ancho d
PWM en función del resultado de dicha comparación como se muestra a continuación. •
RPM con que esta girando el motor > Referencia entonces decremento el pulso de
•
RPM con que esta girando el motor < Referencia entonces incremento el pulso de
Este tipo de control es el denominado control “Delta” y como se puede observar es u lineal pero de muy fácil implementación.
Luego de hacer la corrección del ancho de pulso, se envía las RPM con que esta girando
motor a la PC y esta las guardas para poder hacer a posterior un análisis del funcionamien sistema de control.
Finalmente se comienza nuevamente con el proceso colocando la variable cuenta a 0 Fecha: 14/06/06 Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:25
Interrupción por RB0: Cuando se produce una interrupción por Rb0 se increment cuenta, la cual cada 1 segundo es puesta a 0.
Interrupción por Recepción de datos de la PC: Como se sabe en todo sistema de control se
necesita una señal de referencia, en este caso es enviada desde la P C e indica la cantidad d
que se desea, de manera que el microcontrolador efectúa las correcciones necesarias par con la referencia.
De esta manera se ha descrito el programa del microcontrolador y cuyo código fuente en la sección de anexo. Programa de la PC.
El programa realizado para la Pc es relativamente sencillo, básicamente lo que realiz
transmisión de la referencia al sistema de control y la recepción de los datos que envía el m
almacenándolo en un archivo denominado datos.txt el cual luego será utilizado para estud comportamiento del sistema. El programa basa la recepción de datos en el servicio de interrupción que posee la P
transmisión de dato se realiza de manera directa como se puede observar en el código fue sección de anexo.
3 .Resultados En esta sección se analizan los resultados obtenidos de manera teórica y practica. primero que se necesita es obtener la función de transferencia del motor. 3.1Obtencion de la función del motor : Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:26
Para obtener la función de transferencia del motor se desconecto el PWM del mismo po
de esta manera el sistema lo único que realiza es medir las RP M del motor y transmitirla a
donde fueron grabadas en el archivo datos.txt. Luego se lo éxito mediante una pila median Voltios obteniéndose la siguiente grafica.
En función de esta grafica obtendremos la función de transferencia del motor. Recordemos que la función de transferencia de un motor es la siguiente.
Ahora si excitamos a este sistema con un escalón de 1.5V como es en nuestro caso la queda:
Anti-transformando la expresión 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 aproximadamente constate y estable por lo que se puede considerar que ya han pasa transitorio o sea que de esta manera se concluye que : Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:27
Ahora si observamos el tiempo transcurrido hasta que llegue a un 50% del régimen p 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 de aproximadamente 1.5 segundos. Trabajando sobre la formula se obtiene lo siguient
Por lo tanto A es igual a:
Por lo que la formula queda:
Si graficamos esta función y la obtenida experimentalmente se observa lo siguiente.
Como se puede observar la aproximación realizada concuerda con los resultados o
manera practico por lo que podemos definir a la función de transferencia del motor co Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:28
3.2 Obtención de la función de transferencia de los demás elementos
Los demás elementos que componen el sistema de control tiene funciones de transf cuales se pueden obtener de forma matemática.
Para el circuito de realimentación se pude considerad que la función de transferenc y para el modulador por ancho de pulso ya se ha deducido la función de transferencia:
3.3 Obtención de la función de transferencia del sistema
En la sección de teoría se ha llegado a la conclusión de que la función de transf sistema es:
por lo que reemplazando los valores se obtiene:
y en el dominio del tiempo la formula es:
”Formula sin corrección” y teniendo en cuenta la consideración de modulación delta la formula queda:
”Formula con corrección “ 3.4 Resultados del sistema de control en lazo cerrado
Para observar el funcionamiento del sistema bajo el control de lazo cerrado, se
excitar al sistema mediante una señal de referencia de 2000 Rpm y se obtuvo la siguie
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:29
Como puede observarse la aproximación realizada funciona correctamente al ig sistema de control.
Como era de esperarse el sistema es mucho mas lento que cuando se lo excito en l pero, esta demora puede compensarse con un aumento en la precisión y estabilidad.
4.CONCLUSIÓN
Desde el punto de vista del trabajo se ha observado que el sistema nunca termina de
estabilizarse, esto contradice con la teoría de control la cual manifiesta que un sistema de realimentado negativamente es mas estable que cuando se lo excita en lazo abierto.
Controlando el sistema se observo que el sistema de realimentación, (cuando el mot
en funcionamiento y en régimen) produce una señal cuadrada cuya frecuencia varia alred
una central , esto produce un error en la determinación de las RPM del motor de aproxima
10 a 20 RPM, este error produce que el sistema constantemente este compensando por lo nunca llega a estabilizarse. Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:30
Este error que produce el sistema de realimentación no es un problema electrónico s
mecánico debido a que si se observa el funcionamiento del eje del motor este posee un pe juego el cual es transmitido a la rueda dentada y a sus vez esta lo transmite al sistema de
realimentación. Si se soluciona este inconveniente mecánico el sistema se estabilizaría co lo predicho teóricamente.
Obviando este problema de estabilidad se observó el correcto funcionamiento del p
“CONTROL DE VELOCIDAD DE UN MOTOR DC” en el cual se ha podido integrar conocim de diversas materias como Informática II, Control I, y Digitales III.
Cabe destacar que este proyecto a permitido observar de manera practica los dive
conceptos desarrollados por las distintas materias y la gran capacidad que posee la tecno
los microcontroladores para adaptarse a una gran variedad de proyectos con un costo m reducido.
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página: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 precisión de centenas de segundos. ; La visualización se realiza mediante 4 display de 7 segmentos conectados al puerto A y B. #include
;DECLARACIONES GUARDO_W GUARDO_S
EQU
0X20
EQU
DISPLAY1
;EN ESTA DIRECCION SE GUARDA EL REGISTRO W CUALDO SE INGRESA A LA RUTINA DE INTERRUPCION
0X21;EN ESTA DIRECCION SE GUARDA EL REGISTRO STATUS CUALDO SE EQU
INGRESA A LA RUTINA DE INTERRUPCION
0X22;EN ESTA DIRECCION SE ENCUENTRA EL VALOR EN DECIMAL DE LO MOSTRADO EN EL DISPLAY1
DISPLAY2
EQU
0X23;EN ESTA DIRECCION SE ENCUENTRA EL VALOR EN DECIMAL DE LO MOSTRADO EN EL DISPLAY2
DISPLAY3
EQU
0X24;EN ESTA DIRECCION SE ENCUENTRA EL VALOR EN DECIMAL DE LO MOSTRADO EN EL DISPLAY3
DISPLAY4
EQU
0X25;EN ESTA DIRECCION SE ENCUENTRA EL VALOR EN DECIMAL DE LO MOSTRADO EN EL DISPLAY4
CONTADOR
EQU
0X26;ES EL ENCARGADO DE INDICAR QUE DISPLAY SE DEBE ENCENDER
AUXILIAR
EQU
0X27;ES EL ENCARGADO DE QUE EL CONTADOR ESTE ENTRE 0 Y 4
MILISEGUNDO EQU
0X28;ES UNA VARIABLE QUE SE INCREMENTA CADA 50ms
OPCION
EQU
0X81;ES EL REGISTRO OPTION
CONTROLAR
EQU
0X29;VARIABLE QUE CONTROLO SI SE DETIENE LA CUENTA O SE RESETEA
REBOTE
EQU
0X2A
CONTADOR1
EQU
0X2B
ORG
0X00
GOTO ORG GOTO ORG
;INDICO DONDE COMIENZA EL PROGRAMA
PRINCIPAL 0X04
;CARGO EL VECTOR DE INTERRUPCION
INTERUP 0X05
;PROGAMA PRINCIPAL ;SEREOS PRINCIPAL
CLRF
CONTADOR
MOVLW 0X02 MOVWF CONTROLAR; ES PARA COMENZAR PARADO EL RELOJ 1
INCF BSF
CONTADOR,F;I
NCREMENTO EL CONTADOR DEBIDO A QUE NECESITO QUE COMIENCE EN
STATUS,RP0
MOVLW 0X10 MOVWF TRISA MOVLW 0X01
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD MOVWF TRISB;
Página:32
COLOCO AL PUERTO A Y B COMO SALIDA Y EL RB0 COMO ENTRADA
MOVLW 0X06 MOVWF OPCION
;CARGO EL PREDIVISOR EN 128,LO ASIGNO A TMR,EL CUAL ES EXITADO POR FUENTE INTERNA
BCF
STATUS,RP0
CLRF
PORTA
CALL
SETEO
MOVLW 0XD9; CARGO AL TMR CON 217 DE MANERA QUE LA ECUACION QUEDE MOVWF TMR0;TIEMPO=(256-217)*128*1us=4.99mS cada este tiempo se producira una interrupcion MOVLW 0XB0;
HABILITA INTERRUPCION GIE,TOIE,INTE
MOVWF INTCON CLRF
REBOTE
CLRF
CONTADOR1
BUCLE GOTO
BUCLE;BUCLE PRINCIPAL
;RUTINA DE INTERRUPCION INTERUP MOVWF GUARDO_W; GUARDO W DEL PROGRAMA PRINCIPAL SWAPF STATUS,W MOVWF GUARDO_S; BTFSS
INTCON,T0IF
GOTO
SIGUI
GUARDO STATUS DEL PROGRMA PRINCIPAL ;VERIFICA SI LA INTERRUPCION ES CAUSADA POR EL DESBORDAMIENTO DE TMR0
;SI NO ES CAUSADA POR EL DESBORDAMIENTO DE TMR0 ENTONCES COMPRUEBO SI POR CAUSA EXTERNA
MOVLW 0XD9; SI LA INTERRUPCION ES CAUSADA POR TMRO ENTONCES CARGO NUEVAMENTE AL TMR CON 217 MOVWF TMR0;Y CONTINUO EL PROGRAMA MOVF
REBOTE,F;
BTFSS
STATUS,Z
INCF
VERIFICO QUE PASEN 8*5=40ms ANTES DE PODER INGRESAR OTRA INTERRUPCION EXTERNA
CONTADOR1,F
BTFSS CONTADOR1,3 GOTO
NUMERO
CLRF
CONTADOR1
CLRF
REBOTE
GOTO
SIGUI
BTFSC
NUMERO
INTCON,INTF; VERIFICA SI LA INTERRUCPCION ES A CAUSA DE UNA INTERRUPCION EXTERNA
GOTO FIJATE ;
Fecha: 14/06/06
SI ES CAUSADA SALTO A FIJATE
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD GOTO TERMINA ; FIJATE
Página:33
INTERRUPCION NO VALIDA NO PROSIGUE Y SALTO PARA TERMINAR LA INTERRUPCION
INCF REBOTE,F ;
CONTROLO QUE LA INTERRUPCION EXTERNA NO SEA PROVOCADA POR REBOTES
MOVLW 0X01 XORWF REBOTE,W BTFSS
STATUS,Z
GOTO
TERMINA
INCF
;SI ES PROVOCADA POR REBOTES ENTONCES NO PROSIGUE Y TERMINO CON LA RUTINA DE INTERRUP
CONTROLAR,F;DE LO CONTRARIO INCREMENTO EL CONTADOR PARA DETERMINAR LA FUNCION A REALIZAR
NUMERO MOVF
CONTROLAR,W
XORLW 0X03; BTFSC CLRF BTFSC GOTO BTFSC
SI ES LA TERCERA LA PULSACION SIGNIFICA QUE DESEO EMPEZAR
STATUS,Z CONTROLAR ME FIJO SI SE PULSO UNA VEZ EL BOTON ESTO SIGNIFICA QUE DEBO PARAR LA CUENTA CONTROLAR,0;
PARAR SI PULSO UNA SEGUNDA VEZ EL PULSADOR SIGNIFICA QUE DESEO RESETEAR LA CUENTA CONTROLAR,1;
CALL
SETEO
INCF
MILISEGUNDO,F
MOVF
MILISEGUNDO,W;
XORLW 0X02 segundo
BTFSS GOTO
SAL1
se incrementea 2 veces osea se llega a 1 centesima de segundo
STATUS,Z;
entonces incrementamos el display 1 que es el que maneja el digito menor de centesim
SAL1
CLRF
MILISEGUNDO
INCF
DISPLAY1,F
MOVF
INCREMENTEO MILISEGUNDO CADA 5mS Luego de que milisegundo
DISPLAY1,W;
cuando el display1 llega a 10, entonces se incrementa el segundo display2 el cual maneja la desima de seg
XORLW 0X0A
SAL2
BTFSS
STATUS,Z
GOTO
SAL2
CLRF
DISPLAY1
INCF
DISPLAY2,F
MOVF
DISPLAY2,W;
cuando el display2 llega a 10, entonces se incrementa el display el cual maneja el digito de los segundos
XORLW 0X0A BTFSS
STATUS,Z
GOTO
SAL3
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
SAL3
CLRF
DISPLAY2
INCF
DISPLAY3,F
MOVF
DISPLAY3,W;
Página:34
cuando el display3 llega a 10, entonces se incrementa el displaye el cual maneja el digito de decenas segun
XORLW 0X0A
SAL4
BTFSS
STATUS,Z
GOTO
SAL4
CLRF
DISPLAY3
INCF
DISPLAY4,F
MOVF
DISPLAY4,W;
cuando el display4 llega a 6, entonces se RESETEAN LOS DISPLAY
XORLW 0X06 BTFSC CLRF PARAR
STATUS,Z DISPLAY4
CALL DISPLAY
TERMINA SWAPF
GUARDO_S,W
MOVWF STATUS;
RECUPERO LAS VARIABLES W Y STATUS DEL PROGRAMA PRINCIPAL
SWAPF GUARDO_W,F SWAPF GUARDO_W,W MOVLW 0XB0 MOVWF INTCON;
REACTIVA LAS INTERRUPCION TOIE,TMR0
RETFIE ;SUBRUTINA DEL DISPLAY
;ESTA SUBRUTINA ES LA ENCARGADA DE MOSTRAR EN LOS DISPLAY LOS NUMEROS EN LAS VARIABLES D 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 PORTA,3;VERIFICO QUE EL PUERTO A SE ENCUENTRE DENTRO DE LOS LIMITES(OSEA QUE NO PASE DE 11110111) GOTO
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
STATUS,Z ;ME FIJO SI TENGO QUE PRENDE EL DISPLAY 1
GOTO
SALE1
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD MOVF
Página:35
CONTADOR,W
XORLW 0X02 BTFSC
STATUS,Z ;ME FIJO SI TENGO QUE PRENDE EL DISPLAY 2
GOTO
SALE2
MOVF
CONTADOR,W
XORLW 0X03
SALE1
BTFSC
STATUS,Z;ME FIJO SI TENGO QUE PRENDE EL DISPLAY 4
GOTO
SALE3
GOTO
SALE4;ME FIJO SI TENGO QUE PRENDE EL DISPLAY 3
MOVF CALL GOTO
SALE2
MOVF CALL GOTO
SALE3
MOVF CALL GOTO
SALE4
MOVF CALL
SALIR
DISPLAY1,W ;BUSCO EL CODIGO DEL DISPLAY 1 TABLA
;(OSEA QUE BUSCO LA SECUENCIA DE ENCENDIDO PARA EL DISPLAY DE MANERA MUESTRE EL NUMERO EN DECIMAL DE LA VARIABLE)
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
MOVWF PORTB ;PRENDO PUERTO B EN FUNCION DEL CODIGO MANDADO POR LA TABLA MOVF
CONTADOR,W
MOVWF AUXILIAR BSF
STATUS,C
DECFSZ AUXILIAR,F;ENCIENDO EL DISPLAY CORRESPONDIENTE RLF MOVF
PORTA,F CONTADOR,W
XORLW 0X04 BTFSC
STATUS,Z;LLEGUE AL ULTIMO DISPLAY
CLRF
CONTADOR;SI ENTONCES EMPIEZO LA PROXIMA POR EL PRIMERO
INCF
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
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD TABLA
ADDWF PCL,F
RETLW
0X80 ;"0" 10000000
5
RETLW
0XEC ;"1" 11101100
-
RETLW
0X42 ;"2" 01000010 6| |4
RETLW
0X48 ;"3" 01001000 7 -
RETLW
0X2C ;"4" 00101100 3| |1
RETLW
0X18 ;"5" 00011000
-
RETLW
0X10 ;"6" 00010000
2
RETLW
0XCC ;"7" 11001100
RETLW
0X00 ;"8" 00000000
RETLW
0X08 ;"9" 00001000
.8
;SETEOS SETEO
CLRF
DISPLAY1
CLRF
DISPLAY2
CLRF
DISPLAY3
CLRF
DISPLAY4
CLRF
MILISEGUNDO
RETURN END
Fecha: 14/06/06
Revisión: /
Página:36
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:37
ANEXO 2 Programa de prueba que permite comprobar el bloque comunicaciones de la P Programa del pic ;ESTE PROGRAMA RECIBE UN BYTE POR TRASNMICIION SERIE Y LUEGO LOS ENVIA DE REGRESO #include ORG
0x00
GOTO ORG
0X04
GOTO INICIO
CLRF
INICIO
INTE
PORTB
CLRF
PORTC
BSF
STATUS,RP0
BCF
STATUS,RP1 ;Me voy al banco 1
MOVLW 0XBF
; Limpia salidas
;RC7 ENTRADA Y RC6 SALIDA
MOVWF TRISC MOVLW 0X24 ;CONFIGURACION DE LA USART MOVWF TXSTA MOVLW 0X19 ;TRANSMICION DE 9600 BAUDIOS MOVWF SPBRG BSF
PIE,RCIE ;HABILITA INTERRUPCION DE RECEPCIÓN
BCF
STATUS,RP0; AL BANCO 0
MOVLW 0X90 MOVWF RCSTA ;configuración de la usart para recepción continua MOVLW 0XC0 MOVWF INTCON; Habilitación de interrupción BUCLE GOTO INTE
BTFSS
PIR,RCIF ;recivi dato?
GOTO
VOLVER
BCF
PIR1,RCIF;SI REPONER BANDERA
MOVF CALL VOLVER
BUCLE
;NO ENTONCES SALGO
RCREG,W;LEO EL DATO TX_DATO;TRANSMITO EL DATO
RETFIE
TX_DATO
BCF
Fecha: 14/06/06
PIR,TXF;RESTAURO BANDERA DEL TRANSMISOR
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD MOVWF TXREG;MUEVO EL BYTE AL TRANSMISOR
TX
BSF
STATUS,RP0
BCF
STATUS,RP1;VOY AL BANCO 1
BTFSS
TXSTA,TRMT ;BYTE TRANSMITIDO?
GOTO BCF
TX;NO ENTONCES ESPERO STATUS,RP0;SI VUELVO AL BANCO 0
RETURN
Fecha: 14/06/06
Revisión: /
Página:38
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:39
Programa de la PC
//ESTE PROGRAMA ENVIA UN BYTE POR TRANSMISIÓN SERIE Y CUANDO RECIBE EL REBOTE LO MUESTRA EN #define INTVECT #define
0x0c
//vector de interrupción puerto serial
BASE 0x3f8
#include
//puerto serial
//librerías necesarias para ejecutar el programa
#include #include unsigned int k=0,in,resultado,teclas=10; //Variables generales void interrupt portint(...); //función de interrupción de puerto serial void grafica1(void); void main() { int intmask,aux=0; disable();
//desabilitacion de interrupciones para poder
setvect(INTVECT,portint);
//asignar la función de interrupción al //vector de interrupción
enable();
//habilitación de interrupciones
intmask=inp(0x21);
//asignación de la mascara de interrupción
intmask=intmask&0xef;// outp(0x21,intmask);
//
outp(BASE+3,128);
//programación del puerto serial
outp(BASE+0,0x0C);
//divisor en 12 para 9600 baudios
outp(BASE+1,0x00);
//
outp(BASE+3,0x03);
//activa DTR RST
outp(BASE+4,0x0b);
//
intmask=inp(BASE);
//asignación de la mascara de interrupción
intmask=inp(BASE+5);// outp(BASE+1,0x01);
//activa la recepción 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
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD // k=0;
//demora para poder apreciar el dato //espero una nueva interrupcion
}
//
if (kbhit())
//En caso de haber pulsado una tecla
{ scanf("%d",&teclas); outp(0x3f8,teclas); }
} outp(BASE+1,0x00);
//desactiva la recepcion serial
gotoxy(10,10);
//
printf("Programa FINALIZADO\n"); // delay(2000);
//
fclose(P); } void interrupt portint(...) //subrutina de interrupcion serial { disable();
//desabilito las interupciones para
resultado=inp(BASE); //recibir el dato de entrada en el puerto 0x3F8 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
Revisión: /
Página:40
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:41
ANEXO 3 Programa de prueba que permite comprobar el bloque modulador pwm #include ORG
0X00
GOTO
INICIO
ORG
0X05
BSF
STATUS,RP0 ;VOY AL BANCO 1
BCF
STATUS,RP1
MOVLW
0XFD
MOVWF
TRISC
MOVLW
0XFF ;CARGO EL PERIODO DEL PULSO
MOVWF
PR2
BCF
STATUS,RP0 ;VOY AL BANCO 0
MOVLW
0X0C
MOVWF
CCP2CON
MOVLW
0XFF
MOVWF
0X20
INICIO
;CONFIGURO EL PUERTO C PARA SALIDA DE PWM2
BUCLE
PASO
PAS
DELAY
BU
;CONFIGURO AL CCP2
;MÁXIMA VELOCIDAD DESEADA
CLRF
CCPR2L ;Velocidad inicial nula
MOVLW
0X06
MOVWF
T2CON
CALL
;configural al tmr2 con predivisor por 16
DELAY ;Produzco un retardo
INCF
CCPR2L,F ;incremento la velocidad del motor
DECFSZ
0X20,F ;Llegue la maximo?
GOTO
PAS
GOTO
PASO;Si,entonces empiezo de nuevo
;No
MOVLW
0X4E
MOVWF
0X21
DECFSZ
0X21,F
GOTO
BU
RETURN END
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:42
ANEXO 4
Programa de prueba que permite comprobar el funcionamiento del circuito de realimentación #include RELOJ
EQU
0X20
CONTADOR
EQU
0X22
UNIDAD
EQU
0X23
DECENA
EQU
0X24
CENTENA
EQU
0X25
MILLAR
EQU
0X26
CONTADOR1
EQU
0X27
CONTBAJO
EQU
0X28
ALT0
EQU
0X29
AUX_BAJO
EQU
0X2A
AUX_0X29
EQU
0X2B
ELEGIR
EQU
AUX
0X2C
EQU
AUX2
0X2D EQU
GOTO
0X2E
INICIO
ORG
0X04
GOTO
INTERRUP 0X05
ORG ;configuracion del pic INICIO
BSF BCF
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 ;RELOJ INTERNO ON,DIVISOR AL RELOJ INTERNO,DIVISOR A 128 CLRF
TRISA
;COLOCO AL PUERTO A COMO SALIDA
MOVLW 0X01 MOVWF TRISB ENTRAN LOS PULSOS MOVLW 0X90
;COLOCO AL PUERTO B COMO SALIDA MENOS EL RB0 QUE ES POR DON ;10100000;CONFIGURO LA INTERRUPCION PARA INTERNA
MOVWF INTCON MOVLW 0X06
Fecha: 14/06/06
;00000110;CONFIGURO AL PUERTO A COMO SALIDA DIGITAL
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:43
MOVWF ADCON1 BCF
STATUS,RP0
BCF
STATUS,RP1
;VUELVO AL BANCO 0
MOVLW 0XFF MOVWF PORTA
;COLOCO PARA NO ENCENDER DISPLAY
CLRF
ADCON0
;ME ASEGURO QUE NO FUNCIONE EL CONVERSOR AD
CLRF
PORTB
;SETEOS DE VARIABLES
CLRF
ELEGIR
CLRF
CONTBAJO
CLRF
RELOJ
CLRF
CONTADOR1
CLRF
0X29
MOVLW 0Xd9 MOVWF TMR0 BSF
BUCLE
INTCON,T0IE
CLRWDT GOTO
BUCLE
INTERRUP ;COMO TENGO VARIAS PROCEDENCIA DE INTERRUPCION DEB ;SABER CUAL ES LA QUE CAUSO LA INTERRUPCION BTFSC
INTCON,T0IF ;INTERRUPCION INTERNA
GOTO
INTERNA
BTFSC
INTCON,INTF
GOTO
EXTERNA
;INTERRUPCION EXTERNA
RETFIE INTERNA INCF
RELOJ,F
MOVLW 0XC8 XORWF RELOJ,W BTFSS
STATUS,Z
GOTO
FIN
CLRF
RELOJ
CALL
CUENTA
BCF
INTCON,INTF
Fecha: 14/06/06
;ME FIJO SI LLEGUE A 1SEGUNDO
;NO LLEGUE AL SEGUNDO ENTONCES S0LTO ;SI LLEGUE AL SEGUNDO ENTONCES HAGO LA CUENTA DE LAS RPM
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD FIN
CALL
Página:44
DISPLAY
MOVLW 0Xd9 ;CARGO INTERRUPCION=1us*128*(256-217)=5ms
CON
217
AL
TMR0
PARA
QUE
EL
TIEMPO
DE
MOVWF TMR0 BCF
INTCON,T0IF
;BORRO LA BANDERA DE INTERRUPCION INTERNA
RETFIE CUENTA
CLRF CENTENA Y MILLAR
UNIDAD
;DIVIDO AL NUMERO PARA QUE QUEDE EN UNIDAD, DECEN
CLRFDECENA CLRF
CENTENA
CLRF
MILLAR
MOVF
CONTBAJO,F
BTFSS
STATUS,Z
GOTO
ARRIBA
MOVF
0X29,F
BTFSC
STATUS,Z
RETURN ARRIBA
MOVLW 0X01 ADDWF AUX_BAJO,F BTFSC
STATUS,C
INCF
AUX_0X29,F
INCF
UNIDAD,F
CLRWDT MOVLW 0X0A XORWF UNIDAD,W
DEC
BTFSS
STATUS,Z
GOTO
DEC
CLRF
UNIDAD
INCF
DECENA,F
MOVLW 0X0A XORWF DECENA,W BTFSS
STATUS,Z
GOTO
CEN
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
CEN
CLRF
DECENA
INCF
CENTENA,F
Página:45
MOVLW 0X0A XORWF CENTENA,W
MIL
BTFSS
STATUS,Z
GOTO
MIL
CLRF
CENTENA
INCF
MILLAR,F
MOVLW 0X0A XORWF MILLAR,W BTFSS STATUS,Z GOTO CLRF
SAL
SAL MILLAR
MOVF
AUX_0X29,W
XORWF 0X29,W BTFSS
STATUS,Z
GOTO
ARRIBA
MOVF
AUX_BAJO,W
XORWF CONTBAJO,W BTFSS
STATUS,Z
GOTO
ARRIBA
CLRF
CONTBAJO
CLRF
0X29
RETURN
DISPLAY SEGMENTOS MOVF CALL
;ESTA SUBSUTINA ES LA ENCARGADA DE MANEJAR LOS DISPLAY 7 ELEGIR,W PUERTOA
MOVWF PORTA MOVLW UNIDAD ADDWF ELEGIR,W MOVWF FSR MOVF
INDF,W
CALL
PUERTOB
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:46
MOVWF PORTB INCF
ELEGIR,F
MOVLW 0X04 XORWF ELEGIR,W BTFSC STATUS,Z CLRF
ELEGIR
RETURN PUERTOA
PUERTOB
ADDWF PCL,F RETLW
0XFE
;RA0
RETLW
0XFD ;RA1
RETLW
0XFB ;RA2
RETLW
0XF7 ;RA3
ADDWF PCL,F
RETLW 0X80 ;"0" 10000000
5
RETLW
0XEC ;"1" 11101100 -
RETLW
0X42 ;"2" 01000010 6| |4
RETLW
0X48 ;"3" 01001000 7 -
RETLW
0X2C ;"4" 00101100 3| |1
RETLW
0X18 ;"5" 00011000 - .8
RETLW
0X10 ;"6" 00010000
RETLW
0XCC ;"7" 11001100
RETLW
0X00 ;"8" 00000000
RETLW
0X08 ;"9" 00001000
2
EXTERNA MOVLW 0X01 ADDWF CONTBAJO,F BTFSC INCF BCF
STATUS,C 0X29,F INTCON,INTF
;BORRO BANDERA DE INTERUPCION
RETFIE END
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:47
ANEXO 5 Programa Final Programa del PIC #include RELOJ
EQU
0X20
BANDERASS
EQU
0X21
CONTADOR
EQU
0X22
UNIDAD
EQU
0X23
DECENA
EQU
0X24
CENTENA
EQU
0X25
MILLAR
EQU
0X26
CONTADOR1 CONTBAJO ALT0 AUX_BAJO
EQU
0X27
EQU
0X28
EQU
0X29
EQU
0X2A
AUX_0X29 EQU
0X2B
ELEGIR
EQU
0X2C
AUX
EQU
0X2D
AUX2
EQU
REFB EQU
0X2F
REFH EQU
0X30
BANDAS
;DECLARACIÓN DE VARIABLES
0X2E
EQU
0X31
ORG
0X00
GOTO
INICIO
ORG
0X04
GOTO
INTERRUP
ORG
0X05
;configuracion del pic INICIO
BSF BCF
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 ;RELOJ INTERNO ON,DIVISOR AL RELOJ INTERNO,DIVISOR A 128 CLRF
Fecha: 14/06/06
TRISA
;COLOCO AL PUERTO A COMO SALIDA
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:48
MOVLW 0X01 MOVWF TRISB ENTRAN LOS PULSOS MOVLW 0XF0
;COLOCO AL PUERTO B COMO SALIDA MENOS EL RB0 QUE ES POR DON ;11110000;CONFIGURO LA INTERRUPCION PARA INTERNA
MOVWF INTCON SALIDA RS232
MOVLW 0XBD ;COLOCO AL PUERTO C PARA EL MODULADOR DE ANCHO DE PULSO Y ENTRAD MOVWF TRISC MOVLW 0X06
;00000110;CONFIGURO AL PUERTO A COMO SALIDA DIGITAL
MOVWF ADCON1 MOVLW 0XFF MOVWF PR2 PULSO=(PR2+1)*4*Tosc*Predivisor TMR2= 4.096 ms BITS
;CARGO
EL
VALOR
DEL
PERIORDO
DEL
MOVLW 0X24 ;00100100 Configuro LA USAR COMO TRANSMICION ASINCRONA DE ALTA VELOCID MOVWF TXSTA MOVLW 0X19 MOVWF SPBRG
;CONFIGURO A 9615 BAUDIOS
BSF
PIE1,RCIE ;HABILITO LA INTERRUPCION PARA LA RECEPCION
BSF
TXSTA,TXEN
BCF
STATUS,RP0
BCF
STATUS,RP1
;VUELVO AL BANCO 0
MOVLW 0X90 ;10010000 Configuro PARA RECEPCION CONTINUA A LA USAR MOVWF RCSTA BSF
RCSTA,SPEN
MOVLW 0X0C MOVWF CCP2CON
;Configuro como modulador por ancho de pulso al ccp2
MOVLW 0X07 MOVWF T2CON
; habilitacion del tmr2 con un predivisor de 16
MOVLW 0XFF MOVWF PORTA
;COLOCO PARA NO ENCENDER DISPLAY
CLRF
ADCON0
;ME ASEGURO QUE NO FUNCIONE EL CONVERSOR AD
CLRF
PORTB
;SETEOS DE VARIABLES
CLRF
ELEGIR
CLRF
CONTBAJO
CLRF
RELOJ
CLRF
CONTADOR1
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD CLRF
BANDERASS
CLRF
BANDAS
CLRF
0X29
Página:49
MOVLW 0X07 MOVWF REFH MOVLW 0XD0 MOVWF REFB MOVLW .37 MOVWF CCPR2L
; Velocidad de giro inicial DEL MOTOR nula
MOVLW 0Xd9 iNTERRUPCION=1us*128*(256-217)=5ms
;CARGO
CON
217
AL
TMR0
PARA
QUE
EL
TIEMPO
DE
MOVWF TMR0 BSF
STATUS,RP0
BCF
STATUS,RP1
BSF
TXSTA,TXEN
; Transmisión habilitada
BCF
STATUS,RP0
; Banco 0
BCF
STATUS,RP1
BUCLE
CLRWDT GOTO
BUCLE
INTERRUP ;COMO TENGO VARIAS PROCEDENCIA DE INTERRUPCION DEBO SABER CUAL ES LA QUE CAUSO LA INTERRUPCION BTFSC
INTCON,T0IF
GOTO
INTERNA
BTFSC
INTCON,INTF
GOTO
EXTERNA
BTFSC
PIR1,RCIF
GOTO
RECEPCION
;INTERRUPCION INTERNA
;INTERRUPCION EXTERNA
;POR QUE INGRESO UN DATO EXTERNO PÒR RS232
RETFIE RECEPCION
BCF PIR1,RCIF ;COMO EL DATO VIENE PARTIDO EN 2 MITADES ENTONCES TENGO Q TENER LA PRECAUSION DE COLOCAR EL DATO DONDE CORRESPONDA
REFERENCIA
MOVF
RCREG,W
BTFSC
BANDERASS,0
GOTO
SALTITO
;LA PRIMERA PARTE LA GUARDO EN LA PARTE ALTA DE LA
MOVWF REFH
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD INCF
Página:50
BANDERASS,F
RETFIE SALTITO
MOVWF REFB CLRF
;LA SEGUNDA PARTE LA GUARDO EN LA PARTE BAJA DE LA REFERENCIA
BANDERASS
RETFIE INTERNA INCF
RELOJ,F
MOVLW 0XC8 XORWF RELOJ,W
FIN
BTFSS
STATUS,Z
GOTO
FIN
CLRF
RELOJ
CALL
CUENTA
BCF
INTCON,INTF
CALL
DISPLAY
;ME FIJO SI LLEGUE A 1SEGUNDO
;NO LLEGUE AL SEGUNDO ENTONCES SALTO ;SI LLEGUE AL SEGUNDO ENTONCES HAGO LA CUENTA DE LAS RPM
MOVLW 0Xd9 ;CARGO INTERRUPCION=1us*128*(256-217)=5ms
CON
217
AL
TMR0
PARA
QUE
EL
MOVWF TMR0 BCF
INTCON,T0IF
;BORRO LA BANDERA DE INTERRUPCION INTERNA
RETFIE CUENTA CLRF
CONTADOR1
CLRF
AUX_BAJO
CLRF
AUX_0X29
MOVF
CONTBAJO,W ;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
Revisión: /
TIEMPO
DE
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD INCF
Página:51
CONTADOR1,F
MOVLW 0X02 XORWF CONTADOR1,W BTFSS
STATUS,Z
GOTO
BU
BCF
STATUS,C
RRF
0X29,F
RRF
CONTBAJO,F
;DIVIDI POR 2 DE ESTA MANERA YA TENGO EL VALOR DE RPM
CALL
MODULADOR ;HAGO LAS CUENTAS PARA EL MODULADOR POR ANCHO DE PULSO
CALL
TRANSMITIR
CLRF CENTENA Y MILLAR
UNIDAD
;TRANSMITO LOS DATOS A LA PC
;DIVIDO AL NUMERO PARA QUE QUEDE EN UNIDAD, DECEN
CLRFDECENA CLRF
CENTENA
CLRF
MILLAR
MOVF
CONTBAJO,F
BTFSS
STATUS,Z
GOTO
ARRIBA
MOVF
0X29,F
BTFSC
STATUS,Z
RETURN ARRIBA
MOVLW 0X01 CLRWDT ADDWF AUX_BAJO,F BTFSC
STATUS,C
INCF
AUX_0X29,F
INCF
UNIDAD,F
;DIVIDE EN UNIDAD
MOVLW 0X0A XORWF UNIDAD,W
DEC
BTFSS
STATUS,Z
GOTO
DEC
CLRF
UNIDAD
INCF
DECENA,F
MOVLW 0X0A
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD XORWF DECENA,W
CEN
BTFSS
STATUS,Z
GOTO
CEN
CLRF
DECENA
INCF
CENTENA,F
;DIVIDE EN DECENA
MOVLW 0X0A XORWF CENTENA,W
MIL
Página:52
BTFSS
STATUS,Z
GOTO
MIL
CLRF
CENTENA
INCF
MILLAR,F
;DIVIDE EN CENTENA
MOVLW 0X0A XORWF MILLAR,W BTFSS
STATUS,Z
GOTO
SAL
CLRF SAL
;DIVIDE EN MILLAR
MILLAR
MOVF
AUX_0X29,W
XORWF 0X29,W BTFSS
STATUS,Z
GOTO
ARRIBA
MOVF
AUX_BAJO,W
XORWF CONTBAJO,W BTFSS
STATUS,Z
GOTO
ARRIBA
CLRF
CONTBAJO
CLRF
0X29
;HAGO LAS CUENTAS PARA EL MODULADOR POR ANCHO DE PULSO
RETURN
MODULADOR MOVF
0X29,W
;ES IGUAL LA PARTE ALTA DE LA REFERENCIA Y LA DE LAS ACTUALES?
XORWF REFH,W BTFSC
STATUS,Z
GOTO
SI_IGUAL
;SI IGUAL ;NO IGUAL
MOVF
Fecha: 14/06/06
REFH,W
;Si REFH
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:53
SUBWF 0X29,W BTFSS
STATUS,C
GOTO
NO_MAYOR
MOVLW 0X02 SUBWF CCPR2L,F BTFSC
STATUS,C
RETURN MOVLW .37
;Si LLEGO AL LIMITE INFERIOR LO PONDO EN 37 DECIMAL AL MODULADOR
MOVWF CCPR2L
;DE ESTA MANERA ESTAMOS EN EL CORTE JUSTO EN EL TRANSISTOR
RETURN NO_MAYOR MOVLW 0X02 ADDWF CCPR2L,F BTFSS STATUS,C RETURN MOVLW 0XFF
; Si LLEGO AL LIMITE SUPERIOR LO PONDO EN 255 DECIMAL AL MODULAD
MOVWF CCPR2L
;DE ESTA MANERA ESTAMOS EN LA MÁXIMA SATURACION
RETURN
SI_IGUAL MOVF
CONTBAJO,W
;Si REFB<=CONTB ENTONCES MODULADOR A 0
SUBWF REFB,W BTFSC
STATUS,C
GOTO
RESTA
MOVLW 0X01 SUBWF CCPR2L,F BTFSC
STATUS,C
RETURN MOVLW .37 MOVWF CCPR2L
;Si LLEGO AL LIMITE INFERIOR LO PONDO EN 37 DECIMAL AL MODULADOR ;DE ESTA MANERA ESTAMOS EN EL CORTE JUSTO EN EL TRANSISTOR
RETURN RESTA
MOVLW 0X01 ADDWF CCPR2L,F BTFSS STATUS,C RETURN
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:54
MOVLW 0XFF MOVWF CCPR2L RETURN
TRANSMITIR LOS DATOS
;ESTA SUBRUTINA ES LA ENCARGADA DE REALIZAR LA TRANSMISIÓN
MOVF
0X29,W
MOVWF TXREG
NO
BSF
STATUS,RP0
BCF
STATUS,RP1
;PRIMERO TRANSMITO LA PARTE ALTA DEL CONTADOR ; VOY AL BANCO 1
BTFSS
TXSTA,TRMT ;Se puede transmitir?
GOTO
NO
BCF
STATUS,RP0
BCF
STATUS,RP1
MOVF
CONTBAJO,W
;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 corresp MOVF CALL
ELEGIR,W PUERTOA
MOVWF PORTA MOVLW UNIDAD ADDWF ELEGIR,W MOVWF FSR MOVF
INDF,W
CALL
PUERTOB
MOVWF PORTB INCF
ELEGIR,F
MOVLW 0X04 XORWF ELEGIR,W BTFSC STATUS,Z CLRF
ELEGIR
RETURN PUERTOA
ADDWF PCL,F RETLW
Fecha: 14/06/06
0XFE
;RA0
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
PUERTOB
RETLW
0XFD ;RA1
RETLW
0XFB ;RA2
RETLW
0XF7 ;RA3
Página:55
ADDWF PCL,F
RETLW 0X80 ;"0" 10000000
5
RETLW
0XEC ;"1" 11101100 -
RETLW
0X42 ;"2" 01000010 6| |4
RETLW
0X48 ;"3" 01001000 7 -
RETLW
0X2C ;"4" 00101100 3| |1
RETLW
0X18 ;"5" 00011000 - .8
RETLW
0X10 ;"6" 00010000
RETLW
0XCC ;"7" 11001100
RETLW
0X00 ;"8" 00000000
RETLW
0X08 ;"9" 00001000
EXTERNA
2
;Si viene una interrupcion externa incremento el contbajo y si se desborda incremento la parte alta MOVLW 0X01 ADDWF CONTBAJO,F BTFSC INCF BCF
STATUS,C 0X29,F INTCON,INTF
;BORRO BANDERA DE INTERUPCION
RETFIE END
Fecha: 14/06/06
Revisión: /
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD Programa de la PC #define INTVECT
0x0c
//vector de interrupcion puerto serial
#define BASE 0x3f8 //puerto serial #include
//librerias necesarias para ejecutar el programa
#include #include 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; //desabilitacion de interrupciones para poder
disable();
setvect(INTVECT,portint);
//asignar la funcion de interrupcion al //vector de interrupcion
enable();
//habilitacion de interrupciones
intmask=inp(0x21);
//asigancion de la mascara de interrupcion
intmask=intmask&0xef;// outp(0x21,intmask);
//
outp(BASE+3,128);
//programacion del puerto serial
outp(BASE+0,0x0C);
//divisor en 12 para 9600 baudios
outp(BASE+1,0x00);
//
outp(BASE+3,0x03);
//activa DTR RST
outp(BASE+4,0x0b);
//
intmask=inp(BASE);
//asignacion de la mascara de interrupcion
intmask=inp(BASE+5);// outp(BASE+1,0x01); grafica1();
//activa la recepcion serial //pantalla de presentacion
if((P=fopen("datos.txt","w"))==NULL) //Apertura del Archivo datos.txt printf("no puedo abrir el archivo"); fprintf(P,"%s %s
%s\n","tiempo","valor deseado","valor obtenido");
while (tecla!=1) {
Fecha: 14/06/06
Revisión: /
Página:56
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD if(k==1)
//en caso de que alla ocurrido
{
//una interrupcion k=1; se imprime
gotoxy(60,2); printf("RPM actuales: "); //el dato en pantalla gotoxy(74,2); printf("%d",resultado); // k=0;
//demora para poder apreciar el dato //espero una nueva interrupcion
}
//
if (kbhit())
//En caso de haber pulsado una tecla
{ 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 %d
// %d\n",aux++,tecla,resultado);
} outp(BASE+1,0x00);
//desactiva la recepcion serial
gotoxy(10,10);
//
printf("Programa FINALIZADO\n"); // delay(2000);
//
fclose(P); } void interrupt portint(...) //subrutina de interrupcion serial { disable();
//desabilito las interupciones para
in=inp(BASE); //recibir el dato de entrada en el puerto 0x3F8
Fecha: 14/06/06
Revisión: /
Página:57
INSTITUTO UNIVERSITARIO AERONAUTICO CONTROL DE VELOCIDAD
Página:58
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();
//actualizo las banderas
//y habilito las inerrupciones
} 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("º
º");
cprintf("ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ¼");
Fecha: 14/06/06
}
Revisión: /