Professional Documents
Culture Documents
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 1 de 26
ndice
Objetivo.............................................................................................................
Descripcin del proyecto..................................................................................
Elementos a utilizar..........................................................................................
Funcionamiento................................................................................................
Inconvenientes durante el Desarrallo...............................................................
Programacin y Simulacion..............................................................................
Programa .........................................................................................................
Variables y Puertos ..........................................................................................
Aplicacin..........................................................................................................
Datos Tcnicos.................................................................................................
Diagrama en bloques........................................................................................
Diagrama de flujo .............................................................................................
Conclusiones ...................................................................................................
Bibliografia .......................................................................................................
Anexo A: Planos Electricos ..............................................................................
Anexo B: Manual Pic........................................................................................
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 2 de 26
Objetivo
Implementar mediante un Microcontrolador PIC 16F877a y un motor con encoder
solidario al mismo, una mquina rehabilitadora de rodillas. Controlar la velocidad del
aparato haciendo uso de un encoder y un motor de corriente continua.
Aplicar los conocimientos adquiridos.
Elementos utilizados
Microcontrolador 16F877a
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 3 de 26
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 4 de 26
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 5 de 26
Funcionamiento
Funcionamiento Operativo
Iniciado el proceso se puede seleccionar el modo de funcionamiento
manual/automtico utilizando la selectora ubicada en el tablero de comando. Para
comenzar con el movimiento se debe presionar el botn de marcha (teclado). En
automtico la mquina hace el recorrido a velocidad constante, cuyo valor es
ingresado por teclado (1-65 RPM) y confirmado mediante el mismo. La velocidad en
modo Automtico se podr variar sin necesidad de detener el equipo.
En modo manual, el operador podr realizar los movimientos del equipo de manera
independiente del ciclo, cambiando la velocidad del mismo por medio del
potencimetro incorporado en el tablero de comando.
Funcionamiento Tcnico
Se utiliz un motor de corriente continua con una alimentacin nominal de 18v y caja
reductora incorporada.
El teclado de interfaz con la maquina cuenta con un conversor 74C922N el cual
entrega un cdigo Hexadecimal de 4 Bits (0000-1111) conectado a la entrada del C
y el Pin DA del Conversor a la entrada de Interrupcin (RB0/INT0) para determinar
cuando se encuentra un dato nuevo a la salida del mismo.
El movimiento del motor tanto de giro en avance como en giro en retroceso est
regulado por un puente H (L298N) a travs de sus lneas de control manejadas por
el C.
Se utilizara un encoder incremental solidario al motor para poder conocer la
velocidad cuasi-instantnea. Este encoder es del tipo Disco Magntico, al estar
solidario al eje, gira a la misma velocidad del motor provocando una variacin del
flujo magntico respecto a la velocidad, y este es enviado a la salida mediante una
variacin de la frecuencia en dicha seal. La variacin de frecuencia provoca distinta
cantidad de pulsos para un tiempo determinado, y la lgica para el conteo de pulsos
se hace desde el Micro.
Tomando como referencia la cantidad de pulsos en un tiempo y luego en otro tiempo
diferente, con un t constante, se puede hacer una relacin para determinar la
variacin de cantidades de pulsos y as obtener una velocidad cercana a la que se
obtendra en tiempo real.
La seal que entrega el encoder se introduce en la base de un Transistor BC548
polarizado en funcionamiento de Corte-Saturacin para tener una seal
acondicionada a la entrada del C con un nivel de 5v. Esta seal tiene una variacin
de frecuencia entre 1 Khz y 2 Khz para un factor de PWM del 40% al100%.
La velocidad del motor est referenciada por un potencimetro lineal de 10k
ubicado en el tablero de comando el cual varia entre 0-5v. El potencimetro se
conecta a un Canal Analgico del C.
El Canal analgico que se usa es el ANO (PortA, bit0) y esta configurado con un reloj
de conversin (Fosc/32) y alineacin a la izquierda mediante el Registro ADCON1.
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 6 de 26
Programacin y Simulacin:
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 7 de 26
Simulacion
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 8 de 26
Programa
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 9 de 26
EQU
0x10
AUX_PWM
cont1_pwm
PLS_ENCH
PLS_ENCL
PWM_H
PWM_L
cont
CNT_LECT
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0x26
0x27
0x28
0X29
0x2A
0x2B
0x2C
0x2D
dato
primerdato
motor_stad
salida
D1D
D2D
VEL_DEC1
VEL_DESEAD
VEL_DEC2
PASO
MODO
VEL_AUTO
AUX_VEL_AU
AUX1_VEL_AU
PWM_HAU
PWM_LAU
STATUS_TEMP
W_TEMP
Same
equ
0x30
equ
0x31
equ
0x32
equ
0x33
EQU
0x34
EQU
0x35
EQU
0x36
EQU
0x37
EQU
0x38
EQU
0x39
EQU
0x40
EQU
0x41
EQU
0x42
EQU
0x43
EQU 0x44
EQU
0x45
EQU
0x7D
EQU
0x7E
equ 1
goto
goto
org 0x00
main
org 0x04
interrup
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 10 de 26
org
tabla
addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
estado
addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
0x10
PCL,1
'0'
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'9'
'A'
'B'
'C'
'D'
'E'
'F'
PCL,1
'R'
'U'
'N'
' '
' '
'M'
'A'
'N'
' '
'-'
'S'
'T'
'O'
'P'
' '
'M'
'A'
'N'
' '
'-'
'R'
'U'
'N'
' '
' '
'A'
'U'
'T'
'O'
'-'
'S'
'T'
'O'
'P'
' '
'A'
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 11 de 26
'U'
'T'
'O'
'-'
***********************************************************
**********
PROGRAMA PRINCIPAL
************
***********************************************************
org
0x60
main
;**********************************************************************
;
CONFIGURACION DE INTERRUPCIONES
;**********************************************************************
BSF
STATUS,RP0
;BANCO DE MEMORIA 1
BSF
TRISC,1
;PATITA RC1/CCP2 COMO ENTRADA
BCF
TRISE,0
;PATITA 0 DEL PUERTO E COMO SALIDA
BCF
BSF
MOVLW
TRISE,1
TRISB,0
0x87
MOVWF
OPTION_REG
;*****************************************************************
;
CONFIGURACION CONVERSOR ANALOGICO/DIGITAL
;*****************************************************************
MOVLW
0x0E
MOVWF
ADCON1
MOVLW
MOVWF
0x3F
TRISA
BCF
STATUS,RP0
MOVLW
MOVWF
0x03
T1CON
CLRF
CLRF
TMR1H
TMR1L
CLRF
PORTB
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
b'10110000'
INTCON
0x15
TMR0
0x05
;BANCO DE MEMORIA 0
;CONFIGURA EL TIMER 1 EN MODO CONTADOR, PREESC
;1/1
;INICIALIZA EN CERO EL TIMER 1
;APAGA EL MODULO CCP PARA INICIALIZAR
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 12 de 26
primerdato
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
salida
D1D
D2D
VEL_DEC1
VEL_DEC2
VEL_DESEAD
PAGESEL
call
XLCDInit
XLCDInit
;Inicializacion de LCD
call
call
movlw
call
XLCDClear
XLCDL1home
XLCDDisplayOnCursorOff
XLCDCommand
ciclo
CALL
DISPLAY
BTFSS PORTA,1
GOTO automatico
MOVLW
BCF
XORWF
BTFSS
GOTO
CALL
CALL
manual
XORWF
CLRF
CALL
BSF
espera
BTFSC
goto
MOVF
MOVWF
BSF
MOVF
;SELECTORA MAN/AUT.
'A'
STATUS,Z
salida,W
STATUS,Z
ciclo
marcha
DISPLAY
AUT=0
MAN=1
PORTC,4
MODO
pausa
ADCON0,GO
;LED
ADCON0,GO
espera
ADRESH,W
PWM_H
STATUS,RP0
ADRESL,W
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 13 de 26
STATUS,RP0
AUX_PWM
0xC0
AUX_PWM,1
RRF
RRF
MOVF
MOVWF
AUX_PWM,1
AUX_PWM,1
AUX_PWM,W
PWM_L
CALL
CALL
ciclo_pwm
DISPLAY
MOVLW
BCF
XORWF
BTFSS
GOTO
CALL
CLRF
CLRF
CALL
GOTO
'B'
STATUS,Z
salida,W
STATUS,Z
manual
paro
PWM_H
PWM_L
ciclo_pwm
ciclo
automatico
BSF
BSF
MOVLW
BCF
XORWF
BTFSS
GOTO
CALL
AUTO_RUN
CALL
MOVFW
MOVWF
MOVWF
MOVWF
PORTC,4
MODO,0
'A'
STATUS,Z
salida,W
STATUS,Z
ciclo
marcha
DISPLAY
VEL_DESEAD
VEL_AUTO
AUX1_VEL_AU
AUX_VEL_AU
BCF
RRF
ANDLW
MOVWF
RRF
ANDLW
MOVWF
STATUS,C
AUX_VEL_AU,0
0x7F
AUX_VEL_AU
AUX_VEL_AU,0
0x7F
AUX1_VEL_AU
ADDWF
CLRF
BTFSC
BSF
BTFSC
BSF
BCF
RRF
RRF
ANDLW
AUX_VEL_AU,1
PWM_LAU
AUX_VEL_AU,0
PWM_LAU,4
AUX_VEL_AU,1
PWM_LAU,5
STATUS,C
AUX_VEL_AU,1
AUX_VEL_AU,0
0x3F
Diseo de Microcontroladores
;Banco de memoria 0
;FORMO LA PARTE BAJA DEL CANAL ANALOGICO PARA
PASARLO AL PWM
;ACOMODO EL DATO OBTENIDO EN EL CANAL ANALOGICO
;PARA LLEVARLO AL REGISTRO DE SALIDA DEL PWM
;DADO QUE LOS LSB ESTAN EN EL BIT 4Y5 CCP1CON
;ENVIA DATO AL PTE H
;ENVIA DATOS AL DISPLAY
;LED
;INDICACION DE MODO EN AUTOMATICO(AUXILIAR)
;PREGUNTA SI ESTA EN MARCHA
;SUBRUTINA DE MARCHA
;VELOCIDAD
;VELOCIDAD
;VELOCIDAD
;VELOCIDAD
INGRESADA
ACTUAL EN
ACTUAL EN
ACTUAL EN
POR TECLADO
MODO AUTOMATICO
MODO AUTOMATICO(AUXILIAR)
MODO AUTOMATICO(AUXILIAR)
Ansaldo - Viccichi
Pgina 14 de 26
BCF
RLF
RLF
BCF
MOVFW
SUBWF
STATUS,C
VEL_AUTO,1
VEL_AUTO,1
STATUS,C
AUX1_VEL_AU
VEL_AUTO,1
;
;
;
;
;
;**********************************************
DECF
MOVFW
ADDWF
MOVFW
MOVWF
VEL_AUTO
AUX_VEL_AU
VEL_AUTO,1
VEL_AUTO
PWM_HAU
MOVLW
BCF
XORWF
BTFSS
GOTO
'C'
STATUS,Z
salida,W
STATUS,Z
NO_CAMBIA_DATO
MOVFW PWM_HAU
MOVWF PWM_H
MOVFW PWM_LAU
MOVWF PWM_L
CALL ciclo_pwm
NO_CAMBIA_DATO
MOVLW 'B'
BCF
STATUS,Z
XORWF salida,W
BTFSS STATUS,Z
GOTO AUTO_RUN
CALL paro
CLRF PWM_H
CLRF PWM_L
CALL ciclo_pwm
GOTO ciclo
;**************************************************************
;
RUTINAS
;**************************************************************
Pausa
;RETARDO NECESARIO PARA CONVERSION ANALOGICA
MOVLW 0x30
;APROXIMADAMENTE 30uSEG CON XTLA 20MHz
;Tcy=0.2 Useg
(REF PAG 30 ANEXO B)
MOVWF cont
;CARGA EL DATO EN UNA VARIABLE
rep
DECFSZ cont,1
;DECREMENTA EL CONTADOR Y SALTA SI ES CERO
GOTO rep
RETURN
marcha
BSF
PORTE,1
BSF
PORTC,5
RETURN
;LED
paro
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 15 de 26
;LED
XLCDL1home
D2D
XLCDPut
D1D
XLCDPut
XLCDL2home
PORTE
B'00000010'
motor_stad
0x00
motor_stad,1
.10
MODO,0
.20
PASO
LEYENDA
call estado
call XLCDPut
BCF
STATUS,Z
XORLW '-'
BTFSC STATUS,Z
RETURN
INCF PASO,1
MOVFW PASO
GOTO LEYENDA
RETURN
ciclo_pwm
MOVF PWM_H,W
MOVWF CCPR1L
MOVLW 0xCF
ANDWF CCP1CON,1
MOVF PWM_L,W
IORWF CCP1CON,1
RETURN
org
0x0140
interrup
MOVWF W_TEMP
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_TEMP
BTFSC INTCON,INTF
GOTO tecla
BTFSS INTCON,2
RETFIE
DECFSZ CNT_LECT,F
GOTO RET1
BTFSS PORTE,0
Diseo de Microcontroladores
;*****************************************
;PROVISORIO PARA CHEQUEAR LA INTERRUPCION
Ansaldo - Viccichi
Pgina 16 de 26
PP
GOTO
BCF
GOTO
PP
PORTE,0
PP1
BSF
PORTE,0
PP1
BCF
T1CON,TMR1ON
MOVLW 0x05
BCF
MOVWF
MOVFW
MOVWF
MOVFW
MOVWF
CLRF
CLRF
BSF
RET1
STATUS,C
CNT_LECT
TMR1L
PLS_ENCL
TMR1H
PLS_ENCH
TMR1H
TMR1L
T1CON,TMR1ON
BCF
INTCON,2
MOVLW 0x15
MOVWF TMR0
tecla
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
movlw 0x00
movwf primerdato
BCF
movf
andlw
movwf
BCF
rrf
rrf
movf
CALL
movwf
STATUS,RP0
PORTA,W
b'00111100'
primerdato
STATUS,C
primerdato,1
primerdato,1
primerdato,0
tabla
salida
MOVLW b'00001010'
BCF
SUBWF
BTFSC
GOTO
MOVFW
MOVWF
;TEMPORIZADA
;
;ENCIENDE Y APAGA EL RE0 CADA 60mS
;
;
;
;*****************************************
;APAGA EL CONTADOR DE PULSOS
;PONE A CERO EL CONTADOR DE CONTEO DE 12ms PARA
LLEGAR A 60ms
;DEBE LLEGAR A 5
;PULSO ENCODER BAJO
; PULSO ENCODER ALTO
;INICIALIZA EN CERO EL TIMER 1
;APAGA EL MODULO CCP PARA INICIALIZAR
;ENCIENDE EL CONTADOR DE PULSOS
;LIMPIA BANDERA DE DESBORDE
;CARGO EN TMR0 EL VALOR 15 PARA QUE EMPIECE
;A CONTAR DESDE EL Y
;CONSEGUIR EL EQUIVALENTE A 12ms
;SECUENCIA PARA RESTITUIR VALORES DE REGISTROS
;CUANDO SALE DE LA INTERRUPCION
;Y EVITAR QUE SE PIERDA EL CONTEXTO DEL
;PROGRAMA
STATUS,DC
primerdato,W
STATUS,DC
PASAR
VEL_DEC1
VEL_DEC2
RLF
VEL_DEC2,1
MOVFW VEL_DEC2
RLF
VEL_DEC2,1
Diseo de Microcontroladores
;**********************************************
;*
;*
;*
PASO DE MULTIPLICACION x10 PARA LA DECENA
Ansaldo - Viccichi
Pgina 17 de 26
PASAR
RLF
ADDWF
MOVFW
MOVWF
ADDWF
MOVWF
MOVFW
MOVWF
MOVFW
MOVWF
VEL_DEC2,1
VEL_DEC2,1
primerdato
VEL_DEC1
VEL_DEC2,0
VEL_DESEAD
D1D
D2D
salida
D1D
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
BCF
INTCON,INTF
RETFIE
;*
DEL DATO INGRESADO POR TECLADO
;*
;*
;*
;*
;**********************************************
end
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 18 de 26
Variables
VARIABLES
AUX_PWM
CONT1_PWM
PLS_ENCH
PLS_ENCL
PWM_H
PWM_L
CONT
CNT_LECT
DATO
PRIMERDATO
MOTOR_STAD
SALIDA
D1D
D2D
VEL_DEC1
VEL_DESEAD
VEL_DEC2
PASO
MODO
VEL_AUTO
AUX_VEL_AU
AUX1_VEL_AU
PWM_HAU
PWM_LAU
STATUS_TEMP
W_TEMP
DIRECCION
0x26
0x27
0x28
0X29
0x2A
0x2B
0x2C
0x2D
0x30
0x31
0x32
0x33
0x34
Puertos
PUERTO
PORTA
BIT
0
PORTA
PORTA
PORTA
PORTA
PORTA
PORTB
PORTB
PORTB
PORTB
PORTC
PORTC
PORTC
1
2
3
4
5
0
1
2
4
1
2
4
PORTC
PORTD
Ansaldo
- Viccichi
0 7
1
2
Aplicacin
Ventajas clnicas:
Rompe el ciclo traumtico, inflamatorio y
la perdida de rango de movimiento.
Elimina la rigidez articular en rodilla y
cadera.
Acelera la recuperacin del rango de
movimiento en el periodo postoperatorio.
Diseo de Microcontroladores
0x35
0x36
0x37
0x38
0x39
0x40
0x41
0x42
0x43
0x44
0x45
0x7D
0x7E
PORTE
PORTE
FUNCION
Canal Anal. Vel.
Man.
Man / Aut.
Teclado IN0 (LSB)
Teclado IN1
Teclado IN2
Teclado IN3 (MSB)
Interrupciones
Display (RS)
Display (EN)
Display (R/W)
IN Pulso Encoger
OUT P.W.M.
Led Estado
Man/Aut.
Led Estado
Run/Stop
Display
Pgina 19 de 26
Giro hor. Pte H
Giro Antihor. Pte H
Tablero de mando:
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 20 de 26
Datos tcnicos:
Altura del paciente
1.40 a 1.90 m.
14x2.6 mm
Peso
15 Kg.
Longitud
1200 mm
Anchura
450 mm
Altura
500 mm
Tensin de Entrada
220 V 50 Hz
Tensin de Motor
18 Vdc
65 1/min.
27 W
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 21 de 26
Diagrama funcional
Base de
Tiempo
Sensor y
Encoder
Acond. De
Seal
Motor
PWM
Pot
e
Teclado y
Comando
LCD
A/D
Interfaz
I/O
Interfaz
I/O
Controlador
Rutina
A/D
Man/Aut.
Rutina
Teclado
Rutina
LCD
Rutina de
Control.
Programa
Principal
Interfaz
I/O
Seguridad
El diagrama funcional da una idea de cmo se relacionan los diferentes dispositivos con el
Microcontrolador. Se puede apreciar como se transmiten los datos d eun dispositivo al otro y
que relacion hay entre dispositivos.
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 22 de 26
Configuracin
General
Inicializacin
de Variables
Consulta
Comandos
SelMan
=0
Rutina
Manual
Marcha
=1
Avance=1
Vel.
Nueva
Carga VEL.
Paro
=1
Avance=0
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 23 de 26
Manual
Consulta
Comandos
Marcha
=1
Avance=1
Carga
velocidad de
AN0
Paro
=1
Avance=0
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 24 de 26
Conclusiones:
Utilizando las herramientas de simulacin proporcionadas por Proteus y MPLab
pudimos depurar el cdigo de programacin sin necesidad de utilizar hardware
optimizando los tiempos de desarrollo (mediante el Proteus se logro la simulacin
completa del desarrollo).
Durante el desarrollo se realizaron pruebas con distintas frecuencias de salida para el
PWM y basndonos en datos del Puente H y el cristal seleccionado para el C (20
MHz) elegimos la frecuencia ms alta (20KHZ), con el fin de evitar movimientos
bruscos del motor en el arranque.
Se probo de forma individual el capturador de entrada obtenindose buenos resultados
(se leia de forma optima la cantidad de pulsos recibidos por el micro) pero debido a
problemas en el encoder interno del motor ya explicados debimos realizar un control a
lazo abierto.
El C (P16F877a) fue elegido en base a los requerimientos planteados en el inicio del
desarrollo (capturador de entrada, salida PWM, cantidad de puertos e interrupciones).
Bibliografa:
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 25 de 26
http://www.datasheetcatalog.net
http://www.melabs.com/support/icsp.htm
http://todopic.mforos.com/15353/218789-entrenador-para-16f877/
http://www.todopic.com.ar/pbp_sp.html
http://www.alos.5u.com/indexpic877.htm
http://www.4shared.com/file/83461416/e8eb6f26/Manual_PIC16F87X.html
http://s.scribd.com/doc/101172/pic16f877-en-espanol1
http://s.scribd.com/doc/101172/pic16f877-en-espanol2
Diseo de Microcontroladores
Ansaldo - Viccichi
Pgina 26 de 26