Skocz do zawartości

MR1979

Użytkownicy
  • Zawartość

    34
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    5

MR1979 wygrał w ostatnim dniu 13 lipca

MR1979 ma najbardziej lubianą zawartość!

Reputacja

61 Bardzo dobra

O MR1979

  • Ranga
    3/10

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Gdynia

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Witam! Aktualizacja projektu: 1. Przyszły płytki pod enkodery, więc teraz pozycja układów w stosunku do osi silnika jest idealna 2. Zaimplementowałem wiele poprawek w oprogramowaniu układowym. 3. Pamięć EEPROM podłączona, więc teraz mam możliwość zapisu i odczytu danych kalibracyjnych dla danego układu silnik / enkoder 4. MPU6050 podłączony i mam już dostęp do danych z żyro i akcelerometru Plan na rozwój oprogramowania: 1. Dalsza optymalizacja oprogramowania (np użycie DMA do odczytu enkoderów oraz MPU). 2. Początkowo planuję użyć filtr komplementarny do ustalenia kąta wychylenia robota względem płaszczyzny pionowej. Później poeksperymentuję z filtrem Kalmana. 3. Zacznę od pojedynczego kontrolera PID który będzie miał za zadanie utrzymać zadany kąt wychylenia robota. Na wyjściu będzie długość wektora do sterowania FOC oraz kierunek obrotów (znak). 4. Gdy powyższy PID będzie działał prawidłowo, wtedy dodam kolejny PID który będzie utrzymywał zadaną prędkość robota, a na wyjściu będzie wymagany kąt wychylenia robota. Ta wartość będzie podawana jak referencyjna dla pierwszego kontrolera. 4. Kolejny PID do korygowania prędkości obrotowej lewego i prawego silnika. Będzie miał za zadanie utrzymanie robota na prostym kursie, lub skręcanie w zadanym kierunku Ponieważ czeka mnie kolejny wyjazd (obowiązki zawodowe) więc jestem zmuszony wstrzymać prototypownie do października. W między czasie w wolnej chwili dopracuję to co mogę nie mając dostępu do sprzętu, czyli schemat i projekt płytki drukowanej. Zacznę też projektować robota od strony mechanicznej (pewnie założę oddzielny wątek DIY gdy już będę miał co zaprezentować). Poniżej jedna z płytek enkodera: Obowiązkowe są tylko elementy IC1 i C1, reszta jest opcjonalna zależnie od tego jak chcemy wykorzystać sam układ i w jaki sposób podłączyć enkoder. Pozdrawiam i do następnego razu.
  2. Witam! Kolejny update. Eksperymentowałem trochę z obsługą wolnych obrotów. Pocztałem trochę na temat cogging torque (okazało się że po polsku nazywa się to moment zaczepowy ). Przetestowałem teorię z minimalną długością wektora i niestety nie zadziałała. Okazało się że gdy zmieniłem sposób sterowania silnika (w momencie gdy zmniejszany był kąt wyprzedzenia, a wektor miał stałą wartość), to PID sobie nie radził. Nic dziwnego w końcu był ustawiany dla sterowania silnikiem przy stałym kącie wyprzedzenia równym 90 stopni, oraz zmiennej długości wektora. Przy odwrotnej sytuacji współczynniki kp, ki, kd już nie pasowały. Musiałbym pewnie wprowadzić oddzielne współczynniki dla obu sytuacji. Na razie zarzuciłem walkę z momentem zaczepowym bo nie było to celem projektu. Wprowadziłem pomiar prądu silnika. Użyłem do pomiaru rezystora bocznikowego 0,1 ohm, oraz wzmacniacza x20 V/V (INA2181A). Wyjście wzmacniacza podłączyłem do ADC mikrokontrolera. Dodałem też prosty interfejs przez UART. Aktualnie można wydawać następujące komedy: 1. "torque [wartość]" - uruchamia tryb stałego momentu, wartość od -255 do +255 W tym trybie długość wektora jest zawsze stała i nie zależy ani od pozycji, ani od prędkości czy obciążenia 2. "speed [wartość]" - uruchamia tryb stałej prędkości, wartość to ilość obrotów/minutę ze znakiem. 3. "pos [wartość]" - uruchamia tryb stałej pozycji wału, wartość 0 do 360 stopni. 4. "current [wartość]" - ustawia makymalny prąd silnika. Ograniczenie to ma priorytet nad wszystkimi trybami pracy kontrolera. W międzyczasie spaliłem też mikrokontroler na płytce nucleo gdy przez nieuwagę do ADC zamiast wyjścia ze wzmacniacza podłączyłem jedną z linii zasilania silnika Na szczęście wlutowanie nowego układu załatwiło sprawę i płytka znów działa Poniżej filmik z działania ograniczenia prądu silnika: Pozdrawiam, Marek
  3. Próbkuję pozycję enkodera co 0,1s i wyznaczam różnicę. Z tą wyliczoną wartością oraz wartością referencyjną wchodzę do regulatora PID gdzie wyjściem jest bezpośrednio wartość dla generatora PWM. Myślałem też o wrzuceniu do regulatora średniej z kilku pomiarów, ale wydaje mi się że mogłoby to wprowadzić niepotrzebne opóźnienie w reakcji układu. Może jakaś średnia ważona, gdzie ostatni pomiar miałby najwyższą wagę. Jeszcze nie miałem czasu na takie eksperymenty. Nigdy nie słyszałem (bo elektronika to tylko moje hobby), ale z opisu wynika że doświadczyłem tego zjawiska. Przy niskich obrotach dało się zauważyć pewną nieregularność. Szczególnie widać to w trybie serwo gdzie przy niektórych kątach układ ma problem z utrzymaniem pozycji. Myślę że w moim przypadku nałożyły się dwa zjawiska: 1. Charakterystyka samego silnika oraz wspomniany przez ciebie "cogging torque" 2. Odczyty z enkodera magnetycznego nie są regularne. Enkoder ma 4096 kroków, ale np na 1 stopień przypada czasem więcej a czasem mniej kroków. Myślę że duże znaczenie ma dokładność umieszczenia magnesu nad układem (w moim przypadku to wciąż prowizorka, więc pewnie mam jakieś odchyły). Zamówiłem PCB pod enkodery, czekam aż przyjdzie. Zauważyłem że w tak prostej implementacji FOC największe nieregularności pojawiają się przy najniższych wartościach wektora pola magnetycznego. Mam taką teorię (wciąż nie sprawdzoną), że mógłbym wprowadzić minimalną długość wektora, a gdy zajdzie potrzeba zejścia niżej, to płynnie zmiejszałbym kąt wyprzedzenia z 90 stopni do zera (zależnie od potrzeb). Myślę że zwiększyłoby to kontrolę kosztem zmniejszenia sprawności przy niskich obrotach. Sprawdzę moją teorię niedługo i dam znać Pozdro!
  4. Witam! Kolejny update! W kwestii hardware na razie nie wiele się zmieniło od ostatniego wpisu. Za to popracowałem trochę nad oprogramowaniem: 1. Wprowadziłem modulację SVPWM zamiast SPWM. Silnik działą płynniej (szczególnie na wolnych obrotach). Powinien mieć też trochę większy moment obrotowy, ale różnica jest dość mała. 2. Dodałem funkcję testowania i autokalibracji zespołu silnika i enkodera. Sprawdzane są następujące parametry: Komunikacja z enkoderem Czy magnes enkodera znajduje się w odpowiedniej odległości Czy enkoder zlicza impulsy w odpowiednim kierunku. Jeżeli nie, jest wprowadzana jest korekta Sprawdzana jest ilość kroków enkodera na pełen obrót (rozdzielczość) Wyliczana jest ilość kroków enkodeara na jeden cykl elektryczny Sprawdzane jest przesunięcie mechaniczne zera enkodera względem zera pola magnetycznego silnika Wyliczane są tablice komutacji (wyliczane są krzywe dla modulacji SVPWM z uwzględnieniem wszystkich powyższych parametrów) 3. Pozbyłem się wszelkich obliczeń zmiennoprzecinkowych z głównej pętli (korzystam z tablic gdzie to możliwe) 4. Wprowadziłem trzy tryby pracy sterownika: Stały moment obrotowy - w tym trybie zadaje się stały cykl pracy w modulacji PWM, który nie zmienia się niezależnie od obciązenia i położenia. Stała prędkość obrotowa - pętla PID automatycznie kontroluje cykl pracy PWM aby utrzymać stałą prędkość obrotową nawet przy zmiennym obciązeniu Tryb serwa gdzie silnik utrzymuje zadaną pozycję (0-360 deg). Tu znów posłużyłem się pętlą PID. Plany na kolejne dni: 1. Podłączenie pamięci do zapisywania ustawień z autokalibracji 2. Implementacja prostej komunikacji przez USART do testowania i sterowania układem 3. Dodanie pomiaru prądu oraz zabezpieczenia nadprądowego 4. Podłączenie i komunikacja z czujnikiem akcelerometru i żyro Poniżej kilka filmików: 1. Autokalibracja 2. Tryb stałej prędkości obrotowej 3. Tryb stałej pozycji (tryb serwo) Pozdrawiam, Marek
  5. Witam ponownie! Update z prac Zadowolony z siebie, gdy udało mi się wprawić w obroty silnik, postanowiłem posprawdzać jak wyglądają zakłócenia w układzie. Powiem tylko delikatnie że nie byłem zadowolony gdy zobaczyłem na oscyloskopie co się dzieje na linii 3.3V Miałem dużo szczęścia że nie uszkodziłem nowego NUCLEO, bo przepięcia dochodziły do 5.5v. Trochę poczytałem co mogę zrobić. Oczywiście beztroskie łączenie mas układów było przyczyną. Skończyło się na rozłożeniu i ponownym złożeniu całego układu, tym razem z poprawnym połączeniem mas (topologia gwiazdy itd..). W końcu odebrałem też encodery magnetyczne. Wydrukowałem podstawkę do testowania silnika i zmontowałem wszystko w całość. Szybka kalibracja wszystkiego i mam silnik sterowany metodą FOC. Od razu widać było różnicę w działaniu: - Moment obrotowy jest płynny bez znacznych skoków (jednak minimalne wahania da się wyczuć) - Prąd zmalał o rząd wielkości (dla tych samych obrotów bez enkodera miałem 200mA, teraz jest to około 20mA) - Silnik przestał się nagrzewać Poniżej efekt prac: Jak widać na powyższym filmiku, program cały czas stara się trzymać optymalny kąt 90 stopni pomiędzy wektorem pola od magnesów stałych a wypadkowym wektorem pola od uzwojeń. Przy takim przesunięciu uzyskujemy największy moment obrotowy. Kolejnym krokiem będzie przejście z modulacji SPWM na SVPWM. O tym czym jest SVPWM można poczytać tutaj: https://www.switchcraft.org/learning/2017/3/15/space-vector-pwm-intro Pozdrawiam, Marek
  6. Nie planuje tego z dwóch powodów: 1. Myślę że w przypadku robota balansującego gdzie kierunek i prędkość silnika nieustannie się zmienia, określanie pozycji wirnika przez monitorowanie prądów może nie być skuteczne. Poza tym tego typu robot operuje raczej w niskich zakresach obrotów gdzie np Back EMF zawodzi. 2. Przyznam szczerze że nie do końca wiem jak takie rozwiązanie mogłoby działać w przypadku sterowania FOC. Jak masz jakiś link to podeślij.
  7. Jak już zainstalujesz TF, to polecam rozpoczęcie nauki od tutoriali o KERAS. Ta nakładka bardzo ułatwia tworzenie modeli i trening. Odkąd stał się oficjalnie częścią TF, nie musisz go instalować dodatkowo i można go importować z tf.keras.
  8. Witam! Update z frontu. Mam już NUCLEO z STM32F303RE oraz silniki do robota. Na razie na szybko przerzuciłem kod na nowy mikrokontroler oraz podłączyłem silnik. Wciąż brakuje mi enkoderów, więc nie można nazwać tej metody kontroli prawdziwym FOC. Bez feedbacku o położeniu wirnika, silnik tylko podąża za wirującym polem magnetycznym wygenerowanym przez uzwojenie. Jest to jakaś metoda sterowania, ale bardzo nieefektywna bo wektory pola magnetycznego od magnesów stałych i od uzwojenia praktycznie są w jednej linii. Przebiegi PWM są generowane z częstotliwością 35kHz, więc silnik działa bezgłośnie. Nawet przy tym nieefektywnym sterowaniu moment obrotowy jest zaskakująco duży, a prądy nie przekraczają 0.5A (12V ,100% wypełnienia PWM, minimalne obroty). Co do samego sterownika to postanowiłem wprowadzić następujące modyfikacje do założeń projektu: 1. Zabezpiecznie nadprądowe - pomiar ze wszystkich faz jednocześnie. Wykorzystam możliwość ustawienia poziomu maksymalnego prądu jaką daje mi mikrokontroler (comparator + DAC). 2. Monitorowanie prądu silnika - z wykorzystaniem przetwornika A/D 3. Dodam też zewnętrzną pamięć EEPROM I2C do przechowywania konfiguracji Pozdrawiam, Marek
  9. Dzięki za zainteresowanie. Wybrałem STM32F103 bo mam ich kilka sztuk na stanie. Ale przejrzałem dokumentację F3 i faktycznie wydaje się być stworzony do tego typu zastosowań. A możliwość taktowania timerów z dwukrotną prędkością zegara zapowiada się ciekawie. Do tego zintegrowane comparatory (możliwość realizacji zabezpieczenia overcurrent i overvoltage). Są też programowalne wzmacniacze operacyjne. Teoretycznie można je wykorzystać przy pomiarze spadku napięcia na rezystorach bocznikowych (ST wydało krótką notę na ten temat - TP2289). Wydaje mi się jednak że bezpieczniejszą opcją (dla mikrokontrolera) będzie użycie do tego celu INA2181A1. Nie będę robić pomiaru prądu na każdej fazie oddzielnie bo i tak będę stosował 12-bitowy enkoder. Tak więc zamówiłem NUCLEO z STM32F303RE i jak tylko ją dostanę to się przesiadam. Update z postępów: Na razie udało mi się połaczyć L6234 z NUCLEO na F103, oraz wygenerować trzy sygnały PWM na wyjściu. Wciąż czekam na silniki i zamówione części.
  10. Witam! Rozpoczynam nowy projekt, którym będzie próba zbudowania robota balansującego. Będzie to mój pierwszy robot. Ponieważ temat jest obszerny, oraz sama elektronika robota będzie modułowa, więc postanowiłem podzielić projekt na kilka worklogów. Zaczynam od modułu sterowania silników i tego będzie dotyczyć ten worklog. Założenia: 1. Dwa kanały (2 silniki BLDC - do gimbali) 2. Sterowanie FOC z enkoderem magnetycznym 3. Zintegrowany mikrokontroler który będzie tylko do sterowania silnikami (utrzymywanie równowagi i zadanych parametrów ruchu) 4. Zintegrowany akcelerometr i żyroskop 5. Monitorowanie max prądu silników (zabezpieczenie przed przeciążeniem) Zdecydowałem się na następujące główne komponenty: 1. Silniki BLDC do gimbali - 5208 - 2 szt. 2. Driver silników L6234 - 2 szt. 3. Enkodery magnetyczne AS5600 - 2 szt. 4. Akcelerometr i żyroskop - MPU6050 - 1 szt. 5. Mikrokontroler STM32F103RG (wersja XL-density bo ma dwa zaawansowane timery TIM1 i TIM8) Pozdrawiam, Marek
  11. Projekt jest chwilowo zamknięty, bo niedługo zaczynam kolejny. Tymczasem w wolnej chwili poprawię i zamówię nowe PCB, oraz wykonam drugi egzemplarz. Ale nie wykluczam kiedyś wersji 2.0. Zapewne będzie na F4 PS: Pisanie gier to przyjemność Jako bonus na zakończenie na GitHuba wrzuciłem bibliotekę obsługi wyświetlacza na 16-bitową linię danych oraz narzędzia do kompresji grafiki oraz fontów. https://github.com/MarekRyn/ILI9341-Toolkit
  12. Witam! Konsolka gotowa! Poniżej ostatni update: Czas oczekiwania na zamówione PCB wykorzystałem głównie na pracę nad oprogramowaniem: 1. Rozszerzyłem moją bibliotekę do obsługi TFT o wyświetlanie dowolnych fontów. Wystarczy wybrany Font skompresować napisanym przeze mnie skryptem Pytona i wkleić wynikową tablicę do kodu oprogramowania w C. Funkcja wyświetla tekst z antyaliasingiem, więc wszystkie litery i znaki wyglądają ładnie. 2. Dopracowałem funkcje odpowiedzialne za dzwięk 3. Tworzyłem animacje, grafikę oraz dodawałem ścieżkę dzwiękową do gry. Ostatecznie odebrałem zamówione PCB, więc od razu zabrałem się do składania. Wszystkie części już czekały. Składałem i testowałem konsolkę w następującej kolejności: Charger -> Układ zarządzania -> Przetwornica DC-DC -> Mikrokontroler i elementy towarzyszące-> Wyświetlacz, Klawiatura W porównaniu do prototypu bazującego na płytce NUCLEO, zastosowałem wersję STM32F103 z większą ilością pamięci. W międzyczasie ukończyłem też oprogramowanie. Gdy miałem już całą elektronikę, przyszedł czas na złożenie wszystkiego w całość. Poza przyciskiem krzyżykiem, na tym etapie, nie musiałem już modyfikować żadnych innych elementów obudowy. Przycisk okazał się trochę za bardzo dopasowany i naciskając np strzałkę w górę, jednocześnie wciskały się inne kierunki. Problem łatwo dało się rozwiązać drukując poprawiony element. Ostatecznie konsolka wygląda następująco: A tu filmiki z działania konsolki: 1. Intro gry 2. Game play: 3. Animacje na Game Over PODSUMOWANIE: Ostatecznie jestem zadowolony z projektu. Wiele się przy nim nauczyłem i przy okazji powstała fajna zabawka dla synka. Nie wszystko poszło jednak idealnie. Przy montażu okazało się że mam błąd w schemacie, co przełożyło się na błąd na płytce. Na szczęście dało się to załatwić jednym mostkiem i jednym cięciem ścieżki. Zaprojektowałem też połączenie USB (pull up D+ z opornikiem do 3,3V itp...). Ostatecznie nie udało mi się jednak połączyć z mikrokontrolerem przez USB. Urządzenie było wykrywane, ale cokolwiek robiłem nie dało się zainstalować poprawnych sterowników. Gdy zamówiłem lepszy STM32F103, okazało się że wyższe wersje różnią się od tej zainstalowanej na NUCLEO (najuboższa). Nie tylko mają więcej pamięci ale też DAC, I2S, sprzętową obsługę kart SD itd... funkcje których tak mi brakowało. No nic... już było za późno na zmianę projektu. Pozdrawiam, Marek
  13. korzystam właśnie z Cury i opcje support roof mam włączoną. Chętnie bym przetestował Simplify3D ale nie mają nawet wersji próbnej. Jak ktoś korzystał z tego oprogramowania to chętnie wysłucham opinii.
  14. Korzystam z serii BN1936 firmy BOSSARD. Wkłady te łatwo wstępnie osadzić w otworze bo na dole mają kilka mm kompletnie gładkie. Otwór montażowy drukuję o 0,1mm większy niż zaleca producent w nocie katalogowej. Niestety nie mam warunków ani narzędzi do szlifowania plastiku w mieszkaniu.
  15. Witam po przerwie Wreszcie mam czas żeby wrócić do projektu. W oczekiwaniu na płytkę drukowaną dopracowuję obudowę: Na razie wydrukowałem dwa prototypy. Na ich podstawie powstała długa lista poprawek które na bieżąco nanoszę na projekt w Fusion360. Obie połowy są spasowane idealnie. Zrobiłem też test wkładów gwintowanych. Montaż lutownicą przebiegł bez najmniejszych problemów, a obudowa wraz z śrubami TORX od razu nabrała profesjonalnego wyglądu. Chociaż teraz żałuję że nie zamówiłem czarnych śrub. Mam też pewien problem z wydrukiem 3D, bo płaskie powierzchnie nad suportami wyglądają bardzo źle.... przykład poniżej: Do tej pory wszystkie wydruki były na średnich ustawieniach z warstwą 0,2mm. Zrobiłem już kilka testów z warstwą 0,1mm, oraz mniejszym odstępem między supportem a modelem i jest lepiej, ale i tak pewnie ostatecznie odwrócę model tak że wszystkie powierzchnie wspierane przez suporty będą wewnątrz obudowy. To tyle na dziś. Pozdrawiam, Marek
×
×
  • Utwórz nowe...