Ciao a tutti!
Dato che mi sto interessando al mondo dei droni e ad alcuni progetti che necessitano di un motore dalle elevate prestazioni,
ho iniziato a smanettare con due componenti molto conosciuti dagli aeromodellisti:
i motori brushless e gli ESC.
Partiamo dalla definizione di motore brushless:
"Il motore brushless ("senza spazzole") è un motore elettrico a corrente continua con il rotore a magneti permanenti e lo statore a campo magnetico ruotante. A differenza di un motore a spazzole non ha quindi bisogno di contatti elettrici striscianti (spazzole) sull'albero motore per funzionare. La commutazione della corrente circolante negli avvolgimenti dello statore, e quindi la variazione dell'orientamento del campo magnetico da essi generato, avviene elettronicamente."
(da Wikipedia, "Motore brushless")
Quindi il motore brushless deve essere pilotato da un dispositivo elettronico che generi "una commutazione della corrente circolante negli avvolgimenti dello statore",
questo dispositivo si chiama ESC (Electronic Speed Control).
Ecco un semplice ESC:
Come potete vedere ha vari cavi, i tre cavi rossi nella parte superiore sono quelli per il collegamento col motore, il rosso e nero in basso servono per il collegamento con la batteria, mentre al connettore a 3 contatti collegherò la centralina per il controllo della velocità del motore (in questo caso il mio Arduino)
Ed ecco ora il classico video di esempio, nel quale controllerò un motore brushless di una certa potenza (lo devo tenere con una tenaglia) regolandone la velocità con un potenziometro collegato ad Arduino.
Realizzare tutto questo è relativamente semplice, vi basterà realizzare il tutto seguendo lo schema elettrico qui sotto e caricare lo sketch che trovate in seguito (la guida va bene anche per ESC e motori di diverse dimensioni).
Ecco lo schema, per alimentare Arduino ho lasciato collegato il cavo usb al pc, ma se volete utilizzare il vostro progetto alimentando il tutto con la batteria al litio vi basterà collegare anche il cavetto rosso che arriva dall'ESC (nel disegno sotto è scollegato) al pin 5V di Arduino, ma fate attenzione che sul vostro ESC ci sia scritto BEC 5V e non valori di tensione più alti perchè altrimenti rischierete di friggere il vostro Arduino.
Dato che mi sto interessando al mondo dei droni e ad alcuni progetti che necessitano di un motore dalle elevate prestazioni,
ho iniziato a smanettare con due componenti molto conosciuti dagli aeromodellisti:
i motori brushless e gli ESC.
Partiamo dalla definizione di motore brushless:
(da Wikipedia, "Motore brushless")
Quindi il motore brushless deve essere pilotato da un dispositivo elettronico che generi "una commutazione della corrente circolante negli avvolgimenti dello statore",
questo dispositivo si chiama ESC (Electronic Speed Control).
Ecco un semplice ESC:
Come potete vedere ha vari cavi, i tre cavi rossi nella parte superiore sono quelli per il collegamento col motore, il rosso e nero in basso servono per il collegamento con la batteria, mentre al connettore a 3 contatti collegherò la centralina per il controllo della velocità del motore (in questo caso il mio Arduino)
Ed ecco ora il classico video di esempio, nel quale controllerò un motore brushless di una certa potenza (lo devo tenere con una tenaglia) regolandone la velocità con un potenziometro collegato ad Arduino.
Realizzare tutto questo è relativamente semplice, vi basterà realizzare il tutto seguendo lo schema elettrico qui sotto e caricare lo sketch che trovate in seguito (la guida va bene anche per ESC e motori di diverse dimensioni).
Ecco lo schema, per alimentare Arduino ho lasciato collegato il cavo usb al pc, ma se volete utilizzare il vostro progetto alimentando il tutto con la batteria al litio vi basterà collegare anche il cavetto rosso che arriva dall'ESC (nel disegno sotto è scollegato) al pin 5V di Arduino, ma fate attenzione che sul vostro ESC ci sia scritto BEC 5V e non valori di tensione più alti perchè altrimenti rischierete di friggere il vostro Arduino.
Ed ecco lo sketch da caricare nel vostro Arduino,
come potrete vedere il motore verrà controllato in PWM sfruttando la libreria "Servo",
ruotando il potenziometro si avrà un aumento di giri del motore, infatti il valore letto sul pin A0 verrà scalato con la funzione "map" e convertito in PWM sul pin 9.
come potrete vedere il motore verrà controllato in PWM sfruttando la libreria "Servo",
ruotando il potenziometro si avrà un aumento di giri del motore, infatti il valore letto sul pin A0 verrà scalato con la funzione "map" e convertito in PWM sul pin 9.
- #include <Servo.h>
- int potpin = A0;
- int val;
- Servo motor_1;
- void setup()
- {
- motor_1.attach(9);
- Serial.begin(9600);
- delay(10000);
- }
- void loop()
- {
- val = analogRead(potpin);
- val = map(val, 0, 1023, 0, 180);
- motor_1.write(val);
- }
Se avete problemi nella regolazione della velocità del motore (ad esempio il motore inizia a girare solo quando avere ruotato quasi tutto il potenziometro) è probabile che dobbiate eseguire la taratura del vostro ESC (grazie a +Massimo per questa dritta)
Per fare questo la procedura da seguire è questa:
- Collegate l'Arduino, il potenziometro e l'ESC come nello schema sopra (il motore e la batteria lasciateli scollegati)
- Alimentate l'Arduino (ad esempio con il cavo usb) e ruotate il potenziometro nella posizione massima
- Alimentate l'ESC collegandolo alla batteria lipo, a questo punto l'ESC dovrà emettere dei beep.
- Ora ruotate il potenziometro nella posizione minima (si dovranno sentire altri segnali acustici)
- Scollegate la batteria lipo, a questo punto il vostro ESC sarà calibrato
L'ultimo consiglio che vi voglio dare è di fare molta attenzione nell'acquisto dei componenti, infatti le batterie al litio hanno una tensione nominale per ogni cella di 3.7 Volt.
In commercio troverete batterie con valori multipli di 3.7, questo valore viene identificato con la lettera "S", ad esempio se trovate una batteria "3S" avrà una tensione nominale di 11.1Volt (3.7 x 3).
Ovviamente tutti i componenti dovranno essere compatibili tra loro, quindi anche ESC e motore dovranno supportare la tensione fornita dalla batteria.
Finito! se avete dubbi o domande lasciate pure un commento qui sotto, cercherò di rispondervi al più presto, ciao!
Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!
Ciao, articolo interessante, volevo farti una domanda da niubbo questo utente esegue una modifica hardware nel syma x8, per quanto riguarda il software secondo te bisogna seguire questa tua procedura? Grazie.
RispondiEliminaE' possibile prelevando il segnale da uno dei tre fili di alimentazione del brushless, contare i giri?
RispondiEliminaCiao, bella idea, non ci avevo mai pensato, in effetti dovrebbe uscire una sorta di sinusoide, quindi leggendo il picco di tensione potresti contare un giro. Sicuramente la tensione sarebbe troppo alta per entrare direttamente su un pin di Arduino potresti abbassarla con un partitore di tensione.
EliminaChe dire, prova! se poi ti va facci sapere, potrebbe tornare utile a molti. Ciao
Ho intenzione di prendere Arduino e provarci, ma parto completamente da zero.
EliminaIn questo momento non ho la più pallida idea su come fare... :-)
Ciao ragazzi anche io vorrei controllare il motore e sapere quanti RPM sta facendo. È possibile farlo solo con un encoder ?
EliminaIts possible. If it's on the same board then a pontential divided circuit may be ok. But if using separate board you will need a virtual ground.
Eliminama quindi una volta collegato ad arduino si comanda come un normale servo motore? comunque bellla guida mi è stata utile.
RispondiEliminagrazie, si in base al valore che gli dai girerà piú o meno velocemente in una direzione o nell'altra. Ciao!
Eliminagrazie mille mi sei stato molto utile
EliminaCiao, grazie per aver pubblicato questo articolo....mi chiedo: quando trovato (tramite il potenziometro) la velocità con cui voglio far girare il motore, potrei utilizzare un semplice switch per accenderlo e spegnerlo? grazie
RispondiEliminaCerto, scriverai al posto di "motor_1.write(val);" il valore trovato in un range tra 0 e 180, es "motor_1.write(150);" ovviamente non sempre ma solo se il contatto è chiuso. Ciao!
Eliminaciao,
RispondiEliminavorrei sapere che modello devo prendere di esc, motore e batterie da usare su arduino uno r3.
Grazie in anticipo,
Alberto
ciao, Arduino controlla l'esc tramite il cavo di segnale, non gestisce la parte di potenza. Quindi non fa differenza la potenza del motore o il tipo di batteria (a meno che non la colleghi anche all'arduino).
Eliminaquindi mi dovrebbe interessare solo l'esc. Quello che hai mostrato sopra va bene?
EliminaCiao
RispondiEliminavolessimo usare un telecomando con ricevente (segnale analogico) da collegare ad Arduino anzichè il potenziometro, si riuscirebbe a far funzionare il motore utilizzando lo stesso programma?
Grazie in anticipo
Luca
Si, basta che il segnale analogico abbia un range 0-5volt
EliminaMi hanno consigliato di comprare questo telecomando (vedi link) per comandare questo motore brushless con Arduino:
RispondiEliminahttps://hobbyking.com/en_us/hobby-king-2-4ghz-4ch-tx-rx-v2-mode-1.html
Sapresti dirmi se potrebbe andare bene e nel caso in cui non sia così sapresti consigliarmene uno con ricevente in grado di darmi un segnale analogico con un range da 0 a 5V?
Scusa ma ho un po' di problemi a capire dove riesco a trovare queste caratteristiche (range di tensione e tipo di segnale d'uscita) :)
Grazie in anticipo
Luca
Quel modello specifico non saprei, però questo l'ho provato personalmente e va bene.
Eliminahttp://www.danielealberti.it/2016/09/arduino-radiocomandato.html
ciao!
Ciao Daniele Alberti posso chiedere a te che tu ne capisci per aumentare l' efficenza la velicit di due motori elettrici da 48 v che schema dovrei usare e quale arduino ed esc
EliminaPerché hai usato la libreria servo per scrivere sull'output? Non andava bene una semplice analoglWrite?
RispondiEliminaciao, visto che sono a zero in questo argomento, mi potresti dare una mano a costruire un aggeggio simile con l'aggiunta di inversione di rotazione del motore tramite un pulsante.
RispondiEliminafammi sapere. ciao
Ciao Daniele, complimenti per la guida. Avrei una domanda: ho un motore brushless che funziona a 11.1V,e un Arduino nano, la batteria devo prenderla da 14.8 (11.1v + 3.3 di Arduino)? Grazie a chi risponderà.
RispondiEliminaCiao, no la batteria deve essere 11.1 (3 celle) devi però comprare un ESC con un'uscita apposita per alimentare la scheda (sono piuttosto comuni). Ciao
EliminaCiao scusa, il progetto funziona, ma ho un problema, gli esc si riscaldano subito, e il tutto è alimentato con 12 volt e 3 amo, sapresti dirmi come fare per evitare che si surriscaldino?
EliminaQuesto commento è stato eliminato dall'autore.
RispondiEliminaciao premetto che sono un profano in materia di elettronica quindi molto probabilmente la mia domanda ti sembrera stupida,ho una centralina collegata a 2 motiri quelli delle motine elettriche da bambino tipo peg perego.una volta collegato batteria motore ecc. funziona tutto con il potenziometro della centralina,ma quando provo a collegare ai fili del potenziometro l acceleratore a manopola e accendo la moto parte non sentendo la manopola ,dove sta il problema
RispondiEliminaMa il verso di rotazione come faccio a cambiarlo?
RispondiEliminaIo ho seguito le istruzioni ma il motore si blocca dopo pochi giri, devo attendere un po' per farlo ripartire, fa qualche giro e si blocca nuovamente...
RispondiEliminaCiao, dei domande:
RispondiElimina1) posso usare un alimentatore invece che le.batterie?
2) posso invertire il senso di rotazione oppure è unidirezionale?
Grazie
ciao, ottimo tutorial !
RispondiEliminaè possibile comandare due motori contemporaneamente?
salve ! questo e proprio quello che riguarda il mio progetto , solo un piccolo dettaglio vorrei sapere per favore , vorrei aggiungere due switch momentanei uno per la massima velocità e l altro regolabile con potenziometro o settanta da un valore medio, come posso fare? sia nel collegamento dei due interruttori sia nello sketch, grazie molto
RispondiEliminaCiao Interessante il tuo articolo. E' passato oltre 1 anno dalla sua pubblicazione.
RispondiEliminaMi chiedo se hai fatto prove anche con i motori Brushless per gimbal.
Quindi a giri bassisimi, magari pilotato da un encoder rotativo.
Complimenti per l'articolo!
RispondiEliminaNon sono afferratissimo con gli sketch e non riesco a capire perché l'IDE continua a darmi questo errore:
Arduino:1.8.10 (Windows 10), Scheda:"Arduino/Genuino Uno"
avr-gcc: error: CreateProcess: No such file or directory
Più di una libreria trovata per "Servo.h"
Usata: C:\Users\sergi\Desktop\Workshop\arduino-1.8.10\libraries\Servo
exit status 1
Errore durante la compilazione per la scheda Arduino/Genuino Uno.
Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"
Grazie mille