control de velocidad de dc

76
INSTITUTO UNIVERSITARIO AERONAUTICO TRABAJO FINAL DE LABORATORIO: “CONTROL DE VELOCIDAD DE UN MOTOR DC MEDIANTE MODULACIÓN POR ANCHO DE PULSO” Informe Técnico: Revisión: / Proyecto: / Fecha: 14/06/06 Autor: Serrudo Mario Sebastián Revisó:

Upload: api-3731297

Post on 07-Jun-2015

5.126 views

Category:

Documents


2 download

DESCRIPTION

control de velocidad de un motor de dc mediante un pic

TRANSCRIPT

Page 1: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

TRABAJO FINAL DE LABORATORIO:

“CONTROL DE VELOCIDAD DE UN MOTOR DC MEDIANTE

MODULACIÓN POR ANCHO DE PULSO”

Informe Técnico: Revisión: /

Proyecto: /

Fecha: 14/06/06

Autor: Serrudo Mario Sebastián

Revisó: Ing. Luis Murgio

Page 2: Control de Velocidad de Dc

Vo.Bo. :

Page 3: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:1

INDICE

Página.

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ÓN 10

Fecha: 14/06/06 Revisión: /

Page 4: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:2

“CONTROL DE VELOCIDAD DE UN MOTOR DC MEDIANTE

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 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 través 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

utilización de una PC.

Fecha: 14/06/06 Revisión: /

Page 5: Control de Velocidad de Dc

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 lazo cerrado

muy utilizado en la actualidad debido que dichos motores tienen características de velocidad y

torque muy interesantes, las cuales pueden ser aprovechadas de manera muy sencilla mediante un

sistema de control.

Típicamente el control de la velocidad de los motores DC se realiza de manera continua

mediante la utilización de un reóstato, operacionales, etc. Este método resulta en ocasiones

deficientes en particular cuando se desea un control centralizado de bajo mantenimiento alta

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 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 implementación de la

estrategia de control por medio del microcontrolador. Asimismo se presentan las consideraciones

del diseño del hardware y software y los resultados experimentales obtenidos. Este Sistema tiene

numerosas aplicaciones donde se tiene disponible tensión continua como en vehículos eléctricos,

grúas, carros mineros de arrastre, servos de corriente continua, etc

Fecha: 14/06/06 Revisión: /

Page 6: Control de Velocidad de Dc

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 a utilizar.

2.1.Teoría.

El sistema de control a utilizar en este trabajo se denomina “Delta”, y es de muy fácil

implementación en sistemas digitales pero de una deducción teórica muy compleja, por lo que

se procederá a hacer una aproximación mediante un control clásico continuo con el que se

consigue muy buenos resultados.

El diagrama de un sistema de control de lazo cerrado clásico es como el que se muestra a

continuación:

+ 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 función de transferencia de cada bloque es la siguiente :

Fecha: 14/06/06 Revisión: /

MOTOR K

H

REF

Page 7: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:5

Si buscamos la función de transferencia del sistema se obtiene lo siguiente:

(1)

y transformando al dominio del tiempo se obtiene:

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 10 veces

mas lento aun, por lo que la formula final queda:

De esta manera se concluye el estudio teórico del comportamiento del sistema de control.

2.2Diagrama en bloques:

A continuación se realizara un diagrama en bloque del sistema de control de velocidad.

PWMTx

Rx

RPM

Puerto A y BRb0

.

2.3Hardware

Fecha: 14/06/06 Revisión: /

Micro controlador

Comunicación con la PC

Modulo de Realimentación

o encode

Motor

Potencia

Visualización

Page 8: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:6

El montaje de este sistema se realizó en Protoboard y básicamente consiste de los subsistemas

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 un

optoacoplador) y visualización (mediante display 7 segmentos) de las RPM del motor.

Además este microcontrolador debe permitir mantener una comunicación serie (bajo norma

RS-232) con la PC para poder transmitir las RPM actuales y recibir la señal de referencia o RPM

deseadas necesaria para el proceso de control.

En función de los requisitos anteriormente enunciados se procedió a la elección de un

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

Conversor A/D de 10 Bits

Puerto serie síncrono

USART

Fecha: 14/06/06 Revisión: /

Page 9: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:7

Interrupción externa

Como se puede observar este microcontrolador cumple con los requisitos necesarios para este

sistema.

2.3.2 Visualización

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 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 observa las

curvas de características eléctricas 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 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.5v con

una potencia de 7.5 mW por diodo.

Fecha: 14/06/06 Revisión: /

Page 10: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:8

En conclusión se decide que los displays sean activos por bajo utilizándose entonces displays

de ánodo común. 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 saturación que provee la intensidad de corriente requerida por el display. El

circuito a diseñar para cualquier display es el siguiente

U1

A B C D E F G

CK

Q1

BC327

VCC

5V

RB

RB1

RB2

RB3

RB4

RB5

RB6

RB7

AL_PUERTO_B

Ln1

Ln2

Ln3

Ln4

Ln5

Ln6

Ln7

Fecha: 14/06/06 Revisión: /

Page 11: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:9

Rc se calcula a de la siguiente manera

donde Vec= 0.3v es el voltaje de saturación del transistor y VOL=0.5v es el voltaje en estado

