Skocz do zawartości

Czujnik odchylenia od pionu poruszającego się pojazdu EV


eneuro

Pomocna odpowiedź

Witam,
szukam jak najprostrzego sposobu znalezienia odchylenia od poziomu (pionu),
ale chyba wygląda na to że bez jakiegoś żyroskopu co najmniej 2osiowego się nie obejdzie,
bo trzeba znać 2a kąty aby okreslić położenie płaszczyzny w przestrzeni.

Dokładność nie jest potrzebna jakaś duża, byle w długim okresie czasu np. przez kilka godzin

można było w dowolnym momencie oszacować to odchylenie z dokładnością do 1 stopnia to by było bardzo dobrze.

Chodzi o coś podobnego do inlkinatora, gdzie błedy pojedyńczych odczytów nie sumują się,
tylko dostaję odchylenie np. 13 stopni +/-1 stopień.

Tyle że inlkinator odpada bo pojazd z tym czujnikiem porusza się w 3D z przyspieszeniami nie większymi od 1g przez większość czasu-spokojna jazda elektrycznym pojazdem (EV).

Podejrzewam, że nie znajdę nic innego jak żyroskop 3 osiowy i takie pytanie,
co w przypadku kiedy nie ma zasilania układu? Jakoś trzeba za każdym razem niejako poziomować taki żyroskop po włączeniu zasilania i zapamietywać położenie np. poziome?

Zakładam że na stałe z pojazdem związany będzie taki żyroskop 3 osiowy , ale może być moment kiedy nie będzie zasilany. Co wtedy, bo pod różnym nachyleniem może pojazd zostać unieruchomiony i odłączone zasilanie? Jakimś akcelerometrem trzeba szukać po powrocie siły grawitacji i zapamiętywać odczyty żyroskopu?

Jakby ktoś podsunął coś sensownego jak poprawnie obchodzić się z takim żyroskopem 3 osiowym

właśnie w momentach startu i zatrzymania-odłaczenia zasilania, to byłbym wdzięczny, bo jakoś mechaniczny żyroskop potrafię sobie wyobrazić co się dzieje, ale elektroniczne są dla mnie wyzwaniem póki co,

bo takiego czujnika nie podpinałem do ATTiny póki co.

Programuję w C te Atmele 😎

Mam pomysł zrobienia takiego prostego żyroskopu ze... starego silnika BLDC od DVD-ROM i czujnika pola magnetycznego (czujnik Halla SS495A), bo przy okazji tzw. "szuczny horyzont" być może udałoby się zrobić,
ale póki co sprawdzam czy jakoś z czegoś komercyjnie dostępnego nie da się tego zrobić w miarę prosto...

Akurat analogowy czujnik pola magnetycznego SS495A mam rozpracowany programowo i już wiele czujników prądu na nich robiłem do ograniczania mocy ładowania baterii i silników, więc jak nie znajdę nic lepszego to coś się wykombinuje i jakiś mechaniczny żyroskop zbuduję, bo nie musi to być bardzo małe i ma służyc do oszacowania kąta odchylenia od poziomu (pionu), bo jak wspominałem taki bajer jak "sztuczny horyzont" niejako przy okazji bym miał 💡

Pozdr.

Link do komentarza
Share on other sites

1. Nie żyroskop a akcelerometr - sprawdza się świetnie w mało dynamicznym otoczeniu

2. W bardziej dynamicznym otoczeniu musisz zrobić fuzję wyników akcelerometru (dobrze pokazuje płaszczyźnie w statycznym otoczeniu) z odczytami żyroskopu (dobra dynamika, ale statycznie pływa).

Na samym żyroskopie nie osiągniesz nic sensownego w dłuższym czasie.

Link do komentarza
Share on other sites

1. Nie żyroskop a akcelerometr - sprawdza się świetnie w mało dynamicznym otoczeniu

