Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INGENIERA ELECTRNICA
MICROCONTROLADORES
Controlador de velocidad de un motor DC basado en un
PIC 16F877
Lina Mara Aguilar
linamaria_a_l@hotmail.com
RESUMEN
El proyecto se fundamenta en el diseo de un
controlador de velocidad de un motor DC basado
en un PIC 16F877. En una pantalla LCD se
visualizar la velocidad real del motor y la velocidad
deseada por el usuario que es introducida a travs
de un teclado. La estrategia de control es
proporcional y la velocidad del motor se vara por
medio de la modulacin por ancho de pulso PWM.
DESARROLLO
El proyecto es un controlador de velocidad de un
motor DC bajo condiciones variables de carga y
voltaje, basado en un sistema con microcontrolador
PIC16F877. La velocidad deseada y la velocidad
real se visualizan en una pantalla LCD de 2 lneas
por 16 caracteres. El usuario puede introducir la
velocidad deseada a travs de un teclado decimal
para una velocidad no mayor a 199RPM que es la
nominal del motor.
El programa que contiene el microcontrolador
PIC16F877 cumple las siguientes funciones:
Mediante una interrupcin generada por el timer0
se almacenan los pulsos contador por el timer1 en
modo contador durante un perodo de conteo
preestablecido en el timer0 que esta dado por los
parmetros del motor, este perodo equivale a
60mseg.
Tambin, mediante una interrupcin externa se
obtiene la velocidad deseada tecleada por el
usuario a travs del teclado decimal.
CONTROLADOR DE TECLADO
Para el ingreso de la velocidad deseada se
implement en una GAL22V10 un controlador de
teclado decimal utilizando la herramienta PALASM.
Para el desarrollo del controlador de teclado se
program una mquina de estados de Moore, la
cual contiene 11 estados, 5 salidas, 10 entradas,
las cuales se resumen de la siguiente manera:
Salidas:
OUT4: Genera una seal que habilita al
microcontrolador para que este realice la lectura del
puerto. Est conectado al pin RA4.
OUT3 - OUT0: Generan el nmero tecleado en
binario para ser ledo por el PIC en los pines RA3 RA0.
Entradas:
0
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
1
1
1
1
0
0
0
0
0
1
1
0
0
1
1
0
0
0
0
1
0
1
0
1
0
1
0
1
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
37H
38H
20H
21H
22H
23H
24H
25H
26H
27H
28H
29H
2AH
2BH
2CH
2DH
2EH
2FH
30H
31H
32H
33H
34H
35H
36H
ORG 0X00
GOTO PRINCIPAL
ORG 0X04
GOTO INTER
"LCD.INC"
"P16F877.INC"
EQU
dt
Mens_1
STATUS,RP0
INTCON,T0IF
0X14
TMR0
CONT,1
L9
T1CON,TMR1ON
TMR1L,0
VELREAL
STATUS,RP0
VELREAL,0
VELDES,0
STATUS,C
L3
ROTAR
ROTAR,1
ROTAR,1
ROTAR,0
b'00011111'
DUTY,1
STATUS,C
L5
0FFH
DUTY
STATUS,C
L4
RESTA
RESTA,1
RESTA,0
ROTAR
ROTAR,1
ROTAR,1
ROTAR,0
b'00011111'
DUTY,1
STATUS,C
L6
00H
DUTY
STATUS,C
STATUS,RP0
L7
L8
L9
MOVF
MOVWF
CLRF
CLRF
MOVLW
MOVWF
BSF
MOVF
MOVWF
CLRF
CLRF
CLRF
MOVLW
SUBWF
INCF
BTFSC
GOTO
MOVLW
ADDWF
DECF
MOVLW
SUBWF
INCF
BTFSC
GOTO
MOVLW
ADDWF
DECF
MOVF
MOVWF
MOVLW
MOVWF
MOVLW
CALL
MOVLW
ADDWF
CALL
MOVLW
ADDWF
CALL
MOVLW
ADDWF
CALL
RETFIE
DUTY,0
CCPR1L
TMR1L
TMR1H
0X14
TMR0
T1CON,TMR1ON
VELREAL,0
TEMVELREAL
REALUNI
REALDEC
REALCEN
.100
TEMVELREAL,1
REALCEN,1
STATUS,C
L7
.100
TEMVELREAL,1
REALCEN,1
.10
TEMVELREAL,1
REALDEC,1
STATUS,C
L8
.10
TEMVELREAL,1
REALDEC,1
TEMVELREAL,0
REALUNI
05H
CONT
b'11001011'
LCD_REG
30H
REALCEN,0
LCD_DATO
30H
REALDEC,0
LCD_DATO
30H
REALUNI,0
LCD_DATO
L1
LRET1
LRET2
LRET
LRET4
LRET3
CLRF
CLRF
BSF
CLRF
BSF
MOVLW
MOVWF
MOVLW
MOVWF
BCF
CLRF
BCF
BCF
BTFSC
GOTO
BTFSS
GOTO
MOVF
MOVWF
MOVF
MOVWF
MOVF
ANDLW
MOVWF
MOVLW
CALL
MOVLW
ADDWF
CALL
MOVLW
ADDWF
CALL
MOVLW
ADDWF
CALL
MOVLW
MOVWF
DECFSZ
GOTO
GOTO
MOVLW
MOVWF
DECFSZ
GOTO
GOTO
MOVLW
MOVWF
DECFSZ
GOTO
GOTO
STATUS,RP0
TCEN
TDEC
TUNI
PORTA
PORTB
STATUS,RP0
TRISA
STATUS,RP0
B'00111111'
TRISA
B'00000001'
TRISB
STATUS,RP0
PORTA
STATUS,RP0
INTCON,INTF
PORTA,5
MULTIPLICACION
PORTA,4
L1
TDEC,0
TCEN
TUNI,0
TDEC
PORTA,0
0FH
TUNI
b'11000010'
LCD_REG
30H
TCEN,0
LCD_DATO
30H
TDEC,0
LCD_DATO
30H
TUNI,0
LCD_DATO
19H
DELAY
DELAY,1
LRET2
L1
0C8H
DELAY1
DELAY1,1
LRET4
LRET1
0C8H
DELAY2
DELAY2,1
LRET3
LRET
L12
MOVWF
MOVF
MOVWF
MOVLW
CALL
MOVLW
ADDWF
CALL
MOVLW
ADDWF
CALL
MOVLW
ADDWF
CALL
RETFIE
CEN,0
TCEN,0
CEN
TDEC,0
DEC
TUNI,0
UNI
b'11000010'
LCD_REG
30H
CEN,0
LCD_DATO
30H
DEC,0
LCD_DATO
30H
UNI,0
LCD_DATO
MULTIPLICACION
CLRF
NUMERO
MOVF TCEN,0
MOVWF CENX
MOVLW B'11111110'
ANDWF CENX,1
BTFSS STATUS,Z
GOTO RESTAURAR
VALIDO MOVF TCEN,0
MOVWF CENX
BTFSC CENX,0
GOTO LA
CLRF
CENX
GOTO LB
MOVLW .0
LR
ADDLW .100
DECFSZ CENX,1
GOTO LR
MOVWF NUMERO
LB
MOVF TDEC,0
MOVWF DECX
MOVLW b'11111111'
ANDWF DECX,1
BTFSC STATUS,Z
GOTO L10
MOVLW 0H
LC
ADDLW .10
DECFSZ DECX,1
GOTO LC
GOTO L11
L10
MOVLW .0
L11
ADDWF NUMERO,0
ADDWF TUNI,0
MOVWF NUMERO
MOVWF VELDES
GOTO TERMINAR
RESTAURAR
MOVF CEN,0
MOVWF TCEN
STATUS,RP0
STATUS,RP1
STATUS,C
CLRF
PORTA
CLRF
PORTB
CLRF
PORTC
MOVLW 0xFF
MOVWF VELDES
MOVLW 0x00
MOVWF DUTY
BSF
STATUS,RP0
MOVLW 06H
MOVWF ADCON1
MOVLW 3FH
MOVWF TRISA
MOVLW b'00000001'
MOVWF TRISB
MOVLW b'00000001'
MOVWF TRISC
MOVLW 05H
MOVWF CONT
BCF
STATUS,RP0
CLRF
CCPR1L
CLRF
CCPR1H
BCF
STATUS,RP0
MOVLW b'10110000'
MOVWF INTCON
;ACTIVA LA INTERRUPCIN DEL TMR0
BCF
STATUS,RP0
MOVLW b'00000011'
MOVWF T1CON
;TIMER1 EN ONN
BCFSTATUS,RP0
MOVLW b'00001111'
MOVWF CCP1CON
;CONFIGURAR PWM
BSFSTATUS,RP0
MOVLW 0FFH
MOVWF PR2
;CARGA EL PERIODO DEL PWM
BCF
STATUS,RP0
MOVLW B'00000100'
MOVWF T2CON
;T2 EN ON
CLRF
PORTD
CLRF
PORTC
BSF
STATUS,RP0
CLRF
TRISD
MOVLW b'00000001'
MOVWF TRISC
BCF
STATUS,RP0
CALL
LCD_INI
;INICIALIZACION DE LA PANTALLA LCD
MOVLW Mens_0
CALL
Mensaje
;VISUALIZACIN DEL MENSAJE DE LA LINEA 1
DE LA LCD
MOVLW b'11000000'
CALL
LCD_REG
MOVLW Mens_1
;VISUALIZACIN DEL MENSAJE INICIAL DE LA
LINEA 2 DE LA LCD
CALL
Mensaje
BSF
STATUS,RP0
MOVLW b'00000111'
MOVWF OPTION_REG
L2
BCF
STATUS ,RP0
MOVLW 0x14
;COMPLEMENTO DE PARA EL TIMER0
MOVWF TMR0
BCF
STATUS,RP0
MOVLW b'00000011'
;TIMER1 EN ONN
MOVWF T1CON
GOTO L2
END
;DESACTIVA
;DESACTIVA
LCD_BUSY
LCD_BUSY_1
ENABLE
;ACTIVA LA LCD
OFF_COMANDO
LEER
;COLOCA LA LCD EN MODO RD
BSF
STATUS,RP0
MOVLW H'FF'
MOVWF TRISD
BCF
STATUS,RP0
nop
BTFSC PORTD,7
;CHEQUEA BIT DE BUSY
GOTO CD_BUSY_1
DISABLE
;DESACTIVA LA LCD
SF
STATUS,RP0
CLRF
TRISD
BCF
STATUS,RP0
ESCRIBIR
;COLOCA LA LCD EN MODO WR
RETURN
MOVLW 01H
;BORRA LCD Y HOME (RESET).
CALL
LCD_REG
RETURN
CONCLUSIONES
ENABLE
ON_COMANDO
;ACTIVA RS (MODO DATO)
MOVWF PORTD
;VALOR ASCII A EXTERIORIZAR POR
PORTD
DISABLE
CALL
LCD_BUSY
;ESPERA
QUE SE LIBERE LA LCD
RETURN
ENABLE
OFF_COMANDO
;DESACTIVA
RS (MODO COMANDO)
MOVWF PORTD
;CDIGO DE COMANDO.
DISABLE
CALL LCD_BUSY
;ESPERA QUE SE LIBERE LA LCD
RETURN
MOVLW 38H
CALL
LCD_REG
;ENVIO DEL COMANDO
MOVLW 0CH
;DISPLAY ON, CURSOR OFF, NO
PARPADEA.
CALL
LCD_REG
MOVLW 06H
;INCREMENTA CONTADOR DE
DIRECCIONES.
CALL
LCD_REG
A continuacin se muestra el esquema del circuito completo del controlador de velocidad, donde se
incluyen el teclado decimal, la pantalla LCD y el dispositivo de potencia.
Las siguientes fotografas muestran el teclado decimal empleado para ingresar la velocidad deseada,
la pantalla LCD donde se visualizan la velocidad deseada y la velocidad real del motor en RPM
(revoluciones por minuto) y el motor empleado en el proyecto con capacidades nominales de 20V y
3A.
La prxima fotografa muestra el circuito completo del sistema controlador de velocidad del motor DC
empleando un PIC16F877.