bajo del puerto B del PIC .

Rb se calcula de la siguiente manera

donde IBsat es la corriente de base para saturar el transistor

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 activación de los

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és de las

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: /

Page 12: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:10

La comunicación con la computadora como ya se ha mencionado se realiza mediante el

protocolo de comunicación serie RS-232. Dicho protocolo establece una serie de condiciones

necesarias para realizar una comunicación exitosa.

Básicamente este tipo de comunicación se realiza de manera asincrónica por lo que cada palabra

de información se envía independientemente de las demás. Suele constar de 8 o 9 bits y van

precedidos por un bit de START(inicio) y detrás 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 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 se

establecen en –12 o 12 voltios según 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 Revisión: /

Page 13: Control de Velocidad de Dc

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 modulador

por ancho de pulso que posee el microcontrolador. Se ha decidido utilizar este tipo de modulación

debido a que el motor no pierde sus propiedades de velocidad y par que son tan deseadas de

conservar.

Básicamente la técnica consiste en una señal 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 señal obtenemos lo siguiente.

Fecha: 14/06/06 Revisión: /

Page 14: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:12

Ahora si llamamos a m=1/X obtenemos:

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 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 sección de teoría.

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 saturación. La misión de este transistor es proporcionar la corriente necesaria

al ritmo que el modulador por ancho de pulso lo imponga.

Fecha: 14/06/06 Revisión: /

Page 15: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:13

El circuito utilizado para esta tarea es el siguiente.

R1Q1

TIP31A

S1MOTOR

M D11N4148

VCC

pwm

La resistencia R1 se calcula de la siguiente manera.

En donde : Vpwmmax = 5 vol

IC=600mA

Vce=0.6 V

=100

quedando:

Debido a que el motor es un elemento inductivo, cuando se desconecta de manera abrupta

tiende a elevar su potencial, para que esto no dañe al transistor se coloca el diodo en paralelo con

el motor de manera que cuando ocurra una desconexión abrupta el diodo cortocircuite al motor

protegiendo al transistor.

De esta manera concluye el estudio de la etapa de potencia del sistema.

2.3.5 MotorFecha: 14/06/06 Revisión: /

Page 16: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:14

El motor utilizado en este proyecto es de un auto de juguete, dicho motor consume

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 demuestra en el

ANEXO 1

2.3.6 Modulo de realimentación o Encode

Este modulo es el encargado de realimentar el sistema, básicamente transforma las RPM en

pulsos digitales para que el PIC pueda determinar la RPM del motor y en función de las mismas y la

referencia efectué una corrección.

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 conducción cuando es iluminado y en corte

cuando no lo es, pero en la realidad este fototransistor no trabaja en corte y saturación si no que

produce una señal senoidal debido a que la iluminación se produce de manera paulatina, por lo que

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: /

Page 17: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:15

LED1X1

R10

1K_LINKey = Space

50%

VDD

5V

R111.0k

U1A

LM324AD

3

2

11

4

1

R2

10k

R3

10k

R15.1k

VDD

5V

Disco

RB0

Para simplificar el análisis del circuito lo dividiremos en dos partes:1. Circuito de toma de señal2. Circuito conformador de onda.

El circuito de toma de señal 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 función es tomar la onda

senoidal proveniente de la etapa anterior y transformarla en una señal 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 tensión en la entrada no inversora del operacional

es:

por lo tanto cuando la tensión en la entrada inversora supere a V1 la salida del operacional pasara

a valer 0 voltio.

Fecha: 14/06/06 Revisión: /

Page 18: Control de Velocidad de Dc

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 resistencia R1

y R2 se encuentran en paralelo , por lo que la tensión en la entrada no inversora del operacional es:

por lo tanto cuando el valor en para inversora disminuya de v2 la salida del operacional pasa a 5 V.

Ahora propongo una tensión de subida V1 de 2.5 Vol y y tensión de bajada de 1.2V por lo que las

formulas quedan:

Haciendo el cociente entre ambas obtenemos:

Ahora trabajando con la formula de V2 se obtiene:

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 unir todos los

módulos en el siguiente circuito.

Fecha: 14/06/06 Revisión: /

Page 19: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:17

1K_LINKey = Space

50%

VDD

5V

1.0kU1A

LM324AD

3

2

11

4

1

10k 10k

5.1k

VDD

5V

Disco

U2

16f873

1234567891011121314 15

16171819202122232425262728

750TIP31A

MOTOR

M D11N4148

VCC

5V

U3

MAX232E

C1+C1-C2+C2-

T1I NT2I N

R1OUTR2OUT

GND

R2I NR1I N

T2OUTT1OUT

V+

V-VCC

U4

A B C D E F G

CK

U5

A B C D E F G

CK

U6

A B C D E F G

CK

U7

A B C D E F G

CK

330

330

330

330

330

330

330

Q2

BC327

Q3

BC327

Q4

BC327

Q5

BC327470

470

470

470

VDD

5V

VDD

5V

HC-49/U_3MHz

20pF

20pF

1uF-POL

1uF-POL1uF-POL

1uF-POL

J1

HDR1X3

Fecha: 14/06/06 Revisión: /

Page 20: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página: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.

