Niedawno miałem problem z brakiem dostępności akcelerometrów w swoim jedynym module inercyjnym. Modułowa konstrukcja komputera pokładowego między innymi ma na celu uniezależnienie się od braku dostępności czujników danego typu. Ponieważ miałem kilka różnych czujników do przetestowania podjąłem decyzję o zaprojektowaniu kolejnego modułu inercyjnego opartego na akcelerometrze LIS302DLH i żyroskopie ITG-3200. Ponieważ te dwa czujniki zajmują tylko ułamek miejsca na standardowej płytce modułu więc dołożyłem jeszcze czujnik ciśnienia BMP085 i magnetometr MMC3140MR. Robiąc zakupy udało mi się kupić jeszcze akcelerometr BMA180 więc dorzuciłem jeszcze czujniki ciśnienia HP03S i MS5803 i tak powstał eksperymentalny moduł cyfrowy All-In-One. Eksperymentalność polega na dużej nadmiarowości czujników. W wersji produkcyjnej zostaną tylko wybrane czujniki.
Chyba jako jeden z ostatnich wśród swoich kolegów dołączam do grona kopterowców. Nie dlatego aby kierowała mną chęć polatania sobie, broń Boże - nie robię tego dla przyjemności, po prosto potrzebowałem czegoś mobilizującego do dalszej pracy.
W tym celu od kolegi Jakuba z quadframe nabyłem po bardzo promocyjnej cenie "Middle size QUADcopter frame". Towarzysze z ChRL zasilili mnie sześcioma regulatorami Turningy Plush 18A, sześcioma silnikami RCtimer BL-2830/14 750kv, garścią propsaverów i 12 kompletami śmigieł prawych i lewych.
Korzystając z wolnej chwili skompletowałem całość doprowadzając swojego pierwszego UAV do etapu jak na zdjęciu. Jeszcze nie jest skończona instalacja elektryczna, nie jest zainstalowany komputer pokładowy ani bateria zasilająca, ale jest już kompletny i działający zespół napędowy.
Mam już kolejne klocki do projektu komputera pokładowego: działającą kalibrację off-line, czyli taką odbywającą się autonomicznie bez udziału PC. Na razie tylko polecenia start i stop są przesyłane z komputera, ale w miarę rozbudowy interfejsu użytkownika zostanie to zastąpione instrukcjami przesyłanymi przez drążki aparatury. Mam też jednoczesny pomiar dwu magnetometrów na obu magistralach I2C oraz pomiar szumu obu magnetometrów.
Pomiar szumów opisywałem tutaj sporo wcześniej - jest to pierwiastek z sumy kwadratów różnic kolejnych pomiarów. Im większa zmienność sygnału tym większa wartość tego wyrażenia. Jednostką szumu jest jednostka pomiarowa, czyli w przypadku magnetometru 1/512 kroków pełnej skali wskazań pomnożona przez wzmocnienie na danym kanale (bliski 1).
Rejestrator danych inaczej nazywany loggerem służy do jednoczesnej rejestracji wielu parametrów lotu na karcie microSD. Rejestruje zarówno dane pomiarowe, jak i obliczeniowe. Dane zapisywane są do pliku tekstowego i rozdzielone znakiem tabulacji. Można je wczytać do oprogramowania komputera, albo do arkusza kalkulacyjnego czy innego oprogramowania. W pierwszym wierszu zawarte są skrótowe opisy rejestrowanych parametrów, w drugim wierszu jednostki parametrów. Ze względu na zgodność z anglojęzycznym oprogramowaniem liczby całkowite zapisywane są ze znakiem kropki a nie przecinka. Gdyby była potrzeba użycia liczb z przecinkiem, łatwo to zmienić w dowolnym edytorze tekstu funkcją znajdź i zmień.
Poniżej sa przykładowe logi z komputera pokładowego AutoPitLot:
Konfiguracja rejestratora odbywa się za pośrednictwem pliku konfiguracyjnego config.txt znajdującego się na karcie. W przypadku braku tego pliku tworzony jest nowy plik z domyślnymi nastawami. Obecnie w pliku ustawia się wybór pomiędzy 96 parametrami do logowania, nazwą pliku logu (np. nazwa modelu) i częstotliwość rejestracji. Częstotliwość zapisu ustawia się jedną taką samą dla wszystkich parametrów.
Nazwa logu np. "Hexa4s_120721_23.log" zawiera 3 człony: pierwszy ("Hexa4s") zdefiniowany w pliku konfiguracyjnym, drugi człon to data (RRMMDD) a trzeci to numer kolejny sesji rejestratora (00-99). Każdy kolejny start logowania to nowa sesja. Dzięki temu nie ma obawy że nadpiszemy jakieś istniejące dane. Pojemność obecnie używanych kart jest tak duża że w praktyce logowanie jest ograniczone tylko możliwościami późniejszej analizy tych danych.
Lista logowanych parametrów
Local time - czas pokładowego zegara [GG:MM:SS.ss]. Okresowo jest synchronizowany z czasem GPS
Alti - wysokość barometryczna mierzona od punktu startu [m].
Press - ciśnienie barometryczne [hPa]
Speed - prędkość względem powietrza [m/s]
Vario - prędkość pionowa z wariometru [m/s]
AcelX(-Y, -Z) -składowe przyspieszenia mierzonego w 3 osiach [g]
GyroP(-Q, -R) - składowe prędkości kątowych w 3 osiach [°/s]
MagnX(-Y, -Z) - składowe natężenia pola magnetycznego w 3 osiach [-]
Volt1 - napięcie mierzone przez pierwszy czujnik mocy [V]
Curr1 - prąd mierzony przez pierwszy czujnik mocy [A]
TCRef - (ThermoCouple Reference) temperatura odniesienia zimnego końca termopar [°C]
MagCurs - kurs magnetyczny [°]
SerCur - (Servo Current) prąd pobierany z komputera przez serwa [A]
Vin - napięcie wewnętrzne wchodzące na główny stabilizator 3,3V [V]
RPM1(-2) - (Rotation Per Minute) prędkość obrotowa z dwu czujników [obr/min]
RcHeal - poziom szumu w sygnale RC (im mniej tym lepiej, max 4000) [-]
CardBuf - wielkość zajętego bufora karty SD logera [B]
ErCode - suma logiczna kodów błędu jakie ostatnio wystąpiły (0 = brak błędu).
GLong - długość geograficzna z GPS [°]
GLati - szerokość geograficzna z GPS [°]
GAlti - wysokość n.p.m z GPS [m]
GSped - prędkość względem ziemi [m/s]
GCurs - kurs CMG wynikający z pokonanej drogi [°]
GSats - liczba widzianych satelitów [-]
GFix - stan Fix'a [-]
TmpImu - temperatura przetwornika na module IMU [°C]
TmpPne - temperatura przetwornika na module pneumatycznym [°C]
SerIn1(-2..8) - szerokość impulsu przychodzącego z odbiornika RC [us]
SerO01(-02..12) - szerokość impulsu wychodzącego na serwa [us]
Phi - kąt przechylenia [°]
Theta - kąt pochylenia [°]
Psi - kąt odchylenia [°]
APhi, ATheta, APsi - kąty orientacji liczone wyłącznie z akcelerometru metodami trygonometrycznymi [°]
GPhi, GTheta, GPsi - kąty orientacji liczone przez całkowanie sygnału żyroskopów [°]
Energ1 - energia pobrana mierzona przez czujnik mocy 1 [mAh]
MagMcX(-Y, -Z) - składowe natężenia pola magnetycznego w 3 osiach z alternatywnego magnetometru [-]
MagCurM - kurs magnetyczny obliczony a alternatywnego magnetometru [°]
KKAlti - wysokość barometryczna przefiltrowana filtrem Kalmana [m]
KKVari - prędkość pionowa z wariometru przefiltrowana filtrem Kalmana [m/s]
KKAccZ - przyspieszenie w osi Z przefiltrowane filtrem Kalmana [m/s^2]
AcSpeedX(-Y, -Z) - prędkość uzyskana w wyniku całkowania przyspieszenia [m/s]
AcWayX(-Y, -Z) - droga uzyskana w wyniku całkowania prędkości [m]
PidTun1(-2) - wartości przypisane do kanału 6 i 7 aparatury używana do strojenia regulatorów PID
RoR_SP - (Roll Rate SetPoint) - wartość zadana regulatora prędkości kątowej przechylenia [°/s]
RoR_P - wartość członu proporcjonalnego regulatora prędkości kątowej przechylenia [%]
RoR_I - wartość członu całkującego regulatora prędkości kątowej przechylenia [%]
RoR_D - wartość członu różniczkującego regulatora prędkości kątowej przechylenia [%]
RoR_PID - sumaryczna wartość całego członu PID regulatora prędkości kątowej przechylenia [%]
Poniżej wymienię tylko początku nazw zmiennych dla kolejnych regulatorów. Końcówki nazw są analogiczne jak dla pierwszego regulatora.
PiR_ - (Pitch Rate) - regulator prędkości kątowej pochylenia[°/s]
YaR_ - (Yaw Rate) - regulator prędkości kątowej przechylenia [°/s]
AlR_ - (Alti Rate) - regulator prędkości pionowej (wariometru) [m/s]
Rol_ - (Roll) - regulator kata przechylenia [°]
Pit_ - (Pitch) - regulator kata pochylenia [°]
Yaw_ - (Yaw) - regulator kata odchylenia [°]
Alt_ - (Altitude) - regulator wysokości [m]
Moduł pneumatyczny w wersji 2.0 zawiera zestaw czujników do pomiaru parametrów fizycznych powietrza takich jak ciśnienie, wysokość, prędkość i prędkość zmiany wysokości (wariometr). Oprócz tego aby optymalnie wykorzystać 8-kanałowy, 16-bitowy przetwornik analogowo cyfrowy moduł mierzy temperatury dwiema termoparami i posiada dwa wejścia analogowe w zakresie 0-4V do wykorzystania przez użytkownika.
Komunikacja z modułem odbywa się za pomocą magistrali SPI. Polega na odpytywaniu przetwornika analogowo cyfrowego AD7689. Moduł wymaga zasilania 3,3V do interfejsowej części cyfrowej oraz 5,0V do zasilania części analogowej.
Pod względem programowym aktualna wersja firmware mierzy wszystkie parametry, uwzględnia kalibrację temperaturową i indywidualną kalibrację każdego czujnika. Kalibrację wykonuje się okresowo przy pomocy programu obsługującego komputer pokładowy.
Optoelektroniczny czujnik prędkości obrotowej ma dwa LEDy oświetlające podczerwienią i czujnik podczerwieni połączony ze wzmacniaczem pracującym w układzie komparatora, porównującego wartość bieżącego sygnału z wartością średnią. W ten sposób może wykrywać nawet niewielkie zmiany natężenia światła w szerokim zakresie oświetlenia.
Czujnik RPM może pracować z własnym światłem odbitym, np oświetlając czarno-białą naklejkę na silniku w kadłubie samolotu, lub pracować ze światłem zastałym patrząc się przez śmigło na otoczenie. W przypadku pracy ze światłem odbitym, odległość między czujnikiem a wirującym elementem powinna mieścić się zakresie od odległości kontaktowej to ok. 5cm. Fabrycznie fotoelementy ustawione są równoległe. LEDy świecą wiązką o kącie rozwarcia 50°, fotoelement zbiera światło z kąta 24°.