Skocz do zawartości

Robot balansujący - Sterownik silników


Pomocna odpowiedź

(edytowany)

Witam wszystkich po przerwie (z powodu Covid, dłuższej niż zakładałem).

Prace nad robotem są kontynuowane. W końcu połączyłem MPU6050 z kontrolerem. Na razie na szybko wykorzystałem filtr komplementarny. Działa dość dobrze, ale pewnie filtr Kalmana będzie skuteczniejszy i będą mniejsze opóźnienia. Na razie zadaję kąt i PID kontroluje bezpośrednio wektorem FOC zależnie od odchylenia od wartości zadanej. Docelowo oczywiście będą dwa PID w kaskadzie i będzie się zadawać prędkość.

PID.thumb.jpg.bf67f4c896d828563eb732c584f39809.jpg

Aktualnie wygląda i działa to tak:

Z drobnych rzeczy to mam też przetestowaną część układu łączenia logiki 3,3V z 5V (logic level shifter). Będzie potrzebna do sterowania serwo motorami. Działa bez zarzutu.

Na razie czekam na części i płytki PCB. Ostateczna wersja oprogramowania powstanie gdy będę miał już zmontowaną płytkę.

Z problemów to zauważyłem że MPU6050 czasem się zawiesza i przestaje odpowiadać. Jeszcze będę się temu przyglądać, ale jak ktoś się spotkał z czymś podobnym to chętnie wysłucham dobrej rady.

Pozdrawiam,
Marek

W bonusie test serwa liniowego do robota (więcej będzie w wątku Robot balansujący - mechanika):

 

Edytowano przez MR1979
Link to post
Share on other sites
13 minut temu, MR1979 napisał:

Z problemów to zauważyłem że MPU6050 czasem się zawiesza i przestaje odpowiadać. Jeszcze będę się temu przyglądać, ale jak ktoś się spotkał z czymś podobnym to chętnie wysłucham dobrej rady.

Korzystasz z DMP? O ile wiem, nie możesz dopuścić do opóźnienia w odczytach, teoretycznie po to jest FIFO aby pomieścić zbyt szybko napływające dane, ale w sofcie jest jakiś błąd, bo zamiast tego zawiesza się cała komunikacja I2C. Możesz spróbować pobawić się parametrem rate divisor - mi to nigdy nie wyszło, najdłużej utrzymałem działający MPU6050 z DMP przez jakieś 10 minut (ESP32) 😞

  • Lubię! 1
Link to post
Share on other sites
1 godzinę temu, MR1979 napisał:

Z problemów to zauważyłem że MPU6050 czasem się zawiesza i przestaje odpowiadać. Jeszcze będę się temu przyglądać, ale jak ktoś się spotkał z czymś podobnym to chętnie wysłucham dobrej rady.

I2C raczej nie lubi długich przewodów i zmiennego pola magnetycznego. Może przyczyną są zakłócenia? Nie wiem czy kojarzysz taki projekt gimbala na silnikach bezszczotkowych, STorM32. Swego czasu, komunikacja z IMU odbywała się właśnie po I2C, i żeby działało to poprawnie, żeby nie było problemów z odbieraniem danych, to konieczne było założenie koralików ferrytowych na przewody zasilające silniki. Jak masz pod ręką analizator, to podejrzyj linie sygnałowe i zobacz co tam się dzieje. Tutaj więcej o problemach I2C w STorM32, link: http://www.olliw.eu/storm32bgc-wiki/I2C_Error_Compendium

Edytowano przez Alvedro
  • Lubię! 2
Link to post
Share on other sites

Nie korzystam z DMP. Może coś nie tak z inicjalizacją:

1. Resetuję MPU (Rejestr 0x6B, Wartość 0x80)
2. Czekam 100ms
3. Wybudzam MPU (Rejestr 0x6B, Wartość 0x00)
4. Ustawiam zakres gyro: +/- 500deg/s (Rejestr 0x1B, Wartość 0x08)
5. Ustawiam zakres akcelerometru: +/- 2g (Rejestr 0x01C, Wartość 0x00)

