Opisywana sonda jest stosunkowo małym wskaźnikiem napięcia z graficznym wyświetlaczem. Pozwala na pomiar napięć w czterech zakresach, które są automatycznie zmieniane. Tłumik wejściowy pozwala zwiększyć rezystancję wewnętrzną, niwelując wpływ miernika na badany obwód. Sonda zasilana jest z dwóch baterii AAA mieszczących się razem z urządzeniem w obudowie KM-80.
Mały pobór prądu przez mikrokontroler i nowoczesny wyświetlacz OLED oraz automatyczne przechodzenie w tryb uśpienia pozwalają na wydłużenie żywotności baterii. Często przydaje się funkcja pomiaru relatywnego, względnego, rzadko spotykana w tanich miernikach. Dodano też funkcję HOLD, która może się przydać, gdy mierzone napięcie nie jest stabilne.
Aby na granicy napięć automatyczna zmiana zakresu nie powodowała ciągłego przełączania zakresów pomiarowych, wprowadzono histerezę o wartości 10% mierzonego napięcia. Poza automatyczną zmianą zakresu możliwy jest ręczny wybór zakresu. Miernik wyposażony jest w bargraf, co jest opcją rzadko spotykaną w tanich przyrządach pomiarowych, tak samo jak interfejs USB.
Opis układu (sonda – woltomierz)
Schemat ideowy pokazany jest na rysunku 1. Układ zasilany jest z dwóch baterii AAA. Na płytce przewidziano wyłącznik zasilania S1, ale można zastąpić go zworą ze względu na to, że w stanie uśpienia pobór prądu nie przekracza 10uA. U4 wytwarza ujemne napięcie wymagane przez wzmacniacz operacyjny.
Mierzone napięcia podane na J1 może przejść przez tłumik zbudowany z rezystorów R1...R5. Wyboru pracy z tłumikiem lub bez dokonuje się przełącznikiem S2. Styki 4 i 6 przełącznika informują mikrokontroler o fakcie włączenia tłumika, dzięki czemu dobierana jest skala wartości wyświetlanych na wyświetlaczu. Dzielnik wejściowy miernika pracuje w trybie równoległym.
Załączanie poszczególnych zakresów pomiarowych realizuje multiplekser analogowy U1. Bufor na wzmacniaczu U2A zapewnia dużą rezystancję wejściową, małą wyjściową. Niska rezystancja wyjściowa jest wymagana przez dzielnik R10, R11, który przesuwa zakres pomiarowy z –Vcc/2...+Vcc/2 do 0...Vcc. Dzięki temu możliwy jest też pomiar napięć ujemnych. Przesunięte napięcie jest przekazywane na wejście ADC mikrokontrolera U2.
Ze względu na to, że w aktualnej wersji oprogramowania interfejs USB nie jest wykorzystany, nie trzeba montować kwarcu i kondensatorów C17, C18, ponieważ wykorzystano wewnętrzny generator RC. U5 jest źródłem napięcia odniesienia. Ma ono lepsze parametry niż to wbudowane w mikrokontroler. Można zauważyć, że U5 oraz wzmacniacz U2 i przetwornica U4 jest zasilana z portów mikrokontrolera. Rozwiązanie to jest konieczne, aby zapewnić mały pobór prądu przez urządzenie w stanie uśpienia.
Przyciski S3...S5 sterują pracą programu. S3 służy także do wybudzania mikrokontrolera ze stanu uśpienia. Wyniki pomiaru są wyświetlane na wyświetlaczu umieszczonym w złączu J4. Przewidziano miejsce na kolorowy wyświetlacz OLED (złącze J6), ale podwyższyłby on znacznie koszt urządzenia. Aktualna wersja oprogramowania nie obsługuje kolorowego wyświetlacza. Jeśli Czytelnicy będą zainteresowani programem obsługującym kolorowy wyświetlacz, proszę o e-maile. J2 służy do zaprogramowania mikrokontrolera. Punkty P2...P6 oraz złącze J5 służą diagnostyce przydatnej w czasie pisania czy modyfikacji programu.
Montaż i uruchomienie (sonda – woltomierz)
Układ można zmontować na płytce drukowanej, której projekt pokazany jest na rysunku 2. Standardowo montujemy układ, zaczynając od elementów najmniejszych, a kończąc na największych, rozpoczynając od warstwy bottom. Wyświetlacz montujemy na samym końcu. Należy wlutować go w pola lutownicze na płytce. W prototypie został zamontowany w gnieździe, aby ułatwić uruchamianie, ale taki montaż uniemożliwi zamknięcie obudowy. W pole lutownicze J1 należy wlutować grot sondy wykonany na przykład ze stępionej igły krawieckiej. W prototypie wlutowano gniazdo „bananowe” 2mm. Umożliwia to wymianę sond. Fotografia wstępna oraz fotografia 1 pokazują model.
Układ nie wymaga uruchomienia poza zaprogramowaniem procesora. Osoby niedoświadczone powinny poprosić kogoś o pomoc w jego zaprogramowaniu. Układ zmontowany prawidłowo ze sprawnych elementów powinien od razu pracować. Obsługa sondy jest bardzo prosta. Przycisk „Hold/Wake UP” wybudza mikrokontroler z uśpienia. W czasie pracy sonda pobiera prąd o wartości około 20mA – rysunek 3.
Po podaniu napięcia na J1 rozpocznie się pomiar. W razie konieczności nastąpi zmiana zakresu pomiarowego. Na wyświetlaczu można odczytać (fotografia 2) zmierzone napięcie, jednostki, zakres pomiarowy i tryb pracy.
Po 10 minutach bezczynności mikrokontroler przejdzie w stan uśpienia, pobierając w tym czasie z baterii mniej niż 10uA – rysunek 4. Za stan bezczynności przyjęto zmiany napięcia mniejsze niż ±20%. Stan taki występuje, gdy grot sondy nie jest do niczego podłączony. Możliwe jest też wcześniejsze uśpienie mikrokontrolera przez przytrzymanie przycisku „Rel/Sleep” ponad jedną sekundę.
Przycisk „Hold/Wake UP”, po wybudzeniu mikrokontrolera, pełni dwie funkcje. Krótki naciśnięcie do 0,5 sekundy włącza/wyłącza funkcję HOLD. Towarzyszy temu pojawienie się stosownego napisu – fotografia 3. Dłuższe przytrzymanie przycisku wyłącza automatyczną zmianę zakresu pomiarowego, co jest sygnalizowane napisem „MAN” na wyświetlaczu – fotografia 4.
Ponowne włączenie następuje po kolejnym krótkim naciśnięciu „Hold/Wake UP”. Gdy automatyczna zmiana zakresu jest wyłączona, przycisk „AC-DC/Range” zmieni a zakres pomiarowy. Miernik ma cztery zakresy: 0–1,1V, 1–11V, 10–110V, 100–1000V. Z włączonym tłumieniem zakresy są inne: 0–6,6V, 6–66V, 60–660V, 600–6600V. W praktyce górna granica napięcia jest ograniczona do 500V przy pracy bez tłumika i zależy od wytrzymałości napięciowej R6 oraz do 1000V przy włączonym tłumiku.
W tym przypadku ważna jest wytrzymałość napięciowa R1...R5 oraz budowa sondy (przebieg ścieżek, odstępy pomiędzy ścieżkami). Zakresy pomiarowe zachodzą na siebie. Spowodowane jest to histerezą przełączania wynoszącą 10% zakresu pomiarowego. Dzięki temu na granicy napięć nie następuje ciągłe przełączanie zakresów.
Przycisk „Rel/Sleep” uruchamia pomiar względny, co sygnalizuje napis „REL”. Towarzyszy temu przejście miernika w tryb ręcznej zmiany zakresu – fotografia 5. Kolejne naciśnięcie „Rel/Sleep” wyłączy tryb względny, a miernik przełączy się z powrotem w tryb automatyczny, jeśli był wcześniej włączony. Warto zaznaczyć, że w trybie manualnej zmiany zakresu jego zmiana przyciskiem „AC-DC/Range” wyłącza tryb względny.
Przełącznikiem S2 można włączyć tłumik wejściowy zwiększający rezystancję miernika. Ze względu na to, że tryb automatycznej zmiany zakresu jest dostępny tylko dla pracy bez tłumika, włączenie go powoduje przejście w tryb manualny; wyłączenie włączy tryb automatyczny.
Ze względu na niskie napięcie zasilania, wzmacniacz operacyjny musi mieć wejścia i wyjścia rail-to-rail. Popularne wzmacniacze pracują poprawnie przy napięciach wejściowych Vcc –1,5...2V i Vee +1,5...2V. Wydaje się, że ze względu na to, iż przetwornik ADC mikrokontrolera mierzy napięcia do 1,1V, wystarczy, aby wzmacniacz na wyjściu przenosił poprawnie ±550mV, do czego wystarczy popularny TL062. Niestety, trzeba uwzględnić spadek napięcia na portach PC13...15 oraz na wyjściu przetwornicy U4. W takiej sytuacji pomiary są poprawne przy zasilaniu mikrokontrolera napięciem 2,7V–3,6V. Aby wykorzystać całą pojemność baterii i możliwości układów, konieczny jest wzmacniacz rail-to-rail.
Płytka sondy ma wymiary dostosowane do obudowy KM-80. Obudowę należy od środka (poza obszarem, gdzie znajdują się dzielniki napięcia) pokryć grafitem w sprayu lub wykleić samoprzylepną folią aluminiową, dbając o to, aby na słupkach mocujących PCB do obudowy znalazł się grafit czy folia, bo w tym obszarze na PCB znajdują się punkty masy. Brak połączenia ekranu z masą układu nie zapobiegnie przedostawaniu się zakłóceń z zewnątrz. Z sondy należy wyprowadzić przewód masy zakończony krokodylkiem. Do tego celu może posłużyć punkt P1. Płytkę w obszarze dzielników napięcia warto pokryć lakierem w sprayu, na przykład platikiem70.
Rezystory w obwodach dzielników napięcia najlepiej, aby miały tolerancję 0,1%, ostatecznie 1%. Użycie 5% rezystorów mija się z celem, bo sonda nie będzie już miernikiem, ale wskaźnikiem napięcia.
Rozbudowa programu mikrokontrolera (sonda – woltomierz)
Kody wynikowe i źródłowe znajdują się na Elportalu razem z pozostałymi materiałami niezbędnymi do wykonania płytki drukowanej. Ze względu na dostępność kodu omówię najistotniejsze funkcje i zmienne, co może być pomocne przy samodzielnej modyfikacji programu.
W celu obniżenia poboru energii mikrokontroler taktowany jest wewnętrznym generatorem RC 8MHz. Częstotliwość ta nie jest powielana w PLL. Oznacza to, że aby użyć USB, konieczna jest zmiana częstotliwości taktującej, co wiąże się z modyfikacją funkcji czasowych.
Stała „DEF_TIM_SLEEP” definiuje czas w milisekundach do uśpienia mikrokontrolera w przypadku, gdy miernik nie jest używany. W „VREFLM385” wpisujemy napięcie źródła napięcia odniesienia U5. „U_AUTO_MAX” i „U_AUTO_MIN” definiują napięcia, przy których zmieniany będzie zakres pomiarowy w trybie automatycznym. „TLUMIK_1”, „TLUMIK_10”, „TLUMIK_100” i „TLUMIK_1000” określają faktyczny podział dzielnika złożonego z R6 oraz jednego z rezystorów R7...R9. Stałymi „TIM_KEY_SHORT_MIN” i „TIM_KEY_SHORT_MAX” ustala się minimalny i maksymalny czas w milisekundach interpretowany jako krótkie naciśnięcie przycisku, natomiast „TIM_KEY_LONG”, czas interpretowany jako długie naciśnięcie. W funkcji „PrintDC” we fragmencie:
case TLUMIK_10:
sprintf( txt, „%0.1f“, napiecieW * tlumik * 6 ); // 6.6-66V
break;
case TLUMIK_100:
sprintf( txt, „%0.0f“, napiecieW * tlumik * 6.5005500550055 );
// 66-660V
break;
case TLUMIK_1000:
sprintf( txt, „%04.0f“, napiecieW * tlumik * 6.55000555000555 );
// 660-6600V
wpisane są faktyczne stopnie podziału dzielnika utworzonego z R1...R5 i pozostałych rezystorów. Trzeba mieć świadomość, że mimo wpisania 13 cyfr po przecinku, zmienne są typu float i interpretowane jest tylko 7 cyfr znaczących. Można zmienić typ na double (15 cyfr znaczących), ale nie ma to większego znaczenia, biorąc pod uwagę inne niedokładności. W przypadku przeniesienia kodu na AVR, trzeba mieć świadomość, że w popularnym AVR-GCC, typ double ma taką samą dokładność jak float.
W programie użyto watchdoga okienkowego WWDG, ponieważ w przeciwieństwie do IWDG, jest on wyłączany po uśpieniu mikrokontrolera i nie spowoduje jego wybudzenia. WWDG nie może być resetowany zbyt często, dlatego w kodzie znajdziemy fragment:
if( !TimWwdg ){ TimWwdg = TIM_WWDG;
WWDG->CR = WWDG_CR_WDGA | WWDG_CR_T6 |
TIM_WWDG_MAX; }
Przed uśpieniem mikrokontrolera wyłączany jest wyświetlacz OLED:
if( !TimSleep || (Keys & KEY_REL_LONG) ){
HAL_Delay( 30 );
ssd1306_command(SSD1306_DISPLAYOFF);
Opóźnienie (Delay) przed uśpieniem jest konieczne, ponieważ dane do wyświetlacza są wysyłane przez DMA. Po rozpoczęciu procedury usypiania nie ma gwarancji, że nie odbywa się transmisja DMA, dlatego należałoby to sprawdzić lub jak w tym przypadku odczekać maksymalny czas transmisji, który w tym przypadku nie przekracza 20ms.
Mikrokontrolery STM32 w obudowach mniejszych niż 100 pin nie mają wyprowadzonych linii Vref+ i Vref - , są one na stałe podłączone do Vss i Vdd wewnątrz układu. Z tego powodu nie można podać na przetwornik ADC napięcia odniesienia. Połączenie Vref+ z Vdd powoduje, że napięcie odniesienia dla AD C zmienia się wraz ze zużywaniem się baterii.
Także dla dzielnika R10, R11 napięciem odniesienia jest Vdd. Precyzyjny pomiar napięcia wydaje się niemożliwy. Jest to jednak jak najbardziej do zrobienia. W tym celu mierzone jest napięcie zasilające mikrokontroler w stosunku do wewnętrznego lub jak w przypadku sondy, zewnętrznego napięcia odniesienia. Realizuje to sekwencja rozkazów:
VccCpuE = VREFLM385 * 4096 / ExtRefAdc;
VccCpu = VccCpuE;// VccCpuI;
Przy okazji mierzone jest napięcie zasilające
if ( VccCpu < VBAT_MIN ) loBat = true; else
loBat = false;
i w razie gdy jest ono zbyt niskie, wyświetlany jest migający napis „LoBat”.
Dzięki temu, że U2 może zewrzeć R6 do masy, można przeprowadzić procedurę autozerowania niwelującą niedokładność R10 i R11. Aktualne oprogramowanie nie przeprowadza takiej operacji.
Propozycja zmian
Oprogramowanie nie mierzy napięć przemiennych, ale można dodać taką opcję. Bargraf można by wykonać w wersji z zerem na środku skali. Może warto też wykonać wersję dla osób leworęcznych? Może pożądana byłaby wersja z przetwornikiem 16-bit? STM32F373 jest w taki przetwornik wyposażony. W sprawie pomysłów dotyczących rozbudowy oprogramowania proszę pisać na podany adres e-mailowy.