Ho provato a cercare dei modelli che mi facessero capire come scrivere un codice per pilotare un motore brushless trifase con relativo esc, ma gli esempi che ho trovato fanno tutti riferimento all'utilizzo di un potenziometro. Il mio obiettivo è quello di pilotare il motore brushless senza l'utilizzo del potenziometro, ma dando direttamente in input la velocità di rotazione di cui ho bisogno. Come si può procedere?
Ciao, il potenziometro verrà letto dall'arduino per generare l'uscita verso l'esc. Pubblica il tuo codice secondo le regole del forum usando "</>" e sarà facile rimuovere il potenziometro. Oppure carica la libreria esc.h e guarda i loro esempi di codice, sicuramente in alcuni ce n'è uno senza potenziometro.
Saluti
perfetto, grazie mille! Ora proverò a dare un'occhiata agli esempi se trovo qualcosa. In alternativa carico qui sotto il codice così da capire da dove sono partito.
#include <Servo.h>
Servo esc;
void setup() {
esc.attach(9);
}
int v = 0;
void loop() {
v = analogRead(A0);
v = map(v, 0, 1024, 1000, 2000);
esc.writeMicroseconds(v);
}
Questo codice è corretto ma fa uso di un potenziometro.
P.S. spero di aver caricato nel modo corretto il codice
Estremamente facile. Elimina dal tuo codice le righe:
v = analogRead(A0);
v = map(v, 0, 1024, 1000, 2000);
E sostituiscili con l'algoritmo appropriato per il tuo progetto per calcolare la variabile "v", che indica la velocità del motore. Questo valore deve essere compreso tra 1000, (motore fermo) e 2000, (motore al massimo dei giri).
Questo valore verrà scritto in esc dalla riga del tuo codice:
esc.writeMicroseconds(v);
I valori 1000 e 2000 sono i valori tipici per un normale brushless, dovresti guardare la scheda tecnica del tuo motore per conoscerne i valori precisi e ottenere le sue massime prestazioni.
Un altro modo per gestirlo sarebbe con la libreria servo, in questo LINK vedrai un esempio.
Saluti.
gentilissimo davvero. Grazie al tuo consiglio sono riuscito a modificare il codice e ottenere un ottimo risultato. Se posso approfitterei della tua gentilezza per chiederti un'altra cosa. Il mio codice è diventato il seguente:
#include <Servo.h>
int val;
Servo motor_1;
void setup() {
motor_1.attach(9);
Serial.begin(9600);
delay(1000);
}
void loop() {
val = map(val, 0, 1023, 0, 180);
motor_1.write(0);
}
dove dentro la parentesi di motor_1.write(0);
inserisco un numero compreso tra 0 e 180. La mia domanda è: come faccio a capire a quanti giri sta andando il mio motore? Cioè come faccio, ad esempio, a capire a quanti rpm corrisponde il numero 180, o qualsiasi altro numero? Al momento sto usando un t-motor navigator MN1806 1400 kv e un ESC da 30A per intenderci.
Non devi inserire un numero compreso tra 0 e 180 devi inserire un numero compreso tra 1000 e 2000.
E non dovresti usare l'istruzione motor_1.Write dovresti usare l'istruzione: motor_1.writeMicroseconds (); Prova il seguente codice per vedere come va.
#include <Servo.h>
Servo motor_1;
void setup() {
motor_1.attach (9);
}
void loop() {
// giri minimi
motor_1.writeMicroseconds(1130);
delay(3000);
// mezza marcia
motor_1.writeMicroseconds(1470);
delay(3000);
// giri massimi
motor_1.writeMicroseconds(1990);
delay(3000);
}
funziona, grazie mille!
Ma per esempio, il numero 1130 a quanti rpm dovrebbe corrispondere? Questa domanda ovviamente vale poi anche per gli altri valori.
Non puoi sapere che devi fare delle prove. Ad esempio inserisci 1000 e scendi fino ad ottenere i minimi e lo stop, e fai lo stesso nella parte alta 2000, 2050 ecc... In questo modo otterrai il range di valori che il tuo motore supporta e in base ai giri massimi secondo il datasheet del motore, costruirai una tabella approssimata valori-giri
ottimo grazie mille. Sei stato di grandissimo aiuto!
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.