Skocz do zawartości

ahmed10

Użytkownicy
  • Zawartość

    11
  • Rejestracja

  • Ostatnio

Reputacja

7 Neutralna

O ahmed10

  • Ranga
    2/10

Informacje

  • Płeć
    Mężczyzna
  • Zainteresowania
    elektronika , lotnictwo , muzyka klasyczna

Ostatnio na profilu byli

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

  1. Witam! Chciałbym przedstawić wam moją konstrukcję, która stała się przedmiotem mojej pracy inżynierskiej. Mechanika: Konstrukcja mechaniczna w zasadzie oparta jest na 2 płytkach PCB. Do płytki głównej zamontowane są dwie kulki podporowe, a także silniki pololu o przekładni 1:10 co stanowi napęd robota. Z przodu zamontowana jest płytka z podstawą zawierająca uchwyty do czujników ultradźwiękowych. Taki sam uchwyt pod czujnik znajduje się również na 'ogonie' robota - jest on nie używany i został zamontowany eksperymentalnie. Na przedłużonej osi silników zostały zamontowane magnesy enkoderów magnetycznych co ilustruje poniższa fotografia. Elektronika: Sercem robota jest mikrokontroler AVR ATmega162, którego zadaniem jest sterowanie robotem w tym: obsługa enkoderów, sterowanie silnikami, odbiór informacji z mikrokontrolera slave nt. odległości mierzonych przez czujniki, realizację algorytmów sterowania, realizacja połączenia bluetooth, obsługa wyświetlacza LCD hd44780. Drugi mikrokontroler również AVR, ATmega328 realizuje tylko i wyłącznie obsługę czujników odległości HC-SR04. Pomiary normalizuje i wysyła interfejsem SPI do jednostki głównej ATmega162. Na pokładzie robota znajdują się również dwa enkodery magnetyczne AS5040 pracujące w pętli sterowania regulatora PI silników. Enkodery te pracują w trybie defaultowym czyli wyjście kwadraturowe, rozdzielczość 2x256. Silniki sterowane są poprzez mostek H L293. Komunikacją z robotem zajmuje się moduł bluetooth bt222 - czyli komunikacja jest przez UART mikrokontrolera. Główny mikrokontroler jest taktowany zewnętrznym kwarcem 16Mhz co przy takiej ilości obsługiwanych urządzeń i wykorzystywanych interfejsów było po prostu konieczne, z kolei mikrokontroler atmega328 jest taktowany zewnętrznym kwarcem jednak z powodu lepszej podstawy czasowej, która jest konieczna do dokładnych odczytów z czujników odległości. Na wyświetlaczu LCD są wyświetlane aktualnie mierzone wartości odległości czujników. Automatyka: Zostało wspomniane, że silnikami steruje algorytm regulatora PI. Aby obliczyć jego nastawy została przeprowadzona identyfikacja transmitancji. W tym celu wykorzystałem UART do przesyłania aktualnej prędkości silników oraz środowisko Matlab do wizualizacji danych na wykresie. Z wyliczeń wyszło, że silniki z zastosowanymi kołami mają transmitancję: G(s)=107/(0.19s+1) Po obliczeniu nastaw regulatora i zastosowaniu w praktyce okazało się, że można jeszcze troszkę dopieścić nastawy i ostatecznie wykresy odpowiedzi skokowej bez i z regulatorem wyglądają następująco: Software: Napisane w C w środowisku Eclipse. Umożliwia robotowi 3 tryby. Tryb avoid. W trybie tym robot ma za zadanie omijać przeszkody wykorzystując regulator rozmyty Takagi-Sugeno. Wykorzystuje w tym celu odczyty z czujników odległości. Tryb goal seeking. Robot podąża do celu czyli do odebranych przez bluetooth współrzędnych kartezjańskich podanych w [mm], zakładając, że miejsce od którego zaczyna lub dostał nowy zestaw współrzędnych, ma współrzędne 0,0. W trybie tym regulator Takagi-Sugeno ma za zadanie na podstawie zaimplementowanej odometrii oraz współrzędnych końcowych sterować robotem w celu osiągnięcia zadanego położenia. Problem algorytmu przedstawia ilustracja: Tryb avoid + goal seeking. Jest to połączenie dwóch wcześniej opisanych trybów. W trybie tym działają równocześnie obydwa wcześniej opisane algorytmy, jednak na wejście regulatorów PI sterujących silnikami jest podawany zbalansowany sygnał z obu algorytmów. Tzn w zależności od najmniejszej odległości od przeszkody mierzonej przez któryś z czujników jest obliczany procentowy udział wartości sterowania od dwóch algorytmów. Brzmi skomplikowanie ale takie nie jest. Najlepiej zobrazuje to wzór: V=K*Vg+(1-K)*Va gdzie V jest prędkością zadaną na regulator PI silnika, Vg jest prędkością wynikającą z algorytmu goal seeking, Va jest prędkością wynikającą z algorytmu avoid, K jest parametrem, który przyjmuje wartość z przedziału 0-1 w zależności od mierzonej minimalnej odległości do przeszkody. Robota wprowadza się w odpowiedni tryb za pomocą dwóch przycisków lub poprzez interfejs bluetooth. Odpowiednie tryby sygnalizują diody LED. W celu przesłania komendy zawierającej współrzędne celu najpierw należy wprowadzić robota w odpowiedni tryb, a następnie wysłać do niego wg stworzonego prze zemnie protokołu dane. Protokół wysyłania danych jest następujący: X±⌴⌴⌴Y±⌴⌴⌴& gdzie +- – znak współrzędnej, _ – wartość współrzędnej. Testy. Konstrukcja została przetestowana pod względem dokładności odometrii. Robot podczas licznych testów na bieżąco wysyłał swoje współrzędne, które w dalszej kolejności były obrabiane w środowisku Octave do przyjemnych w analizie wykresów. Przykładowy wykres drogi, którą pokonał robot na 'placu manewrowym' w trybie avoid: ... oraz rzut z góry na 'plac manewrowy': U góry pozycja początkowa, na dole końcowa robota. Cały ten obszar był dookoła ogrodzony ścianką. Słowa samokrytyki Co bym zmienił ? Czujniki. Ze względu na problematyczność wykrywania małych przeszkód lub gdy płaszczyzna przedmiotu uniemożliwia odbicie się fali ultradźwiękowej w stronę odbiornika. Zdarza się, że z powodu gubienia przeszkód robot po prostu w nie wpada. Najciekawsze fragmenty programu: Regulatory PI: //######################################## REGULATOR PRĘDKOŚCI ############################################ erra = vl-Va;//liczenie błedu prędkości errb = vp-Vb; if(ua<1023&&ua>-1023)Ca = Ca+(erra*dt);//całka błędu ua = kp*(erra + Ca/Ti);//regulator PI //P I if(ub<1023&&ub>-1023)Cb = Cb+(errb*dt);//całka błędu ub = kp*(errb + Cb/Ti);//regulator PI //P I if((ua<10)&&(ua>-10))ua=0; if((ub<10)&&(ub>-10))ub=0; motor_set(ua,ub);//ustawia sterowanie silników Regulator rozmyty Takagi-Sugeno trybu goal seeking: inline void PsiZ2Vlr(float *Psi, float *z, int16_t *vl,int16_t *vp) { float PSI[3]; float XL[6],XR[6]; float NR,FR,L,S,P,VL=0,VP=0,m=0; uint8_t i,k; ///////////////////////////////LICZENIE PRZYNALEŻNOŚCI////////////////////////////////// if(*z<=100)NR=-0.01*(*z)+1;else NR=0;//jak bardzo blisko jest cel if(*z<=100)FR=0.01*(*z);else FR=1;//jak bardzo daleko jest cel if(*Psi<=0)L=-0.3183*(*Psi);else if(*Psi<-M_PI)L=1;else L=0; if(*Psi<=0)S=0.3183*(*Psi)+1;else if(*Psi<-M_PI)S=0; else if(*Psi>M_PI)S=0;else S=-0.3183*(*Psi)+1; if(*Psi>=0)P=0.3183*(*Psi);else if(*Psi>M_PI)P=1;else P=0; /////////////////////////////////////TABLICA REGUŁ////////////////////////////////////// PSI[0]=L; PSI[1]=S; PSI[2]=P; //NR; XL[0]=-4000;XR[0]=4000; XL[1]=0;XR[1]=0; XL[2]=4000;XR[2]=-4000; //FR; XL[3]=-4000;XR[3]=4000; XL[4]=4000;XR[4]=4000; XL[5]=4000;XR[5]=-4000; /////////////////////////////obliczanie prędkości silników////////////////////////////// for(k=0,i=0;k<3;k++,i++)//pierwszy wiersz tabeli { VL+=NR*PSI[k]*XL[i]; VP+=NR*PSI[k]*XR[i]; m+=NR*PSI[k]; } for(k=0;i<6;k++,i++)//drugi wiersz tabeli { VL+=FR*PSI[k]*XL[i]; VP+=FR*PSI[k]*XR[i]; m+=FR*PSI[k]; } *vl=(int16_t)VL/m; *vp=(int16_t)VP/m; } Obsługa czujników odległości: //PRZERWANIE OD CAPTURE PIN ISR(TIMER1_CAPT_vect) { if( (TCCR1B & (1<<ICES1)) ) { LastCapture = ICR1;//jesli zbocze narastajace, zlap ICR1 } else { PulseWidth = ICR1 - LastCapture;//Jeśli zbocze opadajace oblicz PW pomiar=0;//wyzeruj flagę pomiaru } TCCR1B ^= (1<<ICES1);//Zmiana zbocza wyw. przerwanie } Mam nadzieję że robocik się podoba. W razie pytań proszę śmiało. Całości kodu nie udostępniam ze względu na prawa autorskie niektórych funkcji bibliotecznych. Co mogłem udostępniłem. Pozdrawiam was wszystkich !
  2. Zdecydowanie polecam Robo~motion Rzeszów, nie ma lepszych. Sprzęt, zorganizowanie, miła atmosfera i wgl
  3. Witam! Jak już jest wspominane o wydajności aku czy baterii to warto wspomnieć o rezystancji wewnętrznej - w końcu to od niej zależy maksymalna moc dostarczana do np. silników jak to było wspominane w tekście.
  4. no tak PWM, a co jeśli będziemy sterować silnik liniowo tj. zwiększając i zmniejszając napięcie zasilania. To jest schemat takiego połączenia: Widać, że pod stojan jest podpięte napięcie z dzielnika kondensatorowego, a nie z GND Najlepiej było by sprawdzić te sposoby oscyloskopem czy rzeczywiście coś daje podłączanie kondziołków pod obudowę. Jeśli chodzi jeszcze o to że niby przy sterowaniu PWM-em stojan stałby się anteną to mam zastrzeżenie tego typu że miałem kiedyś samolot na zdalne sterowanie (zasięg 300m) i właśnie kondensatory były podpięte tak jak na rysunku 3 czyli między szczotkami i jeszcze na obudowę. To by się trochę gryzło bo na pokładzie był przecież odbiornik.
  5. Jeśli chodzi o takie podłączenie kondensatorów to ciężko jest znaleźć jakieś sensowne informacje na ten temat. Każdy kto robi konstrukcje na silnikach powiela rozwiązania gdzieś wcześniej podpatrzone. Jedyne co mi się obiło o uszy to to że gwałtowne zmiany prędkości silnika wywołują zmiany strumienia magnetycznego co powoduje indukowanie się napięcia w samej obudowie silnika (stojanie) do tego dochodzą fale elektromagnetyczne wytwarzane przez łuk elektryczny na zestyku szczotek i komutatora, jednym słowem stojan to taki trochę ekran, który zbiera te wszystkie śmieci stąd konieczność wpięcia go również w elementy filtracyjne
  6. Artykuł ten jest skierowany głównie dla młodszej części naszej wspólnoty Forbota, co w cale nie oznacza, że ci bardziej zaawansowani w temacie nie mogą go przeczytać. Omówię w nim 3 podstawowe zagadnienia tj: » Część 1 :: Dlaczego gdy podłączymy silnik pod zasilanie na początku pobiera on duży prąd » Część 2 :: Przesunięcie osi neutralnej i bieguny pomocnicze » Część 3 :: Poprawne zasilanie i filtrowanie układów napędowych A zatem zapraszam do lektury. » Część 1 :: III klasę technikum Profesor spytał: „Dlaczego gdy podłączymy silnik pod zasilanie na początku pobiera on duży prąd?”- na to pytanie nikt nie potrafił udzielić sensownej i prawidłowej odpowiedzi. (fakt z życia wzięty) Aby odpowiedzieć na pytanie zadane przez profesora należało by najpierw zgłębić istotę działania silnika elektrycznego. Jak wiadomo istota jego działania opiera się na zasadzie siły elektrodynamicznej. Z lekcji fizyki wiemy że z siłą elektrodynamiczną wiąże się „nie wiedzieć dlaczego” lewa ręka. A to ilustracja która obrazuje zasadę używania lewej ręki: Jak wiadomo również z lekcji fizyki F = BIL, gdzie B- indukcja pola magnetycznego, I prąd płynący w przewodzie tudzież uzwojeniu, L długość przewodnika, która znajduje się w polu magnetycznym No dobra to już wiemy ale dalej nie wiemy co sprawia że na początku silnik pobiera duży prąd!! Aby to wyjaśnić potrzebna jest nam kolejna porcja wiedzy. Tym razem przyda nam się prawa ręka i zjawisko indukcji elektromagnetycznej. Całość ilustruje obrazek poniżej: i wzór do ilustracji -e = Blv , gdzie e – indukowane napięcie B – indukcja pola magnetycznego l – długość przewodnika tudzież uzwojenia poruszającego się prostopadle w polu magnetycznym v – prędkość z jaką przewodnik porusza się w strumieniu magnetycznym Dobra, czy teraz już wiemy dlaczego silnik pobiera duży prąd przy rozruchu? Niestety nie! Potrzebne jest nam jeszcze kilka informacji, a ściślej budowa i zasada działania silnika elektrycznego Aby zrozumieć to i to posłużę się kolejną ilustracją: Jest to bardzo uproszczony, ale za to bardzo dobrze wyjaśniający zasadę działania model silnika elektrycznego. Wektor F jest nam już znany z rysunku objaśniającego zjawisko elektrodynamiczne. A teraz uważaj bo przechodzimy do sedna sprawy! Jak wiadomo po podłączeniu zasilania w uzwojeniach silnika zaczyna płynąć prąd, który ogranicza rezystancja uzwojeń Rw, dodatkowo w polu magnetycznym wytworzonym przez magnesy trwałe B zaczynają poruszać się zwoje o długości l z pewną prędkością v !! No właśnie doszliśmy do wzoru -e = Blv ! A więc w zwojach które poruszają się dzięki sile elektrodynamicznej zaczyna się również indukować napięcie! Teraz przyjrzyj się dobrze schematowi poniżej, który ilustruje de facto nasz silnik: gdzie Us – napięcie zasilania I – prąd płynący w uzwojeniach silnika Rw – rezystancja uzwojeń silnika e – napięcie wyindukowane podczas pracy silnika Ze schematu wynika iż: Us- I*Rw – e = 0 Po przekształceniu: Us = e + I*Rw Pewnie od początku zastanawiałeś się dlaczego we wzorze -e = Blv występuje minus przed e. Już tłumaczę. Otóż napięcie wyindukowane w uzwojeniach ma przeciwny zwrot co zresztą zaznaczyłem na schemacie stąd ten minus. Przyjrzyjmy się bliżej naszemu wzorowi Us = e + I*Rw , Ponieważ napięcie zasilania mamy stałe oraz rezystancja uzwojeń się nie zmienia czyli Us = const i Rw = const to wynika z niego jednoznacznie, że im większe e tym mniejszy płynie prąd I, a skoro napięcie e rośnie wraz z prędkością uzwojeń wirnika de facto wraz z prędkością silnika to im silnik szybciej się kręci tym mniejszego prądu potrzebuje! Ot i takim oto sposobem doszliśmy razem do tego dlaczego gdy podłączymy silnik pod zasilanie na początku pobiera on duży prąd. » Część 2 :: Omawiając silniki szczotkowe nie można zapomnieć o zjawisku komutacji które pokrótce przedstawiają ilustracje poniżej: W zjawisku komutacji najważniejszą rolę odgrywa komutator dzięki któremu kierunek prądu w uzwojeniach jest odpowiedni pod odpowiednim biegunem. Odpowiedni tj. taki który umożliwia silnikowi dalsze obracanie się. Zagłębmy się bardziej w zjawisko komutacji. Jak widać z powyższych ilustracji wektor siły F powstaje tylko wówczas gdy zwoje wirnika poruszają się prostopadle do lini pola magnetycznego czyli pod biegunami. A co się dzieje gdy zwoje poruszają się równolegle do linii pola tak jak to ma miejsce na rysunku 2 i 4? A no wówczas żadna siła nie działa na wirnik! Brzmi nieźle, ale to nie jest prawda. Siła działa, ale jej wektor ma kierunek prostopadły do osi obrotu i zwrot na zewnątrz silnika i dlatego nie wywołuje ruchu obrotowego. Jakby tego było mało w przewodniku poruszającym się wzdłuż linii pola magnetycznego nie indukuje się SEM (siła elektromotoryczna) czyli to nasze e, które zmniejszało nam prąd silnika! Na szczęście komutator jest tak zbudowany i szczotki tak ustawione, że w momencie takiej pozycji uzwojeń wirnika nie jest na nie podawane napięcie, a oś w której nie indukuje się napięcie nazywa się osią neutralną. Zdało by się że wszystko sobie już wyjaśniliśmy odnośnie komutacji – no w zasadzie to nie, ale najpierw chcę ci przedstawić jeszcze jeden typ silnika szczotkowego w którym magnesy trwałe zastąpione są elektromagnesami. Schemat takiego silnika znajduje się poniżej: Zasada jego działania jest taka sama jak tego bardzo uproszczonego silnika którego wcześniej omawialiśmy. Różnica polega głównie na liczbie biegunów stojana(głównych) i wirnika(twornika) a co za tym idzie budowie samego komutatora przystosowanego teraz do kilku uzwojeń na wirniku. No i pojawiły się jeszcze jakieś „dziwne” bieguny pomocnicze. O co chodzi z tymi biegunami pomocniczymi? Aby zrozumieć istotę ich egzystencji przeanalizujmy sam kształt linii pola magnetycznego jakie występują w silniku. Obrazują je ilustracje poniżej: Na rys. a) zostały zaznaczone linie pola magnetycznego pochodzące tylko od magnesów lub elektromagnesów umieszczonych na stojanie. Na rys. b) zaznaczone zostały linie pola magnetycznego pochodzące od wirnika A teraz co się stanie gdy nałożymy na siebie pole magnetyczne magnesów(elektromagnesów) stojana i wirnika? Zaistniałą sytuację ilustruje rysunek c) Przesunięcie linii pola magnetycznego niestety działa na naszą niekorzyść, gdyż tam gdzie wcześniej była tzw. oś neutralna (zaznaczona czerwoną linią) w której nie indukowało się napięcie - teraz się indukuje, a zwoje w których teraz się nie indukuje bo biegną równolegle do nowych linii pola magnetycznego są podłączone pod zasilanie naszego silnika diametralnie zwiększając jego pobór prądu. Nowa oś neutralna jest zaznaczona niebieskim kolorem. A zatem co należało by zrobić? Są w zasadzie 2 możliwości: przesunąć odpowiednio szczotki, zastosować bieguny pomocnicze, Pierwszego sposobu już się praktycznie nie stosuje natomiast drugi znalazł powszechne zastosowanie ze względu na swoją prostotę. Zadaniem biegunów pomocniczych jest naprostowanie linii zniekształconego pola magnetycznego. A ponieważ zniekształcenie pola magnetycznego i co za tym idzie przesunięcie osi neutralnej zależy od prędkości obrotowej i obciążenia silnika to bieguny te łączy się szeregowo z uzwojeniami wirnika. W przypadku przesuwania szczotek jest problem tego typu, że trzeba by je przestawiać na bieżąco w zależności od prędkości obrotowej i obciążenia silnika i tu właśnie objawia się wyższość rozwiązania z biegunami pomocniczymi. » Część 3 :: Od razu mówię, że nie będę tu omawiał podłączania silników z elektromagnesami na stojanie, czyli uzwojeniami połączonymi szeregowo, bocznikowo, szeregowo-równolegle, ponieważ silniki te są rzadko spotykane w naszych konstrukcjach. Zamiast tego skupię się bardziej na odpowiednim zasilaniu silnika i filtrowaniu wszelkich śmieci pochodzących od niego. Proszę mi wierzyć, że nieumiejętne lub brak filtrowania może prowadzić do pojawienia się różnych „zanieczyszczeń” w zasilaniu naszej konstrukcji co z kolei prowadzi do przepięć, samoczynnych resetów uC lub ich uszkodzeń. Mówię to z własnego doświadczenia dla waszego dobra abyście nie musieli spędzać godzin tak jak ja na wyszukiwaniu przyczyny samoczynnego resetowania się uC mimo, iż na resecie był rezystor podciągający. Zacznijmy od tego z skąd tak naprawdę biorą się te „śmieci”? Pierwsze źródło: niedopasowanie szczotek do osi neutralnej. Skutkuje to zwiększonym i impulsywnym poborem prądu. Jest to najczęstsza przyczyna zanieczyszczeń, gdyż małe silniczki nie mają żadnych układów kompensujących zmiany pola magnetycznego. Drugie źródło: iskrzenia między szczotkami a komutatorem. Prowadzą one nie tylko do zniszczenia tychże elementów, ale także emitują w eter fale elektromagnetyczne które mogą zakłócać moduły radiowe. Także jeżeli w naszym robocie korzystamy np. z modułu bluetooth czy też takiego zwykłego na 433MHz to należy zadbać o odpowiednie środki przeciw zakłócające i ekranujące Tyle teorii teraz trochę praktyki. Podam tu parę przykładów jak sobie radzić z problemami filtracyjnymi 1 sposób i chyba najczęściej spotykany to po prostu mały ceramiczny kondensatorek podłączony przy samym silniku o wartości od 10n do 220n, zazwyczaj 100n. Rozwiązanie często spotykane w samochodzikach na zdalne sterowanie. Można również postarać się o bardziej wyrafinowane metody: 2 sposób to nawinąć dławik. Sposób działa (aktualnie wykorzystywany w moim robocie), ale jest dość kłopotliwy z tej racji, że najczęściej silnikami sterujemy przez PWM, a przebiegi zmienne + cewka to nic dobrego w tym wypadku ze względu na dodatkową impedancję (opór). 3 sposób to specjalne zaprojektowanie zasilania, a w zasadzie oddzielne zasilanie dla części sterującej i napędów z masą połączoną w jednym miejscu na płytce tj. tak żeby na płytce nie było nigdzie pętli masy. Od razu tłumaczę, że pojęcie pętli masy nie odnosi się tylko do wzmacniaczy audio! Utożsamić je można również z układami w których np. korzystamy z przetworników ADC czy długich ścieżek magistral Jeśli natomiast zależy Ci na całkowitym odizolowaniu części sterującej od napędowej można posłużyć się optoizolacją. 4 sposób to stosowanie diod prostowniczych w celu „gaszenia” przepięć. Jeśli nasz silnik w robocie kręci się tylko w jednym kierunku wówczas wystarczy tylko jedna dioda podłączona równolegle do silnika w kierunku wstecznym. Ale jeśli silnik ma wykonywać obroty w jedną jak i w druga stronę wówczas zaleca się zastosowanie takiego schematu: Oczywiście sposoby te można mieszać pomiędzy sobą uzyskując jeszcze lepsze efekty filtracyjne. No i to w zasadzie koniec. Mam nadzieje że podobał wam się artykuł. Pozdrawiam wszystkich Forbotów!!
  7. Rezerwuje temat o silnikach szczotkowych, bezszczotkowych i krokowych! ;D
  8. ahmed10

    Miriam Hexapod

    Konstrukcja bardzo estetycznie wykonana, świetnie się prezentuje. Natomiast co do samego problemu servomechanizmów to zastanawiam się czy przelutowanie (odwrotne przylutowanie) kabli od potencjometru znajdującego się w servie by nie pomogło czasem
×