Autor Tema: manejo de servo FP-S148 con pic 16f628a  (Leído 3301 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ELECTRONCANO

  • PIC10
  • *
  • Mensajes: 2
manejo de servo FP-S148 con pic 16f628a
« en: 21 de Mayo de 2010, 14:56:06 »
Hola Amigos:     :mrgreen: :mrgreen:

Estoy intentando desarrollar un programa con el pic 16f628a para manejar un servo FUTABA FP-S148, pero no he logrado hacerlo funcionar correctamente. Baje un programa de internet para un 16f877 y lo he estado modificando para el 16f628 pero lo maximo qie he conseguido es un movimiento erratico del servo; la idea es que a travez de 3 pulsadores se pueda seleccionar el angulo de posicion del servo es decir 0º, 90º o 180º, el manejo de los pulsadores y el servo lo estoy haciendo por el PORTA del pic (0, 1, 2 y 3) y las rutinas de tiempo con el TMR1, adjunto el programa y agradezco en lo que me puedan colaborar. Gracias.

;Prueba de Servo Motor TowerPro SG-5010
;usando PWM T1=0.9ms, T2=1.5ms, T3=2.1ms, T=20ms f=50Hz
;El servomotor gira a la posición 0 = 0° luego gira a
;la posición 1 = 90°, luego gira a la posición 2 =
;180° por último regresa a la posición 1, esto se repite
;continuamente. El programa se inicia al presionar el pulsador
;ubicado en el pin RC5.
   LIST    P=16F628A
   INCLUDE<P16F628A.INC>
   __CONFIG   _CP_OFF & _WDT_OFF & _LVP_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF
    RADIX   hex

#DEFINE Bank0    bcf   STATUS,RP0   ; Fija banco 0 de la memoria
#DEFINE Bank1   bsf   STATUS,RP0   ; Fija banco 1 de la memoria

CUENTA   EQU   20H   ;Variable CUENTA

   goto   main
   ORG   0004H
main
;******************************************************************
;*************************  CONFIGURACION  ************************
;******************************************************************
;Habilito y configuro TMR1
;TMR1 se encargará de generar los pulsos
   Bank1
   movlw   B'00001110'   ;RA0:Salida y RA1, RA2, RA3: Entrada
   movwf   PORTA   ;RA0:PWM y RA1:Pulsador
   Bank0
   movlw    .7   ; deshabilita comparadores. Esto es
   movwf    CMCON   ; algo importante en el PIC 16F628A

   movlw   B'11010001'   ;T1CKPS1=0,T1CKPS0=1; Pre:x2/TMR1 Temp
   movwf   T1CON
   clrf   PORTA   ;Limpio Puerto A
   clrf   CUENTA   ;Reinicio Contador
;******************************************************************
;Espera que se presione y suelte el pulsador ubicado en RC5

   btfss   PORTA,1
   call   Posicion_0
   btfss   PORTA,2
   call   Posicion_1
   btfss   PORTA,3
   call   Posicion_2
   goto   $-6
;Movemos el servomotor haciendo uso de rutinas
;REPITE
;   call   Posicion_0   ;Mueve el servomotor a la posicion 0°
;   call   Posicion_1   ;Mueve el servomotor a la posicion 90°
;   call   Posicion_2   ;Mueve el servomotor a la posicion 180°
;   call   Posicion_1   ;Mueve el servomotor a la posicion 90°
;   goto   REPITE
;******************************************************************
;***************************  RUTINAS  ****************************
;******************************************************************
;Mueve el Servomotor a su posición inicial, Angulo = 0°
Posicion_0
   movlw   .50
   movwf   CUENTA   ;CUENTA = 50
señal_1
   bsf   PORTA,0   ;Señal en alto
   call   ret_0_9ms   ;durante 0.9ms
   bcf   PORTA,0   ;Señal en bajo
   call   ret_19_1ms   ;durante 19.1ms para completar los 20ms
   decfsz   CUENTA   ;CUENTA = CUENTA - 1, CUENTA=0?
   goto   señal_1   ;no --> repetimos la señal
   clrf   CUENTA   ;si --> reiniciamos CUENTA y regresamos
   return
;Mueve el Servomotor a su segunda posición, Angulo = 90°
Posicion_1
   movlw   .50
   movwf   CUENTA   ;CUENTA = 50
señal_2
   bsf   PORTA,0   ;Señal en alto
   call   ret_1_5ms   ;durante 1.5ms
   bcf   PORTA,0   ;Señal en bajo
   call   ret_18_5ms   ;durante 18.5ms para completar los 20ms
   decfsz   CUENTA   ;CUENTA = CUENTA - 1, CUENTA=0?
   goto   señal_2   ;no --> repetimos la señal
   clrf   CUENTA   ;si --> reiniciamos CUENTA y regresamos
   return
;Mueve el Servomotor a su tercera posición, Angulo = 180°
Posicion_2
   movlw   .50
   movwf   CUENTA   ;CUENTA = 50
señal_3
   bsf   PORTA,0   ;Señal en alto
   call   ret_2_1ms   ;durante 2.1ms
   bcf   PORTA,0   ;Señal en bajo
   call   ret_17_9ms   ;durante 17.9ms para completar los 20ms
   decfsz   CUENTA   ;CUENTA = CUENTA - 1, CUENTA=0?
   goto   señal_3   ;no --> repetimos la señal
   clrf   CUENTA   ;si --> reiniciamos CUENTA y regresamos
   return
;******************************************************************
;**************************  RETARDOS  ****************************
;******************************************************************
;Retardo de 0.9ms
ret_0_9ms
   movlw   0x36
   movwf   TMR1L
   movlw   0xF7
   movwf   TMR1H
   btfss   PIR1,TMR1IF
   goto   $-1
   bcf   PIR1,TMR1IF
   return
;Retardo de 1.5ms
ret_1_5ms
   movlw   0x5A
   movwf   TMR1L
   movlw   0xF1
   movwf   TMR1H
   btfss   PIR1,TMR1IF
   goto   $-1
   bcf   PIR1,TMR1IF
   return
;Retardo de 2.1ms
ret_2_1ms
   movlw   0x7E
   movwf   TMR1L
   movlw   0xEB
   movwf   TMR1H
   btfss   PIR1,TMR1IF
   goto   $-1
   bcf   PIR1,TMR1IF
   return
;Retardo de 19.1ms
ret_19_1ms
   movlw   0x7A
   movwf   TMR1L
   movlw   0x45
   movwf   TMR1H
   btfss   PIR1,TMR1IF
   goto   $-1
   bcf   PIR1,TMR1IF
   return
;Retardo de 18.5ms
ret_18_5ms
   movlw   0x56
   movwf   TMR1L
   movlw   0x4B
   movwf   TMR1H
   btfss   PIR1,TMR1IF
   goto   $-1
   bcf   PIR1,TMR1IF
   return
;Retardo de 17.9ms
ret_17_9ms
   movlw   0x32
   movwf   TMR1L
   movlw   0x51
   movwf   TMR1H
   btfss   PIR1,TMR1IF
   goto   $-1
   bcf   PIR1,TMR1IF
   return

   END

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: manejo de servo FP-S148 con pic 16f628a
« Respuesta #1 en: 13 de Junio de 2010, 06:41:54 »
Creo que tu problema esta aqui, las demoras las tienes hechas para 20Mh pero el clock interno del 16f628 funciona a 4Mh por lo que demoran 5 veces mas. Poniendole un clock externo de 20Mh o haciendo las rutinas para 4Mh te deberia ir bien.


• Internal and external oscillator options:
- Precision internal 4 MHz oscillator factory
calibrated to ±1%
- Low-power internal 48 kHz oscillator
- External Oscillator support for crystals and
resonators


 

anything