Akurat jak w temacie raczej jest to dynamiczne bo pojazd porusza się w 3ech wymiarach i chodzi o to żeby sterować mocą falownika silnika indukcyjnego/BLDC min. dodatkowo biorąc pod uwagę kat pochylenia, czyli generalnie potrzebny jest kąt pomiędzy siłą grawitacji a kierunkiem ruchu,
bo na akcelerometrze nie da rady tego zrobić-przyspieszenia będą zmieniać wypadkowe przyspieszenie.

Tak czy inaczej składową prędkości i przyspieszenia znam w kierunku ruchu (stycznym do tej krzywej),
bo mam np. czujniki Halla w silniku w kole i znam zmianę drogi w czasie, więc mam prędkość i przyspieszenie, to styczne...

1. Te żyroskopy te elektroniczne są wrażliwe na niewielkie przyspieszenia (w okolicy 1G-2G)?

Chyba nie powinny-nie rozumiem po co mi akcelerometr-do resetowania ustawiania żyroskopu?

2. Te kąty w żyroskopach to się odczytuje bezwzględne wartości od jakiejś pozycji zresetowanej,

czy cyfrowo różnice (zmiany kątów) pod przerwanie trzeba podpiąć, żeby sumować w uC swoim

i dopiero wtedy możemy niejako agregując te zmiany mieć wartość kąta w każdej osi od pozycji "0"?

W zasadzie 3y ostatnie "?" są najważniejsze, bo nie rozumiem dlaczego miałyby się rojeżdzać odczyty żyroskopu w pojeździe, na który działają przyspieszenia no może do 2G, bo oprócz grawitacji 1G będzie jeszcze składowa w kierunku ruchu i odśrodkowa na zakrętach, więc w porywach może 2G wyjdzie, a przyspieszenie w kierunku ruchu znam, tylko potrzebuję znać kąt pomiędzy siłą grawitacji a tym przyspieszeniem.

Tak się w sumie zastanawiam, że znając przyspieszenie w kierunku ruchu jego wartość i całkowite przyspieszenie (pomijając siły odśrodkowe przy jakiś zakrętach, trzeba by policzyć ile G może być w jakimś zakręcie) znając 1G chyba dałoby radę oszacować ten kąt odchylenia od pionu bez żyroskopu, na samym akcelerometrze, bo jak będzie stał pojazd (v=0, a=0) to tylko składowa 1G jest i już to ochylenie znamy,
a w czasie jazdy sterownik zwykle będzie w tryb tempomatu włączony więc starał się utrzymać stałą prędkość (v=const, a=0) i w zakrętach dojdzie tylko składowa odśrodkowa 💡

Genarelnie chyba któryś z tych analogowych akcelerometrów by mi wystarczył,
bo łatwo powinien się dać podpiąć pod 3y ADc w ATTiny85 i zostanie jeszcze 2a piny do komunikacji ze sterownikiem silnika:

ADXL325 - 16LFCSP RoHS

lub

ADXL335 - 16LFCSP RoHS

Zastanawiam się tylko czy ma znaczenie tutaj wielkie ta czułość +/- 5G pierwszego i +/-3.6G drugiego?

Pewnie lepiej wziąć ten dokładniejszy, bo 3.6G raczej nie przekroczę?

http://robodudes.com/czujniki/21-adxl335-16lfcsp.html

Link do komentarza
Share on other sites

1. Tak jak sam zauważyłeś w momencie kiedy pojazd jedzie dosyć równo na akcelerometr będzie głównie działała siła grawitacji z której możesz obliczyć płaszczyznę.

2. Żyroskop pokazuje prędkość zmiany w czasie, więc musisz to całkować po czasie żeby otrzymać obecną pozycję. To powoduje sumowanie błędów w czasie

