Autor Tema: Futaba 3003 y PIC16F877  (Leído 8290 veces)

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

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Futaba 3003 y PIC16F877
« en: 19 de Julio de 2007, 06:55:59 »
Hola!!!
Cuando vi el robot ápodo del compañero AKENAFAB quise construirme uno :mrgreen:

Al empezar la programación vi que los servomotores se controlan por PWM de una manera muy extraña. Los futaba 3003, que son los que utilizo, al alimentar el terminal de control con una onda de 20ms de periodo y 0,3ms en alto, se posiciona en un extremo; y si se cambia el tiempo en alto por 2,3ms se coloca en el extremo opuesto. Cualquier señal intermedia gira hasta una posición relativa intermedia.

Bueno, después de aprenderme la teoría llegó la hora de aplicarla a la práctica, para ello he utilizado el PIC16F877 (aunque es muy grande y sobra micro por todas partes) y ensamblador:

Código: [Seleccionar]
LIST P=16F877
__config h'3F39' ;configuración de los fuses del uC

;---------------------------------------------------------------------
;ETIQUETAS
;---------------------------------------------------------------------
PDel0 EQU 0x20 ;registro del retardo
PDel1 EQU 0x21 ;registro del retardo
PDel2 EQU 0x22 ;registro del retardo
Dato EQU 0x23 ;dato del PWM alto
Dato2 EQU 0x24 ;dato del PWM bajo
ESTADO EQU 0x03 ;registro específico
TRISA EQU 0x05 ;registro específico
TRISB EQU 0x06 ;registro específico
TRISC EQU 0x07

;--------------------------------------------------------------------
;PROGRAMA
;--------------------------------------------------------------------                                   
ORG 0 ;PARA COMENZAR EN LA POSICIÓN CERO DE LA MEMORIA

bsf ESTADO,5 ;PASA AL BANCO 1
movlw 0x00 ;LLEVA 'FF' AL ACUMULADOR
movwf TRISB ;PROGRAMA LA PUERTA B EN salida
movwf TRISA ;programa la puerta C en salida
movlw 0xC7 ;LLEVA EL DATO 'C7' AL ACUMULADOR
movwf TRISC ;PROGRAMA LA PUERTA C en entrada
bcf ESTADO,5
clrf TRISB ;BORRA LA PUERTA B 
clrf CCP

Leer movf TRISC,0 ;lee el PuertoC
movwf Dato ;guarda el resultado en dato
btfsc Dato,6
bsf Dato,3
btfsc Dato,7
bsf Dato,4
bcf Dato,6
bcf Dato,7
movf Dato,0 ;guarda el contenido de dato en el acumulador
addlw 0x03 ;suma 3, ya que el ángulo 0 tiene un tiempo en alto de 0,3ms
movwf Dato
sublw .200 ;resta a 200 el resultado de la suma anterior
movwf Dato2 ;para calcular el tiempo en bajo
decf Dato2,1 ;porque el primer ciclo de 100us se hace a parte para compensar

PWM     bsf TRISB, 3
movf Dato,0
call Ret100
bcf TRISB,3
movf Dato2,0
call Ret100

movlw 0x1B ;retardo para conseguir el periodo de 20ms
movwf PDel0 ;en el bucle infinito "Leer"
ret decfsz PDel0,1
goto ret
movwf PDel0
movwf PDel0
goto Leer

;-------------------------------------------------------------
; Ret 100us
;-------------------------------------------------------------
Ret100  movwf PDel1
movlw 0x1E ; set numero de repeticion
        movwf PDel0
PLoop0  decfsz PDel0, 1 ; es el tiempo 0?
        goto PLoop0 ; no, loop
decfsz PDel1, 1
goto loop
        return
loop movlw  0x20 ; set numero de repetición
          movwf PDel0
  decfsz  PDel0, 1 ; es el tiempo 0?
          goto    PLoop0 ; no, loop
End

La parte del programa:

Código: [Seleccionar]
movf TRISC,0 ;lee el PuertoC
movwf Dato ;guarda el resultado en dato
btfsc Dato,6
bsf Dato,3
btfsc Dato,7
bsf Dato,4
bcf Dato,6
bcf Dato,7
movf Dato,0 ;guarda el contenido de dato en el acumulador

