Sie sind auf Seite 1von 5

Tester para servomotor con PIC16F84

Escrito por ZonaBot


Viernes 10 de Octubre de 2008 11:16 - Ultima actualizacin 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 actualizacin Jueves 02 de Abril de 2009 19:20

Mediante
del
que
enva
4Mhz.
puerto
servomotor.
dependen
la
Las
Bde
seal
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
posicin
unelcristal
pindel
del
RA0
ya
deeje
el
El
cable
conector
control
del
servo
puede
tiene
posicin,
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 interrupcin que llama a la
rutina encargada de generar el pulso de control del servo.
;********************************************************************************* ; Programa:
ControlServo.asm ; Fecha: 23/03/2007 ; Autor: Jorge Fernndez ; Descripcin: Programa
para el control de un servo de radio control conectado al ; pin RA0, la posicin 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 posicin
ENDC ; Variables
#DEFINE
A_0
PORTB,0
; Pulsador posicin 0
#DEFINE A_90
PORTB,1
;
Pulsador posicin 90
#DEFINE A_180
PORTB,2
; Pulsador posicin 180

2/5

Tester para servomotor con PIC16F84


Escrito por ZonaBot
Viernes 10 de Octubre de 2008 11:16 - Ultima actualizacin Jueves 02 de Abril de 2009 19:20

#DEFINE SERVO
PORTA,0
; Pin de control del servo
#DEFINE POS_0
124
; Duracin del pulso para posicin 0 (1ms)
#DEFINE POS_90 186
;
Duracin del pulso para posicin 90 (1,5ms)
#DEFINE POS_180 249
; Duracin
del pulso para posicin 180 (2ms)
;********************************************************************************* ;
INICIALIZACIN DEL PIC
;*********************************************************************************
org 0
; Posicin de inicio
goto
Inicio
; Salto a la posicin de inicializacin PIC
org 4
; Vector
interrupcin
goto
Servos
; Tratamiento interrupcion TMR0
;*********************************************************************************
; Inicializacin
de los puertos ;********************************************************************************* Inicio
clrf PORTA
; Borrar PORTA
clrf PORTB
; Borrar
PORTB
bsf STATUS,RP0
; Seleccin banco 1
movlw b
'11110'
;
movwf TRISA
; Configurar puerto A
movlw b
'01111111'
;
movwf TRISB
; Configurar puerto B
bcf
STATUS,RP0
; Seleccin banco 0
;********************************************************************************* ; Inicializacin de las
interrupciones y Configuracin TMR0
;*********************************************************************************
movlw b
'10100000'
; Habilitar interrupcin TMR0
movwf INTCON
;
bsf
STATUS,RP0
movlw b
'000000110'
; Configuracin 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
interrupcin 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 actualizacin 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
SEAL DE CONTROL
La seal que se genera mediante el microcontrolador tiene un periodo de 20 ms y la duracin
(ancho) del pulso vara entre 1 ms y 2 ms, dependiendo del pulsador que se haya activado,
esta seal 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 actualizacin 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

Das könnte Ihnen auch gefallen