Comprobación 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 código fuente se encuentra

en la sección de ANEXO.

Luego de comprobar el correcto funcionamiento de los display se procedió a verificar la correcta

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 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 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 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.

Además, antes de los bits del dato de información incluye un bit de INICIO y después de sacar

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 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 señalizador TXIF se pone

a 1, para advertir que el registro de transmisión se ha vaciado. También en este momento puede

producirse una interrupción si se ha posibilitado programando el señalizador TXIE= 1 en el registro

pie 1. Cuando se escribe otro dato sobre TXREG, el señalizador TXIF se pone a 0 .

La secuencia de pasos a seguir para implementar una transmisión Asíncrona es la siguiente:

Fecha: 14/06/06 Revisión: /

Page 21: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:19

1. Hay que configurar la líneas RC6/TX/CK como salida y RC7/RX/DT como entrada.

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 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 transmisión de alta o baja velocidad)

5. Activar ela transmisión 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 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 introduciendo

secuenciamente en el registro desplazamiento RSR, que funciona a una frecuencia 16 veces mas

rápida que la de trabajo. Cuando el dato consta de 9 bits hay que programar el bit RX9 = 1 y el

noveno bit de información se colocara en el bit RX9D del registro RCSTA. El control sobre el

noveno bit se realiza con las puertas de control y las señales que se aplican (ADDEN = 1). Cuando

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 deseada,

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 PARADA,

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 si se había

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: /

Page 22: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:20

A continuación 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 código fuente dirigirse a

la sección de anexos.

Programa de la PC.

El programa utilizado para el testeo del correcto funcionamiento de la transmisión asíncrona fue

realizado en lenguaje C, dicho programa se basa en la transmisión y recepción de datos mediante

el puerto serie (0X386) a una velocidad de 9000 baudios por segundo. Si se desea saber el código

fuente de dicho programa dirigirse a la sección de anexo.

Luego de comprobar el correcto funcionamiento de la transmisión y recepción serie se procedia

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 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 máxima. 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 :

2. Asignar la anchura del pulso cargando el registro CCPR1L y recordando que la formala

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: /

Inicializaciónrc7 entradarc6 salida

Configuración USART

USAR en escucha

bucle

LEER DATO

RETRANSMITIR DATO

VOLVER

Page 23: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:21

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 verificar el

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 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 continuación.

No No

Si Si

Si

no

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 módulos del sistema.

Fecha: 14/06/06 Revisión: /

InicializaciónRc1salidaPredivisor TMR0Velocidad=0

Activar motor

Incrementar velocidad hasta máxima

Parar motor

InicializaciónRb salidaRb0 entradaRa SalidaConfiguración del TMR0Activación de interrupciones

bucle

interrupción

¿Interna? ¿externa?

1 Seg?Para la cuenta

Guardar la cuenta en aux

Mostrar en display

Incremento aux

Restablecer interrupciones

volver

Page 24: Control de Velocidad de Dc

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 control de

velocidad del motor de corriente continua, visualizar las RPM en los displays 7 segmentos y

posibilitar la transmisión y recepción de datos necesarios entre la PC y el microcontrolador .

Para simplificar la explicación 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 básicamente es una combinación de los programas anteriores

con el agregado de poseer el algoritmo que permite el control de la velocidad de giro motor.

Debido a la extensión del programa se realiza un diagrama de flujo para así facilitar la

comprensión del mismo y poder dar detalles de los bloques que se crea necesario.

NO NO

Fecha: 14/06/06 Revisión: /

Inicialización de variablesPuerto b Salida Rb0 entradaPuerto a SalidaRc1 Salida para PWMRc6 Salida para Tx SerieRc7 Entrada para Rx SerieConfiguración del PWMConfiguro USARHabilito interrupcionesCarga al tmr0Velocidad de giro =0

BUCLE

INTERRUPCION

Por TMR0? Por Rb0 Recepción serie

Page 25: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:23

SI Si

Si

Si

No

Mayor menor

Como se puede observar el programa comienza realizando las configuraciones necesarias para

que funcione de forma correcta: el modulador PWM, la transmisión y recepción serie, configurando

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 alguna de las 3

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: /

1 Seg?

Visualización

Realizo la cuenta de RPM

Comparo con la referencia

Incremento el ancho de pulso

Decremento el ancho de pulso

Trasmito a la PC

Seteo de Banderas y variables

Incremento Cuenta

Seteo de Banderas

Cuenta=0

Cargo el nuevo valor de referencia

Seteo de Banderas

Salir de interrupción

Page 26: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:24

Interrupción por TMR0: En esta condición el programa refresca los display para poder obtener una

correcta visualización, 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 efectúa la siguiente cuenta.

En donde:

Cuenta: es una variable que se incrementa cada vez que entra una interrupción 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 ecuación anterior queda de la siguiente manera:

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 con la

referencia enviada por la PC via puerto serie y se incrementa o decrementa el ancho del pulso del

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 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 fácil implementación.

Luego de hacer la corrección del ancho de pulso, se envía las RPM con que esta girando el

motor a la PC y esta las guardas para poder hacer a posterior un análisis del funcionamiento del

sistema de control.

Finalmente se comienza nuevamente con el proceso colocando la variable cuenta a 0

