Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES
“Controlador de velocidad de un motor DC basado en un
PIC 16F877”
“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
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
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
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.
La próxima fotografía muestra el circuito completo del sistema controlador de velocidad del motor DC
empleando un PIC16F877.