3. No a błędy żyroskopu elektronicznego są dosyć spore. Żyroskop nigdy nie pokazuje dokładnie zera i w zależności od konkretnej sztuki, temperatury, przyśpieszenia (tak, liniowe przyśpieszenia mają pewien mały wpływ na wyniki żyroskopu) itd. zero żyroskopu będzie dryfować. Dlatego musisz go z jednej strony kalibrować w czasie (więc potrzebujesz alternatywne poprawne odczyty np. z akcelerometru) a z drugiej strony korygować wynik, który po czasie będzie sumował coraz więcej błędów.

Błąd żyroskopu - szczególnie bez kalibracji - może wynosić nawet stopień na sekundę. Po pewnym czasie i kalibracji można go mocno ograniczyć, ale nigdy nie będzie to perfekcyjny wynik w dłuższym okresie czasu.

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

Dzięki za odpowiedź, już kiedyś miałem zamiar na akcelerometrze to zrobić, tylko wtedy jeszcze nie programowałem uC, AVR ATTiny85 (8k na inteligentny program) powinien być wystarczający do tego czujnika ADXL335, bo mam 3y ADC 10bitowe, AVref się podepnie na TL431I jak w innych projektach, i pin jeden zostanie jako wyjście z już przetworzonym kątem odchylenia.

3. No a błędy żyroskopu elektronicznego są dosyć spore.

Tak podejrzewałem, że trzeba cały czas go monitorować.

Wygląda na to że spokojnie akcelerometr wystarczy, bo nawet na zakręcie jakimś przyspieszenie odśrodkowe jest rzędu (V^2)/R a wtedy nawet na ostrym łuku o promieniu 10m jadąc (skręcając z prędkością 10km/h) mamy przyspieszenie rzędu 0.8m/s2= 0.1G więc chyba powinno spokojnie starczyć,
bo oczywiście odczyty akcelerometru potraktuje się średnią ruchomą w jakimś sensownym przedziale czasu.

Przyspieszenie Coriolisa oczywiście pomijalne, bo prędkość obrotowa Ziemi zbyt mała przy tych prędkościach pojazdu.

Prawdopodobnie ze wstrząsami może być "jazda", ale to chyba powinno dać się uśrednić.

Gdyby pomysł nie wypalił, to czujnik przyspieszeń się przyda tak czy inaczej do.... alarmu,
więc warto na pokładzie pojazdu EV taki akcelerometr mieć 😎

A sztuczny horyzont z silnika BLDC od DVD-ROM ze sterownikiem (jakiś prosty falownik) razem w żyroskopie i tak będzie dobrym bajerem 🤣

Link do komentarza
Share on other sites

Nie sprawdzałem zakresów i dokładności jeszcze, ale wydaje mi się, że średnia ruchoma powinna dać sensowne wyniki przy tym analogowym nawet (niedrogi), a poza tym mam gotowe podprogramy do ATTiny85 i wydaje mi się że szybciej jakiś wynik uda się uzyskać, bo wystarczy podpiąć go w gotową płytkę których mam trochę z innych projektów na ATTiny85, dopisać parę linijek kodu z obslugą tego czujnika i zobaczyć poprzez diodę i czujnik światła na laptopie czy jakieś sensowne kąty to będzie zwracać w czasie typowej jazdy 😉

Jak na tym prostym czujniku analogowym nie uzyskam zadowalających efektów to bedę się przyglądał tym dokładniejszym cyfrowym.

[ Dodano: 18-09-2013, 17:55 ]

Sugeruję raczej dobry akcelerometr cyfrowy - są dużo dokładniejsze i możesz dobrać odpowiedni zakres

A ten jest kiepski?

ADXL345 - LGA14 - precyzyjny cyfrowy akcelerometr trzyosiowy

"3 osiowy cyfrowy akcelerometr firmy Analog Devices o zakresie działania +/- 2.0 do 16.0g w obudowie LGA14"

Interfejsy: I2C i SPI

- Rozdzielczość: do 4mg/LSB

Tylko nie widzę na tej stronie fotki żadnej tego, ale cenowo w okolicy 10$ jak na początek mógłby być,
bo +/-2G to chyba tak akurat.