Fecha: 14/06/06 Revisión: /

Page 27: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:25

Interrupción por RB0: Cuando se produce una interrupción por Rb0 se incrementa la variable

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 PC e indica la cantidad de RPM

que se desea, de manera que el microcontrolador efectúa las correcciones necesarias para cumplir

con la referencia.

De esta manera se ha descrito el programa del microcontrolador y cuyo código fuente se encuentra

en la sección de anexo.

Programa de la PC.

El programa realizado para la Pc es relativamente sencillo, básicamente lo que realiza es la

transmisión de la referencia al sistema de control y la recepción de los datos que envía el mismo

almacenándolo en un archivo denominado datos.txt el cual luego será utilizado para estudiar el

comportamiento del sistema.

El programa basa la recepción de datos en el servicio de interrupción que posee la PC y la

transmisión de dato se realiza de manera directa como se puede observar en el código fuente en la

sección de anexo.

3 .Resultados

En esta sección se analizan los resultados obtenidos de manera teórica y practica. Para ello lo

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: /

Page 28: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:26

 Para obtener la función 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 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 expresión

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 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 Revisión: /

Page 29: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:27

Ahora si observamos el tiempo transcurrido hasta que llegue a un 50% del régimen 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 función y la obtenida experimentalmente se observa lo siguiente.

Como se puede observar la aproximación realizada concuerda con los resultados obtenidos de

manera practico por lo que podemos definir a la función de transferencia del motor como:

Fecha: 14/06/06 Revisión: /

Page 30: Control de Velocidad de Dc

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 transferencias las cuales se pueden obtener de forma matemática.

Para el circuito de realimentación se pude considerad que la función de transferencia es unitaria 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 transferencia del 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 procedió a

excitar al sistema mediante una señal de referencia de 2000 Rpm y se obtuvo la siguiente grafica:

Fecha: 14/06/06 Revisión: /

Page 31: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:29

Como  puede observarse la aproximación 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 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 control

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 motor esta

en funcionamiento y en régimen) produce una señal cuadrada cuya frecuencia varia alrededor de

una central , esto produce un error en la determinación 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 Revisión: /

Page 32: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:30

Este error que produce el sistema de realimentación no es un problema electrónico si no

mecánico debido a que si se observa el funcionamiento del  eje del motor este posee un pequeño

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 conforme a

lo predicho teóricamente.     

            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 Informática 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 tecnología de

los microcontroladores para adaptarse a una gran variedad de proyectos con un costo muy

reducido.

Fecha: 14/06/06 Revisión: /

Page 33: Control de Velocidad de Dc

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<P16F873.INC>

;DECLARACIONES 

GUARDO_W           EQU    0X20  ;EN ESTA DIRECCION SE GUARDA EL REGISTRO W CUALDO SE INGRESA A LA  RUTINA DE INTERRUPCION

GUARDO_S          EQU      0X21;EN ESTA DIRECCION SE GUARDA EL REGISTRO STATUS CUALDO SE  INGRESA A LA RUTINA DE INTERRUPCION

DISPLAY1                            EQU     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       ;INDICO DONDE COMIENZA EL PROGRAMA

                                 GOTO      PRINCIPAL

                                 ORG        0X04       ;CARGO EL VECTOR DE INTERRUPCION

                                 GOTO      INTERUP

                                 ORG        0X05                                      

;PROGAMA PRINCIPAL

;SEREOS

PRINCIPAL                CLRF       CONTADOR

                                 MOVLW  0X02

                                 MOVWF  CONTROLAR;         ES PARA COMENZAR PARADO EL RELOJ

                                 INCF        CONTADOR,F;I            NCREMENTO EL CONTADOR DEBIDO A QUE NECESITO QUE COMIENCE EN 1                                        

                                 BSF         STATUS,RP0

                                 MOVLW  0X10

                                 MOVWF  TRISA

                                 MOVLW  0X01

Fecha: 14/06/06 Revisión: /

Page 34: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:32

                                 MOVWF  TRISB;                     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;           GUARDO STATUS DEL PROGRMA PRINCIPAL

                 BTFSS     INTCON,T0IF           ;VERIFICA SI LA INTERRUPCION ES CAUSADA POR EL DESBORDAMIENTO DE TMR0

                 GOTO      SIGUI       ;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;              VERIFICO QUE PASEN 8*5=40ms ANTES DE PODER INGRESAR OTRA INTERRUPCION EXTERNA

                 BTFSS     STATUS,Z

                 INCF        CONTADOR1,F

                 BTFSS     CONTADOR1,3

                 GOTO      NUMERO

                 CLRF       CONTADOR1

                 CLRF       REBOTE

                 GOTO      NUMERO

                          

SIGUI        BTFSC     INTCON,INTF;          VERIFICA SI LA INTERRUCPCION ES A CAUSA DE UNA INTERRUPCION EXTERNA

                 GOTO      FIJATE ;                  SI ES CAUSADA SALTO A FIJATE

Fecha: 14/06/06 Revisión: /

Page 35: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:33

                 GOTO    TERMINA   ;               INTERRUPCION NO VALIDA NO PROSIGUE Y SALTO PARA TERMINAR LA INTERRUPCION

