You are on page 1of 11

UNIVERSIDAD FRANCISCO DE PAULA SANTANDER

INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES
“Controlador de velocidad de un motor DC basado en un
PIC 16F877”

Lina María Aguilar Javier Mauricio Rolón Luis Javier Martinez


linamaria_a_l@hotmail.com maorolon2@hotmail.com javiermm@engineer.com

programa principal del microcontrolador PIC16F877


RESUMEN que realiza la estrategia de control proporcional y
visualiza en la pantalla LCD las velocidades
El proyecto se fundamenta en el diseño de un deseada y real del motor, y la etapa de aislamiento
controlador de velocidad de un motor DC basado y potencia que esta conformada por un
en un PIC 16F877. En una pantalla LCD se optoacoplador y un mosfet de potencia.
visualizará la velocidad real del motor y la velocidad
deseada por el usuario que es introducida a través Para el programa principal del microcontrolador
de un teclado. La estrategia de control es diseñamos una librería que incluye rutinas para el
proporcional y la velocidad del motor se varía por envío de datos y comandos a la pantalla LCD como
medio de la modulación por ancho de pulso PWM. recurso para este y futuros proyectos que
involucren una pantalla LCD.

DESARROLLO A continuación se presenta una descripción de las


etapas de controlador de teclado y del programa
El proyecto es un controlador de velocidad de un principal del microcontrolador.
motor DC bajo condiciones variables de carga y
voltaje, basado en un sistema con microcontrolador
PIC16F877. La velocidad deseada y la velocidad CONTROLADOR DE TECLADO
real se visualizan en una pantalla LCD de 2 líneas
por 16 caracteres. El usuario puede introducir la Para el ingreso de la velocidad deseada se
velocidad deseada a través de un teclado decimal implementó en una GAL22V10 un controlador de
para una velocidad no mayor a 199RPM que es la teclado decimal utilizando la herramienta PALASM.
nominal del motor. Para el desarrollo del controlador de teclado se
programó una máquina de estados de Moore, la
El programa que contiene el microcontrolador cual contiene 11 estados, 5 salidas, 10 entradas,
PIC16F877 cumple las siguientes funciones: las cuales se resumen de la siguiente manera:

Mediante una interrupción generada por el timer0 Salidas:


se almacenan los pulsos contador por el timer1 en
modo contador durante un período de conteo OUT4: Genera una señal que habilita al
preestablecido en el timer0 que esta dado por los microcontrolador para que este realice la lectura del
parámetros del motor, este período equivale a puerto. Está conectado al pin RA4.
60mseg.
OUT3 - OUT0: Generan el número tecleado en
También, mediante una interrupción externa se binario para ser leído por el PIC en los pines RA3 -
obtiene la velocidad deseada tecleada por el RA0.
usuario a través del teclado decimal.
Entradas:
Después de tener almacenados estos dos datos, se
realiza la diferencia entre la velocidad deseada y la Los dígitos del teclado son las entradas de la GAL,
velocidad real y se incrementa o decrementa el las cuales generan los cambios de estado en la
ancho del pulso del PWM, según el resultado sea máquina de Moore. Las teclas # y * no son
positivo o negativo respectivamente y de este modo entradas de la GAL ya que estas están conectadas
se consigue variar la velocidad del motor DC y directamente al PIC.
llegar hasta la deseada por el usuario. La entrada dada por * es la interrupción externa al
microcontrolador.
Básicamente las partes que conforman el proyecto
son: el controlador de teclado, que se implementó Estados:
en una GAL22V10 y permite codificar los dígitos en
binario e interrumpir el microcontrolador, el

Ing. Gabriel Sánchez Suárez


gabrielsanchezsuarez@hotmail.com
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER
INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES
“Controlador de velocidad de un motor DC basado en un
PIC 16F877”

Lina María Aguilar Javier Mauricio Rolón Luis Javier Martinez


linamaria_a_l@hotmail.com maorolon2@hotmail.com javiermm@engineer.com

La máquina de estados de Moore está compuesta PROGRAMA DEL MICROCONTROLADOR


