Go Down

Topic: Controllo ESC in PWM (Read 546 times) previous topic - next topic

Alessandro_Redi

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

Code: [Select]

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

uwefed

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

gpb01

#2
Mar 17, 2018, 01:09 pm Last Edit: Mar 17, 2018, 01:10 pm by gpb01
... anche perché i Servo lavorano in PPM e non in PWM ;)

Ricordando una spiegazione di Astro ...

Quote
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 ;)
Search is Your friend ... or I am Your enemy !

Alessandro_Redi

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

Alessandro_Redi

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

Code: [Select]

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);
}



brunello22

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

Alessandro_Redi

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

Patrick_M

  Serial.println(motor);

non è che stampi il pin a cui è attaccqato il motore?...
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

brunello22

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

Alessandro_Redi

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?

uwefed

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

gpb01

#11
Mar 19, 2018, 08:43 am Last Edit: Mar 19, 2018, 08:50 am by gpb01
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:

Quote
... 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
Search is Your friend ... or I am Your enemy !

Alessandro_Redi

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

https://hobbyking.com/media/file/264719761X1465900X55.pdf

uwefed

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

-zef-

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.

Go Up