FIJATE      INCF        REBOTE,F ;             CONTROLO QUE LA INTERRUPCION EXTERNA NO SEA PROVOCADA POR REBOTES

                 MOVLW  0X01

                 XORWF   REBOTE,W

                 BTFSS     STATUS,Z

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

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

                  

NUMERO   MOVF      CONTROLAR,W

                 XORLW   0X03;                      SI ES LA TERCERA LA PULSACION SIGNIFICA QUE DESEO EMPEZAR

                 BTFSC     STATUS,Z

                 CLRF       CONTROLAR

                 BTFSC     CONTROLAR,0;      ME FIJO SI SE PULSO UNA VEZ EL BOTON ESTO SIGNIFICA QUE DEBO PARAR LA CUENTA

                 GOTO      PARAR

                 BTFSC     CONTROLAR,1;      SI PULSO UNA SEGUNDA VEZ EL PULSADOR SIGNIFICA QUE DESEO RESETEAR LA CUENTA

                 CALL       SETEO

                

                 INCF        MILISEGUNDO,F

                 MOVF      MILISEGUNDO,W;                   INCREMENTEO MILISEGUNDO CADA 5mS Luego de que milisegundo

                 XORLW   0X02                                       se incrementea 2 veces osea se llega a 1 centesima de segundo

                 BTFSS     STATUS,Z;                             entonces incrementamos el display 1 que es el que maneja el digito menor de centesima de segundo                    

                 GOTO      SAL1                     

                 CLRF       MILISEGUNDO

                 INCF        DISPLAY1,F           

SAL1        MOVF      DISPLAY1,W;         cuando el display1 llega a 10, entonces se incrementa el segundo display2 el cual maneja la desima de segundo

                 XORLW   0X0A                                     

                 BTFSS     STATUS,Z

                 GOTO      SAL2

                 CLRF       DISPLAY1

                 INCF        DISPLAY2,F

SAL2        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: /

Page 36: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:34

                 CLRF       DISPLAY2

                 INCF        DISPLAY3,F

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

                 XORLW   0X0A

                 BTFSS     STATUS,Z

                 GOTO      SAL4

                 CLRF       DISPLAY3

                 INCF        DISPLAY4,F

                

SAL4        MOVF      DISPLAY4,W;         cuando el display4 llega a 6, entonces se RESETEAN LOS DISPLAY

                 XORLW   0X06

                 BTFSC     STATUS,Z

                 CLRF       DISPLAY4

PARAR     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 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     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: /

Page 37: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:35

                 MOVF      CONTADOR,W

                 XORLW   0X02

                 BTFSC     STATUS,Z ;ME FIJO SI TENGO QUE PRENDE EL DISPLAY 2

                 GOTO      SALE2

                 MOVF      CONTADOR,W

                 XORLW   0X03

                 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

SALE1      MOVF      DISPLAY1,W ;BUSCO EL CODIGO DEL DISPLAY 1

                 CALL       TABLA    ;(OSEA QUE BUSCO LA SECUENCIA DE ENCENDIDO PARA EL DISPLAY DE MANERA MUESTRE EL NUMERO EN DECIMAL DE LA VARIABLE)

                 GOTO      SALIR

SALE2      MOVF      DISPLAY2,W;BUSCO EL CODIGO DEL DISPLAY 2

                 CALL       TABLA   

                 GOTO      SALIR

SALE3      MOVF      DISPLAY3,W;BUSCO EL CODIGO DEL DISPLAY 3

                 CALL       TABLA

                 GOTO      SALIR

SALE4      MOVF      DISPLAY4,W;BUSCO EL CODIGO DEL DISPLAY 4

                 CALL       TABLA   

                

SALIR       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         PORTA,F

                 MOVF      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: /

Page 38: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:36

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           -         .8

                 RETLW    0X10       ;"6" 00010000          2

                 RETLW    0XCC       ;"7" 11001100

                 RETLW    0X00       ;"8" 00000000

                 RETLW    0X08       ;"9" 00001000

;SETEOS  

SETEO                      CLRF       DISPLAY1

                                 CLRF       DISPLAY2

                                 CLRF       DISPLAY3

                                 CLRF       DISPLAY4

                                 CLRF       MILISEGUNDO        

                                 RETURN                                 

                 END        

 

Fecha: 14/06/06 Revisión: /

Page 39: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:37

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        0x00

GOTO      INICIO

ORG        0X04

GOTO      INTE

INICIO                CLRF       PORTB

                         CLRF       PORTC         ; Limpia salidas

                         BSF         STATUS,RP0

BCF         STATUS,RP1 ;Me voy al banco 1

MOVLW  0XBF          ;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      BUCLE

INTE                  BTFSS     PIR,RCIF   ;recivi dato?

GOTO      VOLVER  ;NO ENTONCES SALGO

BCF         PIR1,RCIF;SI REPONER BANDERA

MOVF      RCREG,W;LEO EL DATO

CALL       TX_DATO;TRANSMITO EL DATO

VOLVER           RETFIE

TX_DATO         BCF         PIR,TXF;RESTAURO BANDERA DEL TRANSMISOR

Fecha: 14/06/06 Revisión: /

