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

 

Registrati