Skocz do zawartości

ESP32 enkoder kwadraturowy


Bazuka1988

Pomocna odpowiedź

Witam, mam problem z implementacją kodu, który by obsługiwał enkodery kwadraturowe na esp32. Ktoś orientuje się w temacie jak to zrobić na przerwaniach? Potrzebuje odczytywać tylko impulsy. Na tych silnikach mam 1920 na obrót. Na arduino bardzo ładnie smigalo. Ma ktoś jakis pomysl?? Na google jest troche bibliotek, ale nie ogarniam tego jak to zaimplementowac.

To kod z arduino, dzialal super.  Wziety ze strony https://wiki.dfrobot.com/Micro_DC_Motor_with_Encoder-SJ01_SKU__FIT0450
Jak w linku takie same silniki i enkodery posiadam.

//The sample code for driving one way motor encoder
const byte encoder0pinA = 2;//A pin -> the interrupt pin 0
const byte encoder0pinB = 3;//B pin -> the digital pin 3
byte encoder0PinALast;
int duration;//the number of the pulses
boolean Direction;//the rotation direction


void setup()
{
  Serial.begin(57600);//Initialize the serial port
  EncoderInit();//Initialize the module
}

void loop()
{
  Serial.print("Pulse:");
  Serial.println(duration);
  duration = 0;
  delay(100);
}

void EncoderInit()
{
  Direction = true;//default -> Forward
  pinMode(encoder0pinB,INPUT);
  attachInterrupt(0, wheelSpeed, CHANGE);
}

void wheelSpeed()
{
  int Lstate = digitalRead(encoder0pinA);
  if((encoder0PinALast == LOW) && Lstate==HIGH)
  {
    int val = digitalRead(encoder0pinB);
    if(val == LOW && Direction)
    {
      Direction = false; //Reverse
    }
    else if(val == HIGH && !Direction)
    {
      Direction = true;  //Forward
    }
  }
  encoder0PinALast = Lstate;

  if(!Direction)  duration++;
  else  duration--;
}

 

Link do komentarza
Share on other sites

@ethanak 

6 minut temu, ethanak napisał:

Uważaj, bo piny są podciągnięte do masy, jeśli masz enkodery z wyjściem open zmień na początku pliku ESP32Encoder.cpp.

Witaj ponownie! Ty chyba jesteś moim aniołem stróżem😀

Jak to sprawdzić czy mam enkodery z wyjściem open?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

@ethanak znalazłem, zainstalowałem, działa!!! mam jeszcze jedną prośbę, da się wyłączyć PAUSE ? Robot ma jeździć cały czas i potrzebuję aby enkodery cały czas chodziły.

11111.jpg

@ethanak masakra...juz nie mysle...wyrzucilem ifa z petli i jest ok. Ciekawe czemu jeszcze startuje  na jednym enkoderze od 37 impulsow

To jest tylko przykład, fajna opcja. Moze bedzie mozna to wykorzystac przy starcie robota gdzie silniki startuja pokolei a nie oba naraz.

Ok, zostało podłączyć czujniki ultradzwiekowe. Mysle ze nie bedzie problemow ze starym kodem.

Edytowano przez Bazuka1988
Link do komentarza
Share on other sites

8 godzin temu, Bazuka1988 napisał:

zostało podłączyć czujniki ultradzwiekowe. Mysle ze nie bedzie problemow ze starym kodem.

Nie byłbym tego taki pewien. Jeśli znów spróbujesz AVR-owych tricków to wątpię czy to ruszy. Niestety - ESP32 to nie jest taki "bardzo duży AVR" tylko coś zupełnie innego, a dorobiona możliwość programowania przy użyciu Arduino IDE nie sprawi w jakiś magiczny sposób, że sprzęt się stanie kompatybilny z Arduino.

Nie używałem ultradźwięku z ESP32, ale do pomiaru długości impulsu czy też pomiaru odstępu czasu między zdarzeniami służy w ESP oddzielny podsystem (RMT). Poczytaj sobie w dokumentacji co to za zwierz: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/rmt.html

A tu masz przykład wykorzystania: https://esp32.com/viewtopic.php?f=17&t=5787

Sam nie używałem ultradźwięku z ESP32, więc dalej nie pytaj.

 

  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.