In questo tutorial interfacciamo un motore DC ad Arduino UNO e controlleremo la sua velocità usando il concetto PWM (Pulse Width Modulation). Questa funzione è abilitata in UNO per ottenere una tensione variabile su una tensione costante. Il metodo di PWM è spiegato qui; si consideri un circuito semplice come mostrato in figura.
Se il pulsante viene premuto se la figura, il motore inizierà a ruotare e sarà in movimento fino a quando non verrà premuto il pulsante. Questa pressione è continua ed è rappresentata nella prima ondata di figura. Se, per un caso, si consideri che il pulsante viene premuto per 8 ms e aperto per 2 ms in un ciclo di 10 ms, durante questo caso il motore non sperimenterà la tensione completa della batteria di 9 V poiché il pulsante viene premuto solo per 8 ms, quindi la tensione del terminale RMS attraverso il motore sarà di circa 7V. A causa di questa tensione RMS ridotta, il motore ruoterà ma a velocità ridotta. Ora l'accensione media su un periodo di 10 ms = tempo di accensione / (tempo di accensione + tempo di spegnimento), questo è chiamato duty cycle ed è dell'80% (8 / (8 + 2)).
Nel secondo e nel terzo caso il pulsante viene premuto anche meno tempo rispetto al primo. Per questo motivo, la tensione dei terminali RMS sui terminali del motore viene ulteriormente ridotta. A causa di questa tensione ridotta, la velocità del motore diminuisce ulteriormente. Questa diminuzione di velocità con duty cycle continua ad accadere fino a un punto in cui la tensione ai terminali del motore non sarà sufficiente per far girare il motore.
Quindi da questo possiamo concludere che il PWM può essere utilizzato per variare la velocità del motore.
Prima di andare oltre, dobbiamo discutere dell'H-BRIDGE. Ora questo circuito ha principalmente due funzioni, la prima è quella di pilotare un motore CC da segnali di controllo a bassa potenza e l'altra è quella di cambiare la direzione di rotazione del motore CC.
Figura 1
figura 2
Sappiamo tutti che per un motore DC, per cambiare il senso di rotazione, abbiamo bisogno di cambiare le polarità della tensione di alimentazione del motore. Quindi per cambiare le polarità usiamo l'H-bridge. Ora nella figura 1 sopra abbiamo quattro interruttori. Come mostrato in figura 2, affinché il motore ruoti A1 e A2 sono chiusi. A causa di questo, la corrente fluisce attraverso il motore da destra a sinistra, come mostrato nella 2 ° parte figura3. Per ora considera che il motore ruota in senso orario. Ora se gli interruttori A1 e A2 sono aperti, B1 e B2 sono chiusi. La corrente attraverso il motore fluisce da sinistra a destra, come mostrato nella 1 ° parte di figure3. Questa direzione del flusso di corrente è opposta alla prima e quindi vediamo un potenziale opposto sul terminale del motore al primo, quindi il motore ruota in senso antiorario. Ecco come funziona un H-BRIDGE. Tuttavia, i motori a bassa potenza possono essere azionati da un H-BRIDGE IC L293D.
L293D è un CI H-BRIDGE progettato per pilotare motori CC a bassa potenza ed è mostrato in figura. Questo IC è costituito da due ponti h e quindi può pilotare due motori CC. Quindi questo IC può essere utilizzato per guidare i motori del robot dai segnali del microcontrollore.
Ora, come discusso prima, questo IC ha la capacità di cambiare la direzione di rotazione del motore CC. Ciò si ottiene controllando i livelli di tensione su INPUT1 e INPUT2.
Abilita Pin |
Pin di ingresso 1 |
Pin di ingresso 2 |
Direzione del motore |
Alto |
Basso |
Alto |
Girare a destra |
Alto |
Alto |
Basso |
Gira a sinistra |
Alto |
Basso |
Basso |
Fermare |
Alto |
Alto |
Alto |
Fermare |
Quindi, come mostrato nella figura sopra, per la rotazione in senso orario 2A dovrebbe essere alto e 1A dovrebbe essere basso. Allo stesso modo per il senso antiorario 1A dovrebbe essere alto e 2A dovrebbe essere basso.
Come mostrato nella figura, Arduino UNO ha 6 canali PWM, quindi possiamo ottenere PWM (tensione variabile) su uno qualsiasi di questi sei pin. In questo tutorial useremo PIN3 come output PWM.
Hardware: ARDUINO UNO, alimentatore (5v), condensatore 100uF, LED, pulsanti (due pezzi), resistenza 10KΩ (due pezzi).
Software: arduino IDE (Arduino nightly).
Schema elettrico
Il circuito è collegato in breadboard secondo lo schema del circuito mostrato sopra. Tuttavia si deve prestare attenzione durante il collegamento dei terminali LED. Sebbene i pulsanti mostrino l'effetto di rimbalzo in questo caso, non causa errori considerevoli, quindi questa volta non dobbiamo preoccuparci.
Il PWM di UNO è facile, in normali occasioni configurare un controller ATMEGA per il segnale PWM non è facile, dobbiamo definire molti registri e impostazioni per un segnale accurato, tuttavia in ARDUINO non dobbiamo occuparci di tutte queste cose.
Per impostazione predefinita, tutti i file di intestazione e i registri sono predefiniti da ARDUINO IDE, dobbiamo semplicemente chiamarli e quindi avremo un'uscita PWM al pin appropriato.
Ora per ottenere un'uscita PWM su un pin appropriato, dobbiamo lavorare su tre cose,
|
Per prima cosa dobbiamo scegliere il pin di uscita PWM da sei pin, dopodiché dobbiamo impostare quel pin come uscita.
Successivamente dobbiamo abilitare la funzione PWM di UNO chiamando la funzione "analogWrite (pin, value)". Qui 'pin' rappresenta il numero di pin in cui abbiamo bisogno dell'uscita PWM, lo mettiamo come '3'. Quindi al PIN3 stiamo ottenendo l'output PWM.
Il valore è il duty cycle di accensione, compreso tra 0 (sempre spento) e 255 (sempre acceso). Aumenteremo e diminuiremo questo numero premendo il pulsante.
L'UNO ha una risoluzione massima di “8”, non si può andare oltre quindi i valori da 0-255. Tuttavia si può diminuire la risoluzione del PWM utilizzando il comando “analogWriteResolution ()”, inserendo un valore da 4-8 tra parentesi, possiamo cambiare il suo valore da PWM a quattro bit a PWM a otto bit.
L'interruttore serve per cambiare la direzione di rotazione del motore CC.