Skocz do zawartości

[Mikrokontrolery] Zastosowanie mikrokontrolerów STM32 w robotyce


sailo

Pomocna odpowiedź

Popularna rodzina mikrokontrolerów 32 bitowych z rdzeniem Cortex firmy ARM. Produkty firmy STMicroelectronics charakteryzują się bogatym wyposażeniem(peryferiami) oraz dużym wsparciem technicznym (dokumentacje, programy, przykłady). Wydajność oraz funkcje, które oferuje nam producent są nieporównywalnie większe w stosunku do często wykorzystywanych przez użytkowników forum AVRów Atmela. Dodatkowo mamy możliwość korzystania ze standardu CMSIS, który ma zadanie ujednolicenie i ułatwienie tworzenia oprogramowania na procesory z rdzeniem Cortex. W artykule postaram się przedstawić nowe możliwości jakie dają te układy w dziedzinie robotyki i nie tylko.

STM32 F1

Do wyboru mamy następujące serie:

➡️ Value line STM32F100 - 24 MHz CPU with motor control and CEC functions

➡️ Access line STM32F101 - 36 MHz CPU, up to 1 Mbyte Flash

➡️ USB access line STM32F102 - 48 MHz CPU with USB FS

➡️ Performance line STM32F103 - 72 MHz, up to 1 Mbyte Flash with motor control, USB, CAN

➡️ Connectivity line STM32F105/107 - 72 MHz CPU with Ethernet MAC, CAN and USB 2.0 OTG

W każdej serii firma zapewnia szeroki wybór urządzeń różniących się miedzy sobą miedzy innymi:

➡️ pamięcią flash,

➡️ pamięcią RAM,

➡️ urządzeniami peryferyjnymi (np. ilość liczników, przetworników ADC, DAC),
➡️ obudowami (VFQFPN, BGA, LQFP z różna ilością wyprowadzeń),

Mamy więc możliwość dobrania mikrokontrolera odpowiadającego potrzebom danego projektu. Obudowę LQFP podkreśliłem ze względu na to, że bez większego problemu można ją polutować w warunkach domowych.

Weźmy pod lupę model STM32F103RC. Na pokładzie znajdują się:

➡️Rdzeń: ARM 32-bit Cortex™-M3 CPU o maksymalnej częstotliwości taktowania 72MHz

➡️512Kb pamięci Flash - na potrzeby robotyka amatora w zupełności wystarczy

➡️64 Kb pamięci SRAM - całkiem przyzwoicie

➡️Tryby uśpienia/czuwania - na pewno przydadzą się gdy chcemy oszczędzać cenna energię z baterii

➡️3 przetworniki 1us ADC do 21 kanałów wejściowych (zależne od wersji, najczęściej jednak jest 16) -większość czujników ma wyjścia analogowe, a więc szybkie, dokładne przetworniki są cennym urządzeniem peryferyjnym dla robotyka

➡️12 kanałowe DMA - bezcenny układ, kiedy zależy nam na szybkim przesyłaniu danych z urządzeń peryferyjnych do pamięci nie obciążając przy tym CPU, firma STMicro daje możliwość wykorzystania kontrolera DMA z Timerami, przetwornikami (ADC, DAC) SDIO, I2S, SPI, I2C i USART

➡️Urządzenia do "debbugowania" - standardowy JTAG oraz mały, praktyczny, wykorzystujący dwie linie intrefejs SWD (Serial wire debug)

➡️Porty GPIO - Każdy pin może generować jedno z 16 przerwań zewnętrznych. Większość toleruje napięcia na poziome 5V - bardzo użyteczna funkcja ponieważ znika problem konwersji napięć w przypadku wykorzystywania starszych układów.

➡️Do 11 Timerów - Możliwość generowania sygnałów PWM oczywiście jest. Ciekawą opcją wydaję się sprzętowe wsparcie enkoderów. Po odpowiednim podłączeniu z rejestru możemy odczytać nie tylko ilość impulsów, ale również i kierunek obrotów.

➡️I2C, USART SPI - standardowe interfejsy, ich ilość zależna od wersji.

