małyelektronik Napisano Sierpień 31, 2016 Udostępnij Napisano Sierpień 31, 2016 Witam wszystkich forumowiczów, Na początek chciałbym zaznaczyć, że to mój pierwszy post na tym forum, więc prosiłbym o wyrozumiałość 😉. Jestem w trakcie konstruowania swojego pierwszego robota - mój wybór padł na micromouse'a. Po stworzeniu schematu elektrycznego i zlutowaniu płytki natrafiłem na następujący problem: po inicjalizacji i ustawieniu równych wartości wypełnienia (180) w rejestrach sterujących PWM (OC0 i OC2) silniki nie pracują z równą mocą. Zmierzyłem napięcie na wyjściu z mostka i okazało się, że zgodnie z oczekiwaniami jeden silnik otrzymuje niższe napięcie skuteczne. Początkowo sądziłem, że jest to wina mostka i zamieniłem go na zapasowy - niestety nie przyniosło to oczekiwanej poprawy. Mostek wciąż wysyła na prawy silnik mniejszą moc o ok 10%, chociaż w pewnych momentach różnica wynosi 5-15[%], co potwierdza odczyt z enkoderów w czasie rzeczywistym. Sprawdziłem wielokrotnie konfigurację portów i inicjalizację trybu fast-pwm dla atmegi32A i powinna być prawidłowa. Chciałbym w związku z tym prosić o pomoc - czy ktoś ma pomysł, co może być ustawione w wadliwy sposób? Elementy elektroniczne: Serce układu - Atmega32A Enkodery - 2 x moduł enkodera do silnika pololu Czujniki - 4 pary fototranzystor (SFH313A) - dioda IR (SFH4450) Źródło zasilania - Akumulator Li-Pol 2s TURNINGY 1650mAh Stabilizator napięcia - LM2940 1A w obudowie TO-220 (poprzednio 7805) Silniki - Pololu HP 50:1 z obustronnym wałem Komunikacja z robotem - wyświetlacz LCD 16x1 oraz 4 przyciski monostabilne wewnętrznie podciągnięte do VCC Taktowanie - wewnętrzny oscylator kwarcowy 8MHz Dodatkowe informacje: Reset jest wewnętrznie podciągnięty do VCC. Za włączenie zasilania odpowiada przycisk bistabilny nie uwzględniony w poniższym schemacie. Pozostałe podzespoły działają prawidłowo - odczyt odległości na przetworniku ADC jest stabilny, enkodery pracują poprawnie oraz napięcie na baterii i za stabilizatorem jest na odpowiednim poziomie. Schemat elektryczny: Moje główne podejrzenia padają na: Inicjalizacja - sprawdzałem datasheet atmegi, ale może coś przeoczyłem charakterystycznego dla któregoś z tych liczników (poniżej kod inicjalizacji rejestrów): void PWM_init(void) { OCR0 = 0; OCR2 = 0; TCCR0 |= (1< TCCR2 |= (1< } Mostek - koniec końców mogłem kupić dwa wadliwe z rzędu 🙁 Wewnętrzny kwarc - ich stabilność i dokładność pozostawia wiele do życzenia, ale czy w takim razie błąd nie powinien oscylować w granicy 10% cały czas? Silnik - zastanawiałem się nad układem dwóch par diod sygnalizacyjnych równolegle połączonych, ale w związku na ich znikomy pobór prądu uznałem, że nie powinny stanowić problemu Będę wdzięczny za wszelkie sugestie i uwagi 😉 main.c PWM.h PWM.c global_defines.h global.h encoders.h encoders.c Link do komentarza Share on other sites More sharing options...
Lukaszm Sierpień 31, 2016 Udostępnij Sierpień 31, 2016 Mostek wciąż wysyła na prawy silnik mniejszą moc o ok 10%, chociaż w pewnych momentach różnica wynosi 5-15[%], co potwierdza odczyt z enkoderów w czasie rzeczywistym. Mierzysz moc? W jaki sposób? Zmierzyłem napięcie na wyjściu z mostka Czym? co potwierdza odczyt z enkoderów w czasie rzeczywistym W jaki sposób odczytywałeś informacje z enkoderów? Silniki podczas testów były obciążone? Dobrze rozumiem że sterując w pętli otwartej dwoma napędami za pomocą źródła napięciowego chcesz uzyskać takie same prędkości obrotowe wałów na wyjściu? Mogę się mylić, ale to 10-15% różnicy w prędkości obrotowej jest w normie i wynikałoby z rozrzutu parametrów napędów. Zastanawiające jest to co piszesz o mocy, no ale może wyjaśnij w jaki sposób ją zmierzyłeś. Link do komentarza Share on other sites More sharing options...
małyelektronik Sierpień 31, 2016 Autor tematu Udostępnij Sierpień 31, 2016 Mierzysz moc? W jaki sposób? Zmierzyłem napięcie na wyjściach B01 i A01, na woltomierzu widać wyraźną różnicę. W jaki sposób odczytywałeś informacje z enkoderów? Program w pętli głównej while wysyła z każdą iteracją stan enkoderów na wyświetlacz LCD, kiedy lewy silnik osiąga 1000 impulsów, odczyt prawego waha się w granicach 850-950. Silniki podczas testów były obciążone? Dokonywałem pomiarów na silnikach nieobciążonych (trzymałem prototyp w powietrzu), jak również ustawiłem go na równym i twardym podłożu i rezultat jest taki sam. Mogę się mylić, ale to 10-15% różnicy w prędkości obrotowej jest w normie i wynikałoby z rozrzutu parametrów napędów. Rozumiem, gdyby różnica była stała i wynikałaby z budowy mostka, ale jest ona zmienna i to mnie najbardziej zastanawia. Dobrze rozumiem że sterując w pętli otwartej dwoma napędami za pomocą źródła napięciowego chcesz uzyskać takie same prędkości obrotowe wałów na wyjściu? Zgadza się. Link do komentarza Share on other sites More sharing options...
Lukaszm Sierpień 31, 2016 Udostępnij Sierpień 31, 2016 Zmierzyłem napięcie na wyjściach B01 i A01, na woltomierzu widać wyraźną różnicę. Hmm ja miałbym wątpliwości przy pomiarze PWM multimetrem. W jakim trybie to mierzyłeś? Masz oscyloskop? Nie napisałeś dokładnie jakie masz enkodery, mógłbyś podać jakiś link? Jeśli magnetyczne to różnice w prędkości obrotowej mogą wynikać z niepoprawnego ułożenia magnesu i czujników względem siebie. 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
małyelektronik Sierpień 31, 2016 Autor tematu Udostępnij Sierpień 31, 2016 Hmm ja miałbym wątpliwości przy pomiarze PWM multimetrem. W jakim trybie to mierzyłeś?Masz oscyloskop? Niestety nie posiadam oscyloskopu. Pomiar prowadziłem go w trybie prądu stałego - popraw mnie proszę jeżeli się mylę, ale czy w takim przypadku multimetr nie powinien pokazywać napięcia skutecznego? Nie napisałeś dokładnie jakie masz enkodery, mógłbyś podać jakiś link? Posiadam dokładnie takie: https://botland.com.pl/enkodery/4884-zestaw-enkoderow-magnetycznych-do-micro-silnikow-pololu-kompatybilne-z-hpcb-27-18v-2-szt.html Jeśli magnetyczne to różnice w prędkości obrotowej mogą wynikać z niepoprawnego ułożenia magnesu i czujników względem siebie Magnesy są ustawione symetrycznie, właśnie sprawdziłem. Poza tym robot postawiony na podłożu wyraźnie skręca w jedną stronę za każdym razem, dlatego wstępnie założyłem, że pomiar enkoderów jest poprawny. Link do komentarza Share on other sites More sharing options...
Lukaszm Wrzesień 1, 2016 Udostępnij Wrzesień 1, 2016 Przeprowadziłem mały test, podpiąłem generator do DMM (UNI-T UT70A) i w trybie DC dla f>=10Hz wskazywana wartość napięcia dla różnych wypełnień jest poprawna (to znaczy miernik wskazuje V_amp * wypelnienie, gdzie wypelnienie jest w zakresie 0-1). W trybie AC wskazania nie są poprawne, nie ma nawet zależności że większe wypełnienie sygnału to większe wskazywane napięcie. ale czy w takim przypadku multimetr nie powinien pokazywać napięcia skutecznego? Wykłady z Miernictwa Elektrycznego miałem już jakiś czas temu, ale na 95% w trybie DC liczona jest wartość średnia, w trybie AC wartość skuteczna (true RMS albo zakładając że sygnał jest sinusoidalny). Jest jeden sposób na sprawdzenie czy Twój pomiar miernikiem jest poprawny: podepnij go między GND a jedno z wyjść PWM mikrokontrolera i generuj tam przebieg o ustalonym wypełnieniu. Miernik powinien pokazywać dokładnie wartość taką jak napisałem powyżej (przy czym V_amp to 5V). Poza tym robot postawiony na podłożu wyraźnie skręca w jedną stronę za każdym razem, dlatego wstępnie założyłem, że pomiar enkoderów jest poprawny. To IMO nie jest nic dziwnego. W pętli otwartej nie uzyskasz jazdy na wprost. Druga sprawa: do obsługi enkoderów wykorzystujesz przerwania zewnętrzne. Zastosowane sensory Halla mają wbudowaną histerezę, pytanie czy o wystarczająco szerokiej pętli. Ogólnie jedna z możliwości to taka że np. na jednym z enkoderów dostajesz czasami szpilkę i liczysz to jako impuls. Oscyloskop (albo analizator logiczny) mógłby rozwiać tą wątpliwość. Link do komentarza Share on other sites More sharing options...
marek1707 Wrzesień 1, 2016 Udostępnij Wrzesień 1, 2016 Chyba szkoda czasu na dzielenie włosa na czworo i doszukiwanie się tajemniczych efektów. Lukaszm już wszystko napisał: "W pętli otwartej nie uzyskasz jazdy na wprost." W przypadku przebiegu prostokątnego multimetr na zakresie DC pokazuje prawidłowo (z definicji działania całkującego przetwornika A/C) wartość średnią napięcia, która w przypadku "jednoznakowego" prostokąta (np. tylko dodatniego) jest zarazem wartością skuteczną. To bardzo dobrze nadaje się do pomiaru zarówno na silniku jak i na wyjściu PWM procesora. Nie, silniki nigdy nie będą równe tak jak nie są równe przekładnie, mostki, koła i reszta tego co nas otacza. 10-20% to całkiem dobra dokładność takiej mechaniki i przecież po to są enkodery by takie rzeczy kompensować. Prostym testem jest zamiana silników stronami lub choćby kabli łączących je z mostkami. Jeżeli silniki są w pojeździe, to zapewne jeden kręci w lewo a drugi w prawo. Już samo to powoduje, że komutator i przekładnia działają inaczej. Co więcej - różnica prędkości będzie nieliniowo zależna od prędkości obrotowej i obciążeń silnika. Taki paskudny jest świat. Z kolei dobrym testem działania enkoderów będzie poprawna jazda (prosto i z określonymi promieniami skrętu) z ich użyciem więc zrób coś konstruktywnego i napisz funkcję sterowania silnikami na podstawie odczytów z enkoderów. Pamiętaj przy tym, że skręcanie w takim systemie działa idealnie gdy punktem styku opony z podłożem jest punkt. Jeżeli masz szerokie opony (jakieś zdjęcie tego Twojego cuda?) to poślizg na skręcanej oponie będzie przypadkowy i tak samo przypadkowy będzie punkt obrotu - nawet przy dużym promieniu skrętu. Link do komentarza Share on other sites More sharing options...
Lukaszm Wrzesień 1, 2016 Udostępnij Wrzesień 1, 2016 Bardzo dziękuję za potwierdzenie Marku 🙂 Mam tylko jedno pytanie: wartość średnią napięcia, która w przypadku "jednoznakowego" prostokąta (np. tylko dodatniego) jest zarazem wartością skuteczną. Jesteś pewien? Zrobiłem sobie przykładowe obliczenie dla przebiegu o napięciu 0-5V i wypełnieniu 0,6 (60%). U_avg=3V, U_rms=sqrt(15)=3,9V. Oczywiście mogę coś mylić/mieszać. Link do komentarza Share on other sites More sharing options...
małyelektronik Wrzesień 1, 2016 Autor tematu Udostępnij Wrzesień 1, 2016 Dziękuję bardzo za wskazania, jestem początkujący w tej materii i sądziłem, że elementy elektroniczne są bardziej deterministyczne, ale widzę, że czeka mnie jeszcze wiele niespodzianek 🙂. Z kolei dobrym testem działania enkoderów będzie poprawna jazda (prosto i z określonymi promieniami skrętu) z ich użyciem więc zrób coś konstruktywnego i napisz funkcję sterowania silnikami na podstawie odczytów z enkoderów. To może być dobry pomysł, spróbuję pozmieniać bieguny silnika i trochę poeksperymentować z stworzeniem pętli sprzężenia zwrotnego z enkoderów i czujników. Pamiętaj przy tym, że skręcanie w takim systemie działa idealnie gdy punktem styku opony z podłożem jest punkt. Jeżeli masz szerokie opony (jakieś zdjęcie tego Twojego cuda?) to poślizg na skręcanej oponie będzie przypadkowy i tak samo przypadkowy będzie punkt obrotu - nawet przy dużym promieniu skrętu. Opony mam dosyć wąskie, ale nie są punktowe to fakt. Ze zdjęciem robota chciałbym się powstrzymać, ponieważ jego koncepcja prawdopodobnie się zmieni i chciałbym się podzielić dopiero gotowym efektem, ponieważ po kilku "operacjach plastycznych" z użyciem lutownicy nie wygląda za ładnie 😉 Mam jeszcze jedną wątpliwość, która wyniknęła w trakcie testów. W momencie, gdy silniki kończą pracę (z obciążeniem lub bez) w pewnym momencie można odczuć lekkie stukanie lewego silnika - gdy pozostawię włączone bity: sterujące kierunkiem (AIN1 oraz BIN1) oraz włączający mostek (STBY), a wartość PWM ustawię na 0, to dotykając lewego koła można odczuć lekkie stukanie, podczas gdy na prawym nie wyczuwam nic, a oba koła się nie poruszają. Podczas pierwszych testów w takiej konfiguracji oba koła lekko stukały. Czy takie zachowanie jest normalnie dla poprawnie działającego silnika i również wynika z niedoskonałości wykonania elementu mechanicznego? Link do komentarza Share on other sites More sharing options...
Harnas Wrzesień 2, 2016 Udostępnij Wrzesień 2, 2016 małyelektronik, zmierz po prostu napięcie jakie jest podawane na wejścia PWM mostka. Tam napięcie (średnie) powinno być wprost proporcjonalne do współczynnika wypełnienia, niezależnie od obciążena, i jeśli ustawisz obie wartości w rejestrach procesora na to samo, to średnie napięcia na pinach PWM powinny być identyczne. Napisz co pomierzyłeś. Link do komentarza Share on other sites More sharing options...
marek1707 Wrzesień 2, 2016 Udostępnij Wrzesień 2, 2016 "..po kilku "operacjach plastycznych" z użyciem lutownicy nie wygląda za ładnie." Nie przejmuj się, to forum techniczne a nie artystyczne. Rzadko który prototyp wygląda ładnie. Jeżeli konstrukcja nie ma jakichś podstawowych błędów (typu gołe kable od akumulatora) lub niedoróbek technicznych (zimne luty, kule cyny na połączeniach lub totalny węzeł przewodów i płytki wiszące między tym w powietrzu) to nie masz się czego wstydzić. Lukaszm - oczywiście, wyszło moje lenistwo. Pisząc powyższe, w myślach szybko sprawdziłem dwa punkty: 0 i 100% a ponieważ było OK, napisałem i poszło. Niestety w przypadku wartości skutecznej przebiegu PWM zależność nie jest liniowa. Pisanie z pracy ma swoje minusy 😐 No nie, niezasilany silnik DC raczej nie stuka. Czy słyszysz to gdy jest zasilanie i system pracuje? Czy gdy pokręcasz ręką koła bez prądu? Może to program robi coś głupiego i co jakiś czas wysyła impuls do silnika, nawet niechcący. Może przechodzić (potrzebnie lub nie) przez np. funkcję inicjalizującą linie I/O i resztę sprzętu, może przeprogramowywać porty, może zmieniać tryb pracy timerów od PWM itp. Jeśli nie masz oscyloskopu, podłącz do linii sterujących mostka (A, B i PWM) diody LED (z opornikami szeregowymi oczywiście). Jeżeli są to impulsy na tyle długie że silnik je zauważa, Ty zobaczysz je także. Link do komentarza Share on other sites More sharing options...
małyelektronik Wrzesień 3, 2016 Autor tematu Udostępnij Wrzesień 3, 2016 Harnas, Postąpiłem zgodnie z Twoją poradą i zmierzyłem napięcia średnie na wejściach PWM mostka oraz na wyjściach. Zgodnie z tym co powiedziałeś - po ustawieniu tej samej wartości wypełnienia (180) w obu rejestrach sterujących mikrokontrolera (OC0 oraz OC2) na obu kanałach wejściowych mostka pojawiło się napięcie 3.5V z dokładnością do 0.01V, natomiast na wyjściach AO1 oraz BO1 zaobserwowałem napięcie 5.23V. No nie, niezasilany silnik DC raczej nie stuka. Czy słyszysz to gdy jest zasilanie i system pracuje? Czy gdy pokręcasz ręką koła bez prądu? Kiedy silnik jest wyłączony i kręcę kółkami manualnie to nie czuję żadnego stukania. Natomiast jeżeli pozostawię włączone bity sterujące AIN1 oraz BIN1 jak również STBY, a zmienie jedynie wartość PWM na 0, to zaobserwowałem właśnie, że omawiane koło bardzo, ale to bardzo powoli samoczynnie się obraca w sposób skokowy, natomiast drugi silnik stoi bez zarzutu. Również mogę usłyszeć dość wyraźne buczenie dochodzące z silnika. Czy może być to wina jego uszkodzenia mechanicznego? Jeśli nie masz oscyloskopu, podłącz do linii sterujących mostka (A, B i PWM) diody LED (z opornikami szeregowymi oczywiście). Jeżeli są to impulsy na tyle długie że silnik je zauważa, Ty zobaczysz je także. Wlutowałem diody równolegle do wyjść mostka zasilających silniki zgodnie ze schematem. Mogę zaobserwować, że pomimo wyzerowania wartości PWM obie diody bardzo lekko świecą, ale ta po stronie omawianego silnika dość wyraźnie mruga. Link do komentarza Share on other sites More sharing options...
marek1707 Wrzesień 4, 2016 Udostępnij Wrzesień 4, 2016 To nic nowego, skoro silnik stuka czy lekko obraca się, to mostek coś do niego wysyła - nic nowego nie odkryłeś. Diody miałeś wstawić na wejściach mostka by wyczaić nieprawidłowości w sygnałach sterujących. Wymyślaj kolejne testy tak, by iść "pod prąd": od dziwnie zachowującego się silnika (po co potwierdzać to dodatkowo LEDami?), przez mostek, jego zasilanie (mierzyłeś?), sygnały sterujące, procesor aż do programu. Pisałem o liniach A, B i PWM - jeśli na nich coś jest źle to albo błąd w montażu, zimne luty, niekontakty albo problem w kodzie. Zaglądałeś tam? Spróbowałeś najprostszej rzeczy: pustego kodu w ogóle bez włączania linii wyjściowych, mostków, silników itd? Jeżeli pusty program nie stuka, to masz przyczynę. Gdzieś w kodzie coś spaprałeś i pojawiają się jedynki na liniach sterujących mostek. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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ę »