Está en la página 1de 5
Tester para servomotor con PIC16F84 Escrito por ZonaBot Viernes 10 de Octubre de 2008 11:16 - Ultima actualización Jueves 02 de Abril de 2009 19:20 Mediante es circuito se puede comprobar el funcionamiento de un servomotor usando un microcontrolador PIC16F84A.     CIRCUITO 1/5 Tester para servomotor con PIC16F84 Escrito por ZonaBot Viernes 10 de Octubre de 2008 11:16 - Ultima actualización Jueves 02 de Abril de 2009 19:20 Mediante del que envía 4Mhz. puerto servomotor. dependen la Las Bde señal del S1  resistencias microcontrolador. formado de del Escontrol fabricante posible por R2-R4 alser 3posicionarlo servo. pulsadores, del noservomotor. son IC1normalmente es en conectados un0º, microcontrolador El90º servo siyelse 180º, alse activan puerto conecta estos PIC B, las valores se al resistencias 16F84, conector controla son Q1aproximados la JP1, es internas posición unelcristal pindel del RA0 ya deeje el El cable conector control del servo puede tiene posición, blanco onecesarias amarillo. cable negro es negativo, el rojo positivo y PROGRAMA El programa de control está constituido por un bucle infinito que se ejecuta cada 20ms, para lo cual se usa el temporizador TMR0, al finalizar la cuenta provoca una interrupción que llama a la rutina encargada de generar el pulso de control del servo. ;********************************************************************************* ; Programa: ControlServo.asm ; Fecha: 23/03/2007 ; Autor: Jorge Fernández ; Descripción: Programa para el control de un servo de radio control conectado al ; pin RA0, la posición se puede controlar mediante 3 pulsadores conectados a RB0, ; RB1 y RB2 ;********************************************************************************* ; CONTROL SERVOMOTOR RC CON PIC 16F84A ;********************************************************************************* title "Control Servomotor" __CONFIG _CP_OFF & _XT_OSC & _PWRTE_ON & _WDT_OFF LIST P=16F84A, R=DEC ; 16F84 a 4 MHz errorlevel 0,-305 INCLUDE "p16f84a.inc" LIST ; Registros usados CBLOCK 0x00C ; Bloque de registros comenzando en 0x00C PWM ; Variable para el control PWM POSICION ; Variable para salvar la posición ENDC ; Variables #DEFINE A_0 PORTB,0 ; Pulsador posición 0º #DEFINE A_90 PORTB,1 ; Pulsador posición 90º #DEFINE A_180 PORTB,2 ; Pulsador posición 180º 2/5 Tester para servomotor con PIC16F84 Escrito por ZonaBot Viernes 10 de Octubre de 2008 11:16 - Ultima actualización Jueves 02 de Abril de 2009 19:20 #DEFINE SERVO PORTA,0 ; Pin de control del servo #DEFINE POS_0 124 ; Duración del pulso para posición 0º (1ms) #DEFINE POS_90 186 ; Duración del pulso para posición 90º (1,5ms) #DEFINE POS_180 249 ; Duración del pulso para posición 180º (2ms) ;********************************************************************************* ; INICIALIZACIÓN DEL PIC ;********************************************************************************* org 0 ; Posición de inicio goto Inicio ; Salto a la posición de inicialización PIC org 4 ; Vector interrupción goto Servos ; Tratamiento interrupcion TMR0 ;********************************************************************************* ; Inicialización de los puertos ;********************************************************************************* Inicio clrf PORTA ; Borrar PORTA clrf PORTB ; Borrar PORTB bsf STATUS,RP0 ; Selección banco 1 movlw b '11110' ; movwf TRISA ; Configurar puerto A movlw b '01111111' ; movwf TRISB ; Configurar puerto B bcf STATUS,RP0 ; Selección banco 0 ;********************************************************************************* ; Inicialización de las interrupciones y Configuración TMR0 ;********************************************************************************* movlw b '10100000' ; Habilitar interrupción TMR0 movwf INTCON ; bsf STATUS,RP0 movlw b '000000110' ; Configuración TMR0 movwf OPTION_REG bcf STATUS,RP0 ;********************************************************************************* ; INICIALIZACION DE LOS PARAMETROS ;********************************************************************************* movlw POS_0 movwf POSICION ;********************************************************************************* ; PROGRAMA DE CONTROL PRINCIPAL ;********************************************************************************* main goto main ;********************************************************************************* ; TRATAMIENTO DE LA INTERRUPCION ;********************************************************************************* ;********************************************************************************* ; SERVOS ;********************************************************************************* Servos bsf SERVO ; Activar pin servo bcf INTCON,T0IF ; Habilitar interrupción desbordamiento TMR0 movlw 100 movwf TMR0 movf PORTB,0 andlw b 3/5 Tester para servomotor con PIC16F84 Escrito por ZonaBot Viernes 10 de Octubre de 2008 11:16 - Ultima actualización Jueves 02 de Abril de 2009 19:20 '00000111' btfsc STATUS,Z goto seguir btfsc A_0 movlw POS_0 btfsc A_90 movlw POS_90 btfsc A_180 movlw POS_180 movwf POSICION seguir movf POSICION,W movwf PWM pulso decf PWM ; Decrementar valor registro control servo btfsc STATUS,Z ; ¿Es igual a cero? bcf SERVO ; Desactivar pin servo nop btfss SERVO retfie goto pulso ;************************************************************************************************ ; FIN DEL PROGRAMA ;************************************************************************************************ end SEÑAL DE CONTROL La señal que se genera mediante el microcontrolador tiene un periodo de 20 ms y la duración (ancho) del pulso varía entre 1 ms y 2 ms, dependiendo del pulsador que se haya activado, esta señal se conoce como PWM (Pulse Width Modulation).   4/5 Tester para servomotor con PIC16F84 Escrito por ZonaBot Viernes 10 de Octubre de 2008 11:16 - Ultima actualización Jueves 02 de Abril de 2009 19:20  El funcionamiento del tester se puede comprobar montando el circuito en una placa de prototipos. 5/5