Está en la página 1de 6

1/4/2017 MotoresControldeunservoPrueba01:ControlbsicoRobotsArgentina

pasinporlarobticaenArgentina
[PRINCIPAL][NOSOTROS][ACTIVIDAD][NOTICIAS][ARTICULOS][GALERIA][ENLACES][CONTACTO]

DesarrolladoresdeRobots:
Ungrupodondepodemosconversardelostemasquenosinteresan
Ingresatudireccindecorreoelectrnicoypulsaenter
DesarrolladoresdeRobotsfuncionaenGruposYahoo! ar.groups.yahoo.com

ServosdemodelismooRC
ControldeunservoPrueba01:Controlbsico
porEduardoJ.Carletti
Estaeslaprimeradeungrupodepruebasdelaboratorioenlasque,partiendo
desdecero,implementaremoselcontroldeservosdemodelismopormediode
un microcontrolador PIC. El microcontrolador elegido es el PIC16F628A, que
tiene una distribucin de patas igual a las del histrico y archiconocido
PIC16F84A, aunque con mejores prestaciones. Las razones de elegir este PIC
para las pruebas de aprendizaje en lugar del PIC16F84A las he desarrollado en
el artculo Prueba de conexin serie entre un PIC y una PC y no tiene
sentidorepetirlasaqu.

AlosservosdemodelismotambinselesllamaservosRC(porRadio Control)
o, en ingls, RC servos. En estas pruebas utilizaremos el servo HS311 de
Hitec, que se consigue en Argentina a mejor precio que otros similares de
Futaba,porejemplo. Servoutilizado:Hitec
HS311
La forma de controlar el posicionamiento de este tipo de servos es bastante
sencilla,ycomoyalahemosdescriptoendetalleenelartculo Servos,Caractersticas bsicas, no
voy a extenderme aqu. A aquellos que an no han profundizado en el mtodo que se utiliza para
controlarlosservosdemodelismoquetienemuchoqueverconlascaractersticasdelradiocontrol
lesrecomiendodarunaojeadaa esteartculoantesdeseguir.

Acontinuacinsepuedeobservarelprimercircuitoquevamosautilizar:

PrimerapruebadecontroldeunservoRC

Enelcircuitosepuedenapreciarlospocoselementosqueestamosutilizando en esta primera prueba.


Se trata del PIC, que como funciona con su generador interno de reloj de 4 MHz no requiere de un
cristal el enchufe para el servo y tres pequeos pulsadores. Los resistores son para polarizar a un

http://robotsargentina.com.ar/Prueba_ServoRC01.htm 1/6
1/4/2017 MotoresControldeunservoPrueba01:ControlbsicoRobotsArgentina

valor positivo, o valor lgico 1, las entradas del PIC que se utilizan para "leer" los pulsadores. Los
pulsadoresllevanestenivelalgico0,otierra,cuandoselospresiona.

MontajedelcircuitobsicodecontroldeunservoRC

Comoseveenlafoto,alservolehemoscolocadouncrculodecartulinaconunalneanegraquenos
servircomoindicadordesuposicin.Lostrespulsadoresqueseobservanenlafotocorresponden,de
izquierda a derecha, a "pulsador 1", "pulsador 2" y "pulsador 3" en el circuito. El pulsador 1 servir
parallevaralservoasuposicincentral,o"neutra".Conelpulsador2seharavanzarlentamente al
servoensentidoantihorario,yconelpulsador3selohargirar,deapoco,ensentidohorario.

Este circuito, y el programa asociado en el PIC, no cumplen otro propsito que el de dar una primera
aproximacin al mtodo de programa utilizado para controlar a este tipo de servos. En las pruebas
siguientesiremosavanzandohastallegaraunasofisticacinyutilidadmuchomayor.

ProgramabsicodecontroldeservosRC

;**********************************************************************
;MANEJODESERVOSProgramaBsico1
;PorEduardoJ.Carletti,RobotsArgentina,2007
;**********************************************************************

listp=16F628A ;definirprocesador

#include<p16F628A.inc> ;definicionesdevariablesespecficasdelprocesador