Se debe a que reutilice una placa y, como podréis ver en el esquema, lleva conmutadores en los terminales RC0, RC1, RC2, RC6 y RC7.

El retardo es bastante fiable, la parte:

Código: [Seleccionar]
loop movlw 0x20 ; set numero de repetición
        movwf PDel0
decfsz PDel0, 1 ; es el tiempo 0?
        goto PLoop0 ; no, loop

La realicé debido a que al hacer un retardo mayor de 100us, no se lograba con exactitud, por eso, el ciclo de retardo (0x20) es mayor que en el anterior (0x1E).

Por último, aparte del código, adjunto aqui:
- el esquema en pdf
- el esquema en proteus
- una tabla con los ángulos y sus tiempos en alto y en bajo

Espero que os sea de ayuda!!!!

PD: los ángulos que gira el servo con el programa, son los tiempos que no son números periódicos de la tabla. El oscilador es un Xtal de 4MHz

Un saludo

Desconectado mazingerZ

  • PIC10
  • *
  • Mensajes: 1
Re: Futaba 3003 y PIC16F877
« Respuesta #1 en: 19 de Julio de 2007, 18:40:23 »
Saludos a todos los de foro y en especial a slalen.
Voy con otra cosa
Jo Slalen que guevos le hechas, no has leido y ya lo has publicado. El lunes te veo.
jejejeje

Desconectado esamuelm

  • PIC10
  • *
  • Mensajes: 20
Re: Futaba 3003 y PIC16F877
« Respuesta #2 en: 02 de Agosto de 2007, 23:47:49 »
hi all  :shock: chevere el programa lo probé y funciona de maravillas pero como hago para controlar mas de 1 servomotor por ejemplo 8 servomotores (independientes) al mismo tiempo con el pic 16F877. en que parte del programa se tiene que hacer las respectivas modificaciones un saludo.

salu2  :P
hi all >.<!! salu2 Puno - Perú

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: Futaba 3003 y PIC16F877
« Respuesta #3 en: 03 de Agosto de 2007, 13:50:03 »
Es muy sencillo.

Conectas los terminales de control al mismo puerto, por ejemplo el PB
Luego sacas la rutina que tienen que llevar los motores y la diferencia de tiempos entre los distintos valores. Por ejemplo:
servo1: conectado al PB0 0.2ms
servo2: conectado al PB1 1.3ms
servo3: conectado al PB2 2,3ms

El primer dato en binario para mandar será 00000111 un tiempo de 0.2ms, el siguiente 00000110 un tiempo de 1.1ms, después 00000100 durante 1.2ms y por último 00000000 hasta completar los 20ms.

Un saludo!!!

Desconectado esamuelm

  • PIC10
  • *
  • Mensajes: 20
Re: Futaba 3003 y PIC16F877
« Respuesta #4 en: 03 de Agosto de 2007, 16:26:51 »
gracias por responder amigo Slalen bueno el proyecto en cual estoy trabajando es un exapodo con 12 servomotores y poder controlarlo con un pic 16F877 no se mucho sobre este pic se un poco (muy poco :mrgreen:) del 16f84a pero este creo q no me servirá mucho por eso estoy empezando a probar con el 16F877 y quería saber en que parte de tu programa tendría q modificarlo, tengo entendido que para -90º es 0.2ms que para 0º es 1.3ms y que para 90º es 2.3ms quiero trabajar con esos tres tiempos bueno el proyecto del exapodo lo encontré en:

http://www.geocities.com/viasc/mhex/mhex.html?20072#news

salu2

pd. gracias por la ayuda.
hi all >.<!! salu2 Puno - Perú

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: Futaba 3003 y PIC16F877
« Respuesta #5 en: 05 de Agosto de 2007, 13:55:32 »
Mira, tengo un ejemplo con 8 servos en este post
Es un robot ápodo.

Suerte!!!!!

Desconectado esamuelm

  • PIC10
  • *
  • Mensajes: 20
Re: Futaba 3003 y PIC16F877
« Respuesta #6 en: 06 de Agosto de 2007, 20:00:12 »
muchas gracias por la ayuda, ya habia visto ese post por cierto cuando subes las fotos y los vídeos del apodo  :P

