lunedì 25 gennaio 2010

Servo controller con Pic18F su i2c (parte 2)

E' giunto il momento di dettagliare il protocollo di comando del controller che, come indicato nel titolo, è basato su i2c (se non hai letto la precedente parte clicca qui).

Di seguito i comandi inviabili (ovviamente ogni byte comando va preceduto dal byte address i2c per poter essere ricevuto):

SetServoPosition
Posiziona il servo connesso al canale specificato di n gradi a destra o a sinistra rispetto alla posizione centrale. Alla ricezione di questo comando viene automaticamente abilitata la generazione del segnale di pilotaggio sul canale relativo.
Richiede l'invio di 2 byte: il byte comando e il byte parametro che indica la posizione in gradi da 0 a 90.
Il bit DIR rappresenta la direzione di spostamento: 1 a sinistra, 0 a destra.
I bit CH rappresentano il canale selezionato: da 000 (0) a 111 (7).
Cmd byte
Param byte
1
1
0
0
DIR
CH
CH
CH
0
X
X
X
X
X
X
X


AdjustServoCentralPosition
Regola finemente la posizione centrale del servo connesso al canale specificato.
Richiede l'invio di 2 byte: il byte comando e il byte parametro che indica l'offset da 0 a 15.
Il bit OFS indica la direzione vero la quale applicare l'offset: 1 verso sinistra, 0 verso destra.
I bit CH rappresentano il canale selezionato: da 000 (0) a 111 (7).
Cmd byte
Param byte
1
1
0
1
OFS
CH
CH
CH
0
0
0
0
X
X
X
X
Il valore ideale va ricavato sperimentalmente e varia da servo a servo. Per effettuare la regolazione inviate al controller il comando SetServoPosition su 0 gradi in modo da posizionare il servo al centro. Consiglio poi di etichettare il servo con il valore di trimming ricavato in modo da non dover ripetere l'operazione in futuro.
Attenzione: ogni incremento del valore di offset rappresenta 4uSec in +/- di aggiustamento del segnale di pilotaggio e quindi valori troppo elevati potrebbero causare problemi di mancato stop della rotazione agli angoli estremi.


SetServoOutputState
Setta lo stato del canale specificato permettendo di abilitare o disabilitare la generazione del segnale.
Richiede l'invio del solo byte comando.
Il bit STS indica lo stato del canale: 1 abilitato, 0 disabilitato.
I bit CH rappresentano il canale selezionato: da 000 (0) a 111 (7).
Cmd byte
1
0
0
0
STS
CH
CH
CH


ResetAll
Resetta il controller allo stato iniziale disattivando tutti i canali e reimpostando i valori di trimming centrale a 0.
Richiede l'invio del solo byte comando.
Cmd byte
1
0
1
1
0
0
0
0

Questo è quanto andremo ad implementare nella logica del controller. Posso anticiparvi che il firmware che gestirà tale logica sarà facilmente adattabile ad ogni PIC della serie 18F che disponga del modulo i2c hardware (in quanto non lo emulerò via software).

Stay tuned!
ap

NB: l'autore non risponde di eventuali danni causati da omissioni, inesattezze e errori eventualmente presenti nell'articolo pubblicato.

1 commento :

  1. Un'ottima spiegazione da voi. Dopo di che, ho cercato per un bel po '. La ringrazio per questo.

    RispondiElimina