Controllo di un servocomando analogico con il microcontrollore MSP430

Questo è l’inizio di un lavoro che mi propongo di sottoporvi periodicamente al concretizzarsi di ogni singola fase successiva.
Lo scopo finale è quello di telecomandare un oggetto, sia questo un modellino, un robot o altro sistema. In questo sito sono già presenti lavori concernenti telecomandi, citerò uno per tutti, il lavoro di Marcello consultabile nella sezione progetti.  Marcello, nel citato lavoro, utilizza quale console di comando un PC, io avrei invece preferito una scatola, magari alimentata a batteria e quindi mi sono proposto di creare una variante sul tema.
Si tratta quindi di generare dei segnali idonei al pilotaggio di servocomandi analogici, cito ad esempio uno tra i più noti, il Futaba 3003, ma oggi il mercato ne propone di tutti i tipi e dimensioni per soddisfare alle esigenze costruttive di ognuno.
Per comandare questi attuatori e  necessario generare un impulso variabile compreso tra 0,5 ms e 2,5ms con un periodo di ripetizione di 20 ms ovvero 50Hz. In questa prima fase di progetto si è scelto di adoperare una LaunchPad  con un microcontrollore MSP430G2553 collegata a tre potenziometri.


Figura 1: Scheda di sviluppo LaunchPad.

L’hardware per il controllo è piuttosto semplice, basta collegare i tre potenziometri tra massa e la tensione di alimentazione del micro, ed i rispettivi cursori collegati a tre pins del convertitore analogico digitale (ADC) del micro.

  • P1.3 (Analog 3, Potenziometro 1)
  • P1.4 (Analog 4, Potenziometro 2)
  • P1.5 (Analog 5, Potenziometro 3)

La ragione di tre potenziometri deriva solo dal fatto che con questo micro possiamo generare al massimo tre segnali PWM che utilizzeremo per pilotare i servocomandi. Il numero dei  segnali PWM generabili è in funzione del tipo e del numero dei pins del micro.  Con il modello dell'MSP430G2553 a 28 pins, invece della variante a 20 fornita sulla scheda LaunchPad, si possono ottenere quattro segnali PWM.  Due potenziometri potrebbero essere sostituiti da un Joystick a due assi. I potenziometri potrebbero essere di qualsiasi tipo e valore resistivo, ma occorre tener presente alcune cose; la prima è che i potenziometri, come detto, risultano essere in parallelo tra loro, bisogna quindi propendere per un valore elevato  ad esempio 100 Kohm, semplicemente per non sprecare energia derivante dalla corrente che vi circolerà. I potenziometri possono anche essere di valore diverso tra di loro poiché funzionano semplicemente come partitori di tensione di cui andremo a leggere il valore sul cursore. In ultimo è bene notare che devono essere del tipo lineare per avere una variazione lineare del comando.
Prima di montare i potenziometri è bene verificarne l’effettivo fine corsa, ossia che il cursore abbia resistenza residua zero da ambo le parti, questo al fine di ottenere una variazione completa tra il minimo e il massimo del segnale.

Il software di controllo ha il compito di generare dei segnali PWM con un periodo di 20 ms. Per far questo ho scelto si usare un clock a 1 MHz  per due ragioni, la prima è che questo è un valore di riferimento calibrato, la seconda è perché 20ms corrispondono a 20000 impulsi di clock. L’ampiezza dell’impulso è definita da un valore minimo di 0,5 ms, pari a 500 cicli di clock più il valore definito dal potenziometro, che vedremo oltre.
Il micro si trova normalmente in stato LPM0 ossia nello stato di minor consumo mantenendo pur sempre il clock SMCLK attivo. Allo scadere di un tempo definito dal WDT, attualmente circa 45 ms, si attiva leggendo in sequenza prima tutti  gli ADC e successivamente variando i  singoli Duty Cycle  per poter poi ritornare nello stato LPM0.
Il convertitore ADC è ha una risoluzione di 10 bit, per cui abbiamo una scaletta di 1023 possibili valori, diciamo 1000 valori che rappresentano la definizione del sistema per una variazione di 180° o 240° del servocomando. Il 1000 invece di 1023 lo otteniamo, se necessario, con una piccola resistenza lato positivo del potenziometro in quanto l’ADC lavora tra  0V e la tensione di alimentazione del micro.  Se il risultato della conversione è 1000 e lo moltiplichiamo per due (equivalente ad uno shift a sinistra di un bit), otteniamo 2000 che rappresentano gli impulsi di clock equivalenti a 2ms. Basterà quindi sommare il valore dell’ADC moltiplicato per due con il valore minimo per avere il nuovo valore con cui aggiornare il Duty Cycle.
Gli Impulsi dei PWM sono presenti in uscita sui pins :

  • P1.2 (PWM Servo 1)
  • P2.4 (PWM Servo 2)
  • P2.5 (PWM Servo 3)