Page 40: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:38

                         MOVWF  TXREG;MUEVO EL BYTE AL TRANSMISOR

                         BSF         STATUS,RP0

BCF         STATUS,RP1;VOY AL BANCO 1

TX                     BTFSS     TXSTA,TRMT ;BYTE TRANSMITIDO?

                         GOTO      TX;NO ENTONCES ESPERO

                         BCF         STATUS,RP0;SI VUELVO AL BANCO 0

                         RETURN

Fecha: 14/06/06 Revisión: /

Page 41: Control de Velocidad de Dc

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 PANTALLA.

#define INTVECT              0x0c           //vector de interrupción puerto serial

#define             BASE 0x3f8               //puerto serial

#include <dos.h>                //librerías necesarias para ejecutar el programa

#include <conio.h>

#include <stdio.h>

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

Fecha: 14/06/06 Revisión: /

Page 42: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:40

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

                                                                        //

                         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);    //actualizo las banderas

         enable();                 //y habilito las inerrupciones

}

Fecha: 14/06/06 Revisión: /

Page 43: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:41

ANEXO 3

Programa de   prueba que permite comprobar el bloque modulador pwm

#include<P16F873.INC>

                         ORG                        0X00

                         GOTO                      INICIO

                         ORG                        0X05

INICIO               

BSF                         STATUS,RP0 ;VOY AL BANCO 1

BCF                         STATUS,RP1

                         MOVLW                  0XFD      ;CONFIGURO EL PUERTO C PARA SALIDA DE PWM2

                         MOVWF                  TRISC

                         MOVLW                  0XFF   ;CARGO EL PERIODO DEL PULSO

                         MOVWF                  PR2

                         BCF                         STATUS,RP0  ;VOY AL BANCO 0

BUCLE

                         MOVLW                  0X0C         ;CONFIGURO AL CCP2

                         MOVWF                  CCP2CON

                         MOVLW                  0XFF

PASO               MOVWF                  0X20       ;MÁXIMA VELOCIDAD DESEADA

CLRF                       CCPR2L  ;Velocidad inicial nula

MOVLW                  0X06

MOVWF                  T2CON    ;configural al tmr2 con predivisor por 16

PAS                  CALL                      DELAY   ;Produzco un retardo

INCF                        CCPR2L,F ;incremento la velocidad del motor

DECFSZ                  0X20,F ;Llegue la maximo?

GOTO                      PAS    ;No

GOTO                      PASO;Si,entonces empiezo de nuevo

                        

DELAY             MOVLW                  0X4E

                         MOVWF                  0X21

BU                    DECFSZ                  0X21,F

                         GOTO                      BU

                         RETURN

END

Fecha: 14/06/06 Revisión: /

Page 44: Control de Velocidad de Dc

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<P16F873A.inc>

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                        0X2C

AUX                                 EQU                        0X2D

AUX2                                               EQU                        0X2E

                        

                         GOTO      INICIO

                         ORG                        0X04

                         GOTO      INTERRUP

                         ORG                        0X05

;configuracion del pic

INICIO                BSF         STATUS,RP0

                         BCF         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                      ;COLOCO AL PUERTO B COMO SALIDA MENOS EL RB0 QUE ES POR DONDE ENTRAN LOS PULSOS

                         MOVLW  0X90                       ;10100000;CONFIGURO LA INTERRUPCION PARA INTERNA

                         MOVWF  INTCON                  

                         MOVLW  0X06                       ;00000110;CONFIGURO AL PUERTO A COMO SALIDA DIGITAL

Fecha: 14/06/06 Revisión: /

Page 45: Control de Velocidad de Dc

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         INTCON,T0IE                          

                                                       

BUCLE              CLRWDT

                         GOTO      BUCLE

INTERRUP                                                                        ;COMO TENGO VARIAS PROCEDENCIA DE INTERRUPCION DEBO ;SABER CUAL ES LA QUE CAUSO LA INTERRUPCION

                         BTFSC     INTCON,T0IF           ;INTERRUPCION INTERNA

                         GOTO      INTERNA

                         BTFSC     INTCON,INTF                           ;INTERRUPCION EXTERNA    

                         GOTO      EXTERNA

                         RETFIE

INTERNA

                         INCF        RELOJ,F

                         MOVLW  0XC8       

                         XORWF   RELOJ,W                ;ME FIJO SI LLEGUE A 1SEGUNDO

                         BTFSS     STATUS,Z

                         GOTO      FIN                                          ;NO LLEGUE AL SEGUNDO ENTONCES S0LTO

                         CLRF       RELOJ                     ;SI LLEGUE AL SEGUNDO ENTONCES HAGO LA CUENTA DE LAS RPM

                         CALL       CUENTA                 

                         BCF         INTCON,INTF

                                                       

Fecha: 14/06/06 Revisión: /

Page 46: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:44

FIN                    CALL       DISPLAY

                         MOVLW  0Xd9                       ;CARGO CON 217 AL TMR0 PARA QUE EL TIEMPO DE INTERRUPCION=1us*128*(256-217)=5ms

                         MOVWF  TMR0

                         BCF                         INTCON,T0IF           ;BORRO LA BANDERA DE INTERRUPCION INTERNA

                         RETFIE

