Newsgroup: it.hobby.elettronica.digitale
Titolo: servi e pic

sto usando il pbasic della parallax  e cercavo il modo di
far tornare all'avvio del programma (caricato nell ram del microprocessore
pic) i servi a una posizione iniziziale predefinita.
come fare?
--
Visita i miei siti :
http://members.xoom.virgilio.it/costarella/
http://members.xoom.virgilio.it/acsoftware/
in costruzione
 ( 
http://members.xoom.virgilio.it/acsoftware2k/
 )

 come fare?
All'avvio invii gli impulsi per metterlo nella posizione corretta, poi
esegui il resto del programma... non vedo il problema.
--
...:::Zmaster:::...
zmaste...@tin.it
www.zmaster.tk

e come  si fa?
sintassi:
pulsout (N° porta, <durata impulso>)
che numero metto? ho fatto varie prova...ma il sevo non mi torna dove
voglio...
se mi puoi aiutare ti ringrazio molto.

 se mi puoi aiutare ti ringrazio molto.
i servi vengono pilotati con treni di impulsi che normalmente variano tra 1
ms e 2 ms. per valori precisi scaricati il datasheet del servo che ti serve
(...) e troverai i parametri corretti. scegli poi la posizione di avvio e
calcola quanto lungo deve essere l'impulso e inseriscilo nella funzione di
cui sopra. il gioco è fatto!
ciao,
Marco

a parte tutto il resto, questo servo deve andare avanti di + - 30° rispetto
a tale posizione
predefinita,non puo fare un giro completo...
GWServo SO3N STD
Type - S03 Voltage - 4.8 - 6.0v Size - 39.5 x 20 x 35.6mm Weight - 42g Speed
(Sec/60`) - 0.23 Torque - 3.4kg-cm
Ball Bearings - None
non ci siono altre informazioni!!! sigh!


prova a vedere se riesci a rintracciare qualche informazione in più qui:
http://www.kronosrobotics.com/an116/GAN116_gws.shtml
Marco

 esegui il resto del programma... non vedo il problema.
Per pilotare un servo motore devi generare un segnale di tipo PWM.
Normalmente tale segnale ha un periodo globale di 20msec e un impulso a 5V
della durata variabile tra 1msec e 2msec.
1msec -> servo in posizione iniziale
2msec -> servo in posizione finale
1.5msec -> servo in posizione centrale
Se misuri l'angolo di apertura del servo e dividi 1msec per tale valore
trovi quanti microsec ti servono per muoverti di un grado, chiamiamo tale
valore dT.
Per portare il servo in posizione x devi dunque dare un impulso di durata
(1+x*dT)msec e ripeterlo ogni 20msec finché il servo non è in posizione.
Ricorda che per mantenere il motore nella posizione scelta devi continuare a
ripetere il segnale!
E' più facile a farsi che a spiegarlo.
Se non ricordo male il pbasic ti permette di inviare impulsi con precisione
al msec, quindi non riuscirai a pilotare con molta precisione il motore.
Il motore che ho usato io richiede (a conti fatti) 11microsec per poter fare
un passo di un grado, quindi ogni 1msec il motore compie circa 10° di
movimento!
Se ti serve aiuto più specifico scrivimi in privato, ti mando il capitolo
della mia tesi che descrive il pilotaggio.....
Ciao
W@lt

 della mia tesi che descrive il pilotaggio.....
----------------------------------------------------------------------------
-
Sei molto gentile e disponibile;
dall' Help del Pbasic :
a.. Pin is a variable/constant/expression* (0 - 15) that specifies the I/O
pin to use. This pin will be set to output mode.
a.. Duration is a variable/constant/expression* (0 - 65535) that specifies
the duration of the pulse. The unit of time for Duration is described below.
a.. Quick Facts
        BS1 BS2 and BS2e BS2sx BS2p BS2pe
      Units in Duration 10 µs 2 µs 0.8 µs 0.75 µs 1.88 µs
      Maximum pulse width 655.35 ms 131.07 ms 52.428 ms 49.151 ms 123.60 ms
io dovrei essere -dai vari esempi che ho- nella colonna BS2p quindi un
impulso dura 0,75us
1500/0,75 = 2000 di "duration" ?
Again:
  PULSOUT 13,2000
GOTO Again
e il servo sta fermo nella sua posizione centrale?
oppure basta dirglielo una volta sola:
PULSOUT 13,2000  e lui torna?(non credo)
(sfiga:si sono scaricate le pile non posso provare ora!!!)
grazie ancora

movimento!
???
Spero che 'ste cose tu non le scriva nella tesi ...
SB
---------------------------------------------------
togli i caratteri accentati per rispondere via mail

 Spero che 'ste cose tu non le scriva nella tesi ...
In effetti... :)
--
...:::Zmaster:::...
zmaster.adsl[ANTISPAMSYSTEM]@
tin.it
www.zmaster.tk

 PULSOUT 13,2000  e lui torna?(non credo)
allora, la duration dipende appunto dal tipo di basic stamp (il mio era un
BS2)
l'impulso dei mandarlo ogni 20 ms, quindi devi fare "pause 20" tra un
pulsout e l'altro.
ti posto il codice che ho scritto per fare una semplicissima prova, in
pratica fa girare il servo in 4 posizioni.
nota che la duration devi cambiarla se il tuo è un BS2p:
'{$STAMP BS2}
pin_servo  CON 12
i   VAR Word
again:
for i = 0 to 50 step 1
pulsout pin_servo, 300
pause 20
next
for i = 0 to 50 step 1
pulsout pin_servo, 650
pause 20
next
for i = 0 to 50 step 1
pulsout pin_servo, 1000
pause 20
next
for i = 0 to 50 step 1
pulsout pin_servo, 650
pause 20
next
goto again
