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