Tester para servomotor con PIC16F84
Mediante es circuito se puede comprobar el funcionamiento de un servomotor usando un microcontrolador PIC16F84A.
Mediante S1 formado por 3 pulsadores, conectados al puerto B, se controla la posición del eje del servomotor. Es posible posicionarlo en 0º, 90º y 180º, estos valores son aproximados ya que dependen del fabricante del servomotor. El servo se conecta al conector JP1, el pin RA0 envía la señal de control al servo. IC1 es un microcontrolador PIC 16F84, Q1 es un cristal de 4Mhz. Las resistencias R2-R4 no son necesarias si se activan las resistencias internas del puerto B del microcontrolador.
El conector del servo tiene posición, normalmente el cable negro es negativo, el rojo positivo y el cable de control puede ser blanco o amarillo.
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º �
#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’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
Revisa eltexto del porgrama antes de efectuar la compilacion.
Fuente: http://www.zonabot.com/microbotica/3-actuadores/10-control-servomotor-con-pic16f84.html
Tuitear 6.696 Veces leído 0 comentarios |
11 abril 2010 en Electronica | tags: Electronica |