➡️USB 2.0 , CAN, SDIO - interfejsy które mogą okazać się bardzo przydatne.

Mikrokontrolery z tej rodziny posiadają wbudowany bootloader (USART, USB, CAN). Dzięki temu nie trzeba inwestować drogie urządzenia, aby zaprogramować pamieć. Wystarczy wyprowadzony interfejs UART (RX TX, GND), konwerter napięć (np. MAX232) i port RS232 lub przejściówka UART -> USB (np. FT232). Aby uruchomić Bootloader, należy podciągnąć wyprowadzenia BOOT1 do GND oraz BOOT0 do VCC i zresetować układ.

STM32 F4

Warto wspomnieć o nowym produktach tej firmy a mianowicie rodzina mikrokontrolerów STM32F4 oparte o najnowszy rdzeń firmy ARM Cortex M4. Posiadają one jednostkę zmiennoprzecinkową oraz instrukcje procesorów DSP. Rdzeń może być taktowany do 168MHz. Wydajność 210 DMIPS. Zastosowanie znajdą w przetwarzaniu sygnałów oraz systemach mających za zadanie działanie w czasie rzeczywistym.

Ciekawostka zaczerpnięta ze strony http://www.micromouseonline.com/ . Porównanie wykonywania się niektórych instrukcji w mikrokontrolerach z serii STM32F3 (Cortex M3) oraz STM32F4(Cortex M4)

STM32F3:

int main(void){
 float fX,fY,fZ;
 long lX, lY, lZ;
 lX = 123L;         //    1 cycle
 lY = 456L;         //    1 cycle
 lZ = lX*lY;         //    6 cycles
 fX = 123.456;   //    3 cycles
 fY = 9.99;         //    3 cycles
 fZ = fX * fY;      //   41 cycles
 fZ = sqrt(fY);    //  624 cycles
 fZ = sin(1.23); //  1017 cycles
 while(1);
}

STM32F4:

int main(void){
 int main(void){
 float fX,fY,fZ;
 long lX, lY, lZ;
 lX = 123L;         //    2 cycle
 lY = 456L;         //    2 cycle
 lZ = lX*lY;         //    5 cycles
 fX = 123.456;   //    3 cycles
 fY = 9.99;         //    3 cycles
 fZ = fX * fY;      //    6 cycles
 fZ = sqrt(fY);    //   20 cycles
 fZ = sin(1.23); //  124 cycles
 while(1);
}
}

Jak widzimy operacje na liczbach zmiennoprzecinkowych wykonywane są znacznie szybciej w STM32F4. Samo mnożenie przyspieszenie 7 razy, o operacjach matematycznych sin(około 10 razy) pierwiastek(około 30 razy) nie wspominając.

Podsumowanie

Podsumowując, wysoka wydajność, szeroka gama układów peryferyjnych oraz wiele bardzo użytecznych funkcji sprawiają, że mikrokontrolery 32-bitowe firmy STMicroelectronics są świetnym narzędziem dla każdego robotyka. Producent pomyślał także o zestawach edukacyjnych. Na rynku dostępne są moduły nazwane STMDiscovery zawierające mikrokontrolery STM32, włącznie z nowym STM32F4 w cenie około 50zł.

Zachęcam do zadawania pytań oraz dzielenia się swoimi doświadczeniami oraz problemami związanymi z mikrokontrolerami rodziny STM32.

F4.thumb.jpg.321132dcf10844be552f3e57af2314f5.jpg

Link do komentarza
Share on other sites

Przecież sterowanie I/O (bo chyba o to Ci chodzi) odbywa się tak samo na płytce Discovery jak w każdej innej aplikacji.

Na forum są dwie części kursu opartego na STM32. Dodatkowo ST posiada bardzo dobrą dokumentację. Ostatecznie możesz zapoznać się z książką p.Paprockiego STM32 w praktyce.

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

https://www.forbot.pl/forum/topics49/kurs-stm32-czesc-1-narzedzia-vt5733.htm

Jest też druga część, tego samego autora:) Co do "STM32 w praktyce" to nie powiem żeby była to książka szczególnie przystępna dla początkujących, ale póki co chyba nie ma innej pozycji na ten temat na polskim rynku. Jak ktoś zna dobrze ang. techniczny, to ma trochę łatwiej 🙂

  • Lubię! 1
