Skocz do zawartości

Pololu DC problem ze stabilnością pracy silników


małyelektronik

Pomocna odpowiedź

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

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

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

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

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

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

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

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

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

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

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

"..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

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

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

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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.