Control de Motor en Dc Por Pwm y Pic

60
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 Vo.Bo. :

Transcript of Control de Motor en Dc Por Pwm y Pic

Page 1: Control de Motor en Dc Por Pwm y Pic

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

Vo.Bo. :

Page 2: Control de Motor en Dc Por Pwm y Pic
Page 3: Control de Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 :

)( Bs

A

Voltios

RPMFTMotor

+===

CtePulsos

VoltiosFTK ===

2CteRPM

PulsosFTH ===

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

MOTOR K

H

REF

Page 7: Control de Motor en Dc Por Pwm y Pic

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:5

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

)2( CteACteBS

CteA

REF

RPMSistema

++== (1)

y transformando al dominio del tiempo se obtiene:

)1(2

*)( 2CteACteB

t

eCteACteB

REFCteAtRPM +

−+

=

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:

)1(2

*)( )2(10 CteACteB

t

eCteACteB

REFCteAtRPM +

−+

=

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.3HardwareFecha: 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 Motor en Dc Por Pwm y Pic

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

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

Page 9: Control de Motor en Dc Por Pwm y Pic

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:7

• Conversor A/D de 10 Bits

• Puerto serie síncrono

• USART

• 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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:9

Rc se calcula a de la siguiente manera

0=−−−− OLcc VIaRcVdVecV

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 .

Ω≈Ω=−−−=−−−

= 33035010

5.07.03.05

mA

vvvv

Ia

VVdVecVccRc OL

Rb se calcula de la siguiente manera

minβc

Bsat

BsatB

OLcc

II

IR

VVebV

=−−

donde IBsat es la corriente de base para saturar el transistor

Ω≈Ω=−−=−−

≤ 4705001510

5.07.05min mA

vvv

I

VVebVR

c

OLccB β

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

Page 12: Control de Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:12

X

Vcc

TX

VccTVccdt

TVdc

xT

=== ∫/

0

1

Ahora si llamamos a m=1/X obtenemos:

mVCCVdc =

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 Motor en Dc Por Pwm y Pic

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.

01max =−− VceRIC

Vpwmβ

)max(1 VceVpwmIC

R −= β

En donde : Vpwmmax = 5 vol

IC=600mA

Vce=0.6 V

β=100

quedando:

Ω=−= 733)6.05(600

1001R

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.

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

Page 16: Control de Motor en Dc Por Pwm y Pic

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

8034.0

2834

+=

+=

SBS

AFt

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 Motor en Dc Por Pwm y Pic

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:

323121

)32(151

RRRRRR

RRRV

+++=

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 Motor en Dc Por Pwm y Pic

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:

323121

2152

RRRRRR

RRV

++=

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:

5.2323121

)32(151

RRRRRR

RRRV

+++=

2.1323121

2152 =

++=

RRRRRR

RRV

Haciendo el cociente entre ambas obtenemos:

083.112.1

5.2

2

32

31

2

1

=−=

=−

R

RR

R

V

V

Ahora trabajando con la formula de V2 se obtiene:

083.2083.112

5

1

31

3083.11

5

1

3

2

31

52

=−−=

++=

++=

VR

RR

R

R

R

R

RV

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 .

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

Page 21: Control de Motor en Dc Por Pwm y Pic

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:19

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

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 Motor en Dc Por Pwm y Pic

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___**4*)12(Pr TMRpredivisordelValorToscPeriodo +=

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

que manera el ancho del pulso es: 2_Pr**1_ TmredivisortoscCCPRLpulsoAncho =

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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.

discodelranurasdecantidad

CuentaRPM

____

60*=

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:

2

3*

40

60* CuentaCuentaRPM ==

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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

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

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

Page 42: Control de Motor en Dc Por Pwm y Pic

INSTITUTO UNIVERSITARIO AERONAUTICO

CONTROL DE VELOCIDAD Página:40

//

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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 Motor en Dc Por Pwm y Pic

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