salu2!!!
hi all >.<!! salu2 Puno - Perú

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: Futaba 3003 y PIC16F877
« Respuesta #7 en: 07 de Agosto de 2007, 06:56:15 »
Buenas!!!

He colgado videos en youtube. Te dejo los enlaces:
Movimiento cutre
Movimiento decente
Movimiento cobra

Ahora me estoy haciendo una página web, espero terminarla pronto. Ahí encontrarás fotos y videos y no se que más.

Ya me contarás como va tu robotin.

Un saludo!!!

Desconectado esamuelm

  • PIC10
  • *
  • Mensajes: 20
Re: Futaba 3003 y PIC16F877
« Respuesta #8 en: 07 de Agosto de 2007, 22:05:04 »
ya lo probé con 12 servomotores y trabaja de maravillas  :-)

Código: [Seleccionar]
LIST P=16F877
__config h'3F39'
;---------------------------------------------------------------------
;ETIQUETAS
;---------------------------------------------------------------------
PDel0 EQU 0x20 ;registro del retardo
PDel1 EQU 0x21 ;registro del retardo
Repet EQU 0x22 ;nº de repeticiones de cada señal
Dato EQU 0x23 ;dato del PWM alto
Dato2 EQU 0x24 ;dato del PWM bajo
ESTADO EQU 0x03 ;REGISTRO ESPECÍFICO
TRISA EQU 0x05 ;REGISTRO ESPECÍFICO
TRISB EQU 0x06 ;REGISTRO ESPECÍFICO
TRISC EQU 0x07
TRISD EQU 0x08

;--------------------------------------------------------------------
;PROGRAMA
;--------------------------------------------------------------------                                   
ORG 0 ;PARA COMENZAR EN LA POSICIÓN CERO DE LA MEMORIA

bsf ESTADO,5 ;PASA AL BANCO 1
movlw 0x00 ;LLEVA 'FF' AL ACUMULADOR
movwf TRISB ;PROGRAMA LA PUERTA B EN salida
movwf TRISA ;programa la puerta C en salida
movwf TRISC ;PROGRAMA LA PUERTA C en entrada
movwf TRISD
bcf ESTADO,5
clrf TRISB ;BORRA LA PUERTA B 
clrf TRISD

Ciclo movlw 0x30 ;tiempo 1 seg
movwf Repet
Repe movlw 0xFF
movwf TRISB
movwf TRISD
movlw .10
call Ret100
movlw b'01010101'
movwf TRISB
movwf TRISD
movlw .8
call Ret100
clrf TRISB
clrf TRISD
movlw .181
call Ret100

movlw 0x1F ;retardo para conseguir el periodo de 20ms
movwf PDel0 ;en el bucle infinito "Leer"
ret decfsz PDel0,1
goto ret
movwf PDel0

decfsz Repet
goto Repe
movlw 0xFF ;retardo de 1us para compensar

movlw 0x30 ;tiempo 1 seg
movwf Repet
Repe2 movlw 0xFF
movwf TRISB
movwf TRISD
movlw .10
call Ret100
movlw b'10101010'
movwf TRISB
movwf TRISD
movlw .8
call Ret100
clrf TRISB
clrf TRISD
movlw .181
call Ret100

movlw 0x1F ;retardo para conseguir el periodo de 20ms
movwf PDel0 ;en el bucle infinito "Leer"
ret2 decfsz PDel0,1
goto ret2
movwf PDel0

decfsz Repet
goto Repe2

goto Ciclo

;-------------------------------------------------------------
; Ret 100us
;-------------------------------------------------------------
Ret100  movwf PDel1
movlw 0x1E ; set numero de repeticion
        movwf PDel0
PLoop0  decfsz PDel0, 1 ; es el tiempo 0?
        goto PLoop0 ; no, loop
decfsz PDel1, 1
goto loop
        return
loop movlw 0x20 ; set numero de repeticion
        movwf PDel0
decfsz PDel0, 1 ; es el tiempo 0?
        goto PLoop0 ; no, loop

End

