Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
IT
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°).
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.
servo.JPG
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.
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.
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.
{
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
}
{
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
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.
Estratto da "http://www.electroyou.it/mediawiki/
index.php?title=UsersPages:Mpeino:controllare-un-servocomando-con-un-pic"