Controllo ESC in PWM

Ciao a tutti!
Ho un piccolo grande problema…
Oggi ho provato a comandare la mia ESC con un segnale PWM da Arduino nano ma niente, il motore non gira…
Ho letto su vari forum e ho dedotto che l’uscita PWM dovrebbe variare l’onda rettangolare fino ad un massimo del 90% del duty cycle, quindi ho collegato l’uscita 9 del mio arduino ad un oscilloscopio e ho notato che quando muovevo il potenziometro per avere 5 V in entrata di Arduino la mia onda PWM non aumentava il suo duty cycle… Ho controllato l’uscita con la porta seriale e mi dava il massimo! ovvero 180.
Lascio il programma quì di seguito…
So di essere stato un po confusionale ma non sapevo in che altro modo spiegarmi.
Grazie mille
Alessandro

#include <Servo.h>
int potpin = A0;       // Analogico sul pin A0
int val;               // valore che sarà letto
Servo motor_1;
void setup()
{
  motor_1.attach(9);
  Serial.begin(9600);
}
void loop()
{
  val = analogRead(potpin);
  if (val <= 508)           //divido con 508 perchè utilizzo l'analogico della playstation
  {                         //e quando rimane al centro da in entrata un valore di circa 506/8
    val = 0;
    motor_1.write(val);
  }
  else if (val > 508)
  {
    val = map(val, 508, 1023, 0, 225);
    motor_1.write(val);
  }
  Serial.println(val);
  delay(15);
}

Ho provato ad utilizzare anche l’esempio servo knob ma non cambia niente…

La libreria servo.h non genera un segnale PWM con duty cycle da 0 al 100% ma genera un impulso da 1mS a 2mS ogni 20mS (50Hz)

Hai controllato quale valore leggi sull entrata analogica?
Ciao Uwe

… anche perché i Servo lavorano in PPM e non in PWM :wink:

Ricordando una spiegazione di Astro …

In PWM l’informazione è veicolata dal rapporto tra parte bassa e parte alta del segnale, in PPM l’informazione può essere veicolata in due modi, sia dalla durata della sola parte alta, o parte bassa, del segnale, che dalla posizione dell’impulso se è un treno d’impulsi componente un pacchetto di dati.

Guglielmo

P.S.: QUESTO post spiega piuttosto bene :wink:

Ciao Uwe
Sull'entrata analogica ho i dati che variano da 0 fino a 1023 quindi tutto giusto...
Il post che mi ha linkato gpb01 lo leggerò domani perché tra poco inizio a lavorare...
Grazie mille

Un mio amico mi ha detto che forse potrei controllarla anche con un analogWrite… Che mi dite?
Ho fatto il micro programma e comunque non mi varia il valore scritto…
Mi sento scemo perchè non ne capisco il motivo
Lascio il programma qui di seguito
Grazie mille

int motor = 9;
int potpin = A0;       // Analogico sul pin A0
int val;               // valore che sarà letto
void setup()
{
  pinMode(motor, OUTPUT);
  Serial.begin(9600);
}
void loop()
{
  val = analogRead(potpin);
  Serial.println(val);
  delay(500);
  if (val <= 508)           //divido con 508 perchè utilizzo l'analogico della playstation
  {                               //e quando rimane al centro da in entrata un valore di circa 506/8
    val = 0;
    analogWrite(motor, val);
  }
  else if (val > 508)
  {
    val = map(val, 508, 1023, 0, 255);
    analogWrite(motor, val);
  }
  Serial.println(motor);
  delay(15);
}

Cioè non ti varia il valore di val quando giri il potenziometro ?

No, mi varia il valore di val da 0 a 1023 ma il valore che dovrebbe scrivere su motor nell’analogWrite rimane fisso a 9…

Serial.println(motor);

non è che stampi il pin a cui è attaccqato il motore?...

non è che stampi il pin a cui è attaccqato il motore?.

:smiley: :smiley: :smiley: :smiley: :smiley:

Teoricamente no... Però se metto println di val anche li mi da i valori corretti da 0 a 255 grazie mille ahahah
La domanda adesso è: si può controllare un ESC con un segnale analogWrite?

Alessandro_Redi:
Un mio amico mi ha detto che forse potrei controllarla anche con un analogWrite... Che mi dite?

No, non funziona; La risoluzione del PWM nei range che serve per un ESC pilotato in PPM é troppo ristretto.

Comunque Tu sai che il ESC deve essere all inizio armato?

Ciao Uwe

Alessandro_Redi:
Un mio amico mi ha detto che forse potrei controllarla anche con un analogWrite... Che mi dite?

Che così rischi solo di fare danni !

Se avessi letto attentamente il post indicato, avresti notato:

... avoid calling the servo pulses PWM because analogWrite is the way Arduino produces PWM and driving a servo using Arduino analogWrite can destroy servos.

Guglielmo

Ciao Uwe
Per armare cosa intendi? Io l'ho programmata con la sua relativa program card,con qualche difficoltà...
Lascio qui di seguito il sul "libretto" delle istruzioni... Quello che mi incuriosisce e in pagina 3 sotto la voce connection to the receiver
Grazie mille
Alessandro

Ciao Alessandro
Non do risposte private perché non credo di dare le soluzioni migliori e perché é utile che le risposte siano visibili a tutti, anche quelli che cercano soluzioni a dei problemi analoghi.

Armare vuol dire che gli ESC non fanno partire il motore se non dai prima 0% di gas. Il ESP dovrebbe dare un suono di conferma e poi alimenta il motore. Comunque qualcuno che fa modellismo sa spiegarlo meglio.

Ma i LED del ESC sono accesi come descritto nel manuale?

Ciao Uwe

Essendo un esc per uso automobilistico non va armato, ma la prima volta che lo usi va calibrato come indicato nelle istruzioni, inoltre alcuni esc vanno in blocco se appena accese non gli arriva il segnale come se lo stick fosse al centro in posizione neutra.

Volendo puoi usare l'Esc anche per alimentare arduino da Vin impostando la tensione del bec a 8,4V.

Certo Uwe hai ragione,
i led si accendono tutti da manuale ma non ho mai sentito emettere nessun suono...
Riguardo a quello che dice Zef domani ci provo sicuramente. Comunque se va in blocco basta spegnerla e riaccenderla per "sbloccarla"?
Grazie Mille
Alessandro

Alessandro_Redi:
Certo Uwe hai ragione,
i led si accendono tutti da manuale ma non ho mai sentito emettere nessun suono...
Riguardo a quello che dice Zef domani ci provo sicuramente. Comunque se va in blocco basta spegnerla e riaccenderla per "sbloccarla"?
Grazie Mille
Alessandro

Si, spegni e riaccendi... attendi qualche secondo quando spegni per dare il tempo al condensatore di scaricarsi.

Grazie a tutti per l'aiuto!
Oggi ho provato il tutto e sono riuscito a farlo funzionare!
Zef le tue indicazione sono state mitiche ahaha
Vorrei solo precisare che, a differenza di quanto pensavo all'inizio, il problema non era di ARDUINO...
Mitico lui funziona sempre
Alessandro