W sumie można by się pobawić nim z I2C i przyszłościowo, ze sterownikiem silnika przez I2C by inne termometry jeszcze i różne urządzenia się komunikowały.

Nie wygląda skomplikowanie podpięcie go do uC:

Dzięki za sugestie 😎

Link do komentarza
Share on other sites

oba te czujniki są dobre i dadzą o wiele lepsze wyniki od ADXL335 podłączonego pod słabe ADC attiny.

Gdyby ADC uC było 12bit a nie 10bit tego ATTiny to te analogowe akcelerometry (z zewnętrznym Vref stabilnym temperaturowo) dokładniejsze odczyty dałoby radę robić?

Tak np. ma ten analogowy czujnik Halla serii SS495-widziałem publikację jak mierzyli nim pole magnetyczne Ziemi w balonach w dobrze zaprojektownym uC na 12bit i stabilnym zewnętrznym AVref...

Cenowo całkiem przyzwoicie ten cyfrowy ADXL345 wygląda, a mam kilka projektów z potencjalnym zastosowaniem tego czujnika, więc warto poświęcić chwilę i poznać granice jego możliwości w praktyce 😎

Dzięki za pomoc w rozpoznaniu tematu ➡️

Link do komentarza
Share on other sites

Wygląda na to że wybór MPU-6050 dobry bo co najwyżej kiedyś z kompasem I2C można nabyć podobny układ do jeszcze lepszej fuzji sensorów.

Tak czy inaczej wygląda na to, że w bibliotekach Arduino jest wsparcie hardwarowe dla DMP (Digital Motion Processing) w MPU-6050 i w kilku linijkach kodu można uzyskać np. nawet składową przyspieszenia bez składowej przyspieszenia ziemskiego i nie ma potrzeby bawienia się w programową fuzję bazując na składowych przyspieszenia i prędkości kątowej żyroskopu z filtrami w prostych projektach 😎

Wtedy pojawiają się chyba problemy z Gimbal lock czasami, a DMP jest w stanie zwrócić nawet quaternion.

Tylko pozostaje dopasować te biblioteki i2cdevlib z Arduino do własnych potrzeb i właśnie nie jestem pewien, czy podczas inicjacji tego trybu w MPU-6050 trzeba przesyłać jakiś coś ala firmware do MPU-6050, żeby korzystać w nim ze sprzętowego DMP?

Ciekawe czy uda się na ATTiny85 8Mhz z 8KB programu max po I2C to DMP uruchomić w tym czujniku.

Bo po przetworzeniu ich sprzętowo przez DMP dosyć prosto już dałoby radę potrzebne kąty znaleźć.

MPU-6050: DMP Data from i2cdevlib

A efekt jest powalający:

Chociaż zastosowanie filtru komplementarnego chyba powinno być wystarczające na potrzeby tego zastosowania jak w temacie, bo całkiem dobrze to wygląda:

Ktoś używał tego trybu DMP w MPU-6050 do fuzji sensorów przyspieszenia i żyroskopu?

Link do komentarza
Share on other sites

Wygląda na to że rozwiązanie jest już blisko.

MPU-6050 ładnie komunikuje się z moim PC Linux za pomocą własnoręcznie wykonanego boardu z optyczną izolacją (5kV) portu RS232 De9, a szyną I2C tego czujnika zasilanego 3.3Vcc.

Testowe odczyty temperatury poprzez I2C są sensowne-trzeba było oczywiście wyłączyć domyślny tryb SLEEP i ustawić zegar systemowy ten z Gyro X, bo inaczej odczyty temperatury dawały wartości 0...

INFO: RS232 I2C port: /dev/ttyS0

INFO: RS232 I2C speed: 1000.0 [Hz]

INFO: RS232 I2C wait speed: 0.001000 (1000 [us])

INFO: RS232 I2C SCL: 1 SDA: 1

