nes86 Napisano Lipiec 12, 2011 Udostępnij Napisano Lipiec 12, 2011 Wstęp Chciałbym w tym workologu przedstawić postępy prac nad robotem pikosumo „Chochlik”. Nazwa jest tymczasowa, być może jeszcze ulegnie zmianie. Worklog ma na celu wspólne (na łamach forum) pokonywanie problemów, które pojawią się podczas budowania tak małego robota oraz dzielenie się pomysłami rozwiązań technicznych, które można w nim zastosować. Być może moje „wypociny” będą też dla kogoś inspiracją do zbudowania robota tej klasy. Pomysł zbudowania takiego robota powstał po rozmowie z Danielem, autorem najmniejszego robota nanosumo „Mały”. Ustaliliśmy wspólnie, że postaramy się do grudnia tego roku zbudować dwa roboty pikosumo (po jednym każdy z nas) i przeprowadzić pokazową walkę na zawodach RoboticArena we Wrocławiu. Wpisy w tym worklogu będą pojawiać się na pewno rzadko. Ukończenie robota planuję na listopad tego roku, więc jest jeszcze trochę czasu na prace projektowe. Będzie to chyba najmniejszy robot w Polsce. Być może podczas budowania go wystąpią problemy nie do rozwiązania, więc może nigdy nie uda mi się go skończyć. Ale na pewno nie zamierzam się łatwo poddawać. Wymagania klasy pikosumo: waga: 5 gram wymiary: 12,5mm x 12,5 mm x 12,5mm pozostałem wymagania są zgodne z tymi dla innych klas robotów sumo Wymiary dohyo: średnica: 96,25 mm wysokość: 3,125 mm szerokość białej linii: 3,125 mm linie shikri-sen tak jak na rysunku poniżej: Na razie mało informacji (to tylko wstęp), ale być może jeszcze dzisiaj pojawi się pierwszy wpis w worklogu. 2 Cytuj Link do komentarza Share on other sites More sharing options...
Sabre Lipiec 12, 2011 Udostępnij Lipiec 12, 2011 Masz już jakichś kandydatów na napęd? Cytuj Link do komentarza Share on other sites More sharing options...
nes86 Lipiec 12, 2011 Autor tematu Udostępnij Lipiec 12, 2011 Mam, to będzie tematem pierwszego wpisu 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
grabo Lipiec 12, 2011 Udostępnij Lipiec 12, 2011 Podoba mi się już sama koncepcja workloga 🙂 Czekam na pierwsze wpisy i problemy, a raczej wyzwania 😃 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
Sabre Lipiec 12, 2011 Udostępnij Lipiec 12, 2011 Kiedyś udało mi się wygrzebać z zepsutego aparatu fotograficznego niesamowicie mały silnik krokowy, gdzieś nawet na diodzie było jego zdjęcie, około 5mm średnicy i mniej więcej taka sama długość, niestety posiadam tylko 1 sztukę, ale byłby doskonałym kandydatem do takiego maleństwa. Prawy dolny róg, silniczek leży obok silniczków identycznych rozmiarem jak w silnikach pololu, do wyprowadzeń silnika jest przylutowany kawałek jakiegoś polimeru ze ścieżkami. Cytuj Link do komentarza Share on other sites More sharing options...
Popularny post nes86 Lipiec 12, 2011 Autor tematu Popularny post Udostępnij Lipiec 12, 2011 Wpis nr. 1 Tematem pierwszego wpisu będzie napęd. Szukając napędu do tak małego robota trzeba wziąć pod uwagę przede wszystkim wymiary. Waga ma tu mniejsze znaczenie, ponieważ najprawdopodobniej tak mały napęd będzie również odpowiednio lekki. I tu pojawia się pytanie skąd wziąć tak mały napęd. Pierwsze co mi przyszło do głowy to kupić gotowy napęd z firmy maxon motor: http://shop.maxonmotor.com/ishop/app Niestety nawet najmniejszy silnik z ich oferty jest zbyt duży. Kolejnym pomysłem na jaki wpadłem było wyciągnięcie silnika z układu sterującego obiektywem w aparacie fotograficznym . Tak się złożyło, że jestem posiadaczem zepsutego aparatu Canon Powershot A75. Więc wziąłem do ręki śrubokręt i z aparatu została tylko kupka części: Niestety silnik odpowiedzialny za zoom obiektywu okazał się dosyć duży, większy nawet od silników stosowanych w mikroserwach (które też są za duże do robota pikosumo). Ale znalazłem tam jeszcze jeden silnik, sterujący przesłonom: Po wstępnych oględzinach okazało się, że jest to silnik krokowy z dwiema cewkami. Oczywiście w Internecie, żadnych informacji na jego temat się nie znajdzie. Wymiarami pasuje do konstrukcji więc zabrałem się za uruchamianie go. Poniżej poglądowy (nie uwzględniłem styków cewek) rysunek który wykonałem w Inventorze: Silnik posiada tylko dwie cewki, można się tego domyśleć po jego budowie i po tym, że ma tylko 4 wyprowadzenia. Przylutowałem kabelki i podłączyłem zasilacz (napięcie 2,8V – później wyjaśnię dlaczego takie a nie inne). Silnik zareagował jak silnik krokowy, czyli obrócił się o pewien niewielki kąt po podaniu napięcia na cewkę. Pobór prądu około 40mA (według wyświetlacza na zasilaczu laboratoryjnym). No to czas napisać program i uruchomić silnik. Przydałby się do tego jakiś zestaw ewaluacyjny. Niestety ostatnio pozbyłem się wszystkich zestawów z AVRkami. Został mi tylko zestaw z STM32: http://www.kamami.pl/?id_prod=5060600 Nigdy nie pisałem jeszcze programu na ARMa, no ale najwyższy czas zacząć Silnik zamierzam sterować bezpośrednio z portów mikrokontrolera, aby ograniczyć liczbę potrzebnych elementów. Według noty katalogowej mikrokontrolera STM32F103 maksymalny prąd jaki może wypływać lub wpływać do pojedynczego pinu wynosi tylko 25mA. Więc postanowiłem połączyć po dwa piny aby uzyskać odpowiednią wydajność prądową. Przylutowałem wtyk do przewodu i podłączyłem do zestawu: Przy uruchamianiu środowiska RIDE7 i pisaniu pierwszego programu trochę się namęczyłem i musiałem przeczytać kilka „tłustych” PDFów ale w końcu się udało. W sterowaniu silnikami krokowymi mam już trochę doświadczenia, więc już za pierwszym razem udało mi się dobrać kolejność podawania napięć na cewki. Schematycznie wygląda to tak (strzałka pokazuje kierunek pradu płynącego przez cewkę) loop{ 1. cewka1 -> cewka2 - 2. cewka1 - cewka2 -> 3. cewka1 <- cewka2 - 4. cewka1 - cewka2 <- } Listing programu poniżej. Jest to listing aplikacji na system operacyjny CircleOS, który jest domyślnie zainstalowany w zestawie Primer2, więc nie musiałem robić nic poza ustawieniem portów jako wyjścia Push-Pull i samego sterowania portami. Mikrokontroler jest zasilany napięciem 2,8V więc też takie napięcie jest podawane na cewki. /******************************************************************************* * Function Name : Application_Ini * Description : Initialization function of Circle_App. This function will * be called only once by CircleOS. * Input : None * Return : MENU_CONTINUE_COMMAND *******************************************************************************/ enum MENU_code Application_Ini ( void ) { if(strcmp(UTIL_GetVersion(), NEEDEDVERSION) < 0) { return MsgVersion(); } //ustawienia portów //LED0 GPIO_InitTypeDef LED0_init; LED0_init.GPIO_Pin = GPIO_Pin_0; LED0_init.GPIO_Speed = GPIO_Speed_2MHz; LED0_init.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOE, &LED0_init); //porty sterujace silnikiem //Pin PC4 GPIO_InitTypeDef PC4_init; PC4_init.GPIO_Pin = GPIO_Pin_4; PC4_init.GPIO_Speed = GPIO_Speed_2MHz; PC4_init.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &PC4_init); //Pin PC5 GPIO_InitTypeDef PC5_init; PC5_init.GPIO_Pin = GPIO_Pin_5; PC5_init.GPIO_Speed = GPIO_Speed_2MHz; PC5_init.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &PC5_init); //Pin PB0 GPIO_InitTypeDef PB0_init; PB0_init.GPIO_Pin = GPIO_Pin_0; PB0_init.GPIO_Speed = GPIO_Speed_2MHz; PB0_init.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &PB0_init); //Pin PA0 GPIO_InitTypeDef PA0_init; PA0_init.GPIO_Pin = GPIO_Pin_0; PA0_init.GPIO_Speed = GPIO_Speed_2MHz; PA0_init.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &PA0_init); //Pin PA1 GPIO_InitTypeDef PA1_init; PA1_init.GPIO_Pin = GPIO_Pin_1; PA1_init.GPIO_Speed = GPIO_Speed_2MHz; PA1_init.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &PA1_init); //Pin PA2 GPIO_InitTypeDef PA2_init; PA2_init.GPIO_Pin = GPIO_Pin_2; PA2_init.GPIO_Speed = GPIO_Speed_2MHz; PA2_init.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &PA2_init); //Pin PA4 GPIO_InitTypeDef PA4_init; PA4_init.GPIO_Pin = GPIO_Pin_4; PA4_init.GPIO_Speed = GPIO_Speed_2MHz; PA4_init.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &PA4_init); //Pin PA3 GPIO_InitTypeDef PA3_init; PA3_init.GPIO_Pin = GPIO_Pin_3; PA3_init.GPIO_Speed = GPIO_Speed_2MHz; PA3_init.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &PA3_init); //zapalam diode LED0 :) GPIO_SetBits(GPIOE, LED0); //gaszenie diody //GPIO_ResetBits(GPIOE, LED0); //licznik int i = 0; // TODO: Write your application initialization function here. return MENU_CONTINUE_COMMAND; } /******************************************************************************* * Function Name : Application_Handler * Description : Management of the Circle_App. * * Input : None * Return : MENU_CONTINUE *******************************************************************************/ enum MENU_code Application_Handler ( void ) { const char napis1[] = "Stepper Motor"; const char napis2[] = "Test Application"; const char napis3[] = "Speed = ?"; const char napis4[] = "Ticks = ?"; DRAW_DisplayString(5,110, napis1, sizeof(napis1) ); //X,Y, string lenght DRAW_DisplayString(5,90, napis2, sizeof(napis2) ); //X,Y, string lenght DRAW_DisplayString(5,70, napis3, sizeof(napis3) ); //X,Y, string lenght DRAW_DisplayString(5,50, napis4, sizeof(napis4) ); //X,Y, string lenght //licznik int i = 0; char licznik[4]; int licznik2 = 0; int opoznienie = 5000; while(i<9000){ licznik[3] = (i%10)+48; licznik[2] = ((i/10)%10)+48; licznik[1] = ((i/100)%10)+48; licznik[0] = ((i/1000)%10)+48; if(licznik2 == 0){ //CEWKA 1 //set PC4 i PC5 GPIO_SetBits(GPIOC, GPIO_Pin_4); GPIO_SetBits(GPIOC, GPIO_Pin_5); //reset PB0 i PA0 GPIO_ResetBits(GPIOB, GPIO_Pin_0); GPIO_ResetBits(GPIOA, GPIO_Pin_0); //CEWKA 2 //reset PA1 i PA2 GPIO_ResetBits(GPIOA, GPIO_Pin_1); GPIO_ResetBits(GPIOA, GPIO_Pin_2); //reset PA4 i PA3 GPIO_ResetBits(GPIOA, GPIO_Pin_4); GPIO_ResetBits(GPIOA, GPIO_Pin_3); } if(licznik2 == 1){ //CEWKA 1 //reset PC4 i PC5 GPIO_ResetBits(GPIOC, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_5); //reset PB0 i PA0 GPIO_ResetBits(GPIOB, GPIO_Pin_0); GPIO_ResetBits(GPIOA, GPIO_Pin_0); //CEWKA 2 //set PA1 i PA2 GPIO_SetBits(GPIOA, GPIO_Pin_1); GPIO_SetBits(GPIOA, GPIO_Pin_2); //reset PA4 i PA3 GPIO_ResetBits(GPIOA, GPIO_Pin_4); GPIO_ResetBits(GPIOA, GPIO_Pin_3); } if(licznik2 == 2){ //CEWKA 1 //reset PC4 i PC5 GPIO_ResetBits(GPIOC, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_5); //set PB0 i PA0 GPIO_SetBits(GPIOB, GPIO_Pin_0); GPIO_SetBits(GPIOA, GPIO_Pin_0); //CEWKA 2 //reset PA1 i PA2 GPIO_ResetBits(GPIOA, GPIO_Pin_1); GPIO_ResetBits(GPIOA, GPIO_Pin_2); //reset PA4 i PA3 GPIO_ResetBits(GPIOA, GPIO_Pin_4); GPIO_ResetBits(GPIOA, GPIO_Pin_3); } if(licznik2 == 3){ //CEWKA 1 //reset PC4 i PC5 GPIO_ResetBits(GPIOC, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_5); //reset PB0 i PA0 GPIO_ResetBits(GPIOB, GPIO_Pin_0); GPIO_ResetBits(GPIOA, GPIO_Pin_0); //CEWKA 2 //reset PA1 i PA2 GPIO_ResetBits(GPIOA, GPIO_Pin_1); GPIO_ResetBits(GPIOA, GPIO_Pin_2); //reset PA4 i PA3 GPIO_SetBits(GPIOA, GPIO_Pin_4); GPIO_SetBits(GPIOA, GPIO_Pin_3); } while(opoznienie>1){ opoznienie --; asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop"); asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop"); } opoznienie = 5000; DRAW_DisplayString(60,50, licznik, 4 ); //X,Y, string lenght i++; licznik2++; if(licznik2 == 4) licznik2 = 0; } //Wylaczenie silnika //CEWKA 1 //reset PC4 i PC5 GPIO_ResetBits(GPIOC, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_5); //reset PB0 i PA0 GPIO_ResetBits(GPIOB, GPIO_Pin_0); GPIO_ResetBits(GPIOA, GPIO_Pin_0); //CEWKA 2 //reset PA1 i PA2 GPIO_ResetBits(GPIOA, GPIO_Pin_1); GPIO_ResetBits(GPIOA, GPIO_Pin_2); //reset PA4 i PA3 GPIO_ResetBits(GPIOA, GPIO_Pin_4); GPIO_ResetBits(GPIOA, GPIO_Pin_3); return MENU_LEAVE; } Po dobraniu odpowiedniego opóźnienia pomiędzy przełączaniem prądu cewek silnik ruszył. Poniżej filmik. Wiem, że jakość beznadziejna ale nie mam nic lepszego do nagrywania filmów. Później sprawdziłem siłę silnika i jestem bardzo pozytywnie zaskoczony. Palcem czuć że silnik próbuje się obrócić. Robot ważyć będzie tylko 5 gram i myśl, że dwa takie silniki spokojnie go uciągną. Nie zamierzam stosować przekładni, bo po pierwsze nie mam na to miejsca a po drugie silnik krokowy można sterować tak, że będzie się kręcił prawie z dowolną (oczywiście taką do jakiej jest przystosowany) prędkością bez utraty momentu. Na razie to koniec, w następnym wpisie przedstawię wstępny projekt i spróbuję dobrać już pozostałe elementy robota. 4 Cytuj Link do komentarza Share on other sites More sharing options...
Sabre Lipiec 12, 2011 Udostępnij Lipiec 12, 2011 nes86, jeśli nie masz 2 sztuki, to mogę odstąpić mój silniczek 🙂. Cytuj Link do komentarza Share on other sites More sharing options...
grabo Lipiec 12, 2011 Udostępnij Lipiec 12, 2011 W obecnej konfiguracji sprzętowej mógłbyś wyciągnąć z silnika jeszcze więcej samym softem 🙂 Obecnie sterujesz pełnym krokiem. Sterując półkrokiem zyskałbyś trochę na momencie i płynności: loop{ 1. cewka1 -> cewka2 - 2. cewka1 -> cewka2 -> 3. cewka1 - cewka2 -> 4. cewka1 <- cewka2 -> 5. cewka1 <- cewka2 - 6. cewka1 <- cewka2 <- 7. cewka1 - cewka2 <- 8. cewka1 -> cewka2 <- } Dodatkowo, gdybyś w miejscach gdzie występuje na cewce tylko "-" (czyli u ciebie stan niski) dał stan wysokiej impedancji, udałoby się uzyskać większą prędkość maksymalną 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
nanab Lipiec 12, 2011 Udostępnij Lipiec 12, 2011 W temacie małych silników-znalazłem podobnych rozmiarów, bardzo tani i ogólnie dostępny silnik DC. Silnik wibracji z SE k300i. Wymiary obudowy(bez wału) to~4.02x9.01mm. Kupiłem niedawno na all 5szt po 1zł/szt. Teraz niestety podrożały aż do 3zł( 🙂 ). Porównanie z różnymi drobiazgami i silnikiem od nokii3310: No i nasunęło mi się ważne pytanie-czym chcesz to zasilać? Cytuj Link do komentarza Share on other sites More sharing options...
nes86 Lipiec 12, 2011 Autor tematu Udostępnij Lipiec 12, 2011 Sabre, dzięki ale twój silnik jest trochę inny, i pewnie cięższy bo ma metalową obudowę. Nietety będę musiał zainwestować w drugi zepsuty aparat. grabo, wiem że mogę sterować półkrokiem ale nie chcę tego robić ze względu na większy pobór prądu. Jak włączę zasilanie czterech cewek (dwa silniki po dwie cewki) to prąd wyniesie 160-200mA (plus jeszcze inne odbiorniki w układzie) a maksymalny prąd przepływający przez mikrokontroler STM32F103 wynosi tylko 150mA (steruję silnikiem bezpośrednio z portów mikrokontrolera). Dzięki za przypomnienie o włączeniu wysokiej impedancji na pinach zamiast zwieraniu ich do masy, zapomniałbym o tym, ale pamiętaj, że mi nie zależy na dużej prędkości obrotowej, wręcz przeciwnie. Do silnika nie zamierzam zakładać żadnej przekładni. nanab, widziałem te silniczki, ale trzeba by było do nich wymyślić jakąś przekładnie, a do użytego przeze mnie silnika krokowego nie zamierzam montować przekładni. Cytuj Link do komentarza Share on other sites More sharing options...
nanab Lipiec 12, 2011 Udostępnij Lipiec 12, 2011 Więc w jaki sposób chcesz zamontować dwa silniki każdy o długości ponad 10mm w konstrukcji o szerokości 12,5mm? Bez przekładni albo niesymetrycznego umieszczenia kół nie da rady. Można użyć prostej przekładni ciernej-koła i silniki w układzie podobnym do tego w "małym". Ponawiam pytanie o zasilanie. Cytuj Link do komentarza Share on other sites More sharing options...
nes86 Lipiec 17, 2011 Autor tematu Udostępnij Lipiec 17, 2011 Silniki chcę umieścić tak: W tak małym robocie można chyba pójść na pewne ustępstwa i umieścić koła niesymetrycznie. Zasilać robota planuję z takiego akumulatora (ogniwo podobne do tego z twojego zdjęcia 4 posty wyżej): http://batimex.pl/towar.php?idtowaru=2800&idzastosowanianad=518&idzastosowania=519 Cytuj Link do komentarza Share on other sites More sharing options...
Bobby Lipiec 18, 2011 Udostępnij Lipiec 18, 2011 Troszkę duży ten akumulatorek. Nie myślałeś, żeby zastosować np coś zegarkowego? Jaki przewidujesz pobór prądu max tego maleństwa? Cytuj Link do komentarza Share on other sites More sharing options...
Sabre Lipiec 18, 2011 Udostępnij Lipiec 18, 2011 Nie myślałeś, żeby zastosować np coś zegarkowego? Bobby oszalałeś? Li-pol to najprostsze i najlepsze rozwiązanie. Swoją drogą kiedyś na jakimś forum modelarskim (chyba polskim), czytałem wątek kolesia, który ciął akumulatorki li-pol. Miał specjalną komorę wypełnioną jakimś gazem, rozkładał akusa na części pierwsze, rozwijał elektrody, przycinał je, zwijał, zgrzewał całość tak jak w oryginale. Robił bardzo małe akumulatorki o pojemnościach rzędu 5mAh albo i mniej. Cytuj Link do komentarza Share on other sites More sharing options...
Bobby Lipiec 18, 2011 Udostępnij Lipiec 18, 2011 Sabre, wiem, że by się najlepiej nadawał, ale jeśli pobór prądu byłby naprawdę mikroskopijny, to żeby zmieścić się w wymiarach (tamten lipol ma jeden 15mm) można by pójść na kompromis kosztem pojemności i wydajności prądowej. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!