Fermare motori di un quadricottero da Arduino

Buongiorno a tutti,
Il mio intento è di utilizzare Arduino Yun ( ora sto prototipando con la ControlBoard v3.0 di HobbyKing) per scrivere un PID completo per controllare un quadricottero.

Il primo passo è stato di calibrare gli ESC direttamente da Arduino con segnali PWM .
Dopodiché ho scritto del codice per azionarli e fare delle prove sulle velocità.

// è un estratto
#include <Servo.h>


Servo motor1;
Servo motor2;
Servo motor3;
Servo motor4;

void setup() {
  Serial.begin(9600);
  Serial.println("Program begin...");

  motor1.attach(PIN_M1);
  motor2.attach(PIN_M2);
  motor3.attach(PIN_M3);
  motor4.attach(PIN_M4);
 

  motor1.writeMicroseconds(900);
  motor2.writeMicroseconds(900);
  motor3.writeMicroseconds(900);
  motor4.writeMicroseconds(900);

  delay(2000);

  motor1.writeMicroseconds(1000);
  motor2.writeMicroseconds(1000);
  motor3.writeMicroseconds(1000);
  motor4.writeMicroseconds(1000);

  delay(2000);

  motor1.writeMicroseconds(1500);
  motor2.writeMicroseconds(1500);
  motor3.writeMicroseconds(1500);
  motor4.writeMicroseconds(1500);

  delay(2000);

  motor1.writeMicroseconds(1999);
  motor2.writeMicroseconds(1999);
  motor3.writeMicroseconds(1999);
  motor4.writeMicroseconds(1999);

  delay(2000);

  motor1.writeMicroseconds(900);
  motor2.writeMicroseconds(900);
  motor3.writeMicroseconds(900);
  motor4.writeMicroseconds(900);
  
  

}

void loop() {  

}

In sostanza si imposta il PWM minimo 900 all'inizio per azionare i motori e successivamente incremento la velocità fino a 1999 per poi decrescere nuovamente al minimo 900.

Ma per spegnere del tutto i motori ? Ci dev'essere una combinazione che prevenga lo spegnimento in volo ma non riesco a trovare da nessuna parte come si fa.
Poiché non utilizzo un radiocomando non so come tradurre la procedura di spegnimento

CARATTERISTICHE:
ControlBoard: Hobbyking Control Board v3.0 programmata attraverso l'IDE di Arduino
ESC: Turnigy AE-25A Brushless ESC
MOTORI: Turnigy D2836/11 750KV Brushless Outrunner Motor

Grazie per l'aiuto

rockeronline00:
Buongiorno a tutti...

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Grazie dei link, mi sono appena presentato nella sezione !

Ciao:
Do per scontato che sai come arriva il segnale di comando agli esc. Sai che i 900 è il valore di sicurezza al di sotto di quello minimo di partenza, come lo è per tutti i servi il punto di inizio corsa da un lato: 1 milisecondo di segnale alto su due millisecondi di ciclo.
Devi crearti una condizione di sicurezza magari con un'istruzione "if" in modo che se sei nella condizione di volo, oltre i 1000microsec, nessun motore possa scendere sotto quella soglia.
poi credo che basti che a nessun regolatore sia mancante di segnali, controlla bene che non ci siano zone "d'ombra" nello sketch e i motori non dovranno mai fermarsi quando hai lo stik del gas in "lavoro"

Ciao

Ciao Gustavo, grazie della risposta.
Tutti i controlli dovuti li farò sicuramente quando avrò un qualcosa in più di un semplice sketch di prova dei motori.
Finora qualsiasi valori spari in writeMicroseconds(value) i motori restano accesi.

L'unico modo per spegnerli è fare motorX.detach() . Così da non applicare più la modalità "servo" sul pin in questione

