Informe de Laboratorio I - IACI - Universidad Nacional de Quilmes

advertisement
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
Informe de Diseño de Microcontroladores
“Control de Rehabilitador Traumatológico
de Rodilla”
Integrantes:
Ansaldo Gastón
Viccichi Jorge
…………………..
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 1 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
Índice
Objetivo ..........................................................................................................
Descripción del proyecto ................................................................................
Elementos a utilizar ........................................................................................
Funcionamiento ..............................................................................................
Inconvenientes durante el Desarrallo .............................................................
Programación y Simulacion ............................................................................
Programa .......................................................................................................
Variables y Puertos .......................................................................................
Aplicación .......................................................................................................
Datos Técnicos...............................................................................................
Diagrama en bloques .....................................................................................
Diagrama de flujo ..........................................................................................
Conclusiones .................................................................................................
Bibliografia .....................................................................................................
Anexo A: Planos Electricos ...........................................................................
Anexo B: Manual Pic ......................................................................................
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 2 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
Objetivo
Implementar mediante un Microcontrolador PIC 16F877a y un motor con encoder
solidario al mismo, una máquina rehabilitadora de rodillas. Controlar la velocidad del
aparato haciendo uso de un encoder y un motor de corriente continua.
Aplicar los conocimientos adquiridos.
Descripción del proyecto
Para el desarrollo del proyecto se cuenta con toda la estructura, la cual consiste
básicamente de una base de madera y un soporte para apoyar la pierna. Se
construyo un tablero de mandos con teclado y display para el manejo manual del
equipo, un potenciómetro de referencia de velocidad y una selectora manualautomático. El movimiento es realizado por medio de un motor de corriente continua
alimentado por una fuente de 18 v, este posee un encoder solidario a su eje, que se
utilizará para calcular velocidad.
Mediante PWM se envía un tren de pulsos a un puente-H que permite al motor
realizar todas las tareas a una velocidad predeterminada por el usuario. Para
controlar el sentido de giro se utilizara el mismo puente-H.
Elementos utilizados
 Microcontrolador 16F877a
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 3 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
 Tablero de comando (teclado con codificador y display): Se divide en dos
partes: Una consta del Teclado de 4x4 y el display de LCD que actúa como
interfaz hombre-maquina. Por otro lado se tiene el tablero de mando que
contiene la selectora del modo de funcionamiento, el control de la velocidad
manual mediante potenciómetro y leds indicadores.
 Puente H (L298N):
Fig: ½ del L298N
Este integrado se alimenta con 5v para su funcionamiento y los 18v para alimentar al
motor.
La interfaz PUENTE H es básicamente un sistema de conmutación controlado por
dos señales digitales de baja potencia que provienen del Micro. Cuando el sistema
detecta un 1 digital en una de sus dos entradas de control y un cero en la otra, este
conecta el motor al la fuente de alimentación con determinada polaridad, si la señal de
control que estaba en 1 pasa a cero y la de cero a uno el PUENTE H conecta la fuente
al motor con la polaridad invertida facilitando así el giro en sentido contrario.
 Reguladores de Tensión a 5v. Mediante una sola fuente de 18v logramos
alimentar el motor y todos los circuitos electrónicos mediante diferentes
reguladores. Se usaron LM7812 y LM7805 estándar.
 Codificador de Teclado de 16 Teclas 74C922N:
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 4 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
Fig: Codificador de teclado 4x4.
Se implemento un codificador de Teclado por métodos electrónicos por un tema
de disponibilidad de puertos libres (en un momento se pensó en usar mas
puertos que los finalmente usamos). De esta manera mediante la codificación
electrónica se usaron 4 bits de Datos y un Bit de Interrupción por teclado.
El codificador funciona mediante un oscilador de Schmitt trigger, al cual se le
puede variar la frecuencia cambiando el Capacitor (OSC). El C.I. lo que hace es
habilitar una por una las columnas y sensar las filas para saber si se esta
oprimiendo alguna tecla, de ser así, deshabilita el sensado y mantiene el valor
de la tecla apretada a su salida. Una vez que se suelte la tecla el C.I.
comenzara nuevamente a sensar el conjunto de teclas.
 Pantalla LCD: de 2 Lineas por 16 Caracteres.
El LCD cuenta con 8 Bits de datos para recibir los caracteres provenientes del
Micro.
La alimentación es de 5v mediante los pines Vss(-) y Vdd(+).
Tiene un control de contraste mediante Voltaje regulado en la entrada del pin
Vee. (potenciómetro de 10K lineal)
Para el manejo cuenta con un pin de habilitación E y Rs y un bit de
envío/recepción de datos RW.