Il file contenente il codice sorgente, scaricabile a fine articolo, è ampiamente commentato, per cui non dovrebbe presentare difficoltà.  

Un augurio di buon lavoro a coloro che fossero interessati

Autore: Paolo Salvagnini

 

Tipo File Scarica File Versione Ultimo Aggiornamento Descrizione

Formato File zip

Download 1.0 13 Marzo 2014 Codice sorgente

 

Bibliografia

 

Gravatar
Mauro Laurenti
RE: Controllo di un servocomando analogico con il microcontrollore MSP430
Diciamo che la risoluzione dell'encoder in generale non e' 1:1 ma con piu' giri puoi ottenere tutta la risoluzione desiderata.Saluti,Mauro
0
Gravatar
Marcello
Controllo di un servocomando analogico con il microcontrollor e MSP430
Ciao Paolo, scusa il ritardo nel risponderti ma sono incasinato con i preparativi per Officine Robotiche 2014... detto questo, nell'ottica di un progetto per un braccio meccanico, io resterei sui potenziomentri, ovvero joystick che aumentano proporzionalmen te la velocità del servo in funzione del loro spostamento... non credo che ci sia bisogno di spostamenti dell'ordine di decimi o centesimi di millimetro per un servo, però resta una mia idea che si può sempre rivedereMarcell o
0
Gravatar
Paolo
Controllo di un servocomando analogico con il microcontrollore MSP430
Il problema diventa la risoluzione del decoderCiao Paolo
0
Gravatar
Mauro Laurenti
RE: Controllo di un servocomando analogico con il microcontrollore MSP430
Direi che un servo valga l'altro....o forse non ho ben capito la domanda.Saluti,Mauro
0
Gravatar
Paolo
Controllo di un servocomando analogico con il microcontrollore MSP430
Domanda Se ci mettiamo un encoder, a parte un motore passo passo, che servo ci mettiamo?SalutiPaolo
0
Gravatar
Mauro Laurenti
RE: Controllo di un servocomando analogico con il microcontrollore MSP430
Effettivamente bisogna valutare i casi specifici. In alcuni casi puo´ tornare piu´ utile una soluzione piuttosto che l´altra.Saluti,Mauro
0
Gravatar
Paolo
Controllo di un servocomando analogico con il microcontrollore MSP430
@ Mauro & MarcelloIl problema è proprio nel tipo di controllo e se ha un significato. Se telecomandiamo un oggetto in movimento la mia impressione è che sia necessario uno slider o Joystick, che dir si voglia, è più veloce e si ha una sensazione cosa si fa. Qualora invece servisse un movimento lento (es. fresa, avanzamento del sensore per fare lo zero sul pezzo) l'encoder andrebbe certamente meglio, manca però lavisualizzazio ne di dove mi trovo, la potrei fare con una barra luminosa,ma si complica notevolmente la vita. Per questa ragione chiedevo se era di interesse implementare un encored, anche perchè il problema diventa: che servo adoperiamo?
0
Gravatar
Mauro Laurenti
RE: Controllo di un servocomando analogico con il microcontrollore MSP430
Onestamente, intromettendomi , preferisco gli encoder, visto che all'avvio del sistema si potrebbe sempre posizionare il Servo in una posizione centrale o di riferimento e considerare l'encoder in posizione nulla. Questi encoder non hanno molti impulsi ma si puo' far coincidere uno spostamento di 180 gradi del servo a piu' rotazioni dell'encoder.Saluti,Mauro
0
Gravatar
Paolo
Controllo di un servocomando analogico con il microcontrollore MSP430
Ciao al MarcelloMi fa piacere che il giocattolo ti piaccia.Domanda Se si sostituisse uno dei tre potenziometri con un encoder, uno di quelli che assomiglia a un trimmer, tanto per capirci, ne ho trovato uno in una scatola, non ho contato quanti impulsi fa per giro ma non importa, potrebbe essere secondo te di qualche utilità oppure è ancora meglio un bel potenziometro ?Ciao Paolo
0
Gravatar
Marcello
Controllo di un servocomando analogico con il microcontrollor e MSP430
Ciao Paoletto e scusa il ritardo nel risponderti... ho potuto fare la prova, brillantemente superata, solo oggi, con l'unico servo a disposizione che mi era rimasto. Inoltre ho dovuto attendere che TI mi inviasse due campioni gratuiti del G2553. C'è voluto tempo ma ne è valsa la pena.Grazie ancora, il tuo è un progetto che ritornerà utile a parecchie persone, me compreso.Marcello
0

You don`t have permission to comment here!

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login