Sei in: Home : Interessi : Robotica : Attuatori

Attuatori

Gli attuatori sono i dispositivi comandati dal controllore, per far compiere al robot le azioni per il quale è stato destinato.

Servocomandi

I servi R/C per uso hobbistico stanno diventando uno dei mezzi più popolari per applicazioni mobili controllate da computer. I servi di tipo hobbistico furono originariamente progettati e venduti come attuatori per il controllo di meccanismi di modelli radiocontrollati (aerei, automobili,navi, ecc.).
I servi richiedono una alimentazione elettrica e segnali di posizione per operare. I servi richiedono tipicamente una tensione che va da 4.8 VDC a 6.5 VDC. Gli assorbimenti di corrente sono altamente variabili. Per maggiori dettagli riguardo i parametri richiesti di tensione e corrente è necessario far riferimento alle specifiche dei costruttori.
I segnali di posizione normalmente consistono in un impulso positivo che varia da 1ms a 2ms ripetuto ad una frequenza di 50Hz. Un esempio di questo segnale e del movimento risultante del servo possono essere visti in fig.1.
attuatori1
Il range di ampiezza dell'impulsopuò variare dipendentemente dalla marca e dal modello del servo. Alcuni servi hanno un movimento molto ampio e possono richiedere impulsi più stretti di 0.5ms o più larghi di 2.2ms per ottenere tutta l'amoiezza del movimento. Ma attenzione a non superare i limiti di sicurezza. A seconda del servo, se un impulso è troppo largo o troppo stretto, si potrebbe forzare il servo contro i fermi interni, bloccando il motore e danneggiando gli ingranaggi.
La frequenza degli impulsi può variare alquanto. Se la frequenza di ripetizione è troppo lenta o troppo veloce, il servo può produrre un ronzio a bassa frequenza.Se questo dovesse succedere, provate a girare il perno di uscita. Se il rumore diventa più grave allora la frequenza degli impulsi è troppo bassa. Altrimenti è troppo alta.
I terminali rosso e nero del servo sono di solito usati per l'alimentazione (positivo e massa, rispettivamente). Il filo bianco (o a volte il giallo) è il filo del segnale.
attuatori2
Controllare i Servi con il BasicX
Questa nota applicativa descrive metodi sia hardware sia software per interfacciare servi R/C per uso hobbistico al chip BasicX. Connessione del servo:

La figura 2 rappresenta un metodo suggerito per interfacciare il servo l BasicX.
Notare che in questo esempio il servo è alimentato da una batteria separata. I servi tipicamente assorbono molta più corrente di quella che la scheda di sviluppo del BasicX possa fornire. E' importante notare che entrambe le masse (batteria e BasicX) sono unite insieme, altrimenti il servo potrebbe non operare in maniera appropriata.

Codice di esempio:
Per mezzo della chiamata PulseOut, il BasicX può generare i segnali di posizione richiesti. A seconda di come viene scritto il programma, possono essere comandati più di 10 servi con una sola BasicX. Ecco un esempio per comandare un singolo servo:

Sub Main()

' Questo programma muove un servo nella sua posizione centrale.

Const ServoPin As Byte = 15

Do
' Genera un impulso positivo di 1.5ms
Call PulseOut(ServoPin, 0.0015, 1)

' Questo produce una frequenza di ripetizione di circa 50Hz.
Call Delay(0.02)
Loop

End Sub

Attenzione: se si usa PulseOut per generare un segnale per il servo, il real time clock può perdere tempo a meno che l'impulso non sia più piccolo del periodo del real time clock (circa 1.94ms).



Programma di esempio:

'-------------------------------------------------------------------------------
Sub Main()

' This program exercises a servo by moving it back and forth through its
' position range, at about 1 cycle every 5 seconds.

Const ServoPin As Byte = 15

Const NSteps As Integer = 100

' This is to generate a refresh rate of roughly 50 Hz.
Const RefreshPeriod As Single = 0.02

Dim i As Integer, Position As Single

Do
' Forward direction.
For i = 0 To NSteps

' Nondimensionalize position.
Position = CSng(i) / CSng(NSteps)

Call MoveServo(ServoPin, Position)

Call Delay(RefreshPeriod)
Next

' Reverse direction.
For i = NSteps To 0 Step -1

' Nondimensionalize position.
Position = CSng(i) / CSng(NSteps)

Call MoveServo(ServoPin, Position)

Call Delay(RefreshPeriod)
Next
Loop
End Sub
'-------------------------------------------------------------------------------
Public Sub MoveServo( _
ByVal ServoPin As Byte, _
ByVal Position As Single)
' Moves a servo by sending a single pulse. The position is a nondimensional
' value in range 0.0 to 1.0.
Dim PulseWidth As Single
' Translate position to pulse width. Resulting range is 1.0 to 2.0 ms,
' centered at 1.5 ms.
PulseWidth = 0.001 + (0.001 * Position)
' Generate a high-going pulse on the servo pin.
Call PulseOut(ServoPin, PulseWidth, 1)
End Sub
'-------------------------------------------------------------------------------