1, Założenia projektowe
Celem naszego projektu było stworzenie sterownika do dwóch serwomechanizmów. Jako, że przy ocenie projektu brana jest pod uwagę zbiorcza cena wykorzystanych komponentów, staraliśmy się, by nasz projekt był możliwie tani i nieskomplikowany, oczywiście przy zachowaniu satysfakcjonującej funkcjonalności.
2. Kosztorys
- mikroprocesor Atmel ATMEGA 16a: 13 zł
- rezonator kwarcowy 16mHz: 1zł
- uniwersalna płytka drukowana: 9zł
- 12 kondensatorów ceramicznych/ smd 22nF: ~2zł
- 2 kondensatory polowe: 300uF: ~1.5zł
- przełącznik : 1.5 zł
- 2 potencjometry (2k oraz 1k): 12zł
- 5 niewielkich przycisków - 2zł
- 4 rezystory 100k Ohm smd - ~1zł
- Stabilizator napięcia 5V 8050 - 3zł
- Zasilacz 12V - nie uwzględniamy jego ceny, gdyż nadaje się on do odzyskania, w projekcie pełni jedynie rolę pomocniczą.
Suma: 46 zł.
Jako, że rozpoczęliśmy prace nad projektem niezwłocznie po wybraniu tematu, dysponowaliśmy znacznie większą ilością czasu niż ta potrzebna na wykonanie projektu w jego minimalnej formie, dlatego też postanowiliśmy nadać mu bardziej atrakcyjną formę poprzez wykonanie również ramienia/ manipulatora wykonawczego „kamery przemysłowej”.
Użyliśmy do tego, pomijając elementy czysto konstrukcyjne, dwóch serwomechanizmów Tower Pro SG90 oraz prostej kamerki internetowej, której parametry jednak w zupełności wystarczają, by wykonany element posiadał pewną wartość użytkową.
3. Ogólny opis Projektu
Nasz projekt składa się z kamery internetowej zamontowanej na przenośnym panelu, poruszanej w dwóch płaszczyznach, pionowej i poziomej, za pomocą dwóch serwomechanizmów. W trybie sterowania przyciskami kamera ma możliwość rotacji o około 180 stopni w obu płaszczyznach z satysfakcjonującą dokładnością, w trybie sterowania „bezpośredniego” za pomocą potencjometrów sterowanie jest znacznie wygodniejsze i dokładniejsze, jednakże zakres ruchu serwomechanizmów ulega pogorszeniu z powodów, które postaramy się przedyskutować i uzasadnić w dalszej części raportu końcowego.
Układ wykonawczy sterowany jest przez 8 bitowy mikroprocesor ATMEGA16A, operator może wydawać układowi polecenia za pomocą jednego z dwóch osobnych podzespołów sterowania - zestawu czterech przycisków (góra, dół, prawo, lewo), lub zestawu dwóch potencjometrów (po jednym dla każdej osi rotacji) . Przełącznik przy mikroprocesorze służy do zmiany trybu sterowania. Niestety, nie istnieje możliwość korzystania jednocześnie z obu zestawów kontrolek, a także po każdej zmianie trybu pracy wymagane jest zresetowanie układu sterowania, gdyż oba zestawy kontrolek zapisują swój stan we wspólnych dla obu zestawów rejestrach mikroprocesora, jednocześnie pracując z różną rozdzielczością. Oba zestawy kontrolek pozwalają na wygodne wycentrowanie obrazu
z kamery na ludzkiej twarzy lub niewielkim obiekcie, z odległości kilku metrów. Układ po włączeniu lub zresetowaniu ustawia kamerę w pozycji centralnej, to znaczy w środku zakresów ruchu obu serwomechanizmów. Serwomechanizmy zasilane są z linii zasilania na płytce sterownika, wejście sterujące połączone jest bezpośrednio z wyjściami mikrokontrolera, gdyż serwomechanizmy, które posiadamy są relatywnie małe i nie czerpią prądu w ilości mogącej zakłócić pracę mikroprocesora. Jesteśmy jednak świadomi, że dla większych, lub też większej ilości serwomechanizmów, linia sterowania powinna być dodatkowo wzmocniona i zabezpieczona.
4. Opisowe sprawozdanie z postępu prac nad projektem
W pierwszym tygodniu prac (KALENDARZ_DERP) zakupiliśmy wszystkie elementy niezbędne do wykonania sterownika, wyłączając potencjometry, wykonaliśmy schemat elektryczny układu oraz zlutowaliśmy układ. Dzięki obfitości forów czy blogów zajmujących się tematem układów z mikroprocesorami AVR, zaprojektowanie i wykonanie naszego sterownika nie nastręczało problemów, linia zasilania została wykonana w sposób bezpieczny, także i wszystkie pozostałe elementy zostały połączone poprawnie. Kolejnym etapem prac było dokładne zapoznanie się z datasheet'em mikrokontrolera oraz pogłębienie naszej wiedzy na temat programowania mikrokontrolerów AVR w języku C. Po kilku dniach zaprogramowano układ tak, by pracował w podstawowej formie - za pomocą przycisków pozwalał na akceptowalnie płynne poruszanie dwoma wypożyczonymi serwomechanizmami, wtenczas jeszcze zupełnie innymi niż użyte później, pomiędzy mechanicznymi granicami zasięgu pracy serwomechanizmów. Granice te zostały również dla bezpieczeństwa uwzględnione w kodzie programu. Jest to o tyle ważne, że poza ochroną samych serwomechanizmów, uniemożliwiało to nadmierną inkrementację odpowiednich rejestrów, co powodowałoby niepożądany efekt jałowej pracy sterownika, nim stan rejestrów powróciłby po ich uprzednim przekroczeniu, do przedziału, wewnątrz którego operują serwomechanizmy. Na tym etapie prac napotkaliśmy znaczne trudności z obsługą sterowania serwomechanizmów ze pomocą przycisków, zapoznaliśmy się również z szeregiem zalet i ograniczeń użytego przez nas mikrokontrolera. Wiele czasu zajęło wyskalowanie wielkości, jakimi w obrębie samego programu posługują się poszczególne elementy układu (czy też dokładniej - rejestry związane z poszczególnymi elementami układu) - chociażby z powodu niemożności używania liczb innych niż całkowite (int). Zmuszało nas to do używania sporych liczb zastępując ułamki dziesiętne, proceder ten jednakże posiadał i ograniczenia z drugiej strony - mikroprocesor niezbyt dobrze radzi sobie z bardzo dużymi ( > 100k) liczbami w ogóle, a z dzieleniem ich w szczególności, próby kalibracji prędkości obrotu serwomechanizmów przy stale wciśniętym jednym z przycisków poprzez swobodne dzielenie i mnożenie sporych liczb wewnątrz kody sprawiało, że praca sterownika stawała się czasem niestabilna. Na omawianym etapie prac uznaliśmy, że spróbujemy wykorzystać potencjometry nie jak pierwotnie zakładaliśmy - jako alternatywna forma sterowania, lecz do kalibracji prędkości obrotu serwomechanizmów przy sterowaniu przyciskami wychodząc z założenia, że zbliża się data planowanego ukończenia projektu, a obsługa potencjometru i przetworników ADC wydawała nam się trudniejsza niż zwyczajnych przycisków, jako że na laboratoriach przedmiotu Systemy Mikroprocesorowe nie używaliśmy w ogóle wspomnianych funkcji mikroprocesora. Jednakże po zapoznaniu się ze szczegółami obsługi przetworników i równocześnie nowymi możliwościami jakie nam one oferują, oraz w świetle przesunięcia się terminów zakończenia projektów niemalże o miesiąc, zdecydowaliśmy się powrócić do pierwotnego zamysłu wykorzystania potencjometrów do sterowania układem wykonawczym. W ostatecznym rozrachunku - potencjometry są znacznie wygodniejsze i dokładniejsze od przycisków. Podczas pracy z przyciskami układ porusza się skokowo, wykonując krótkie ruchy ze stosunkowo dużą prędkością obrotową, co z powodu niekorzystnego stosunku masy elementów manipulatora do masy własnej serwomechanizmów sprawia, że ruch układu jest po prostu wizualnie brzydkim jednakże niestety próby zmniejszenia prędkości obrotowej serwomechanizmów mają jeszcze gorsze konsekwencje dla pracy układu. Przy sterowaniu potencjometrami ruch układu jest znacznie płynniejszy. Użycie potencjometrów również ma niestety pewną wadę - nie jesteśmy w stanie wykorzystać całego zakresu pracy potencjometrów, ponieważ przy bardzo niewielkich prądach, jakie płyną w całym układzie, potencjometr około połowy zakresu jest już widziany z perspektywy mikroprocesora jako przerwa.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5 Lista problemów
Problemy niejednokrotnie były raczej kwestią naszych własnych błędów czy zaniedbań niż faktycznych problemów ze sprzętem. Zwłaszcza ja musiałem oprócz merytorycznej wiedzy z zakresu programowania mikrokontrolerów, nauczyć się również obcej mi zazwyczaj staranności. Istotnym faktem był również po prostu nasz brak doświadczenia pracy z technologią mikrokontrolerów, które jednak różnią się od komputerów osobistych, gdzie przy prostych aplikacjach okienkowych na jakich przeważnie pracowaliśmy na innych przedmiotach, nierzadko można było stosować niekoniecznie mądre rozwiązania, licząc, że komputer poradzi sobie z naszymi niedoskonałościami. W wypadku mikrokontrolerów, musieliśmy nauczyć się cenić sobie pracę naszego procesora i optymalizować zlecane mu zadania. Podczas wykonywania projektu napotkaliśmy następujące problemy:
if= zamiast == + odwrotna logika przycisków - w pierwszej wersji programu mikroprocesor widział przyciski jako wciśnięte na stałe, ponieważ pomyliliśmy GND z linią zasilania. Jest to oczywiście drobny błąd, wystarczyło odwrócić logikę stanów na pinach przycisków.
Nie zastanawiając się nad tym co faktycznie daje szybszy kwarc, zamontowaliśmy największy jaki wspierał nasz mikroprocesor, zakładając, że szybszy będzie lepszy. W praktyce oznaczało to, że każdy timer i licznik musieliśmy przeskalować przez największe możliwe dzielniki by nie operować ogromnymi liczbami. Znacznie lepszy byłby kwarc 2Mhz. Z dużymi liczbami wiąże się kolejny problem - mikroprocesor nie zawsze dobrze radzi sobie z tak dużymi liczbami w ogóle, a z ich dzieleniem w szczególności. Generowało to kolejne problemy ze skalowaniem prędkości obrotu serwomechanizmów - tak, by ludzki operator był w stanie wygodnie nakierować kamerę na wybrany obiekt ,a jednocześnie, by praca procesora była stabilna.
3) Niemało trudności nastręczyła również obsługa przetworników analogowo-cyfrowych - albo ich działanie różni się jakimś szczegółem od ich opisu w dokumentacji, lub nasz techniczny angielski wprowadził nas w błąd w tym wypadku.
4) Z potencjometrem podobny problem jak z kwarcem - kupiony bez rzetelnej analizy potrzeb co skutkuje tym, że przy małych prądach jakie płyną w układzie, od połowy zakresu jest on widziany przez mikroprocesor jako przerwa. Drugi, zainstalowany później potencjometr mam mniejszy opór i jest wygodniejszy w użyciu.
Ostatnim problemem były drgania ze styków, czy w ogóle - zamocowanie przycisku zmiany trybu. Zasilanie jest pożyczone z innej linii, co sprawiało, że w losowych momentach stan na pinie zmiany trybu potrafił się zmienić całkowicie zaburzając pracę układu. Jako, że nie istnieje konieczność szybkiej i częstej zmiany trybu, wprowadzono ograniczenie - by tryb pracy został zmieniony, układ musi zostać również zresetowany. Rozwiązało to problem i ostatecznie układ działa poprawnie przy obu sposobach sterowania elementem wykonawczym.