Link do komentarza
Share on other sites

Chodziło mi właśnie o te kursy, które podesłał kolega Nawyk😉

Dlatego właśnie napisałem 'ostatecznie'. Uważam, że warte uwagi są tam początkowe rozdziały opisujące rdzeń cortex i ogólną architekturę procesora.

Jest jeszcze jedna polska pozycja o STM'ach: STM w sieciach Ethernet ale podejrzewam (bo nigdy nie miałem jej w rękach), że jest dla bardziej zaawansowanych użytkowników.

Link do komentarza
Share on other sites

Trochę dziwaczny artykuł bo nic z niego bardzo nie wynika, poza oczywistym wnioskiem że CPU z kooprocesorem arytmetycznym będzie szybsze w obliczeniach od takiego bez.

Ja bym tego nawet nie nazwał artykułem, nie ma tu praktycznie żadnych przydatnych informacji. Jak kolega chciał przybliżyć ARMy rodziny STM32, to należało by bardziej opisać poszczególne rodziny, ich wyposażenie, możliwe segmenty zastosowań, zakres cenowy.

Link do komentarza
Share on other sites

Tekst ten powstał na moją prośbę jako "odnowienie" kilku artykułów tego typu: https://www.forbot.pl/forum/topics20/mikrokontrolery-z-rodziny-51-firmy-atmel-philips-maxim-vt454.htm

Jednak ostatecznie wyszedł z tego opis jednej rodziny mikrokontrolerów z racji ich niemałych możliwości 🙂 Jeśli będzie potrzeba na więcej takich (lub bardziej szczegółowych artykułów) to proszę o informację zwrotną na PW, wtedy będę wiedział czego szukacie 🙂

Link do komentarza
Share on other sites

Swoją drogą, zobaczcie na co się wczoraj natknąłem z STM32 - http://leaflabs.com/devices/maple/

Język praktycznie identyczny z arduino, IDE też. A jako, że ten STM tam zastosowany ma bootloader USB - programowanie bezpośrednio przez USB też jest 🙂 Płytki te są dostępne na allegro: http://allegro.pl/listing.php/search?sg=0&string=maple+clone , niestety jest to rozwiązanie droższe od Discovery, ale fajna płytka jest za 85zł, maple mini, ma wyjścia jak obudowa DIP40.

Link do komentarza
Share on other sites

Ostatnio się trochę zainteresowałem układami z rodziny STM32. W Kamami najtańszy model można kupić za około 7.50zł i posiada on chyba 5 timerów posiadających po 4 kanały, co oznacza, że każdy może generować po jednym przebiegu PWM na kanał o takiej samej częstotliwości ale innym wypełnieniu. Idealna sprawa do sterowania silnikami. Dodatkowo każdy z tych timerów może pracować w specjalnym trybie Encoder Mode, który jak sama nazwa wskazuje stanowi sprzętowe wsparcie dla enkoderów. Z tego co wyczytałem, można dzięki temu trybowi podłączyć kanały A i B i w zależności od tego który impuls wystąpi pierwszy, licznik się inkrementuje albo dekrementuje. Przetwornik ADC ma 10 kanałów i wiele ciekawych trybów działania. Do tego interfejsy SPI, I2C i dwa USARTy. Wszystkie porty IO poza wejściami ADC mogą pracować z napięciem 5V. Wszystkie urządzenia peryferyjne współpracują z DMA dzięki czemu ich komunikacja z pamięcią odbywa się bez użycia procesora. Ten najtańszy model ma 24MHz maksymalne taktowanie (można używać innego kwarcu i PLL), 16kB Flasha i 4kB RAMu.

Generalnie taka najtańsza wersja stm32 bije na głowę wszystkie AVRy a jak ktoś potrzebuje więcej portów IO albo kanałów ADC to za około 20zł może sobie już kupić prawdziwy kombajn z 3 USARTami, dwoma ADC, obsługą USB, ponad 100kB Flasha itd.

