Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

7
voti

Controllare un servocomando con un Pic

Indice

Introduzione

E' necessario innanzitutto fare una breve introduzione sul servocomando o servo.
Sono dei dispositivi usati soprattutto nel modellismo.
Dal corpo del servo esce un perno zigrinato su cui si applica la cosidetta "squadretta" che altro non è che una piccola staffa
Il perno puo' ruotare di 90° (45°- 0°- 45°)anche se la maggior parte arriva a 180° (90°- 0°- 90°).

Descrizione del servo dal punto di vista elettronico

Da un servocomando escono tre fili. Due fili per l'alimentazione che generalmente sono di colore nero o marrone per il negativo e rosso per il positivo.
L'alimentazione è compresa tra 4.8 V e 6.0 V. Di solito è così, ma è meglio dare un'occhiata alle caratteristiche fornite dal costruttore.

Il terzo filo è di solito bianco o giallo ed è destinato al segnale di COMANDO.
servo.JPG

servo.JPG


Con questa premessa entriamo nel vivo dell'argomento.


Il segnale di comando è un'onda quadra che deve essere ripetutamente inviata in quanto, se questo non avviene, il perno del servo girerà in maniera libera, a seconda, naturalmente, dell'attrito che vi è negli ingranaggi, nonostante sia presente l'alimentazione.
Il periodo in linea di massima deve avere una durata di 20ms, mentre l'impulso positivo deve avere una durata compresa tra 0.5ms e 2.5ms per i servi che ruotano di 180°. Anche questa volta, sarà bene dare un'occhiata alle specifiche tecniche del costruttore.

Il servo che ho utilizzato (quello della foto) a 180° vibra e va sotto sforzo.
Quindi nel suo utilizzo non andrò oltre i 90° (45° - 0° -45°).

A seconda della durata dell'impulso, il perno del servo girerà di un certo numero di gradi.

Con il grafico sottostante cerco di chiarire i concetti sopra menzionati.

Se il segnale di comando sarà un'onda quadra positiva della durata di 1,5 ms, il perno del servo si posizionerà al centro. Se sarà di 1 ms o 2 ms, si posizionerà rispettivamente a destra o a sinistra, a seconda, naturalmente, di come guardiamo il servo.

Schema del circuito



Come potete notare, lo schema è molto semplice. Io ho utilizzato il Pic16f628.
Ho collegato alla porta B (RB1- RB2)due pulsanti normalmente aperti. Le due resistenze di pull-down poste tra i pulsanti e massa servono per fissare a livello basso i rispettivi piedini di I/O quando i pulsanti non sono premuti.
Utilizzerò il pulsante P1 per fare girare il servo a destra e P2 per farlo girare a sinistra (naturalmente dipende da come si guarda il servo).
RB0 invece è collegata al servo e fornisce il segnale di comando.
Per questo circuito, il quarzo utilizzato è di 4 MHz.

Flow chart del programma

Come potete notare, il flow chart è molto semplice e intuitivo. Quindi non ha bisogno di molti commenti.
Dallo schema a blocchi si nota comunque che il servo rimarrà nella posizione di destra o sinistra finchè si tiene premuto un pulsante, dopo di che si posizionerà al centro.
Questo per una mia precisa scelta, in quanto quest'esempio di programmazione fa parte di un proggetto più grande, che spero di pubblicare se sarà terminato con successo.

Dal flow chart si può notare che ci sono due interruzioni che prenderò in esame con lo schema sottostante.


Il software che scaturisce dal questo schema è di vitale importanza per il funzionamento del progetto.
Senza questa tecnica non funziona nulla o comunque funziona male (io ci ho provato).
Come ho potuto studiare dal libro del buon Paolino questa è una tecnica antirimbalzo software che serve per contrastare il fatto che il pulsante non assume in maniera istantanea la posizione chiusa, ma avviene con dei rimbalzi della parte meccanica del componente.

ANALISI DEL FILE SORGENTE

Il compilatore utilzzato è il MikroC PRO.
void destra (void)

{
  RB0_bit=1;         //pongo l'uscita RB0 a 1
  delay_us(1000);    //per un tempo di 1000us 
  RB0_bit=0 ;        //pongo l'uscita RB0 a 0
  delay_us(19000) ;  //per un tempo di 19000us  
}

void sinistra (void)

{
  RB0_bit=1;       
  delay_us(2000);
  RB0_bit=0 ;
  delay_us(18000) ;
}

void centro(void)

{
  RB0_bit=1;
  delay_us(1500);
  RB0_bit=0 ;
  delay_us(18500) ;
}


Queste sono le tre funzioni che vengono richiamate quando si spinge il pulsante. I file sorgenti sono molto semplici grazie all'uso della funzione delay_us() fornita dal compilatore MikroC.

Qualcuno mi potrebbe dire che avrebbe utilizzato delle macro menmoniche e delle variabili per una migliore leggibilità e per un più facile riutilizzo del codice per un prossimo futuro. Sono pienamente daccordo con quel qualcuno, ma in questa maniera vengono, secondo me, rafforzati i concetti spiegati prima.

{
.....
while (1)
 {
 centro();
 while(( RB1_bit=0) ||( RB2_bit=0))  //resta in attesa di quale pulsante è premuto 
  {
    if(RB1_bit=1){                   //se viene premuto P1 chiama la funzione  
    delay_ms(50);
    if(RB1_bit=1){
    destra ();                       //destra()
    }
   }
    if(RB2_bit=1){                   //se viene premuto P2 chiama la funzione  
    delay_ms(50);
    if(RB2_bit=1){
    sinistra();                     //sinistra()
    }
   }
  }
 }
}


Download

Da qui si può scaricare il file zippato con il sorgente del programma

Conclusione

Questo è il cuore del programma. Penso che sia abbastanza ben commentato e che non ci sia bisogno di ulteriori spiegazioni.

Siamo così arrivati alla fine e vorrei concludere dicendo che, visto la semplicità dell'articolo, è chiaro che non è diretto ai guru dei pic, ma a coloro che, come me, sono all'inizio e che vogliono spingersi oltre l'accensione del famoso led.

6

Commenti e note

Inserisci un commento

di ,

Grazie. Qualche esperimento si può fare.

Rispondi

di ,

Certo, non vorrai fermarti qui! Devi proseguire!!! Complimenti ancora.

Rispondi

di ,

Grazie a tutti per i vostri commenti positivi , questo mi incoraggia ad andare avanti. Ciao Massimo.

Rispondi

di ,

I molti appassionati di modellismo che bazzicano da queste parti hanno a disposizione questo articolo: una valida alternativa ai sistemi "tradizionali" per pilotare i servomotori. Bravo!

Rispondi

di ,

Bravo! Molto chiaro e semplice!

Rispondi

di ,

Bene. Sono questi piccoli e chiari articoli che permettono di allargare il numero dei neofiti e avviarli ad una crescita dell'interesse. Non bisogna mai aver paura di essere troppo semplici o rischiare la banalità Molti di noi ricorderanno la deprimente frase che accompagnava le spiegazioni intesti e lezioni scolastici: "poi, con facili passaggi..." Erano sempre quei passaggi che non si ricordavano o che non erano affatto facili..! Fortunatamente ElectroYou è ricco di persone sensibili alla divulgazione chiara e questo e veramente una richhezza per il sito. Informatico

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.