Go Down

Topic: Domanda per concetto base 2- motori (Read 212 times) previous topic - next topic

fedale

Apr 20, 2019, 11:58 am Last Edit: Apr 21, 2019, 10:34 am by fedale
Buongiorno a tutti.

stiamo costruendo un piccolo robot
che usa tra le altre cose

un Arduino NANO e una scheda DEEK-ROBOT per controllare 2 motori AC
SCHEDA MOLTO PICCOLA E QUINDI PRATICA da usare



PER non Scrivere una tonnellata di cose guardate qui per vedere come questa scheda funziona:
http://www.wcmrra.org/content.aspx?page_id=2507&club_id=407609&item_id=1260







Il problema è NON riusciamo a funzionare i motori A e B in modo che vadano nella stessa direzione


In sostanza con
LOW  il motore va in una direzione
HIGH va in quella opposta

e fino a qui funziona.
Ma se proviamo a farli andare entrambi in 1 direzione unica  1 dei 2 non va.


chiaramente così siamo molto limitati  :/

Code: [Select]


void setup()
{
  pinMode(M1, OUTPUT);
  pinMode(M2, OUTPUT);
}

void loop()
{
  digitalWrite(M1, LOW);  // set direction of motor 1
  digitalWrite(M2, HIGH); // set direction of motor 2
  analogWrite(D1, 100);  // set speed of motor (0-255) motor 1
  analogWrite(D2, 255);  // set speed of motor (0-255) motor 2
  delay(30);
}





abbiamo già provato a:
- cambiare scheda
- invertire collegamenti
- controllare porte che siano PWM


Qualcuno ha qualche idea?
Grazie mille

NB Si abbiamo già letto le 50  pagine/forum più rilevanti che ci sono online :)

steve-cr

Si, ho letto anche io che usare più di una uscita in PWM porta dei problemi di conflitto.

Ma puoi aggirare il problema. Però aspettiamo qualcuno che ne sa più di me.
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

uwefed

#2
Apr 21, 2019, 10:55 pm Last Edit: Apr 21, 2019, 11:13 pm by uwefed
Le Tue informazioni sono molto scarse e per questo non posso darti nessun consiglio. Non so ne con quali pin hai collegato la schedina ne che pin corrispondono a M1 M2 D1 e D2 nello skech.

La scedia ha 6 entrate IN1 a IN4 e EN1 e EN2
Le entrate IN1, IN2 e EN1 sono per un motore e IN3, IN4 e EN2 per l' altro.

se metti IN1 a H e IN2 a L il motore gira in una direzione
se metti IN1 a L e IN2 a H il motre gira nel altro senso.
se entrambi i le entrate sono a L o a H il motore é cortociquitato e percui frena.
per lasciarlo girare per inerzia devi togliere i ponticelli usare il pin EN1 e metterlo a L per spegnere le uscite. H abilita le uscite e fa girare il motore. Per questo devi mettere il PWM sul ENx

stessa cosa vale per IN3, IN4 e EN2 per l' altro motore.
Ciao Uwe

fedale

#3
Apr 23, 2019, 08:43 pm Last Edit: Apr 23, 2019, 09:07 pm by fedale
Grazie per le risposte,
i collegamenti sono:


int D1 = 6;  // IN1 pwm
int M1 = 8;  // IN2
int D2 = 9;  // IN3 pwm
int M2 = 7;  // IN4

Ho utilizzato IN1 e IN2 per regolare la velocità del motore
Cosa sto sbagliando?

Questo è il codice completo:

Code: [Select]


int D1 = 6;  // IN1 pwm
int M1 = 8;  // IN2
int D2 = 9;  // IN3 pwm
int M2 = 7;  // IN4

void setup()
{
 pinMode(M1, OUTPUT);
 pinMode(M2, OUTPUT);
}

void loop()
{
 digitalWrite(M1, LOW);  // set direction of motor 1
 digitalWrite(M2, HIGH); // set direction of motor 2
 analogWrite(D1, 100);  // set speed of motor (0-255) motor 1 (IN1)
 analogWrite(D2, 255);  // set speed of motor (0-255) motor 2 (IN3)
 delay(30);
}





Grazie.

gpb01

#4
Apr 23, 2019, 08:54 pm Last Edit: Apr 23, 2019, 08:55 pm by gpb01
>fedale:   ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie. :)

Guglielmo
Search is Your friend ... or I am Your enemy !

uwefed

Lo avevo spiegato.
Con
Code: [Select]
digitalWrite(M1, LOW);  // set direction of motor 1
digitalWrite(M2, HIGH); // set direction of motor 2
analogWrite(D1, 100);  // set speed of motor (0-255) motor 1 (IN1)
analogWrite(D2, 255);  // set speed of motor (0-255) motor 2 (IN3)

alterni tra alimentare il motore e frenarlo mettendolo in corto con LOW-LOW e HIGH-HIGH sui 2 poli del motore.

Se vuoi pilotare la velocitá del motore devi usare il pin EN1 per il primo motore e EN2 per l' altro.

Grüße Uwe

fedale

Grazie mille Uwe,

effettivamente adesso funziona,
anche se ancora qualche mistero c'è.

analogWrite(EN1, 0);  spegne il motore ok
ma se voglio  rallentarlo ...

analogWrite(EN1, 150); se imposto solo questo fa rallentare entrambi i motori e se imposto l'altro anche

analogWrite(EN2, 150);  uno dei 2 si ferma...
 :)

scusa l' ignoranza...
i collegamenti sono giusti...probabilmente ci sfugge il funzionamento di EN1 e En2  :)



Code: [Select]

// Connection pins:
int IN1 = 7;
int IN2 = 17;
int IN3 = 8;
int IN4 = 16;
int EN1 = 6;  // pwm
int EN2 = 9; // pwm


void setup() {

  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

void loop() {

  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW); 
  digitalWrite(IN4, HIGH);
  delay(2000);
  analogWrite(EN1, 0);  //spegne motore 1
  analogWrite(EN2, 0);  //spegne motore 2


uwefed

#7
Apr 25, 2019, 06:39 pm Last Edit: Apr 25, 2019, 06:40 pm by uwefed
Come hai collegato i motori alla scheda?

Go Up