por 11 estados, empezando por un estado de PIC16F877
reposo en el cual el habilitador OUT4 no está
activado y 10 estados, uno para cada dígito (0 a 9) “Declaración de registros de uso general en las
en los cuales se activa el habilitador y se forma en posiciones de memoria disponibles en el banco0”
binario el número tecleado.
UNI EQU 20H
OUT4 OUT3 OUT2 OUT1 OUT0 DEC EQU 21H
CEN EQU 22H
Estado VELREAL EQU 23H
X 0 0 0 0 0 VELDES EQU 24H
0 1 0 0 0 0 DUTY EQU 25H
1 1 0 0 0 1 TEMPORAL EQU 26H
TUNI EQU 27H
2 1 0 0 1 0 TDEC EQU 28H
3 1 0 0 1 1 TCEN EQU 29H
4 1 0 1 0 0 RESTA EQU 2AH
5 1 0 1 0 1 DUTYT EQU 2BH
REALUNI EQU 2CH
6 1 0 1 1 0 REALDEC EQU 2DH
7 1 0 1 1 1 REALCEN EQU 2EH
8 1 1 0 0 0 TEMVELREAL EQU 2FH
9 1 1 0 0 1 CONT EQU 30H
NUMERO EQU 31H
DECX EQU 32H
CENX EQU 33H
Procedimiento para el ingreso de datos mediante el Temporal_1 EQU 34H
teclado para la velocidad deseada: Temporal_2 EQU 35H
DELAY EQU 36H
Para ingresar la velocidad deseada, el usuario debe DELAY1 EQU 37H
visualizar el teclado decimal y seguir los siguientes DELAY2 EQU 38H
pasos:
ORG 0X00
GOTO PRINCIPAL
1. Oprimir asterisco (*), lo cual genera una
interrupción en el PIC y este queda a la espera de ORG 0X04
la entrada de dígitos. GOTO INTER

2. Oprimir dígito a dígito la velocidad deseada,