ERRORLEVEL1;302 ;paraevitarlosmensajesdecambiode
;bancoenelresultadodelcompilador

__CONFIG_CP_OFF&_WDT_OFF&_LVP_OFF&_PWRTE_ON&_INTRC_OSC_NOCLKOUT&_MCLRE_OFF

;*****DEFINICINDELNOMBREDEENTRADASYSALIDAS

#defineSERVO1 PORTA,0 ;puertodesalidadeservo1


#definePULSADOR1 PORTA,1 ;puertodeentradadepulsador1
#definePULSADOR2 PORTA,2 ;puertodeentradadepulsador2
#definePULSADOR3 PORTA,3 ;puertodeentradadepulsador3

;*****VARIABLES

CBLOCK 0x20

http://robotsargentina.com.ar/Prueba_ServoRC01.htm 2/6
1/4/2017 MotoresControldeunservoPrueba01:ControlbsicoRobotsArgentina

acum_A ;variablemomentnea
Posic ;posicinservo
ENDC

;***********************************************************************************

org 0x000
goto principal

;***********************************************************************************
;Principal
;***********************************************************************************

principal
movlwb'00000111' ;deshabilitacomparadores.Estoes
movwfCMCON ;algoimportanteenelPIC16F628A

clrfPORTA ;iniciaports
clrfPORTB ;iniciaports

bsfSTATUS,RP0 ;Apuntaabanco1

movlwb'00001110' ;PORTA
movwf TRISA ;salidasmenos1,2y3,entradas

MOVLWb'00000000' ;PORTB
movwf TRISB ;salidas

movlw b'00000010' ;ConfiguracinparaTMR0


movwf OPTION_REG ;preescaler2,1:8conCLKinterno(quees
;de1MHzsielosciladoresde4MHz).
;Elcontadorcuentacada8useg

bcfSTATUS,RP0;Apuntaabanco0

clrfTMR0 ;iniciaregistrodetimeren0

movlwd'133' ;iniciavalordeposicindeservo(centro)
movwfPosic

;***********************************************************************************
;Lazoprincipal
;***********************************************************************************

lazo

;Losservosactanconunpulsodecontrolquevaentre0,5msy2,5ms.
;Enelbloquequesigueseiniciaen1elpulsodecontrolyseesperaun
;retardofijodeaproximadamente0,5ms,queeselvalormnimodelpulso.
;Conestevalordelongituddepulsoyunalongitudceroenlapartevariable,
;elservoestparadoalmximohacialaizquierda(sentidoantihorario).

bsf SERVO1 ;ponelasealdeservoen1


bcf INTCON,T0IF ;borraelflagdetimer
movlw d'192' ;(256192=64)64*8us=0,512ms
movwf TMR0 ;valoralregistrodetimer
btfss INTCON,T0IF ;esperaportimer=ff>00
goto $1
bcf INTCON,T0IF ;borraelflagdetimer

;Acontinuacin,comienzaeltiempovariabledelpulso.Estopermite
;queelrecorridocompleto,de180grados(valoresdepulsoentre0,5ms
;y2,5ms),sedividaen256segmentos(256*8us=2,048ms).
;Lapartevariabledelpulsodecontrolvaraentre0y2ms

movf Posic,w ;256nnx8uS=1ms,1,5ms,2,5ms


movwf TMR0 ;valoralregistrodetimer
btfss INTCON,T0IF ;esperaportimer=ff>00
goto $1
bcf SERVO1 ;ponelasealdeservoen0
bcf INTCON,T0IF ;borraelflagdetimer

http://robotsargentina.com.ar/Prueba_ServoRC01.htm 3/6
1/4/2017 MotoresControldeunservoPrueba01:ControlbsicoRobotsArgentina

;Retardode20ms,queeseltiempoestndarquedebesepararlospulsos
;decontrolparalosservoscomunesdeRC

movlw d'9' ;cantidaddeveces:9x2ms=18ms+2ms


