JVM-Electronics

  • Aumentar fuente
  • Fuente predeterminada
  • Disminuir fuente

Manejo de un Servo (Mikrobasic)

E-mail Imprimir PDF
servo_bak
Resumo en unas cuantas lineas como se puede controlar un servo facilmente y como se ha de modificar el codigo para que el razonamiento sea fiable. haciendo las pertinentes modificaciones es posible ir añadiendo servos (aunque aun no he hecho un calculo porque no ha hecho falta) es dependiente de la velocidad del clock y del resto de codigo que se emplee en el MCU.

Con un cuarzo de 4Mhz tenemos que el pic ejecuta una instruccion cada us (Clock/4 -> 4/4=1) utilizando la instruccion Delay_cyc(xxx) usamos 10 ciclos de clock multiplicado por "xxx" de forma que tendremos un maximo de: 255*10=2250us, excede un poco el rango de trabajo del servo ya que ha de funcionar correctamente desde 0'3 ms +/- de mninimo hasta un maximo de 2'4 ms +/- asi que solo queda calcular estos rangos:

Calculo del minimo: 0'3 ms = 300us --> 300us/10(ciclos) = 30
Calculo del maximo: 2'4 ms = 2400us --> 2400us/10(ciclos) = 240

Codigos:
program ServoSimple
'Programa Movimiento de servo simple *******************************************
'Este codigo recorre los 180º de rango del servo para Mikrobasic 4.0.0.3
'
'Creado y verificado por: Julio Montagut
'Web: http://www.jvmbots.es
'
'-HARDWARE:
' MCU: PIC 16F648A
' Cristal: 4 Mhz
' 1- Servo Futaba S3003 conectado a PORTB.0
'*******************************************************************************

dim Servo as byte 'Variable que lleva la posicion del servo

'Sub-rutina para generar pulsos a los servos 0-255
Sub procedure Pulsout(dim byref Puerto as byte,dim Pin as byte,dim Pos as Byte)
Setbit(Puerto,Pin)
Delay_Cyc(Pos)
Clearbit(Puerto,Pin)
End sub

Main:
INTCON = 0 'Desabilita las interrupciones

TRISB.0 = 0 'Salida del servo
PORTB = 0 'Establecemos a 0 el valor del puertoB

Servo = 30 'minimo del servo

While true
Pulsout(PORTB,0,Servo) 'Enviamos el tren de pulsos para el servo
Delay_ms(18)

If Servo < 240 then Inc(Servo) Else Servo=30 End if 'Contador de posicion
Delay_ms(30)
wend

End.
Para poder hacer trabajar este codigo a una velocidad de clock de 8Mhz es posible añadirle una segunda linea de retraso en el Sub que genera el pulso, tal y como se muestra a continuacion.
Sub procedure Pulsout(dim byref Puerto as byte,dim Pin as byte,dim Pos as Byte)  
Setbit(Puerto,Pin)
Delay_Cyc(Pos)
Delay_Cyc(Pos) 'Repeticion
Clearbit(Puerto,Pin)
End sub

 

Última actualización el Jueves, 07 de Mayo de 2009 22:10  
English Spanish