Le funzioni dei servo su arduino non le conosco, non ho fatto ancora esperimenti in merito. Sono aeromodellista da una vita e conosco bene i segnali di pilotaggio.
E' strano però che i motori non si fermino con la variazione del tempo del livello alto. Sotto il milisecondo (un millisec su due di ciclo) i motori dovrebbero fermarsi, è proprio la sogliaminima di lavoro, per quello credo che 900 microsec siano proprio al di sotto della soglia dove gli ESC iniziano a lavorare.
Cerca di farti un sistema per visualizzare a monitor seriale i valori alti di ogni microciclo in modo da capire quando il pilotaggio arriva giusto.

Non hai pensato a crearti lo sketch per variatore senza usare le librerie? E' semplicissimo! e cosi sarai sicuro di avere il segnale agli esc fatto come lo vuoi tu! Poi queste librerie se sono create per i servi forse hanno qualche pecca per quel che riguarda i regolatori perchè le posizioni dello "0" sono completamente diverse.

dai un segnale intorno a 500 ms e vedi che i motori si fermano,. però occhio che poi mi sa che devi rifare la sequenza di "armaggio"

Gustavo74:
Poi queste librerie se sono create per i servi forse hanno qualche pecca per quel che riguarda i regolatori perchè le posizioni dello "0" sono completamente diverse.

Come fai a fare questa affermazione se, per tua ammissione, non conosci la libreria servo ?
In tutti i casi gli ESC si comandano con un segnale identico a quello dei servo, cosa ovvia visto che sono pensati per essere collegati ad una normale ricevente RC dalla quale esce il segnale per i servo.
Gli ESC devono essere calibrati con un segnale compreso tra 1050 (minimo) e 1950 (massimo) us, neutrale a 1500 us, per fermare il motore basta dare al ESC un segnale a 1000 us, non vanno assolutamente superati questi limiti altrimenti l'ESC funziona male.
All'avvio del sistema il segnale sugli ESC deve essere 1500 us, condizione di sicurezza e motori spenti, poi va portato a 950 us per 1-2 secondi in modo da armare gli ESC, i motori si avviano, portando il segnale sotto i 950 us i motori si fermano ma non vengono disarmati, basta aumentare il segnale e ripartono.
Dettaglio molto importante, per far volare un multirotore i 50 Hz standard del segnale servo non bastano, occorre andare ad almeno 350-400 Hz, meglio ancora se arrivi ai 490 Hz massimi ammessi dallo standard del segnale PPM, per fare questo non puoi usare la libreria servo, si usa direttamente il timer 2 per la generazione degli impulsi, ti consiglio di guardare MultiWii, meglio ancora MegaPirate NG, per vedere come sono gestiti gli ESC.
Solo una cosa ancora, non so quali sono le tue conoscenze tecniche/matematiche, però il software di un drone è una cosa molto complessa da realizzare, il controllo degli ESC è solo la punta del iceberg ed è la cosa più semplice tra quelle da fare, se sei in crisi su questo punto mi chiedo come farai per la gestione della IMU e dei pid, forse ti conviene partire da un software pronto.

astrobeed:

Gustavo74:
Poi queste librerie se sono create per i servi forse hanno qualche pecca per quel che riguarda i regolatori perchè le posizioni dello "0" sono completamente diverse.

Ciao Astro, intanto premetto che non volevo essere polemico. Se ho citato che davo per scontato che conoscevi i segnali per gli esc non era per metterti in cattiva luce o sminurti. Sai nel forum ci sono da poco e vedo che spesso entra gente che è alle primissime armi con l'elettrotecnica. Ma vedo che tu sei ben più avanti sia qui che nel modellismo e sono contento per te soprattutto perchè creare una libreria per un multirotore sai benissimo che è una ardua impresa, non basta solo sapere gestire gli esc e se ci riesci da te tanto di cappello!

Come fai a fare questa affermazione se, per tua ammissione, non conosci la libreria servo ?

Ti riconfermo di non conoscerla ma conosco i segnali di pilotaggio per gli esc, sono modellista da qualche decennio, ne ho creato da "0" un programma per questi utilizzi ma su altre piataforme con altri processori.