Diseño de Microcontroladores
Ansaldo - Viccichi
Página 5 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
Funcionamiento
Funcionamiento Operativo
Iniciado el proceso se puede seleccionar el modo de funcionamiento
manual/automático utilizando la selectora ubicada en el tablero de comando. Para
comenzar con el movimiento se debe presionar el botón de marcha (teclado). En
automático la máquina hace el recorrido a velocidad constante, cuyo valor es
ingresado por teclado (1-65 RPM) y confirmado mediante el mismo. La velocidad en
modo Automático 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
potenciómetro incorporado en el tablero de comando.
Funcionamiento Técnico
Se utilizó un motor de corriente continua con una alimentación nominal de 18v y caja
reductora incorporada.
El teclado de interfaz con la maquina cuenta con un conversor 74C922N el cual
entrega un código Hexadecimal de 4 Bits (0000-1111) conectado a la entrada del
C y el Pin DA del Conversor a la entrada de Interrupción (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 través de sus líneas de control manejadas por
el C.
Se utilizara un encoder incremental solidario al motor para poder conocer la
velocidad cuasi-instantánea. Este encoder es del tipo Disco Magnético, al estar
solidario al eje, gira a la misma velocidad del motor provocando una variación del
flujo magnético respecto a la velocidad, y este es enviado a la salida mediante una
variación de la frecuencia en dicha señal. La variación de frecuencia provoca distinta
cantidad de pulsos para un tiempo determinado, y la lógica 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 relación para determinar la
variación de cantidades de pulsos y así obtener una velocidad cercana a la que se
obtendría en tiempo real.
La señal que entrega el encoder se introduce en la base de un Transistor BC548
polarizado en funcionamiento de Corte-Saturación para tener una señal
acondicionada a la entrada del C con un nivel de 5v. Esta señal tiene una variación
de frecuencia entre 1 Khz y 2 Khz para un factor de PWM del 40% al100%.
La velocidad del motor está referenciada por un potenciómetro lineal de 10kΩ
ubicado en el tablero de comando el cual varia entre 0-5v. El potenciómetro se
conecta a un Canal Analógico del C.
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 6 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
El Canal analógico que se usa es el ANO (PortA, bit0) y esta configurado con un
reloj de conversión (Fosc/32) y alineación a la izquierda mediante el Registro
ADCON1.
Los demás bits del Puerto A se usan como entradas Digitales.
Para el PWM se usa el Pin RC2/CCP1 como Salida. Se usa una Resolución de 10
Bits y una división de 1:4 del Timer2.
Para tomar el ciclo de trabajo del PWM existen dos formas: Una en Manual donde se
toma el valor del canal Analógico o en Automático mediante el ingreso de RPMs por
Teclado.
Para el Capturador de pulsos del Encoder se usa el Pin RC1/CCP2 como Entrada,
con un Preescalador 1:1 del Timer1.
El Timer0 esta siendo utilizado para realizar una interrupción temporizada de 12ms y
mediante sumas sucesivas realizamos cada 60ms la consulta del valor
proporcionado por el encoder y reseteamos el mismo para una nueva contabilidad.
Inconvenientes durante el Desarrollo
Se probaron diferentes frecuencias para el PWM y se notaron variaciones en el
arranque y la velocidad final del motor. Se opto por usar la división por 4 del Timer.
El encoder era muy impreciso por lo que no se pudo hacer las relaciones para
controlar la velocidad. La idea era hacer la relación de pulsos anteriores con pulsos
actuales pero había demasiadas variaciones para una velocidad constante. Se
pensó en agregar un encoder a la maquina pero fue difícil su implementación (se
necesitaba tornear una pieza y hacerle un agujero en el centro con exactitud).
Sin embargo estos pulsos del encoder, si bien no marcaban una cantidad real nos
sirvió para efectuar una rutina de captura y enviar los pulsos al LCD, por lo que
consiguiendo mejorar la calidad del encoder se tendrá la lectura de velocidad en el
LCD y un optimo control.
Por el mismo motivo no se pudo implementar un pequeño lazo cerrado PI. La idea
consistía en realimentar una variable en memoria con la cantidad de pulsos durante
un Tiempo constante y comparando esta variable con los pulsos actuales ir
aumentando o disminuyendo el ciclo del PWM dependiendo de la relación entre los
pulsos. El control si bien era algo sencillo lograba incrementar la velocidad cuando
se incrementaba la carga.
Programación y Simulación:
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 7 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
Se uso el MPLab V.8 para desarrollar el codigo. Este codigo era cargado en el Soft
de Simulación: ISIS Proteus, el cual tuvo un funcionamiento similar a la maquina
real.
Para pasar el programa al PIC se uso el EPIC con un programador in-circuit “Made
in Casa”
Capturas y Circuitos:
Simulacion
Esquema conexión Programador In-Circuit.
Señal de interrupción cada 60ms (color purpura) 1div/10ms
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 8 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
Prueba de PWM para velocidad ingresada por teclado en automatico.
Programa
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 9 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
list p=16f877
include <P16F877.INC>
include "XLCD.inc"
;This include all required files and variables.
;*********
DISEÑO DE MICROCONTROLADORES – PROYECTO DE MATERIA ***********
;
PROF: JOSE JUAREZ 
;
UNIVERSIDAD NACIONAL DE QUILMES
;
ALUMNOS: VICCICHI – ANSALDO
;****************************************************************************
;LAS 6 PRIMERAS POSICIONES DE MEMORIA ESTAN UTILIZADAS POR LA RUTINA DE
;INICIALIZACION DEL DISPLAY, 0x20 - 0x25
;****************************************************************************
;************************* DECLARACION DE VARIABLES *************************
;****************************************************************************
T1CON
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
Diseño de Microcontroladores
;dir de atencio de interrupcion
;Salta a la rutina de atencion de interrupcion
Ansaldo - Viccichi
Página 10 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
;****** TABLA DE DATOS UTILIZADAS PARA DEVOLUCION DE VALORES ASCII *****
;******
EN INGRESO DE DATOS DE TECLADO Y LEYENDAS A LCD
*****
org
0x10
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
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'
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 11 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
retlw
retlw
retlw
retlw
retlw
retlw
;
;
;
' '
'A'
'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
;PATITA 1 DEL PUERTO E COMO SALIDA
;RESIT PULL-UP PORTB,INT0 F_D,TMR0 POR
;PULSOS DE RELOJ INTERNO.
;CONFIGURA PRESC DEL TMR0 1/256
;*****************************************************************
;
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
MOVWF
MOVLW
CNT_LECT
0x81
Diseño de Microcontroladores
;SELEC. SOLO EL CANAL AN0 COMO ENTRADA
;ANALOGICA
;Y JUSTIFICACION A LA izquierda DEL RESULTADO
;REF. PAG 33 “ANEXO B”
;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
;CONFIGURACION DE INTERRUPCIONES RB0 Y TMR0
;CARGO EN TMR0 VALOR 15 PARA CONTAR DESDE EL Y
;CONSEGUIR EL EQUIVALENTE A 12ms
;PONE A CERO EL CONT. DE 12ms PARA LLEGAR A
;60ms
;DEBE LLEGAR A 5
;SELECCIONA EL CONVERTIDOR CON FREC/32
Ansaldo - Viccichi
Página 12 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
MOVWF
ADCON0
;Y ENCIENDE EL CONVERSOR
;*****************************************************************
;
CONFIGURACION PWM
;*****************************************************************
BSF
STATUS,RP0
;Banco de memoria 1
MOVLW
0xFF
;Carga periodo
MOVWF
PR2
;lo establece para el PWM
BCF
TRISC,2
;Patita RC2/CCP1 como salida
BCF
STATUS,RP0
;Banco de memoria 0
CLRF
CCPR1L
;Inicializa el ciclo de trabajo en cero
BCF
CCP1CON,CCP1X
;PONE A CERO EL BIT 0 DE LA SIG PALABRA
;DADO QUE USAMOS RESOLUCION 10 BITS
BCF
CCP1CON,CCP1Y
;PONE A CERO EL BIT 1 DE LA SIG PALABRA
MOVLW
0x05
;Configura el timer 2
MOVWF
T2CON
;PREESCALADOR 1/1, HABILITA TIMER
BSF
CCP1CON,CCP1M3
;CONFIGURA MODO DE TRABAJO
BSF
CCP1CON,CCP1M2
;CONFIGURA MODO DE TRABAJO
CLRF
primerdato
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
salida
D1D
D2D
VEL_DEC1
VEL_DEC2
VEL_DESEAD
;EN VAR PRIMERDATO ESTA VALOR BIN DE LA
;TECLA PRESIONADA
;VALOR ASCII DE TECLA PRESIONADA
;**************************************
;
VARIABLES USADAS PARA
;
ADECUACION
;
DE DATOS PARA VELOCIADAD
;
DESEADA
PAGESEL
call
XLCDInit
XLCDInit
;Inicializacion de LCD
call
call
movlw
call
XLCDClear
XLCDL1home
XLCDDisplayOnCursorOff
XLCDCommand
;Dispay on cursor off
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
;SELECTORA MAN/AUT.
'A'
STATUS,Z
salida,W
STATUS,Z
ciclo
marcha
DISPLAY
AUT=0
MAN=1
;CHEQUEA QUE SE DE ARRANQUE AL MOTOR
;PREGUNTA SI ESTA EN MARCHA
;SUBRUTINA DE MARCHA
PORTC,4
MODO
pausa
ADCON0,GO
;LED
ADCON0,GO
espera
ADRESH,W
PWM_H
;ESPERA A QUE TERMINE LA CONVERSION BIT GO/DONE
Diseño de Microcontroladores
;DELAY PARA QUE PASE EL TIEMPO DE ADQUISICION
;INICIA CONVERSION
;TOMO VALOR alto DEL CANAL ANALOGICO
Ansaldo - Viccichi
Página 13 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
BSF
MOVF
BCF
MOVWF
MOVLW
ANDWF
STATUS,RP0
ADRESL,W
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
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
Diseño de Microcontroladores
;Banco de memoria 1
;TOMO VALOR BAJO DEL CANAL ANALOGICO
;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
;PREGUNTA SI ESTA EN PARO
;PONE A CERO LA SALIDA DEL PWM
;SI ESTA EN PARO
;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)
;BORRA FLAG DE CARRY DEL STATUS PARA USAR RRF
;********************************************
;
ADECUA DATO INGRESADO POR TECLADO
;
PARA ENVIARLO AL CANAL
;
DEL PWM
;
(REF PAG 49 ANEXO B)
;SE USA EN LA CUENTA PROXIMA PARA DESCONTAR 1
;DE (VEL x 16)
; APROXIMA CUENTAS PARA DADO QUE:
;
;VELOCIDAD DESEADA * 15.75 = PWM
;
;
;
;
;
Ansaldo - Viccichi
Página 14 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
RRF
AUX_VEL_AU,0
ANDLW 0x3F
MOVWF AUX_VEL_AU
;
;
;
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
;PREGUNTA SI ACEPTO UN CAMBIO DE VELOCIAD
;POR MEDIO DE LA TECLA C DEL TECLADO
;** PASA DATOS AL PWM **
;
;
;***********************
;PREGUNTA SI ESTA EN PARO
;
;PONE A CERO EL PWM
;SI ESTA EN PARO
;**************************************************************
;
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
Diseño de Microcontroladores
;LED
Ansaldo - Viccichi
Página 15 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
paro
BCF
PORTE,1
BCF
PORTC,5
RETURN
DISPLAY
call
MOVFW
call
MOVFW
call
call
MOVFW
ANDLW
MOVWF
MOVLW
BTFSS
MOVLW
BTFSC
ADDLW
MOVWF
;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
Diseño de Microcontroladores
;RUTINA PARA MOSTRAR POR DISPLAY EL ESTADO
;DEL EQUIPO RUN/STOP – MAN/AUTO
;TOMO VALOR ALTO PARA PWM
;PASO EL VALOR ESTE AL CICLO DE TRABAJO DEL PWM
;TOMO VALOR BAJO PARA PWM
;PASO ESTE AL CICLO DE TRABAJO DEL PWM
;Ha sido el TECLADO ?
;Ha sido el TIMER ?
Ansaldo - Viccichi
Página 16 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
BTFSS PORTE,0
GOTO
BCF
GOTO
PP
PORTE,0
PP1
BSF
PORTE,0
PP
PP1
BCF
T1CON,TMR1ON
MOVLW 0x05
BCF
MOVWF
MOVFW
MOVWF
MOVFW
MOVWF
CLRF
CLRF
BSF
STATUS,C
CNT_LECT
TMR1L
PLS_ENCL
TMR1H
PLS_ENCH
TMR1H
TMR1L
T1CON,TMR1ON
;*****************************************
;PROVISORIO PARA CHEQUEAR LA INTERRUPCION
;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
RET1
BCF
INTCON,2
MOVLW 0x15
MOVWF TMR0
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
;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
tecla
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
;SE ALOJA EL VALOR BINARIO DE LA TECLA
;PRESIONADA
;Banco de memoria 0
;EN LA VARIABLE SALIDA TENEMOS EN VALOR EN
ASCII DE LA TECLA PRESIONADA
;ES MAYOR QUE 9? PARA DETERMINAR SI SE
;PRESIONO UN NUMERO O UN COMANDO
STATUS,DC
primerdato,W
STATUS,DC
PASAR
VEL_DEC1
VEL_DEC2
;**********************************************
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 17 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
RLF
VEL_DEC2,1
MOVFW VEL_DEC2
RLF
VEL_DEC2,1
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
;*
;*
;*
PASO DE MULTIPLICACION x10 PARA LA DECENA
;*
DEL DATO INGRESADO POR TECLADO
;*
;*
;*
;*
;**********************************************
PASAR
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
BCF
INTCON,INTF
RETFIE
;RESTAURA VALORES ANTERIORES A LA INTERRUPCION
end
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 18 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
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
0x35
0x36
0x37
0x38
0x39
0x40
0x41
0x42
0x43
0x44
0x45
0x7D
0x7E
Diseño de Microcontroladores
Puertos
PUERTO
PORTA
BIT
0
PORTA
PORTA
PORTA
PORTA
PORTA
1
2
3
4
5
PORTB
PORTB
PORTB
PORTB
PORTC
PORTC
PORTC
0
1
2
4
1
2
4
PORTC
5
PORTD
0 7
1
2
PORTE
PORTE
Ansaldo - Viccichi
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
Giro hor. Pte H
Giro Antihor. Pte
H
Página 19 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
Aplicación
Ventajas clínicas:
• Rompe el ciclo traumático, inflamatorio y la perdida de rango de movimiento.
• Elimina la rigidez articular en rodilla y cadera.
• Acelera la recuperación del rango de movimiento en el periodo postoperatorio.
• Mantiene la calidad de la superficie articular.
• Reduce el dolor y los edemas.
• Evita la trombosis venosa.
• Proporciona un movimiento pasivo continuo postoperatorio inmediato.
• Reduce el periodo de hospitalización.
• Disminuye la necesidad de administrar medicación para el dolor.
• Mantiene la posición deseada para el estiramiento y el reposo muscular.
Indicaciones:
• Artrolisis
• Cirugía para la sustitución de rodilla
• Fracturas (rotulianas, del platillo tibial, femorales...)
• Reparación de ligamentos
• Cirugía artroscópica
• Cirugía de cadera
• Quemaduras, sepsis articular
Y en general, cualquier patología que precise de un periodo de rehabilitación de
miembro inferior.
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 20 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
Tablero de mando:





Pulsador Marcha y Pulsador Paro sobre Teclado (teclas “A” y “B” )
Selectora Manual Automático (2 posiciones fijas)
Teclado 4x4
Display
Potenciómetro lineal 10K
Datos técnicos:
Altura del paciente
Longitud de desplazamiento
Rosca de Tornillo
Peso
Longitud
Anchura
Altura
Tensión de Entrada
Tensión de Motor
R.P.M. del motor
Potencia del motor
Diseño de Microcontroladores
1.40 a 1.90 m.
250 mm
14x2.6 mm
15 Kg.
1200 mm
450 mm
500 mm
220 V 50 Hz
18 Vdc
65 1/min.
27 W
Ansaldo - Viccichi
Página 21 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
Diagrama funcional
Base de
Tiempo
Sensor y
Encoder
Acond. De
Señal
Motor
PWM
Pote
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 cómo 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.
Diagrama de flujo
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 22 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
Inicio
Configuración
General
1
Inicialización
de Variables
Consulta
Comandos
SelMan
=0
Rutina
Manual
Marcha
=1
Avance=1
Vel.
Nueva
Carga VEL.
Paro
=1
Avance=0
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 23 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
Manual
Consulta
Comandos
Marcha
=1
Avance=1
Carga
velocidad de
AN0
Paro
=1
Avance=0
1
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 24 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes
Conclusiones:
Utilizando las herramientas de simulación proporcionadas por Proteus y MPLab
pudimos depurar el código de programación sin necesidad de utilizar hardware
optimizando los tiempos de desarrollo (mediante el Proteus se logro la simulación
completa del desarrollo).
Durante el desarrollo se realizaron pruebas con distintas frecuencias de salida para el
PWM y basándonos en datos del Puente H y el cristal seleccionado para el C (20
MHz) elegimos la frecuencia más alta (20KHZ), con el fin de evitar movimientos
bruscos del motor en el arranque.
Se probo de forma individual el capturador de entrada obteniéndose 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).
Bibliografía:
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 25 de 26
Ingeniería en Automatización y Control Industrial
Universidad Nacional de Quilmes

http://www.datasheetcatalog.net
De aquí se sacaron los PDF técnicos de cada integrado.







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
Diseño de Microcontroladores
Ansaldo - Viccichi
Página 26 de 26
Descargar