Wartości odczytuję HAL_I2C_Mem_Read z rejestrów zaczynając od 0x3B (łącznie 14 bajtów).

I2C mam skonfigurowane w trybie Fast Mode (400 kHz).

Podejrzewam że przyczyną może być kabel łączący MPU z płytką NUCLEO.

Pozdr,
Marek

  • Lubię! 1
Link to post
Share on other sites
7 godzin temu, MR1979 napisał:

Podejrzewam że przyczyną może być kabel łączący MPU z płytką NUCLEO.

No nie wiem... ja w pewnym momencie w czasie prób miałem jakiś 30 cm kawałek pogiętej taśmy i nie miałem problemów z prawidłowym odczytem. Też 400 kHz, na szynie oprócz MPU jeszcze driver do serw.

 

Ja mam nieco inną sekwencję (ale korzystam tylko z żyroskopu w osi Z):

  writeMPU6050(MPU6050_SMPLRT_DIV, 0x00);
  writeMPU6050(MPU6050_CONFIG, 0x02);
  writeMPU6050(MPU6050_GYRO_CONFIG, 0x10); // 1000°/s
  writeMPU6050(MPU6050_ACCEL_CONFIG, 0x00);
  writeMPU6050(MPU6050_PWR_MGMT_1, 0x03);
 

I bardzo chciałbym wiedzieć, dlaczego po włączeniu zasilania ma mnie gdzieś i ustawia gyro na 250°/s (po resecie działa normalnie).

  • Lubię! 1
Link to post
Share on other sites
14 godzin temu, Alvedro napisał:

I2C raczej nie lubi długich przewodów i zmiennego pola magnetycznego. Może przyczyną są zakłócenia? Nie wiem czy kojarzysz taki projekt gimbala na silnikach bezszczotkowych, STorM32. Swego czasu, komunikacja z IMU odbywała się właśnie po I2C, i żeby działało to poprawnie, żeby nie było problemów z odbieraniem danych, to konieczne było założenie koralików ferrytowych na przewody zasilające silniki. Jak masz pod ręką analizator, to podejrzyj linie sygnałowe i zobacz co tam się dzieje. Tutaj więcej o problemach I2C w STorM32, link: http://www.olliw.eu/storm32bgc-wiki/I2C_Error_Compendium

Hej! Dzięki za sugestię i ciekawego linka.

Docelowo MPU będzie wlutowany na PCB przy samym uC, więc jeżeli to rzeczywiście problem z zakłóceniami to powinien się sam rozwiązać.
Dziś podłączę oscyloskop i zobaczę co się dzieje na magistrali.

Pozdr,
Marek

  • Lubię! 1
Link to post
Share on other sites

Witam!

Prace trwają. Płytki PCB odebrane, rozpoczęty montaż i testy. Mam już wlutowane wszystkie układy (poza sekcją odpowiedzialną za kontrolę serw).

Jednocześnie z montażem i testami piszę od nowa oprogramowanie. Powinno pójść szybko bo mam już wszystkie "klocki" 🙂

Udało mi się też uruchomić odczyt enkoderów po I2C z taktowaniem magistrali 1MHz (co było nie możliwe na płytce stykowej).

Stworzyłem też podstawkę do testowania i kalibracji kontrolera.

 

Poniżej zdjęcia z postępów:
 

IMG_20201127_114839.thumb.jpg.e31abe2f8cfd63b7cef394f291823ad2.jpg IMG_20201201_193840.thumb.jpg.220ae09d8230e0d9e5b3830a10f1f0fa.jpg IMG_20201201_194151.thumb.jpg.3baa68b60ada2f726ba40dd6ba268581.jpg

Pozdrawiam,
Marek

  • Lubię! 2
Link to post
Share on other sites
Dnia 25.11.2020 o 12:46, MR1979 napisał:

Próbowałeś przenieść linię writeMPU6050(MPU6050_PWR_MGMT_1, 0x03); na sam początek?

Oj, dopiero teraz zauważyłem że to napisałeś.

Spróbowałem i wydaje mi się że działa prawidłowo. Dzięki za sugestię!

  • Lubię! 1
Link to post
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

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.