Como veras amigo Slalen no le hice muchos cambios 8) y eso donde dice "tiempo 1 seg" no estoy seguro si realmente es 1 segundo  :? si encuentras alguna observación o si las pequeñas modificaciones estan erroneas hasmelas saber tu programa me ahorro mucho tiempo gracias de nuevo, espero acabarlo lo mas pronto posible el lio es q aun no me llegan los benditos servomotores para hacerle las pruebas xq  solo estoy simulando en el proteus  :x ....Suerte con la pagina web

salu2!!
hi all >.<!! salu2 Puno - Perú

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: Futaba 3003 y PIC16F877
« Respuesta #9 en: 08 de Agosto de 2007, 07:14:50 »
Buenas!!!

He probado tu programa y he visto que donde pones 1s en realidad son 960ms.
Los periodos están bien ya que el bucle se repite 48 veces y si divides el tiempo entre el número de veces son 20ms cada ciclo.

A ver si te llegan pronto los servos ya que lo mejor de esto es ver al bicho moverse!!!

Un saludo y Suerte!!!!

Desconectado esamuelm

  • PIC10
  • *
  • Mensajes: 20
Re: Futaba 3003 y PIC16F877
« Respuesta #10 en: 17 de Agosto de 2007, 18:36:15 »
hi all bueno aun no me llegan los servos ya que sin esos tampoco puedo hacer mucho sigo esperando  :lol: 960 ms  ok estaré publicando los avances que tenga, ahora estoy un poco mas ocupado con un microbot sumo el cual ya acabe pero que aun no me convence trabaja con un sonar SFR05  un CNY70 también un PIC 16F84A a 4Mhz y 2 servomotores.
la parte q no me convence es el peso ya que pesa 1.6Kg y de acuerdo a las bases del evento tiene que pesar 4Kg ni bien me llegue los servos retomare el exapodo una fotito de mi microbot sumo SASORI  :shock:



y las bases están en

http://www.epielectronica.net/olimpiadas/descarga.php

salu2
hi all >.<!! salu2 Puno - Perú

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Futaba 3003 y PIC16F877
« Respuesta #11 en: 17 de Agosto de 2007, 19:29:16 »
esamuelm, que lindo 'bicho' !!!  te felicito
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado esamuelm

  • PIC10
  • *
  • Mensajes: 20
Re: Futaba 3003 y PIC16F877
« Respuesta #12 en: 18 de Agosto de 2007, 19:14:20 »
Citar
esamuelm, que lindo 'bicho' !!!  te felicito
gracias amigo maunix :P bueno el problema del peso ya lo solucione, la única solución q encontré es ya no aumentarle y participar en exhibición  :? xq luego de aumentarle peso estoy hablando de unos 2.4Kg le genera problemas en el giro mejor lo dejo ahí y hago otro  8)

salu2

pd. disculpen por el offtpic  :lol:
hi all >.<!! salu2 Puno - Perú

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: Futaba 3003 y PIC16F877
« Respuesta #13 en: 19 de Agosto de 2007, 14:50:00 »
Hola!!
Como dice
esamuelm, que lindo 'bicho' !!!  te felicito

A ver si te llegan los servos que tengo ganas de ver el hexápodo en movimiento!!!

Un saludo

Desconectado esamuelm

  • PIC10
  • *
  • Mensajes: 20
Re: Futaba 3003 y PIC16F877
« Respuesta #14 en: 21 de Septiembre de 2007, 16:17:46 »
Dios!!! hasta que por fin llegaron  :-/ bueno aca pongo unas imágenes haber si alguien ya la uso antes, es q no puedo controlarlo :S HELP!


ahora podre continuar jeje primero tengo que lograr controlarlos espero publicar los avances lo mas pronto posible ya que también quiero verlo caminando :S
sus características:
weight:8.4g
Torque:4.8V 1.5kg-cm
Speed:4.8V 0.12sec/60°
Size(mm): 24×11×24

salu2
pd: disculpen si publique en un lugar equivocado  :mrgreen:
pd2: problema solucionado  :P
« Última modificación: 21 de Septiembre de 2007, 20:18:29 por esamuelm »
hi all >.<!! salu2 Puno - Perú