CUENTA

                                                       

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

                         CLRF       DECENA 

                         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

                         BTFSS     STATUS,Z

                         GOTO      DEC

                         CLRF       UNIDAD

                         INCF        DECENA,F

DEC                  MOVLW  0X0A

                         XORWF   DECENA,W

                         BTFSS     STATUS,Z

                         GOTO      CEN

Fecha: 14/06/06 Revisión: /

Page 47: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:45

                         CLRF       DECENA

                         INCF        CENTENA,F

CEN                  MOVLW  0X0A

                         XORWF   CENTENA,W

                         BTFSS     STATUS,Z

                         GOTO      MIL

                         CLRF       CENTENA

                         INCF        MILLAR,F

MIL                    MOVLW  0X0A

                         XORWF   MILLAR,W

                         BTFSS     STATUS,Z

                         GOTO      SAL

                         CLRF       MILLAR

SAL                  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                                                         ;ESTA SUBSUTINA ES LA ENCARGADA DE MANEJAR LOS DISPLAY 7 SEGMENTOS

                         MOVF      ELEGIR,W

                         CALL       PUERTOA

                         MOVWF  PORTA

                         MOVLW  UNIDAD

                         ADDWF   ELEGIR,W

                         MOVWF  FSR

                         MOVF      INDF,W

                         CALL       PUERTOB

Fecha: 14/06/06 Revisión: /

Page 48: Control de Velocidad de Dc

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         ADDWF   PCL,F

                         RETLW    0XFE    ;RA0

                         RETLW    0XFD       ;RA1

                         RETLW    0XFB       ;RA2

                         RETLW    0XF7       ;RA3 

                        

PUERTOB         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     2

         RETLW    0XCC       ;"7" 11001100

         RETLW    0X00       ;"8" 00000000

         RETLW    0X08       ;"9" 00001000

                        

EXTERNA

                         MOVLW  0X01

                         ADDWF   CONTBAJO,F

                         BTFSC     STATUS,C

                         INCF        0X29,F

                         BCF                         INTCON,INTF                           ;BORRO BANDERA DE INTERUPCION

                         RETFIE

                         END        

Fecha: 14/06/06 Revisión: /

Page 49: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:47

ANEXO 5

Programa Final

Programa del PIC

#include<p16f873.inc>

RELOJ              EQU                        0X20

BANDERASS    EQU                        0X21

CONTADOR      EQU                        0X22

UNIDAD            EQU                        0X23

DECENA           EQU                         0X24                     ;DECLARACIÓN DE VARIABLES

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                        0X2C

AUX                  EQU                        0X2D

AUX2                               EQU                        0X2E

REFB EQU                        0X2F

REFH EQU                        0X30

BANDAS          EQU                        0X31

                        

                         ORG                        0X00

                         GOTO      INICIO

                         ORG                        0X04

                         GOTO      INTERRUP

                         ORG                        0X05

;configuracion del pic

INICIO                BSF         STATUS,RP0

                         BCF         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

Fecha: 14/06/06 Revisión: /

Page 50: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:48

                         MOVLW  0X01

                         MOVWF  TRISB                      ;COLOCO AL PUERTO B COMO SALIDA MENOS EL RB0 QUE ES POR DONDE ENTRAN LOS PULSOS

                         MOVLW  0XF0                       ;11110000;CONFIGURO LA INTERRUPCION PARA INTERNA

                         MOVWF  INTCON                  

                         MOVLW  0XBD        ;COLOCO AL PUERTO C PARA EL MODULADOR DE ANCHO DE PULSO Y ENTRADA Y SALIDA RS232

                         MOVWF  TRISC

                         MOVLW  0X06                       ;00000110;CONFIGURO AL PUERTO A COMO SALIDA DIGITAL

                         MOVWF  ADCON1

                         MOVLW  0XFF

                         MOVWF  PR2                                         ;CARGO EL VALOR DEL PERIORDO DEL PULSO=(PR2+1)*4*Tosc*Predivisor TMR2= 4.096 ms

                         MOVLW  0X24        ;00100100 Configuro LA USAR COMO TRANSMICION ASINCRONA DE ALTA VELOCIDAD DE 8 BITS

                         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: /

Page 51: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:49

                         CLRF       BANDERASS

                         CLRF       BANDAS

                         CLRF       0X29

                         MOVLW  0X07

                         MOVWF  REFH

                         MOVLW  0XD0

                         MOVWF  REFB

                         MOVLW  .37

                         MOVWF  CCPR2L                  ; Velocidad de giro inicial DEL MOTOR nula

                         MOVLW  0Xd9                       ;CARGO CON 217 AL TMR0 PARA QUE EL TIEMPO DE iNTERRUPCION=1us*128*(256-217)=5ms

                         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                           ;INTERRUPCION INTERNA

                         GOTO      INTERNA

                         BTFSC     INTCON,INTF                           ;INTERRUPCION EXTERNA    

                         GOTO      EXTERNA

                         BTFSC     PIR1,RCIF                                ;POR QUE INGRESO UN DATO EXTERNO PÒR RS232

                         GOTO      RECEPCION

                         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      RCREG,W                                              

                         BTFSC     BANDERASS,0

                         GOTO      SALTITO                                 ;LA PRIMERA PARTE LA GUARDO EN LA PARTE ALTA DE LA REFERENCIA

                         MOVWF  REFH

