- PWM (Pulse Width Modulation):
- Servomotore e PWM:
- Componenti richiesti:
- Schema elettrico:
- Spiegazione di lavoro e programmazione:
Raspberry Pi è una scheda basata su processore con architettura ARM progettata per ingegneri elettronici e hobbisti. Il PI è una delle piattaforme di sviluppo di progetti più affidabili attualmente disponibili. Con una maggiore velocità del processore e 1 GB di RAM, il PI può essere utilizzato per molti progetti di alto profilo come l'elaborazione delle immagini e Internet of Things.
Per fare uno qualsiasi dei progetti di alto profilo, è necessario comprendere le funzioni di base di PI. Tratteremo tutte le funzionalità di base di Raspberry Pi in questi tutorial. In ogni tutorial discuteremo una delle funzioni di PI. Alla fine di questa serie di tutorial su Raspberry Pi, sarai in grado di realizzare progetti di alto profilo da solo. Segui i tutorial seguenti:
- Guida introduttiva a Raspberry Pi
- Configurazione Raspberry Pi
- LED lampeggiante
- Interfaccia pulsante Raspberry Pi
- Generazione PWM Raspberry Pi
- Controllo del motore CC utilizzando Raspberry Pi
- Controllo motore passo-passo con Raspberry Pi
- Interfacciamento del registro a scorrimento con Raspberry Pi
- Tutorial ADC Raspberry Pi
In questo tutorial controlleremo il servomotore con Raspberry Pi. Prima di passare al servo parliamo di PWM perché da esso nasce il concetto di controllo del servomotore.
PWM (Pulse Width Modulation):
Abbiamo già parlato più volte di PWM in: Modulazione di larghezza di impulso con ATmega32, PWM con Arduino Uno, PWM con IC timer 555 e PWM con Arduino Due. PWM sta per "Pulse Width Modulation". PWM è un metodo utilizzato per ottenere una tensione variabile da un alimentatore stabile. Per una migliore comprensione del PWM, considera il circuito seguente,
Nella figura sopra, se l'interruttore è chiuso continuamente per un periodo di tempo, il LED sarà "ON" durante questo periodo continuamente. Se l'interruttore è chiuso per mezzo secondo e aperto per mezzo secondo successivo, il LED sarà acceso solo nel primo mezzo secondo. Ora la proporzione per la quale il LED è acceso rispetto al tempo totale è chiamata Duty Cycle e può essere calcolata come segue:
Ciclo di lavoro = Tempo di accensione / (Tempo di accensione + Tempo di spegnimento)
Ciclo di lavoro = (0,5 / (0,5 + 0,5)) = 50%
Quindi la tensione di uscita media sarà il 50% della tensione della batteria.
Man mano che aumentiamo la velocità di accensione e spegnimento a un livello, vedremo il LED attenuarsi invece di essere acceso e spento. Questo perché i nostri occhi non possono cogliere chiaramente le frequenze superiori a 25Hz. Considerare un ciclo di 100 ms, il LED spento per 30 ms e acceso per 70 ms. Avremo il 70% di tensione stabile in uscita, quindi il LED si illuminerà continuamente con il 70% di intensità.
Il rapporto di lavoro va da 0 a 100. "0" significa completamente OFF e "100" è completamente ON. Questo rapporto di lavoro è molto importante per il servomotore. La posizione del servomotore è determinata da questo rapporto di lavoro. Controlla questo per la dimostrazione PWM con LED e Raspberry Pi.
Servomotore e PWM:
Un servomotore è una combinazione di motore CC, sistema di controllo della posizione e ingranaggi. I servo hanno molte applicazioni nel mondo moderno e con questo sono disponibili in diverse forme e dimensioni. Useremo SG90 servomotore in questo tutorial, è uno di quella popolare e più conveniente. SG90 è un servo a 180 gradi. Quindi con questo servo possiamo posizionare l'asse da 0 a 180 gradi.
Un servomotore ha principalmente tre fili, uno è per la tensione positiva, un altro è per la terra e l'ultimo è per l'impostazione della posizione. Il filo rosso è collegato all'alimentazione, il filo marrone è collegato a terra e il filo giallo (o BIANCO) è collegato al segnale.
In servo, abbiamo un sistema di controllo che prende il segnale PWM dal pin del segnale. Decodifica il segnale e ne ricava il rapporto di lavoro. Successivamente, confronta il rapporto con i valori delle posizioni predefinite. Se c'è una differenza nei valori, regola di conseguenza la posizione del servo. Quindi la posizione dell'asse del servomotore si basa sul rapporto di lavoro del segnale PWM sul pin del segnale.
La frequenza del segnale PWM (Pulse Width Modulated) può variare in base al tipo di servomotore. Per SG90 la frequenza del segnale PWM è 50Hz. Per scoprire la frequenza di funzionamento del tuo servo, controlla la scheda tecnica per quel particolare modello. Quindi, una volta selezionata la frequenza, l'altra cosa importante qui è il DUTY RATIO del segnale PWM.
La tabella seguente mostra la posizione del servo per quel particolare rapporto di lavoro. È possibile ottenere qualsiasi angolo intermedio scegliendo il valore di conseguenza. Quindi per 45º del servo il rapporto di lavoro dovrebbe essere '5' o 5%.
POSIZIONE |
DUTY RATIO |
0º |
2.5 |
90º |
7.5 |
180º |
12.5 |
Prima di interfacciare il servomotore con Raspberry Pi, puoi testare il tuo servo con l'aiuto di questo circuito del tester del servomotore. Controlla anche i nostri progetti Servo di seguito:
- Controllo servomotore utilizzando Arduino
- Controllo servomotore con Arduino Due
- Interfacciamento servomotore con microcontrollore 8051
- Controllo servomotore tramite MATLAB
- Controllo del servomotore tramite sensore flessibile
- Controllo posizione servo con peso (sensore di forza)
Componenti richiesti:
Qui stiamo usando Raspberry Pi 2 Model B con Raspbian Jessie OS. Tutti i requisiti hardware e software di base sono stati discussi in precedenza, puoi cercarli nell'introduzione di Raspberry Pi, oltre a quello di cui abbiamo bisogno:
- Perni di collegamento
- Condensatore 1000uF
- Servomotore SG90
- Breadboard
Schema elettrico:
A1000µF deve essere collegato attraverso la barra di alimentazione + 5V altrimenti il PI potrebbe spegnersi casualmente durante il controllo del servo.
Spiegazione di lavoro e programmazione:
Una volta che tutto è collegato come da schema elettrico, possiamo accendere il PI per scrivere il programma in PYHTON.
Parleremo di alcuni comandi che useremo nel programma PYHTON, Stiamo per importare il file GPIO dalla libreria, la funzione sottostante ci consente di programmare i pin GPIO di PI. Stiamo anche rinominando "GPIO" in "IO", quindi nel programma ogni volta che vogliamo fare riferimento ai pin GPIO useremo la parola "IO".
importa RPi.GPIO come IO
A volte, quando i pin GPIO, che stiamo cercando di utilizzare, potrebbero svolgere altre funzioni. In tal caso, riceveremo avvisi durante l'esecuzione del programma. Il comando seguente indica al PI di ignorare gli avvisi e procedere con il programma.
IO.setwarnings (False)
Possiamo fare riferimento ai pin GPIO di PI, sia per numero di pin a bordo che per numero di funzione. Come il "PIN 29" sulla scheda è "GPIO5". Quindi diciamo qui o rappresenteremo il pin qui con "29" o "5".
IO.setmode (IO.BCM)
Stiamo impostando PIN39 o GPIO19 come pin di uscita. Otterremo l'uscita PWM da questo pin.
IO.setup (19, IO.OUT)
Dopo aver impostato il pin di uscita, dobbiamo impostare il pin come pin di uscita PWM, p = IO.PWM (canale di uscita, frequenza del segnale PWM)
Il comando precedente serve per impostare il canale e anche per impostare la frequenza del canale ”. 'p' qui è una variabile che può essere qualsiasi cosa. Stiamo usando GPIO19 come canale di uscita PWM. "Frequenza del segnale PWM" sceglieremo 50, poiché la frequenza di lavoro dell'SG90 è 50Hz.
Il comando seguente viene utilizzato per avviare la generazione del segnale PWM. ' DUTYCYCLE ' serve per impostare il rapporto 'Accendi' come spiegato prima, p.start (DUTYCYCLE)
Il comando seguente viene utilizzato come ciclo per sempre, con questo comando le istruzioni all'interno di questo ciclo verranno eseguite continuamente.
Mentre 1:
Qui il programma per il controllo del servo utilizzando Raspberry Pi fornisce un segnale PWM su GPIO19. Il rapporto di lavoro del segnale PWM viene modificato tra tre valori per tre secondi. Quindi per ogni secondo il Servo ruota in una posizione determinata dal Duty Ratio. Il servo ruota continuamente a 0º, 90º e 180º in tre secondi.