ingresando primero las centenas, luego el número “Librerias que incluyen las rutinas de manejo de la
de decenas y por último las unidades. pantalla LCD y los registros especiales SFR’s del
PIC 16F877.”
El sistema está diseñado para recibir cualquier
cantidad de datos, de los cuales sólo admitirá los INCLUDE "LCD.INC"
INCLUDE "P16F877.INC"
tres últimos dígitos organizándolos en el orden
anteriormente mencionado.
Debido a que a velocidad nominal del motor es 199 “Declaración de la tabla del mensaje inicial, según
RPM, éste puede ser el máximo valor digitado. Si el valor contenido en el registro W, se devuelve el
se digita un valor mayor a este, el dato no será carácter ASCII a visualizar en la pantalla LCD,
admitido y el sistema retornará el último dato válido
empleando el PCL para el desplazamiento a través
recibido. del mensaje”
3. Oprimir numeral (#), con lo cual se guarda el dato Tabla_Mensajes:
y el controlador comenzará el respectivo proceso MOVWF PCL
para obtener la nueva velocidad deseada en el
motor.

Ing. Gabriel Sánchez Suárez


gabrielsanchezsuarez@hotmail.com
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER
INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES
“Controlador de velocidad de un motor DC basado en un
PIC 16F877”

Lina María Aguilar Javier Mauricio Rolón Luis Javier Martinez


linamaria_a_l@hotmail.com maorolon2@hotmail.com javiermm@engineer.com

“Rutina de declaración del mensaje inicial a del motor, al atenderse la interrupción el dato
visualizar en la pantalla, la directiva dt genera guardado en el timer-contador1 se almacena en el
registro VELREAL, se realiza la resta entre la
velocidad deseada y la velocidad real para obtener
tantas instrucciones retlw como caracteres se el cam bio en el ancho del pulso del PWM que
contengan encerrados entre comillas, la posición controlará la velocidad del motor. Es en esta rutina
inicial de cada mensaje es asignada arbitrariamente donde también se aplica la constante de
según el pcl” proporcionalidad (0.5) del motor que representa la
estrategia de control proporcional empleada en este
Mens_0 proyecto. El ancho de pulso del PWM es
EQU $;Mens_0 apunta al primer carácter almacenado en el registro DUTY y llevado al
dt "VD(RPM) VR(RPM)",0x00
exterior mediante el SFR CCPR1L. Además la
Mens_1 velocidad real es separada en unidades, decenas y
EQU $;Mens_1 apunta al primer carácter centenas y finalmente es visualizada en la pantalla
dt " 000 000 ",0x00 LCD”

INT_TIMER
“Rutina que visualiza en la pantalla LCD el mensaje BCF STATUS,RP0
inicial cuyo inicio está indicado en el acumulador BCF INTCON,T0IF
W. El fin de un mensaje se determina mediante el MOVLW 0X14
MOVWF TMR0
código 0x00. Los registros Temporal_1 y DECFSZ CONT,1
Temporal_2 contienen la posición de memoria del GOTO L9
carácter a visualizar y el código ascii de dicho BCF T1CON,TMR1ON
carácter, repectivamente” MOVF TMR1L,0
MOVWF VELREAL
BCF STATUS,RP0
Mensaje
MOVF VELREAL,0
MOVWF Temporal_1
Mensaje_1 SUBWF VELDES,0
BTFSS STATUS,C
MOVF Temporal_1,W
GOTO L3
CALL Tabla_Mensajes MOVWF ROTAR
MOVWF Temporal_2
RRF ROTAR,1
MOVF Temporal_2,F
RRF ROTAR,1
BTFSS STATUS,Z RRF ROTAR,0
GOTO No_es_ultimo
ANDLW b'00011111'
RETURN
No_es_ultimo ADDWF DUTY,1
BTFSS STATUS,C
CALL LCD_DATO
GOTO L5
INCF Temporal_1,F
MOVLW 0FFH
GOTO Mensaje_1
MOVWF DUTY
L5 BCF STATUS,C
GOTO L4
“Rutina de atención de interrupción, si es externa L3 MOVWF RESTA
(debida al teclado) o si es interna (debida al timer0)” COMF RESTA,1
INCF RESTA,0
MOVWF ROTAR
INTER RRF ROTAR,1
BTFSC INTCON,INTF
RRF ROTAR,1
;Ha sido el TECLADO ?
GOTO INTER_TECLADO RRF ROTAR,0
ANDLW b'00011111'
BTFSS INTCON,T0IF
SUBWF DUTY,1
;Ha sido el TIMER ? BTFSC STATUS,C
RETFIE
GOTO L6
MOVLW 00H
MOVWF DUTY
“Rutina de atención de la interrupción debida al L6 BCF STATUS,C
timer0, es utilizada para obtener la velocidad real L4 BCF STATUS,RP0

Ing. Gabriel Sánchez Suárez


gabrielsanchezsuarez@hotmail.com
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER
INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES
“Controlador de velocidad de un motor DC basado en un
PIC 16F877”

Lina María Aguilar Javier Mauricio Rolón Luis Javier Martinez


linamaria_a_l@hotmail.com maorolon2@hotmail.com javiermm@engineer.com

MOVF DUTY,0
MOVWF CCPR1L no se toma en cuenta y se visualiza en pantalla la
CLRF TMR1L velocidad deseada ingresada en la interrupción
CLRF TMR1H anterior.”
MOVLW 0X14
MOVWF TMR0
INTER_TECLADO
BSF T1CON,TMR1ON
MOVF VELREAL,0 BCF STATUS,RP0
CLRF TCEN
MOVWF TEMVELREAL
CLRF TDEC
CLRF REALUNI
CLRF TUNI
CLRF REALDEC
CLRF REALCEN
L7 MOVLW .100
CLRF PORTA
SUBWF TEMVELREAL,1
CLRF PORTB
INCF REALCEN,1
BTFSC STATUS,C BSF STATUS,RP0
CLRF TRISA
GOTO L7
BSF STATUS,RP0
MOVLW .100
MOVLW B'00111111'
ADDWF TEMVELREAL,1
MOVWF TRISA
DECF REALCEN,1
L8 MOVLW .10 MOVLW B'00000001'
MOVWF TRISB
SUBWF TEMVELREAL,1
BCF STATUS,RP0
INCF REALDEC,1 CLRF PORTA
BTFSC STATUS,C
BCF STATUS,RP0
GOTO L8
BCF INTCON,INTF
MOVLW .10
L1 BTFSC PORTA,5
ADDWF TEMVELREAL,1
GOTO MULTIPLICACION
DECF REALDEC,1
MOVF TEMVELREAL,0 BTFSS PORTA,4
GOTO L1
MOVWF REALUNI
MOVF TDEC,0
MOVLW 05H MOVWF TCEN
MOVWF CONT
MOVF TUNI,0
MOVLW b'11001011'
CALL LCD_REG MOVWF TDEC
MOVF PORTA,0
MOVLW 30H
ANDLW 0FH
ADDWF REALCEN,0 MOVWF TUNI
CALL LCD_DATO
MOVLW b'11000010'
MOVLW 30H
CALL LCD_REG
ADDWF REALDEC,0 MOVLW 30H
CALL LCD_DATO
ADDWF TCEN,0
MOVLW 30H
ADDWF REALUNI,0 CALL LCD_DATO
MOVLW 30H
CALL LCD_DATO
ADDWF TDEC,0
L9 RETFIE
CALL LCD_DATO
MOVLW 30H
ADDWF TUNI,0
“Rutina de atención de interrupción del teclado, se CALL LCD_DATO
presenta cuando se pulsa asterisco para ingresar MOVLW 19H
MOVWF DELAY
una velocidad deseada. El usuario tiene la LRET1 DECFSZ DELAY,1
posibilidad de ingresar la cifra de tres dígitos en el GOTO LRET2
orden de centenas, decenas y unidades GOTO L1
permitiéndose un solapamiento en estos, y al LRET2 MOVLW 0C8H
MOVWF DELAY1
oprimir numeral se finaliza y se toma el dato LRET DECFSZ DELAY1,1
pulsado como la velocidad deseada. Cada vez que GOTO LRET4
se pulsa un digito este se visualiza en pantalla y GOTO LRET1
debido a que la máxima velocidad del motor es 199 LRET4 MOVLW 0C8H
MOVWF DELAY2
RPM si el usuario ingresa un número mayor a este LRET3 DECFSZ DELAY2,1
GOTO LRET3
GOTO LRET

Ing. Gabriel Sánchez Suárez


gabrielsanchezsuarez@hotmail.com
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER
INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES
“Controlador de velocidad de un motor DC basado en un
PIC 16F877”

Lina María Aguilar Javier Mauricio Rolón Luis Javier Martinez


linamaria_a_l@hotmail.com maorolon2@hotmail.com javiermm@engineer.com

TERMINAR MOVF DEC,0


MOVF CEN,0 MOVWF TDEC
MOVF TCEN,0 MOVF UNI,0
MOVWF CEN MOVWF TUNI
MOVF TDEC,0 GOTO L12

RESTAURAR1
MOVWF DEC MOVF TCEN,0
MOVF TUNI,0 MOVWF CENX
MOVWF UNI MOVLW b'11111101'
L12 MOVLW b'11000010' ANDWF CENX,1
CALL LCD_REG BTFSS STATUS,Z
MOVLW 30H GOTO RESTAURAR
ADDWF CEN,0 MOVLW b'11111111'
CALL LCD_DATO ANDWF TDEC,0
MOVLW 30H BTFSS STATUS,Z
ADDWF DEC,0 GOTO RESTAURAR
CALL LCD_DATO MOVLW b'11111111'
MOVLW 30H ANDWF TUNI,0
ADDWF UNI,0 BTFSS STATUS,Z
CALL LCD_DATO GOTO RESTAURAR
RETFIE GOTO VALIDO

MULTIPLICACION
CLRF NUMERO
MOVF TCEN,0 “Programa principal, contiene la inicialización de los
MOVWF CENX registros especiales que permiten el control de los
MOVLW B'11111110' timer, del PWM, el triestado de los puertos, la
ANDWF CENX,1 preescala asociada a los timer empleados, la
BTFSS STATUS,Z
GOTO RESTAURAR habilitación de las interrupciones empleadas:
VALIDO MOVF TCEN,0 internas (timer0) y externas (teclado). Además se
MOVWF CENX inicializa la pantalla LCD enviando los comandos
BTFSC CENX,0 necesarios y se visualiza en ella el mensaje inicial
GOTO LA
CLRF CENX mediante un llamado a las subrutinas de la librería
GOTO LB LCD.INC. Los registros SFR’s empleados son los
MOVLW .0 de triestado de los puertos (TRISX), el
LR ADDLW .100 OPTION_REG para definir la preescala del timer 0,
DECFSZ CENX,1
GOTO LR el INTCON que activa las interrupciones interna y
MOVWF NUMERO externa, el T1CON que activa al timer 1 como
LB MOVF TDEC,0 contador, el T2CON que activa el timer 2 como
MOVWF DECX generador de la preescala del PWM. La preescala
MOVLW b'11111111'
ANDWF DECX,1 asociada con el timer 1 en modo contador es 256 y
BTFSC STATUS,Z el dato asignado al timer 0 en modo contador es
GOTO L10 235 (se guarda el complemento de este numero),
MOVLW 0H además se inicializa un contador que repite la
LC ADDLW .10
DECFSZ DECX,1 interrupción 5 veces antes de atenderla para
GOTO LC cumplir con el período de conteo necesario que
GOTO L11 corresponde a 60ms. En el registro PR2 se carga
L10 MOVLW .0 el período del PWM empleado para este proyecto,
L11 ADDWF NUMERO,0
ADDWF TUNI,0 es asignado FFH que corresponde a una frecuencia
MOVWF NUMERO de 19.53KHz.”
MOVWF VELDES
GOTO TERMINAR PRINCIPAL
BCF STATUS,RP0
RESTAURAR BCF STATUS,RP1
MOVF CEN,0 BCF STATUS,C
MOVWF TCEN

Ing. Gabriel Sánchez Suárez


gabrielsanchezsuarez@hotmail.com
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER
INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES
“Controlador de velocidad de un motor DC basado en un
PIC 16F877”

Lina María Aguilar Javier Mauricio Rolón Luis Javier Martinez


linamaria_a_l@hotmail.com maorolon2@hotmail.com javiermm@engineer.com
;Preescaler de 256 para el TMR0

CLRF PORTA BCF STATUS ,RP0


CLRF PORTB MOVLW 0x14
CLRF PORTC ;COMPLEMENTO DE PARA EL TIMER0
MOVLW 0xFF MOVWF TMR0
MOVWF VELDES BCF STATUS,RP0
MOVLW 0x00 MOVLW b'00000011'
MOVWF DUTY ;TIMER1 EN ONN
BSF STATUS,RP0 MOVWF T1CON
MOVLW 06H L2 GOTO L2
MOVWF ADCON1 END
MOVLW 3FH
MOVWF TRISA
MOVLW b'00000001'
MOVWF TRISB LIBRERIA QUE CONTIENE LAS RUTINAS DE
MOVLW b'00000001' MANEJO DE LA PANTALLA LCD
MOVWF TRISC
MOVLW 05H
MOVWF CONT LCD.INC
BCF STATUS,RP0 “Las siguientes rutinas presentan a continuación
CLRF CCPR1L permiten realizar las tareas básicas de control para
CLRF CCPR1H la visualización de un mensaje en la pantalla LCD.”
BCF STATUS,RP0
MOVLW b'10110000'
MOVWF INTCON “Declaración de palabras especiales empleadas en
;ACTIVA LA INTERRUPCIÓN DEL TMR0 el control de la pantalla LCD, se declaran como un
BCF STATUS,RP0 nivel alto o bajo en pines especiales del puerto
MOVLW b'00000011' empleado para el control Puerto C.”
MOVWF T1CON
;TIMER1 EN ONN
BCFSTATUS,RP0 #define ENABLE bsf PORTC,5
MOVLW b'00001111' ;ACTIVA SEÑAL E
MOVWF CCP1CON #define DISABLE bcf PORTC,5 ;DESACTIVA
;CONFIGURAR PWM SEÑAL E
BSFSTATUS,RP0 #define LEER bsf PORTC,4
MOVLW 0FFH ;COLOCA LA LCD EN MODO RD
MOVWF PR2 #define ESCRIBIR bcf PORTC,4
;CARGA EL PERIODO DEL PWM ;COLOCA LA LCD EN MODO WR
BCF STATUS,RP0 #define OFF_COMANDO bcf PORTC,3 ;DESACTIVA
MOVLW B'00000100' RS (MODO COMANDO)
MOVWF T2CON #define ON_COMANDO bsf PORTC,3
;T2 EN ON ;ACTIVA RS (MODO DATO)
CLRF PORTD
CLRF PORTC
BSF STATUS,RP0 “Rutina de lectura del flan Busy de la pantalla LCD
CLRF TRISD
MOVLW b'00000001' para mantener el retardo necesario en los
MOVWF TRISC comandos y datos enviados a ella.”
BCF STATUS,RP0
CALL LCD_INI
;INICIALIZACION DE LA PANTALLA LCD
LCD_BUSY ENABLE
MOVLW Mens_0
;ACTIVA LA LCD
CALL Mensaje OFF_COMANDO
;VISUALIZACIÓN DEL MENSAJE DE LA LINEA 1
LEER
DE LA LCD
MOVLW b'11000000' ;COLOCA LA LCD EN MODO RD
BSF STATUS,RP0
CALL LCD_REG
MOVLW H'FF'
MOVLW Mens_1 MOVWF TRISD
;VISUALIZACIÓN DEL MENSAJE INICIAL DE LA
BCF STATUS,RP0
LINEA 2 DE LA LCD
CALL Mensaje nop
LCD_BUSY_1 BTFSC PORTD,7
BSF STATUS,RP0
;CHEQUEA BIT DE BUSY
MOVLW b'00000111'
MOVWF OPTION_REG

Ing. Gabriel Sánchez Suárez


gabrielsanchezsuarez@hotmail.com
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER
INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES
“Controlador de velocidad de un motor DC basado en un
PIC 16F877”

Lina María Aguilar Javier Mauricio Rolón Luis Javier Martinez


linamaria_a_l@hotmail.com maorolon2@hotmail.com javiermm@engineer.com

GOTO CD_BUSY_1 MOVLW 01H


DISABLE ;BORRA LCD Y HOME (RESET).
;DESACTIVA LA LCD CALL LCD_REG
SF STATUS,RP0 RETURN
CLRF TRISD
BCF STATUS,RP0
ESCRIBIR
;COLOCA LA LCD EN MODO WR CONCLUSIONES
RETURN

• La mayor ventaja que tiene el


Rutina de escritura de datos en la memoria DDRAM microcontrolador PIC16F877 frente a
de la pantalla LCD, el carácter se encuentra
los demás microcontroladores es que
almacenado en el acumulador W.”
este posee módulos internos
LCD_DATO ENABLE específicos que son empleados
ON_COMANDO generalmente en sistemas de control
;ACTIVA RS (MODO DATO)
MOVWF PORTD
y debían implementarse en hardware
;VALOR ASCII A EXTERIORIZAR POR externo al microcontrolador. Estos
PORTD módulos son entre otros conversor
DISABLE análogo- digital, timers y contadores,
CALL LCD_BUSY ;ESPERA
QUE SE LIBERE LA LCD módulo generador de PWM. La forma
RETURN de operar estos módulos es a través
de los registros especiales SFR’s
“Rutina de escritura de comandos de control en la direccionando bit a bit cada uno de
pantalla LCD, el comando se encuentra presente en ellos para configurar, activar o
el acumulador W.” desactivar cada una de sus funciones.
LCD_REG ENABLE
OFF_COMANDO ;DESACTIVA
RS (MODO COMANDO)
MOVWF PORTD
• Al emplear el móulo PWM en el
;CÓDIGO DE COMANDO.
DISABLE PIC16F877 encontramos que se
CALL LCD_BUSY presenta el inconveniente que
;ESPERA QUE SE LIBERE LA LCD
dependiendo del oscilador de c ristal
RETURN
empleado se puede obtener una
frecuencia máxima del PWM y una
“Rutina de inicialización de la pantalla LCD, con los resolución de bits. Para nuestro caso
codigos necesarios para configurar la LCD en modo el PWM es de 19.6KHz, y para
de 8 bits, el display en ON, el cursor en OFF y sin conseguirlo a una resolución de 10
parpadear, en forma que incremente las bits fue necesario emplear un
direcciones, y borrar la LCD.” oscilador de 20MHz que permitan
obtener las 200 velocidades del
LCD_INI MOVLW 38H motor.
CALL LCD_REG
;ENVIO DEL COMANDO
MOVLW 0CH
;DISPLAY ON, CURSOR OFF, NO
PARPADEA.
CALL LCD_REG • Del microcontrolador PIC16F877 nos
MOVLW 06H fue de gran utilidad el time0 en modo
;INCREMENTA CONTADOR DE temporizador y el timer1 en modo
DIRECCIONES.
CALL LCD_REG

Ing. Gabriel Sánchez Suárez


gabrielsanchezsuarez@hotmail.com
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER
INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES
“Controlador de velocidad de un motor DC basado en un
PIC 16F877”

Lina María Aguilar Javier Mauricio Rolón Luis Javier Martinez


linamaria_a_l@hotmail.com maorolon2@hotmail.com javiermm@engineer.com

contador para realizar el tacómetro


que nos permita obtener la velocidad
real del motor. En nuestro caso el
timer0 interrumpe al microcontrolador
cada 60 milisegundos (período de
conteo) y el timer1 almacena la
cuenta de los pulsos enviados por el
encoder evitando el uso de hardware
externo.

• El diseño de la librería que maneja el


envío de datos y comandos a la
pantalla LCD mediante rutinas nos
permitió el ahorro de líneas del
programa principal y en proyectos
posteriores facilitará la visualización
de caracteres en la pantalla LCD.

• Para ingresar los datos desde el


teclado hasta el microcontrolador nos
fue necesario implementar una
GAL22V10 que codifique los dígitos en
forma binaria y habilite la lectura del
dígito oprimido ya que contabamos
con un puerto de 6 pines (PORTA)
disponible para esta tarea.

Ing. Gabriel Sánchez Suárez


gabrielsanchezsuarez@hotmail.com
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER
INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES
“Controlador de velocidad de un motor DC basado en un
PIC 16F877”

Lina María Aguilar Javier Mauricio Rolón Luis Javier Martinez


linamaria_a_l@hotmail.com maorolon2@hotmail.com javiermm@engineer.com

A continuación 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 fotografías 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.

Ing. Gabriel Sánchez Suárez


gabrielsanchezsuarez@hotmail.com
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER
INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES
“Controlador de velocidad de un motor DC basado en un
PIC 16F877”

Lina María Aguilar Javier Mauricio Rolón Luis Javier Martinez


linamaria_a_l@hotmail.com maorolon2@hotmail.com javiermm@engineer.com

Ing. Gabriel Sánchez Suárez


gabrielsanchezsuarez@hotmail.com
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER
INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES
“Controlador de velocidad de un motor DC basado en un
PIC 16F877”

Lina María Aguilar Javier Mauricio Rolón Luis Javier Martinez


linamaria_a_l@hotmail.com maorolon2@hotmail.com javiermm@engineer.com

La próxima fotografía muestra el circuito completo del sistema controlador de velocidad del motor DC
empleando un PIC16F877.

Ing. Gabriel Sánchez Suárez


gabrielsanchezsuarez@hotmail.com

You might also like