Fecha: 14/06/06 Revisión: /

Page 52: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:50

                         INCF        BANDERASS,F

                         RETFIE

SALTITO           MOVWF  REFB                       ;LA SEGUNDA PARTE LA GUARDO EN LA PARTE BAJA DE LA REFERENCIA

                         CLRF       BANDERASS

                         RETFIE    

INTERNA

                         INCF        RELOJ,F

                         MOVLW  0XC8       

                         XORWF   RELOJ,W                ;ME FIJO SI LLEGUE A 1SEGUNDO

                         BTFSS     STATUS,Z

                         GOTO      FIN                                          ;NO LLEGUE AL SEGUNDO ENTONCES SALTO

                         CLRF       RELOJ                     ;SI LLEGUE AL SEGUNDO ENTONCES HAGO LA CUENTA DE LAS RPM

                         CALL       CUENTA                 

                         BCF         INTCON,INTF

                                                       

FIN                    CALL       DISPLAY

                         MOVLW  0Xd9                       ;CARGO CON 217 AL TMR0 PARA QUE EL TIEMPO DE INTERRUPCION=1us*128*(256-217)=5ms

                         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     STATUS,C

                         INCF        0X29,F

                         MOVF      AUX2,W

                         ADDWF   0X29,F

Fecha: 14/06/06 Revisión: /

Page 53: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:51

                         INCF        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     ;TRANSMITO LOS DATOS A LA PC

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

                         CLRF       DECENA 

                         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

                         BTFSS     STATUS,Z

                         GOTO      DEC

                         CLRF       UNIDAD

                         INCF        DECENA,F

DEC                  MOVLW  0X0A

Fecha: 14/06/06 Revisión: /

Page 54: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:52

                         XORWF   DECENA,W      ;DIVIDE EN DECENA

                         BTFSS     STATUS,Z

                         GOTO      CEN

                         CLRF       DECENA

                         INCF        CENTENA,F

CEN                  MOVLW  0X0A

                         XORWF   CENTENA,W                    ;DIVIDE EN CENTENA

                         BTFSS     STATUS,Z

                         GOTO      MIL

                         CLRF       CENTENA

                         INCF        MILLAR,F

MIL                    MOVLW  0X0A

                         XORWF   MILLAR,W

                         BTFSS     STATUS,Z                          ;DIVIDE EN MILLAR

                         GOTO      SAL

                         CLRF       MILLAR

SAL                  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                            ;HAGO LAS CUENTAS PARA EL MODULADOR POR ANCHO DE PULSO

                         CLRF       0X29

                         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      REFH,W                  ;Si REFH<CONTH ENTONCES MODULADOR A 0

Fecha: 14/06/06 Revisión: /

Page 55: Control de Velocidad de Dc

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 MODULADOR

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

RESTA              MOVLW  0X01

                         ADDWF   CCPR2L,F

                         BTFSS     STATUS,C

                         RETURN

Fecha: 14/06/06 Revisión: /

Page 56: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:54

                         MOVLW  0XFF

                         MOVWF  CCPR2L                 

                         RETURN

        

TRANSMITIR                                                          ;ESTA SUBRUTINA ES LA ENCARGADA DE REALIZAR LA TRANSMISIÓN DE LOS DATOS

                         MOVF      0X29,W

                         MOVWF   TXREG                        ;PRIMERO TRANSMITO LA PARTE ALTA DEL CONTADOR

                         BSF         STATUS,RP0          ; VOY AL BANCO 1

                         BCF         STATUS,RP1

NO                    BTFSS     TXSTA,TRMT          ;Se puede transmitir?

                         GOTO      NO                         

                         BCF         STATUS,RP0          ;VOY AL BANCO 0

                         BCF         STATUS,RP1

                         MOVF      CONTBAJO,W            ;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      ELEGIR,W

                         CALL       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    0XFE    ;RA0

Fecha: 14/06/06 Revisión: /

Page 57: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:55

                         RETLW    0XFD       ;RA1

                         RETLW    0XFB       ;RA2

                         RETLW    0XF7       ;RA3 

                        

PUERTOB         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     2

         RETLW    0XCC       ;"7" 11001100

         RETLW    0X00       ;"8" 00000000

         RETLW    0X08       ;"9" 00001000

                        

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

                         MOVLW  0X01

                         ADDWF   CONTBAJO,F

                         BTFSC     STATUS,C

                         INCF        0X29,F

                         BCF                         INTCON,INTF                           ;BORRO BANDERA DE INTERUPCION

                         RETFIE

                         END        

Fecha: 14/06/06 Revisión: /

Page 58: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:56

Programa de la PC

#define INTVECT              0x0c           //vector de interrupcion puerto serial

#define BASE 0x3f8           //puerto serial

#include <dos.h>                //librerias necesarias para ejecutar el programa

#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();                                //desabilitacion de interrupciones para poder

         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);              //activa la recepcion serial

         grafica1();                            //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: /

Page 59: Control de Velocidad de Dc

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:57

                         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: /

Page 60: Control de Velocidad de Dc

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);    //actualizo las banderas

         enable();                 //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: /