Jeżeli chodzi o programowanie to mamy do wyboru niezbyt udane biblioteki udostępniane przez producenta. Niezbyt przyjemnie się ich używa, bo trzeba najpierw deklarować i wypełniać struktury a potem wskaźnikami przesyłać je do funkcji inicjalizującej, która z kolei składa się z wielu komend if/else i na podstawie przekazanych parametrów wypełnia rejestry procesora. Powstały w ten sposób kod jest bardzo nieoptymalny, nie do końca jasny a sama biblioteka podobno w dalszym ciągu zawiera błędy. Alternatywą jest ręczne wypełnianie rejestrów bazując na kodzie źródłowym tych funkcji albo na datasheetach, które też nie są zbyt pięknie napisane. W poszukiwaniu potrzebnych informacji nieraz trzeba sobie nieźle poskakać pomiędzy stronami dokumentacji. Jednak po jakimś czasie kiedy już się zapamięta co gdzie jest idzie to ogarnąć.

Wydaje mi się, że w najbliższym czasie ARMy powinny kompletnie wyprzeć AVRy ośmiobitowe dlatego, że są lepsze i tańsze. Musi się tylko pojawić w necie odpowiednia ilość tutoriali, programatorów itp.

Link do komentarza
Share on other sites

Jeszcze jedno:

http://www.nxp.com/products/microcontrollers/cortex_m0/lpc1100l/LPC1114FDH28.html

http://www.nxp.com/products/microcontrollers/cortex_m0/lpc1100l/LPC1114FN28.html

i chociaż jeszcze ich nie ma, to staną się prawdziwym hitem. Szczególnie, że programator jest prostszy niż do AVRów (i użyteczny również jako UART), oryginalny JTAG tańszy, a dokumentacja co najmniej równie dobra (i bije na głowę tą od STMów). Nowe produkty Atmela są co prawda dość ciekawe, ale koszt narzędzi jest co najmniej "bolesny" - oryginalny JTAG to koszt >200$ :/ klony kosztują około 110$ :/ i w dodatku maja dość nieprzyjemne obudowy. Oczywiście dla przemysłu nie jest to zbyt istotne, ale dla amatorów jest to kluczowe.

Link do komentarza
Share on other sites

Przecież sterowanie I/O (bo chyba o to Ci chodzi) odbywa się tak samo na płytce Discovery jak w każdej innej aplikacji.

Na forum są dwie części kursu opartego na STM32. Dodatkowo ST posiada bardzo dobrą dokumentację. Ostatecznie możesz zapoznać się z książką p.Paprockiego STM32 w praktyce.

Zabierając się za programowanie rodziny F4 trzeba zwrócić uwagę na zmiany w nazwach niektórych funkcji w stosunku do F1 (jak na razie zauważyłem takowe zmiany przy programowaniu GPIO)

Warto też przyjrzeć się nowemu Discovery wydanemu przez STMicroelectronics:

http://www.st.com/internet/evalboard/product/252419.jsp

Osobiście kupiłem sobie taką płytkę za 75zł u chłopaków z Botlandu i uważam, że nie ma na co narzekać. Mikrokontroler STM32F407VGT6, ST-LINK/V2 z możliwością wykorzystania również do programowania uC poza Discovery, 3-osiowy akcelerometr, mikrofon, złącze USB do komunikacji, 4 diody, 2 przyciski (User i Reset), większa część nóżek wyprowadzona na goldpiny.

edit:

Na stronie Farnella znalazłem tą płytkę za 52zł. Mi to w sumie nie zrobiłoby różnicy, doliczając koszty przesyłki cena wyszłaby pewnie podobna, a miałem odbiór osobisty we Wrocku 😋

Link do komentarza
Share on other sites

Saito takie pytanko, czy to tego zestawu Discovery oferowanego w Waszym sklepie jest jakas "lekcja" pdt. jak zacząć, jak ogarnąć środowisko itp?

Kiedyś korzystałem z takiego zestawu dla LPC zdaje sięże na cortex M-0 i coś takiego znalazłem zdaje się w sieci.

Wiem wiem że jestem leniwy że oczekuje na coś takiego, ale uważam że szybki tutorial (nawet po ang) dużo ułatwia na sam początek.

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.