Autor Tema: mi servo no se esta quieto o si...  (Leído 2413 veces)

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

Desconectado peyutron1

  • PIC10
  • *
  • Mensajes: 27
    • Infotronikblog
mi servo no se esta quieto o si...
« en: 28 de Septiembre de 2009, 09:43:52 »
Buenas!!
llevo todo el dia probando para poder parar un servo en una posicion y no hay manera estoy utilizando este codigo
Código: [Seleccionar]

' servo que se mueve de izquierda a derecha

ser var portb.0    'servo en el B0
pw var byte
pw = 150

derecha:
    pulsout ser,pw
    pause 18
    pw = pw + 1
    if pw > 220 then izquierda
    goto derecha
izquierda:
    pulsout ser,pw
    pause 18
    pw = pw - 1
    if pw < 80 then derecha
    goto izquierda
 end
pero no hay manera he intercalado "pauses" por todos los sitios y no hay manera de que se este quieto en un lado,va dando saltitos sin ton ni son. Mi intencion esque haga un barrido y se detenga en la posicion mas a la izquierda durante 5seg y luego valla otra vez a la derecha hasta el final y se detenga otros 5 seg. una ayudita?? Gracias de antemano
« Última modificación: 11 de Octubre de 2009, 10:49:29 por peyutron1 »

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: mi servo no se esta quieto!!
« Respuesta #1 en: 28 de Septiembre de 2009, 12:51:57 »
Para conseguir que se estabilice, tienes que mandar CONTÍNUAMENTE una señal PWM con un tiempo en alto determinado.

Mira:
http://slalen.ifastnet.com/index.php/servomotores.html
http://slalen.ifastnet.com/index.php/futaba-y-los-pics.html

Si haces un pause, dejas de mandar la señal con lo que el servo se posiciona en su origen.

Desconectado Burrillo

  • PIC10
  • *
  • Mensajes: 5
Re: mi servo no se esta quieto!!
« Respuesta #2 en: 02 de Octubre de 2009, 21:32:34 »
mmmm, para empezar no inicializas el puerto b con un pulso en 0, tendria que ser algo así:

Código: [Seleccionar]
derecha:
   
    PORTB = 0         
    pulsout ser,pw
    pause 18

Esta medio raro como estas variando el "pw", igual y podria ser algo así:

Código: [Seleccionar]
derecha:
PORTB = 0
for pw = 80 to 221
     
     pw = pw + 1
     pulsout ser,pw
   
if pw > 220 then izquierda

NEXT pw


Y tal vez para hacer lo que dices del retardo podrias hacer un for anidado el la subrutina "izquierda".
Es lo que se me ocurre, espero te sirva.
"The walls between art and engineering exist only in our minds"

Desconectado peyutron1

  • PIC10
  • *
  • Mensajes: 27
    • Infotronikblog
Re: mi servo no se esta quieto!!
« Respuesta #3 en: 11 de Octubre de 2009, 10:48:28 »
buenas! he estado un poco liado y no he podido responder antes, he hecho esto :
Código: [Seleccionar]
' servo que se mueve de izquierda a derecha

ser var portb.0    'servo en el B0
pw var byte
pw = 150
ser = 0
derecha:
    ser = 0
    for pw = 80 to 220
    pulsout ser,pw
    pause 18
    pw = pw + 1
    if pw > 220 then izquierda
    next pw
    goto derecha
izquierda:
    ser = 0
    for pw = 220 to 80
    pulsout ser,pw
    pause 18
    pw = pw - 1
    if pw < 80 then derecha
    next pw
    goto izquierda
 end
pero solo va hacia un lado y ahi se keda... bueno en fin probando mas cosas probe esto otro,
Código: [Seleccionar]
ser var portb.0     ;servo en el B0
forw var portb.1   ;motor en el B1>
back var portb.2  ;motor en el B2> este motor es controlado por un puente H
p1 var porta.0      ;pulsador en el puerto A0
p2 var porta.1      ;pulsador en el puerto A1
b1 var byte
frec var byte

b1 = 150 ; variable  para poner el servo en posicion central
frec = 18

start:
low back                            ;pone en nivel bajo el puerto B2
pulsout ser, b1                   ; pone el servo en posicion central
pwm forw,frec,30                ;el motoro se mueve hacia adelante
    if p1 = 0 then izquierda   ; si se pulsa p1 ir a etiqueta izquierda
    if p2 = 0 then derecha    ;si se pulsa p2 ir a etiqueta derecha
goto start                          ; repite start

izquierda:
    high back                       ;pone marcha atras el motor
    pulsout ser, b1                ;gira hacia la izquierda hasta llegar al tope 
    pause 18
    b1 = b1 + 1
    if b1 > 210 then start      ; cuando llega al tope pasa a la etiqueta start
    goto izquierda                 ; repite la etiqueta hasta que if -- then sea cierto
   

derecha:
    high back
    pulsout ser, b1
    pause 18
    b1 = b1 - 1
    if b1 < 80 then start
    goto derecha
end

vale pues funciona todo menos que vuelva a su posicion central, he intentado hacer una etiqueta llamada start y otra forward
Código: [Seleccionar]
start:
pulsout ser, b1
pause 18
b1 = b1
if b1 = b1 then forward
goto start


forward:   
    low bck
    pwm forw,frec,30
    if p1 = 0 then izquierda
    if p2 = 0 then derecha
goto forward
pero me sigue pasando lo mismo, cuando llega a la izquierda o a la derecha ahi se queda... vuelve a ir hacia delante pero el servo no recupera su posicion central, he provado con for x = 1 to 10 para este ultimo "start" pero nada o peor...
se que esto se supone que es lo mas sencillo del mundo... pero no hay manera...alguna sugerencia?? que estoy haciendo mal?