Prace nad robotem ruszyły. Dodałem pierwsze commity na GitHuba, wybrałem licencję dla projektu (tym aspektem zainteresowałem się dzięki Slackowi konkursowemu, normalnie bym olał ten temat), dodałem krótkie readme, a przede wszystkim zrobiłem schemat ideowy robota. W tym wpisie opiszę wykonany schemat.
Do wykonaniu schematu użyłem programu Cadsoft Eagle 7.2, czyli starszej wersji programu wydanej jeszcze zanim Eagle został kupiony przez Autodesk. Początkowo chciałem wypróbować nową wersję, ale stwierdziłem, że płytki projektuję raz na kiedyś, w tej wersji mam wszystko czego potrzebuję łącznie z customowymi bibliotekami elementów i poznawanie nowej wersji będzie startą czasu. Zamiast tego wolę skupić się na narzędziach programistycznych. Cały schemat prezentuje się następująco:
W kolejnych rozdziałach omówię poszczególne moduły.
Układ zasilania
Robot będzie zasilany z pakietu Li-Pol 2S 130 mAh. Zasilanie będzie można włączyć/wyłączyć za pomocą przełącznika suwakowego. Bezpośrednio z pakietu zasilane będą silniki. Oznacza to, że napięcie podawane na silniki będzie się zmieniać wraz z rozładowaniem pakietu. Będzie ono się wahać w zakresie od 8.4V do 6.5V (lub mniej jeżeli przegapię moment, w którym powinienem naładować baterię), co może powodować zmianę parametrów silników. To z kolei spowoduje, że regulatory prędkości mogą inaczej działać dla różnego poziomu naładowania baterii. Aby się bronić przed tym efektem można zastosować stabilizację napięcia np. na 6V, jednak nie zdecydowałem się na ten krok. Zobaczymy w praktyce na ile zmiana charakterystyki silników jest znacząca.
Napięcie z baterii jest podawane na przetwornicę step-down ST1S10PHR, która obniża je do 5V. Z tego napięcia zasilane będą diody IR. Każda dioda w peaku będzie pobierać do 150mA. Diody IR będą po kolei włączane i wyłączane. Jeśli byłyby zasilane z tego samego źródła co logika, mogłoby to powodować zakłócenia. Poza tym dzięki rozdzieleniu napięcia na diody IR, mogę je zasilić z 5V, a logikę z 3.3V.
Napięcie 5V jest podawane na wejście stabilizatora LM1117 dającego na wyjściu 3.3V. Napięcie wyjściowe jest wykorzystane do zasilania logiki, czyli przede wszystkim procesora, ale również modułu IMU, Bluetooth, enkoderów i części cyfrowej mostka H. Dodatkowo filtrowane za pomocą dławika i kondensatorów jest napięcie analogowe AVDD służące do zasilania fototranzystorów. Dzięki temu mam nadzieję uzyskać dokładniejsze pomiary za pomocą przetwornika analogowo cyfrowego (ADC).
Czujniki odległości
Czujniki odległości składają się z dwóch elementów – diody IR będącej nadajnikiem i fototranzystora będącego odbiornikiem. Jak wspomniałem dioda IR może pobierać do 150 mA. Dlatego poszczególne diody będą zapalane w odpowiedniej sekwencji. W ten sposób uniknę nadmiernego nagrzewania się elementów oraz zakłócania poszczególnych pomiarów. Jest bowiem szansa, że np. czujnik diagonalny odbierze trochę odbitego światła z diody dla czujnika bocznego i wpłynie na dokładność pomiaru. Prądów rzędu 150 mA nie uzyskam sterując diody bezpośrednio z nóżki procesora, dlatego zastosowałem układ Darlingtona ULN2003A wzmacniający sygnał. Siódme wyjście układu przeznaczyłem na sterowanie diodą LED (na schemacie zaznaczona jako UI_LED). Prawdopodobnie ta dioda będzie służyła do informowania o poziomie naładowania baterii.
Fototranzystor będzie odbierał światło w paśmie podczerwieni wyemitowane przez diodę IR i odbite od przeszkody. Przetwornik ADC w procesorze będzie mierzył napięcie na fototranzystorze. Im większe napięcie, tym więcej odbitego światła. Po dokonaniu kalibracji czujnika będę w stanie przeliczać odczytane napięcie na odległość przeszkody.
Sterowanie silnikami
Do sterowania silnikami wykorzystałem mostek H TB6612. Na wejście układu podaję sygnał PWM oraz dwa sygnały cyfrowe, za pomocą których zadaję kierunek obrotów silnika. Wyjście z układu idzie na silniki. Silniki Faulhaber 1717T006-IE16 mają 6-pinowe złącze, na którym poza dwoma pinami, na których zadaję napięcie na silniki, są jeszcze 4 piny do obsługi enkodera. Dwa z nich to wyjścia kwadraturowe A i B, a dwa pozostałe to zasilanie i masa dla enkoderów.
Procesor
Procesor jest taktowany za pomocą zewnętrznego kwarcu 8MHz. Do programowania wykorzystałem złącze SWD, które potrzebuje mniej pinów, niż standardowy JTAG. Sygnały PWM będą generowane na wyjściach sprzętowego timera. Wykorzystanych będzie 7 wejść przetwornika ADC – 6 na odczyty napięcia na tranzystorach i jeden do monitorowania poziomu rozładowania baterii. Debugowy moduł bluetooth został podpięty do sprzętowego interfejsu USART, a moduł IMU do sprzętowego I2C. Wyjścia sterujące diodami IR i diodą UI_LED oraz wyjścia sterujące kierunkiem obrotu silnika będą sterowane za pomocą standardowych wyjść procesora. Dwa przyciski będą obsługiwane za pomocą standardowych wejść.
Podsumowanie
Stworzenie schematu ideowego poszło mi dosyć szybko. Następnym krokiem będzie projekt płytki PCB. Tutaj będę już potrzebował dużo więcej czasu, żeby odpowiednio ułożyć wszystkie elementy oraz dopasować kształt płytki. W zależności od tego jak poprowadzę linię do diod IR i fototranzystorów, kolejność tych pinów może się jeszcze zmienić.
8 marca 2017 at 01:39
Super piszesz i opisujesz wszystko, czekam kazdego dnia na nowy post 🙂
Temat super, az zazdroszcze wiedzy, moze kiedys sam sie za to wezme 🙂
Tak trzymaj.
8 marca 2017 at 22:20
Dzięki, cieszę się, że się podoba 🙂
27 sierpnia 2017 at 10:15
Jakie diody i fototranzystory zostały wybrane?
27 sierpnia 2017 at 11:38
Dioda IR to TSAL6400: https://botland.com.pl/diody-ir-podczerwone/1059-nadajnik-ir-5-mm-940-nm-tsal6400.html
A Fototranzystor LIRT5B: https://botland.com.pl/fototranzystory/3975-fototranzystor-lirt5b-5mm-940nm.html
Działają na długości fali 940nm.