Bazuka1988 Napisano Grudzień 14, 2020 Udostępnij Napisano Grudzień 14, 2020 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--; } Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Grudzień 14, 2020 Udostępnij Grudzień 14, 2020 Tutaj masz właściwą bibliotekę: https://github.com/madhephaestus/ESP32Encoder Nawet przykład jest... 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. U mnie ładnie działało. 1 1 Cytuj Link do komentarza Share on other sites More sharing options...
Bazuka1988 Grudzień 14, 2020 Autor tematu Udostępnij Grudzień 14, 2020 @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? Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Grudzień 14, 2020 Udostępnij Grudzień 14, 2020 Ja jeśli czegoś nie wiem sprawdzam w dokumentacji albo zadaję komkretne pytanie. Spróbuj 🙂 1 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
Bazuka1988 Grudzień 14, 2020 Autor tematu Udostępnij Grudzień 14, 2020 (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. @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 Grudzień 14, 2020 przez Bazuka1988 Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Grudzień 15, 2020 Udostępnij Grudzień 15, 2020 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. 1 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!