Pilotare un motore brushless con ESC e Arduino

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.



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.


  1. #include <Servo.h>
  2. int potpin = A0;
  3. int val;
  4. Servo motor_1;
  5. void setup()
  6. {
  7.   motor_1.attach(9);
  8.   Serial.begin(9600);
  9.   delay(10000);
  10. }
  11. void loop()
  12. {
  13.   val = analogRead(potpin);            
  14.   val = map(val, 0, 1023, 0, 180);
  15.   motor_1.write(val);                  
  16. }


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!

Segui Daniele Alberti su Google+!

22 commenti:

  1. 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.

    RispondiElimina
  2. E' possibile prelevando il segnale da uno dei tre fili di alimentazione del brushless, contare i giri?

    RispondiElimina
    Risposte
    1. Ciao, 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.
      Che dire, prova! se poi ti va facci sapere, potrebbe tornare utile a molti. Ciao

      Elimina
    2. Ho intenzione di prendere Arduino e provarci, ma parto completamente da zero.
      In questo momento non ho la più pallida idea su come fare... :-)

      Elimina
  3. ma quindi una volta collegato ad arduino si comanda come un normale servo motore? comunque bellla guida mi è stata utile.

    RispondiElimina
    Risposte
    1. grazie, si in base al valore che gli dai girerà piú o meno velocemente in una direzione o nell'altra. Ciao!

      Elimina
    2. grazie mille mi sei stato molto utile

      Elimina
  4. Ciao, 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

    RispondiElimina
    Risposte
    1. Certo, 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!

      Elimina
  5. ciao,
    vorrei sapere che modello devo prendere di esc, motore e batterie da usare su arduino uno r3.
    Grazie in anticipo,
    Alberto

    RispondiElimina
    Risposte
    1. 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).

      Elimina
    2. quindi mi dovrebbe interessare solo l'esc. Quello che hai mostrato sopra va bene?

      Elimina
  6. Ciao
    volessimo 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

    RispondiElimina
    Risposte
    1. Si, basta che il segnale analogico abbia un range 0-5volt

      Elimina
  7. Mi hanno consigliato di comprare questo telecomando (vedi link) per comandare questo motore brushless con Arduino:
    https://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

    RispondiElimina
    Risposte
    1. Quel modello specifico non saprei, però questo l'ho provato personalmente e va bene.
      http://www.danielealberti.it/2016/09/arduino-radiocomandato.html
      ciao!

      Elimina
    2. 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

      Elimina
  8. Perché hai usato la libreria servo per scrivere sull'output? Non andava bene una semplice analoglWrite?

    RispondiElimina
  9. ciao, 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.
    fammi sapere. ciao

    RispondiElimina
  10. 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à.

    RispondiElimina
    Risposte
    1. Ciao, 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

      Elimina
  11. Questo commento è stato eliminato dall'autore.

    RispondiElimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Related Posts Plugin for WordPress, Blogger...