movwf acum_A
retardo bcf INTCON,T0IF ;borraelflagdetimer
movlw d'6' ;(2566=250)250*8us=2ms
movwf TMR0 ;valoralregistrodetimer
btfss INTCON,T0IF ;esperaportimer=ff>00
goto $1
decfsz acum_A ;decrementacantidaddeveces
goto retardo

pulsadores ;leerdenesatravsdepulsadores
btfss PULSADOR1
gotoiniciaPos ;servoenposicincentral
btfss PULSADOR2
gotoincPos ;incrementaPosic
btfss PULSADOR3
gotodecPos ;decrementaPosic

gotolazo

iniciaPos movlwd'133' ;256133=123,123*8us=984us+512us


movwfPosic ;posicincentralenestadisposicin
gotolazo ;ysale

decPos movfPosic,f ;sefijasiPosicyaescero
bzsale1 ;siesceronodecrementa
decfPosic,f ;sinoescero,decrementa
sale1 gotolazo ;ysale

incPos movlw0xFF ;sefijasiPosicnoes0xFF


xorwfPosic,w ;queeselvalormximo
bzsale2 ;sieselvalormximo,noincrementa
incfPosic,f ;sinoeselvalormx,incrementa
sale2 gotolazo ;ysale

END

Bajarelprogramaenformato ASM(puedeusarelbotnderechodesumouse)
Bajarelprogramaenformato HEX(puedeusarelbotnderechodesumouse)
Porlasdudas,elarchivoincluido P16f628a.inc(puedeusarelbotnderechodesumouse)

DiagramadeflujodelprogramadecontroldeunservoRC

http://robotsargentina.com.ar/Prueba_ServoRC01.htm 4/6
1/4/2017 MotoresControldeunservoPrueba01:ControlbsicoRobotsArgentina

Esperoqueenesteprogramasepuedaverconclaridadlamaneradegenerarelpulsoconlostiempos
correctos.Dehecho,lohemosescritolomssimpleposibleporestarazn.Perolaverdadesqueesta
forma de hacerlo tiene el defecto de que mientras se producen los retardos, el microcontrolador est
enunlazocerrado,dedicadoexclusivamenteaesperarquesecumplanlostiempos.

Cmo se soluciona esto? Haciendo que los retardos se produzcan mientras el microcontrolador est
haciendo otra cosa. Y para hacer esto se debe utilizar una de las herramientas ms potentes y
necesarias en un sistema que debe ser sensible a sucesos producidos en el mundo real: las
interrupciones.

Losinvito,entonces,acontinuarestapruebadelaboratorioenlasegundapartedeestetrabajo:
Controldeservosconinterrupciones.

Algunascosasqueobservenlaparte1

En algunas posiciones el servo queda temblando en lugar de quedar firme en su posicin.


Supongo que se debe a imprecisin en el contacto de su potencimetro de posicionamiento ms
queaunpulsodecontrolirregular.
Importante:eltembloryelcalentamientodelservocrecenmuchosisesuperaelretardode20
msentrepulsosdecontrol.
Al pulsar los controles para mover continuamente el servo en uno u otro sentido, tal como est
hechoelprograma,elpulsadoresledocada20ms,esdecir,unas50vecesporsegundo,loque
daunavelocidadrazonabledeactualizacinyelservosemueveconsuficientelentitud.
http://robotsargentina.com.ar/Prueba_ServoRC01.htm 5/6
1/4/2017 MotoresControldeunservoPrueba01:ControlbsicoRobotsArgentina

Datosadicionales:

MicrocontroladorPIC16F628A

El PIC16F628Asepuedecompraren Cika,dondecuestaus$3.

ServodemodelismooRC

Utilizamos el servo Hitec HS311 porque era el ms barato disponible en ese tipo al momento de
encararelproyecto.Sepuedeconseguiren Mirax,dondecuestamsomenosus$11.

Recomendamosver,paracompletarestainformacin>Servos,Caractersticasbsicas

2007,2017RobotsArgentinaContacto:ecarletti@ituzaingo.org

http://robotsargentina.com.ar/Prueba_ServoRC01.htm 6/6

También podría gustarte