DEBUG: Looking for MPU-6050 slave at default address: 0x68

ERROR: address_slave: 0x68 for write failed

DEBUG: Looking for MPU-6050 slave at other address: 0x69

INFO: Found MPU-6050 at I2C address: 0x69

INFO: This MPU-6050 read who am i address: 0x68

DEBUG: Temperature from MPU-6050 as raw signed integer (short): -5904 (0xe8f0)

INFO: MPU-6050 temperature: 19.17 [*C]

Pozostało oprogramować konfigurację MPU do sprzętowej fuzji sygnałów z użyciem DMP i sięgnąć po składową przyspieszenia bez ziemskiego.

 

Akurat zdecydowałem się na bezpośrednie testy tego czujnika bezpośrednio z PCta, bo mam do dyspozycji ogromny LCD i możliwość logowania różnych parametrów bezpośrednio w oprogramowaniu na PC,

za pomocą własnej biblioteki I2C master wspierającej systemową niskopoziomową obsługę portu szeregowego z odwróconą logiką, dzieki czemu jeśli PC nie komunikuje się z szyną I2C, albo jest odłączony część galwanicznie oddzielona własciwej szyny I2C 3.3V nie jest w żaden sposób zakłocana przez PC.

PC służy jako narzędzie diagnostyczne i docelowo do wizualizacji i ustawiania parametrów pracy sterownika z wieloma różnymi sensorami I2C w razie potrzeby on line na ekranie dotykowym.

Link do komentarza
Share on other sites

Układ optoizolacji PC i MPU-6050 świetnie się sprawuje i mamy poprawne wartości kątów pitch & roll w sytuacji nie dynamicznej.

Korzystając z Maxima CAS udało się wyprowadzić i rozwiązać równania pozwalające na obliczenie "pitch & roll" w przypadku kiedy pojazd się nie porusza ruchem przyspieszonym i jednyną działającą siłą jest siła grawitacji:

Akurat rozwiązanie pod asin zostało znalezione, ze względu na możliwość przybliżenia rozwinięciami w szereg Taylora, w celu przyspieszenia obliczeń w mikrokontrolerze, który dla małych kątów podobnie jak sin(x) = x = asin(x) ale można rozwinąć kilka składowych dalej i dokładniejsze kąty uzyskać dla interesujących i praktycznych kątów w przypadku pojazdu EV rzędu maksymalnych (ekstremalnych) pitch: +/-45 stopni i roll: +/-45 stopni.

Co ciekawe Maxima ma procedury rozwijania np. asin(x), czy sin(x) w szereg Taylora z zadaną wielkością rozwinięcia.

Notabene, ciekawe jak dodamy przyspieszenie ap w kierunku jazdy (pitch) jak wtedy będzie wyglądać rozwiązanie, bo to by oznaczało że mając odczyty z halotronów z silnika pojazdu EV, znamy to przyspieszenie ap, więc pozostaje sprawdzić jak wtedy będą wyglądać te zależności kiedy pojazd porusza się z jakimś znanym przyspieszeniem....

Rozwiązanie wydaje się nieskomplikowane i proste dzięki Maxima:

Zastępując przyspieszenie A0 pjazdu EV przez 0 w przypadku spoczynku i ruchu bez przyspieszenia otrzymujemy wcześniejsze zależności.

Pozostaje doknać fuzji sensorów i wykorzystać wbudowany żyroskop co powinno pomóc w stabilizacji wyników akcelerometru...ale to już wydaje się proste i chyba powinno dać radę bez korzystania z DMP w MPU-6050 uzyskać sensowny kąt pochylenia pojzdu EV czyli "pitch", co teoretycznie jest możliwe więc pozostaje sprawdzić to w praktyce po zabudowaniu czujnika MPU-6050 z mikroprocesorem i ew. podłączenie poprzez I2C do laptopa w trakcie jazdy próbnej 😎

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.