NodeMCU motor shield nefunguje změna směru otáčení

Odpovědět
sinuhet
Příspěvky: 4
Registrován: 15 srp 2019, 21:38
Reputation: 0

NodeMCU motor shield nefunguje změna směru otáčení

Příspěvek od sinuhet » 15 srp 2019, 22:09

Zdravím,
mám NodeMCU s ESP8266 a k němu motor shield ( https://arduino-shop.cz/arduino/1456-sh ... p-12e.html ). Připojil jsem dva motory, řízení přes PWM mi funguje v pořádku, ale pokud zkusím změnit směr (ten driver by měl mít H můstek), motory se zastaví.

Ať dělám, co dělám, kdykoli nastavím piny 0 nebo 2 na LOW, odpovídající motor zastaví na tak dlouho, dokud pin nevrátím na HIGH.

Motory a shield jsou napájeny zvlášť (dva zdroje se společnou zemí), obojí 6V. Jumper nastavení napájení na motor shieldu jsem sundal.

Vycházel jsem hlavně tady z toho:
https://hackaday.io/project/8856-incuba ... tor-shield
Po dlouhém googlení jsem narazil na problém, že někomu trvalo 10-15 vteřin, než se motory v opačném směru rozjely. Zkusil jsem různé kombinace (např. PWM na 0, DIR na LOW, počkat, PWM na 1000, počkat) s dobou čekání 5 minut, nic se nezměnilo.
Dokonce jsem zkoušel otočit i polaritu na motorech, jestli se vůbec umí točit na opačnou stranu, umí :D
Vzhledem k tomu, že na ty piny reaguje a jiné už by ten motor shield neměl používat, předpokládám, že nastavuji správné piny.

Demonstrační příklad:

Kód: Vybrat vše

#include <Wire.h> 
#define DIRL 0
#define DIRR 2
#define PWML 5
#define PWMR 4
;

void setup() {
  pinMode(DIRL, OUTPUT);
  pinMode(DIRR, OUTPUT);
  pinMode(PWML, OUTPUT);
  pinMode(PWMR, OUTPUT);
  analogWrite(PWMR,0);
  analogWrite(PWML,0);
  digitalWrite(DIRL,HIGH);
  digitalWrite(DIRR,HIGH);
  delay(3000);
  //směrové piny jsou na HIGH, PWM nastavím na 1000, motory jedou dopředu
  analogWrite(PWMR,1000);
  analogWrite(PWML,1000);
  delay(3000);
  //směrové piny nastavím na LOW, PWM zase na 1000, motory se zastaví
  digitalWrite(DIRL,LOW);
  digitalWrite(DIRR,LOW);
  analogWrite(PWMR,1000);
  analogWrite(PWML,1000);
  delay(3000);
  //směrové piny vrátím na HIGH, PWM na 1000, motory zase jedou
  digitalWrite(DIRL,HIGH);
  digitalWrite(DIRR,HIGH);
  analogWrite(PWMR,1000);
  analogWrite(PWML,1000);
  delay(3000);
}

void loop() {
}
Jsem začátečník, hraju si s MCU teprve měsíc, navíc doteď jen s Arduinem, takže lze očekávat i nějakou dost amatérskou chybu. Předem díky za ochotu a trpělivost.

jankop
Příspěvky: 560
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: NodeMCU motor shield nefunguje změna směru otáčení

Příspěvek od jankop » 15 srp 2019, 22:43

Byl jsem teď s kamarádem na pivo, tak můj úsudek a vyjadřovací schopnosti tím mohou být ovlivněny :D , ale domnívám se, že tvůj program je v podstatě v pořádku. Jen si musíš uvědomit, že při reverzaci směru se změní nastavený plný výkon na nulový výkon. Prostě když reverzuješ směr, musíš udělat inverzi výkonu. Pokud točíš s parametrem analogWrite(PWMR,1023); na plný výkon, tak pro reverzaci motoru na plný výkon musíš dát analogWrite(PWMR,0);
Tak to po čtyřech pivech chápu já.
Ještě doplním, podle mé teorie, pokud dáš analogWrite(PWMR,512), tak bude reverzace fungovat a motor se bude točit polovičními otáčkami sem a tam(nebo tam a sem)

sinuhet
Příspěvky: 4
Registrován: 15 srp 2019, 21:38
Reputation: 0

Re: NodeMCU motor shield nefunguje změna směru otáčení

Příspěvek od sinuhet » 15 srp 2019, 22:55

jankop píše:
15 srp 2019, 22:43
Byl jsem teď s kamarádem na pivo, tak můj úsudek a vyjadřovací schopnosti tím mohou být ovlivněny :D , ale domnívám se, že tvůj program je v podstatě v pořádku. Jen si musíš uvědomit, že při reverzaci směru se změní nastavený plný výkon na nulový výkon. Prostě když reverzuješ směr, musíš udělat inverzi výkonu. Pokud točíš s parametrem analogWrite(PWMR,1023); na plný výkon, tak pro reverzaci motoru na plný výkon musíš dát analogWrite(PWMR,0);
Tak to po čtyřech pivech chápu já.
Ještě doplním, podle mé teorie, pokud dáš analogWrite(PWMR,512), tak bude reverzace fungovat a motor se bude točit polovičními otáčkami sem a tam(nebo tam a sem)
Díky za tip.

Zkusil jsem jim nastavit 0, nicméně motory stojí. Zkusil jsem nastavit i -1000, kupodivu to šlo zkompilovat, ale i tak motory stály.
Tady je pro jistotu upravený demonstrační příklad, který jsem do toho teď nahrál:

Kód: Vybrat vše

#include <Wire.h> 
#define DIRL 0
#define DIRR 2
#define PWML 5
#define PWMR 4
;

void setup() {
  pinMode(DIRL, OUTPUT);
  pinMode(DIRR, OUTPUT);
  pinMode(PWML, OUTPUT);
  pinMode(PWMR, OUTPUT);
  analogWrite(PWMR,0);
  analogWrite(PWML,0);
  digitalWrite(DIRL,HIGH);
  digitalWrite(DIRR,HIGH);
  delay(3000);
  //směrové piny jsou na HIGH, PWM nastavím na 1000, motory jedou dopředu
  analogWrite(PWMR,1000);
  analogWrite(PWML,1000);
  delay(3000);
  //směrové piny nastavím na LOW, PWM zase na 1000, motory se zastaví
  digitalWrite(DIRL,LOW);
  digitalWrite(DIRR,LOW);
  analogWrite(PWMR,0);
  analogWrite(PWML,0);
  delay(3000);
  //směrové piny vrátím na HIGH, PWM na 1000, motory zase jedou
  digitalWrite(DIRL,HIGH);
  digitalWrite(DIRR,HIGH);
  analogWrite(PWMR,1000);
  analogWrite(PWML,1000);
  delay(3000);
}

void loop() {
}

jankop
Příspěvky: 560
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: NodeMCU motor shield nefunguje změna směru otáčení

Příspěvek od jankop » 15 srp 2019, 22:59

Testuješ to na ESP8266 nebo na Arduinu?

sinuhet
Příspěvky: 4
Registrován: 15 srp 2019, 21:38
Reputation: 0

Re: NodeMCU motor shield nefunguje změna směru otáčení

Příspěvek od sinuhet » 15 srp 2019, 23:08

jankop píše:
15 srp 2019, 22:59
Testuješ to na ESP8266 nebo na Arduinu?
Na ESP8266 v Arduino IDE.
Ale mám tu i několik Arduino Nano, tak jestli myslíte, že v tom bude nějaký rozdíl, můžu to zkusit nahrát do toho.
Popravdě jsem tím shieldem pěkně znechucený. Datasheet není, popis pinout je takový podivný (vůbec netuším, proč jsou tam 3 řady GPIO pinů, ale zase tak hluboko jsem to zatím nezkoumal) a ani oficiální example jsem k tomu nenašel. Je to můj první shield, doteď jsem používal nepájivé pole a klasicky připravené destičky, a nějak mám pocit, že to nemám pod kontrolou. Jestli se mi to nepovede rozhýbat, vyberu si nějaký ne-shield driver a postavím to buď na ESP32 nebo na Arduinu.
Taky je možné, že je ten shield vadný, nebyla by to první věc, co mi přišla nefunkční. Ale mnohem pravděpodobnější je moje chyba.

sinuhet
Příspěvky: 4
Registrován: 15 srp 2019, 21:38
Reputation: 0

Re: NodeMCU motor shield nefunguje změna směru otáčení

Příspěvek od sinuhet » 16 srp 2019, 21:30

jankop píše:
15 srp 2019, 22:59
Testuješ to na ESP8266 nebo na Arduinu?
Teď jsem zkusil místo ESP8266 Arduino Nano (stejný kód, akorát samozřejmě odpovídající piny), chová se to úplně stejně :( takže asi vadný shield.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Google [Bot] a 0 hostů