In tutti i casi gli ESC si comandano con un segnale identico a quello dei servo, cosa ovvia visto che sono pensati per essere collegati ad una normale ricevente RC dalla quale esce il segnale per i servo.
Gli ESC devono essere calibrati con un segnale compreso tra 1050 (minimo) e 1950 (massimo) us, neutrale a 1500 us, per fermare il motore basta dare al ESC un segnale a 1000 us, non vanno assolutamente superati questi limiti altrimenti l'ESC funziona male.

Lo so, perdi sensibilità di corsa negli stick della TX come ben sai.

All'avvio del sistema il segnale sugli ESC deve essere 1500 us, condizione di sicurezza e motori spenti, poi va portato a 950 us per 1-2 secondi in modo da armare gli ESC, i motori si avviano, portando il segnale sotto i 950 us i motori si fermano ma non vengono disarmati, basta aumentare il segnale e ripartono.

La partenza degli esc a 1500 ti giuro che mi è nuova! Sei sicuro che non sia una prerogativa dei regolatori economici cinesi?
Io volando in 40Mhz fino all'anno scorso ero costretto a utilizzare solo esc di qualità, Plettemberg, Hacker o Jeti, e da questi SEMPRE ho avuto la partenza motore allo stesso punto del gas, poco sotto metà, risolto abbassando la percentuale di corsa nella parte "prepartenza" dello stick con ottimi risultati.
Ma fammi capire una cosa, hai provato o no i singoli esc a 900microS? Non ho capito se non riesci a fermarli o hai paura che si fermino in volo.
Mandaci qualche link con qualche video almeno dei primi test con tutto l'assemblaggio!

Gustavo74:
La partenza degli esc a 1500 ti giuro che mi è nuova! Sei sicuro che non sia una prerogativa dei regolatori economici cinesi?

Su i droni ci sono regole diverse dagli aeromodelli, sopratutto per quanto riguarda gli ESC visto che devono funzionare ad almeno 300 Hz, meglio se 400-450 Hz, e la condizione normale degli stick è al centro per tutti e due, da qui deriva il fatto che all'accensione il segnale su tutti gli ESC è 1500us.
In pratica all'accensione i motori sono fermi con gli ESC non armati (ESC che bippano), con una apposita manovra sulla radio, o uno switch dedicato, vengono armati portando i segnali a 950 us per due secondi, subito dopo vengono portati (dalla flight controller, non dal pilota visto che gli stick sono al centro) a basso regime di rotazione.
Non appena il pilota sposta lo stick del lift dalla zona centrale verso l'alto la flight controller accelera i motori fino ad arrivare al sollevamento e inizia la salita con un rateo determinato dalla posizione dello stick, non appena viene riportata in zona centrale il drone cessa di salire e si stabilizza in hovering, l'opposto per scendere.
Stesso concetto per il volo, è la flight controller, grazie ai dati della IMU e varioaltimetro, che decide la velocità di traslazione e il corretto angolo di inclinazione del drone, il pilota con gli stick dice solo la direzione di spostamento e la velocità desiderata, il che rende il pilotaggio molto più semplice, e rapido da apprendere, rispetto ad un elicottero.
Per quanto riguarda gli ESC cineseria ne sconsiglio sempre l'uso, poi ci sono gli ESC cinesi di indubbia qualità, p.e. quelli di DJI, specifici per droni che hanno un costo contenuto senza nulla sacrificare alla qualità, non serve nemmeno la calibrazione perché è prefissata in produzione visto che devono lavorare in un range fisso imposto dalla flight controller e non dalla radio.
Non ultimo, su un drone è tutto deciso dalla flight controller, se è di livello elevato, p.e. NAZA o VRbrain è possibile anche il volo totalmente automatico attraverso waypoint GPS, cose che nel normale mondo del modellismo sono fantascienza :slight_smile: