Telemetryczny czujnik napięcia do aparatur FRSKY

Telemetryczny czujnik napięcia do aparatur FRSKY

Gdy ponad 20 lat temu zaczynałem swoją przygodę z modelarstwem lotniczym RC, marzeniem każdego początkującego modelarza było posiadanie aparatury sterującej z „komputerem”. Możliwość tych rozwiązań, patrząc z dzisiejszej perspektywy, były znikome, ale pozwalały m.in. na indywidualne ustawiania wychyleń serwomechanizmów, miksowanie kanałów, ustawienie timerów odliczających czas – to dawało poczucie lepszego panowania nad modelem. W ciągu ostatnich kilkunastu lat nastąpił prawdziwy przełom w zakresie aparatur RC...

Podstawowe parametry:
  • pracuje z aparaturą firmy FrSky, komunikuje się poprzez SmartPort,
  • oferuje szeroki zakres pomiarowy 3...49 V (bez konieczności stosowania kilku czujników w przypadku pakietu składającego się z więcej niż 6 cel),
  • nie umożliwia monitorowania napięć poszczególnych cel pakietu.

Przede wszystkim, aparatury zaczęły pracować w paśmie 2,4 GHz oraz zastosowano skuteczne algorytmy pracy w szerokim zakresie widma radiowego. Do oczywistych zalet, takich jak odporność na zakłócenia, krótsze anteny, większy zasięg, dodano kolejną nowość – telemetrię. Telemetria umożliwia przesłanie do nadajnika informacji z czujników zamontowanych na statku powietrznym, np.: napięcie baterii zasilającej, pobór prądu, wysokość modelu z czujników barometrycznych czy dane z systemu GPS. Liczba informacji telemetrycznych zależy od producenta systemu RC i stale rośnie, ponieważ producenci starają się optymalizować oprogramowanie, aby w pełni wykorzystać ich możliwości.

Jednym z producentów szerokiej gamy aparatur RC wraz z telemetrią jest firma FrSky. Aparatury tej firmy są znane z jakości, niezawodności, dalekiego zasięgu i obsługi telemetrii. Kolejnym atutem aparatur tej firmy, jest fakt, że działają one w oparciu o otwarty system OpenTX. System ten jest oprogramowaniem do aparatur RC, umożliwiającym bardzo elastyczne konfigurowanie modeli. Z racji, że system jest otwarty, bez problemu można skonstruować własny czujnik telemetryczny, chociażby do monitorowania napięcia akumulatora zasilającego.

W odbiornikach firmy FrSky do podłączenia czujników telemetrycznych przewidziany jest specjalny port o nazwie SmartPort. Jego cechą charakterystyczną jest jednoprzewodowy protokół typu half duplex do wymiany informacji pomiędzy odbiornikiem, a podłączonymi czujnikami. Do odbiornika może być jednocześnie podłączonych wiele czujników pracujących niezależnie od siebie. W poniższym artykule pokrótce omówię ten protokół, oraz zaprezentuję budowę czujnika napięcia pakietu zasilającego bazującego na nowoczesnym mikrokontrolerze STM32G031.

Opisany w artykule moduł umożliwia monitorowanie napięcia pakietu zasilającego model RC. W przeciwieństwie do oryginalnych czujników FLVSS nie umożliwia monitorowania napięć poszczególnych cel pakietu, ale w zamian oferuje szeroki zakres pomiarowy bez konieczności stosowania kilku czujników w przypadku pakietu składającego się z więcej niż 6 cel.

Protokół SmartPort

W warstwie fizycznej protokół SmartPort wykorzystuje interfejs szeregowy UART z zanegowanymi poziomami logicznymi, pracujący z ustawieniami: prędkość transmisji danych 57,6 kbps, 8 bitów danych, 1 bit stopu, bez bitów parzystości, jednoprzewodowy tryb half-duplex. Odbiornik radiowy pełni rolę urządzenia master, zaś podpięte czujniki pełnią rolę urządzeń slave. Cyklicznie, co około 12 ms odbiornik wysyła na port zapytania z identyfikatorami czujników i w ten sposób „odpytuje” czujniki które są dołączone. Jeśli czujnik odpowie, odbiornik będzie na przemian odpytywał ten czujnik i szukał kolejnych, wysyłając kolejne identyfikatory. Opis najważniejszych identyfikatorów zestawiono w tabeli 1.

Sekwencja zapytania jest dwubajtowa i ma postać 0x7E Id. Czujnik odpowiada na każde zapytanie na swoim fizycznym identyfikatorze, aby zgłosić swoją obecność. Czujnik odpowiada ramką rozpoczynającą się bajtem 0x10, następne bajty zawierają jego typ, pakiet danych i sumę kontrolną CRC. Jeśli nie można przesłać aktualnych danych (bo np. nie zdążył odświeżyć danych), czujnik odpowiada pustym pakietem i fałszywym CRC (0xFF). Ramka odpowiedzi czujnika ma strukturę taką, jak pokazano w tabeli 2.

Przykładowa ramka wysłana przez czujnik FLVSS została pokazana na rysunku 1. Jak widać – na zapytanie odbiornika 0x7E 0xA1 czujnik odpowiedział sekwencją 0x10, 0x00, 0x03, 0x20, 0x7F, 0xB7, 0x77, 0x1E. Spróbujmy to „rozłożyć” na czynniki pierwsze. Pierwszy bajt 0x10 to znacznik początku ramki z odpowiedzią, jest on stały.

Rysunek 1. Ramka z zapytaniem odbiornika i odpowiedzią czujnika napięcia FLVSS

Następnie mamy dwa bajty nazwane Sensor Data Type o wartościach 0x00, 0x03. Są to bajty przypisane do typu czujnika i właśnie dla czujników napięcia zawierać się one mogą w zakresie 0x0300 do 0x030F. Dla czujników prądu zakres ten wynosi 0x0200 do 0x020F. Zakresy można znaleźć w dokumentacji OpenTX. Jeśli mamy podłączony tylko jeden czujnik napięcia, to będzie on zwracał wartość 0x0300. Zwróćmy uwagę, że najpierw jest wysyłany młodszy bajt, a następnie starszy. Kolejny bajt o wartości 0x20 zawiera dwie ważne informacje. Podzielmy go na dwa półbajty. Starszy półbajt mówi nam o ilości cel w pakiecie zasilającym który mierzymy, drugi półbajt mówi nam o numerach dwóch cel pakietu które są zmierzone w aktualnej ramce – ale uwaga – liczone od 0! Każda bowiem ramka zawsze zawiera napięcie dwóch cel. W tym konkretnym przypadku mamy pakiet 2S, zaś 0 oznacza, że ramka zawiera napięcie pierwszych dwóch cel pakietu.

Rysunek 2. Ramka zawierająca napięcia cel 3 i 4 w pakiecie 5S

Gdyby wartość na pozycji Data[0] wynosiła np. 0x42 oznaczałoby to, że czujnik mierzy napięcie pakietu 4S, a aktualna ramka zawiera napięcia cel 3 i 4. Aby się przekonać czy tak jest na pewno, spójrzmy na rysunek 2 pokazujący ramkę zawierającą napięcia cel 3 i 4 w pakiecie 5S. Jak widzimy, na polu Data[0] mamy wartość 0x52, co potwierdza, że mamy do czynienia z pakietem 5S, a ramka zawiera napięcia kolejnych 2 cel: 3 i 4. Uważny czytelnik zapyta: skoro w każdej ramce zawarte są napięcia dwóch cel, to jaka będzie wartość w polu Data[0] dla celi 5 w pakiecie 5S? To proste – 0x54, przy czym ramka taka zawierać będzie napięcie tylko jednej celi – nr 5.

W ten oto sposób docieramy do kolejnych 3 bajtów zawierających napięcia poszczególnych cel, gdzie napięcie każdej z cel zawarte jest na 12 bitach. Szybko dojdziemy do wniosku, że maksymalny zakres jaki możemy przedstawić na 12 bitach to 4095, więc jak w takim razie zapisać napięcie w pełni naładowanej celi, która ma napięcie 4,2 V? Obejściem problemu, jest podział napięcia przez 2, dzięki czemu nie przekroczymy zakresu. Wróćmy do rysunku 1 i spróbujmy odczytać napięcia poszczególnych cel w pakiecie 2S, który był podłączony do czujnika. Wartości kolejnych pól w ramce wynoszą odpowiednio: 0x7F, 0xBF, 0x77. Dzielimy środkowy bajt pola Data[2] 0xBF na dwa półbajty. I teraz na napięcie celi 1 składa się bajt z pola Data[1] i młodszy półbajt bajtu z pola Data[2], zaś napięcie 2 celi to bajt z pola Data[3] oraz starszy półbajt z pola Data[2]. Ilustruje to tabela 3.

Z 3 bajtów o wartościach 0x7F, 0xBF, 0x77 ostatecznie otrzymujemy napięcie celi pierwszej o wartości 0x7FF i celi drugiej 0x77B. Odpowiada to odpowiednio napięciom: 0x7FF → 2047·2=4094 mV oraz 77B → 1915·2=3830 mV.

Na końcu każdej ramki znajduje się bajt sumy kontrolnej, który jest zanegowaną sumą wszystkich składników ramki czujnika. Jeśli wyliczona suma przekracza wartość jednego bajta, to ponownie ją sumujemy i dopiero wtedy poddajemy negacji. Sprawdźmy, czy CRC dla ramki z rysunku 2 jest prawidłowa:

0x10+0x03+0x52+0x31+0xF8+0x82=0x0210;
0x02+0x10=0x12;
0x12^0xFF=0xED – czyli wszystko się zgadza.

Rysunek 3. Ramka zawierająca napięcie celi 5 w pakiecie 5S

W przypadku wspomnianego wcześniej pakietu 5S w ramce zawierającej napięcie ostatniej 5 celi, ramka wygląda tak, jak na rysunku 3. Od razu rzuca się w oczy fakt, że napięcie celi 6 wynosi 0, co jest zgodne z prawdą, ponieważ pakiet składa się tylko z 5 cel. W ten oto sposób, odbiornik nie tylko jest w stanie określić napięcie poszczególnych cel pakietu, ale również oblicza napięcie całego pakietu, sumując poszczególne wartości napięć.

W prezentowanym urządzeniu wykorzystano ten fakt. Skoro maksymalne napięcie dla jednej celi może mieć wartość 4095, to można zadeklarować maksymalną dozwoloną, stałą liczbę cel i podawać napięcie na czujnik w bardzo szerokim zakresie. Zmierzone napięcie będzie równo podzielone na liczbę cel, zaś docelowo uzyskamy wskazanie napięcia całego pakietu zasilającego. Dzięki takiemu podejściu udało się uzyskać zakres pomiarowy mieszczący się w zakresie 3...49 V.

Budowa i działanie

Czujnik napięcia bazuje na mikrokontrolerze STMicroelectronics typu STM32G031J6 w obudowie SO8N, z rodziny Cortex-M0+. Ma on wszystkie niezbędne peryferia, jest łatwy w lutowaniu i tani w zakupie. Dzięki możliwości konfiguracji interfejsu UART w trybie half-duplex wraz z negacją poziomów, nie trzeba stosować dodatkowych układów konwertujących.

Rysunek 4. Schemat czujnika napięcia

Schemat modułu został pokazany na rysunku 4, a projekt płytki PCB pokazuje rysunek 5. Schemat jak i projekt płytki zostały narysowane w programie EasyEDA. Jest to darmowy edytor z bogatą biblioteką elementów, zaś sama obsługa jest dość intuicyjna. Wymiary PCB to 21×35 mm. Montaż elementów SMD nie powinien nastręczać trudności, ponieważ wszystkie elementy są w obudowach łatwych do lutowania.

Rysunek 5. Projekt płytki PCB

Schemat elektryczny jest zredukowany do niezbędnego minimum. Oprócz samego procesora zawiera stabilizator napięcia 3,3 V, oraz dzielnik napięcia zrealizowany na elementach R5 i R6 wraz z diodą zenera zabezpieczającą port przed wystąpieniem zbyt wysokiego napięcia. Dioda LED sygnalizuje poprawną komunikację na porcie SmartPort. W projekcie użyto stabilizatora typu LD1117S33, dzięki czemu czujnik może być zasilany napięciem powyżej 5 V bezpośrednio z odbiornika zasilanego np. z akumulatorów litowych.

Oprogramowanie mikrokontrolera zostało napisane w języku C w środowisku STM32CubeIDE. W procedurze przerwania od UART sprawdzane są odebrane dane i wyszukiwana jest sekwencja 0x7E 0xA1. Jeśli taka sekwencja zostanie odebrana, następuje przygotowanie ramek z danymi do odesłania na port. Przy użyciu DMA następuje seria pomiarów napięcia podanego na wejście pomiarowe INPUT, a następnie w pętli głównej obliczana jest średnia, dzięki czemu pomiary są stabilne.

Do zaprogramowania procesora niezbędny jest programator. Po prawidłowym zmontowaniu i zaprogramowaniu, układ jest gotowy do pracy. Szybkie miganie diody LED sygnalizuje poprawne dekodowanie danych na SmartPorcie z odbiornika. Jeśli napięcie podane na wejście INPUT będzie poniżej progu 3 V czujnik zaprzestaje wysyłania danych z napięciem, co aparatura zasygnalizuje po kilku sekundach brakiem danych. Po podaniu napięcia z zakresu pracy, dane ponownie będą przysyłane przez moduł. Procedura dodawania czujnika do systemu telemetrii jest standardowa i polega na uruchomieniu procedury wykrywania czujników w menu TELEMETRY aparatury, gdzie czujnik zostanie wykryty jako parametr CELLS.

Grzegorz Burzyński
sp5ein@gmail.com

Wykaz elementów:
Rezystory:
  • R1, R6: 1 kΩ SMD0805
  • R5: 15 kΩ SMD0805
Kondensatory:
  • C1, C2: 100 nF SMD0805
  • C3, C4: 0,1 µF SMD0805
Półprzewodniki:
  • LED: dioda LED czerwona SMD0805
  • D2: dioda zenera BZT52C4V7 (SOD-123)
  • D3: dioda zenera SD103BW-7-F (SOD-123)
  • U2: stabilizator napiecia AZ1117H-3.3TRE1 (SOT-223-3)
  • U1: STM32G031J6M6 (SOIC-8)
Inne:
  • F1: bezpiecznik miniaturowy BSMD0805-100-12V SMD0805
  • INPUT: goldpin kątowy 1 szpilka
  • J1: goldpin 2×3 (nie montować)
  • SMART-PORT: goldpin 2×3
Artykuł ukazał się w
Elektronika Praktyczna
sierpień 2021
DO POBRANIA
Materiały dodatkowe
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik listopad 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad - grudzień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje październik 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna listopad 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich listopad 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów