Elektroda.pl
Elektroda.pl
X
Sklep HeluKabel
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Zegarek z DCF77 na STM32L467 Discovery

Tytus Kosiarski 04 Gru 2016 15:44 6042 2
  • Zegarek z DCF77 na STM32L467 Discovery

    Witam wszystkich.

    Tym razem w przerwach pomiędzy pisaniem programu radia internetowego i już projektem PCB do tegoż, popełniłem programik zegarka i datownika na płytkę STM32L476Discovery, gdyż chciałem się przekonać, czy rzeczywiście mikrokontroler zamontowany na tej płytce jest tak mikromocowy, jak zachwala go producent (o czym później). Przy okazji chciałem wykorzystać program STM32CubeMX ver.1.0 z biblioteką Firmware Package for STM32L4xx series, ver.14.1.4 do skonfigurowania peryferiali mikrokontrolera, które są użyte do tego zegarka (RTC taktowany LSE, LCD, LPTIM1 no i oczywiście GPIO).

    Program zegarka jest napisany w IDE Keil uVision ver.5.18 (wystarcza wersja z ograniczeniem kodu do 32kB) i chodzi pod kontrolą FreeRTOS ver.8.2.1 (proponowanego właśnie przez środowisko CubeMX). Działanie programu w przedstawionej wersji polega na wyświetlaniu na LCD czasu bieżącego przez 8 sekund, nazwy dnia tygodnia przez 2 sekundy i daty przez kolejne 2 sekundy, po czym cykl ten się powtarza co każde 12 sekund (inspiracją był sposób wyświetlania czasu i daty przez zegarek z układem MC1206 działającym mi do dziś:)) Program też umożliwia ręczną edycję nastaw czasu i daty przy użyciu joysticka zamontowanego na płytce oraz synchronizowanie się z czasem nadawanym przez nadajnik DCF77 (o czym dalej). Program też sprawdza poziom napięcia baterii i wyświetla info ostrzegawcze, gdy napięcie baterii spadnie poniżej 2,3V (przez 4 sekundy , potem przez kolejne 4 sekundy czas bieżący, zamiast 8-sekundowego wyświetlania czasu bieżącego).
    Wejście w tryb ręcznej edycji nastaw odbywa się poprzez naciśnięcie środkowego przycisku joysticka. Wyświetlony jest najpierw napis "TIME" a potem wyświetlony jest czas z migającą pozycją godzin. Wychylenie joysticka w lewo lub w prawo wybiera pozycję godzin, minut lub sekund sygnalizowane miganiem wybranej pozycji. Nastawa wartości wybranej pozycji odbywa się poprzez wychylenie joysticka w górę lub w dół. Po zakończeniu nastaw naciśnięcie środkowego przycisku joysticka powoduje zapisanie do RTC nowej nastawy czasu (sygnalizowane napisem "SAVED") oraz wyjściem do wyświetlania czasu i daty (sygnalizowane napisem "RETURN").
    UWAGA: aby przejść dalej, do edycji daty, należy podczas wyświetlania napisu "SAVED" nacisnąć środkowy przycisk joysticka. Powoduje to przejście do ustawiania roku (sygnalizowane napisem "YEAR"). Wyświetlany jest rok z migającą pozycją dziesiątek i jedności. Nastawa wartości roku w zakresie 0...99 odbywa się poprzez wychylenie joysticka w górę lub w dół. Naciśnięcie środkowego przycisku joysticka zatwierdza nastawę roku i przechodzi do nastawy dnia tygodnia. Wyświetlana jest migająca 3-literowa nazwa dnia tygodnia, wychylenie joysticka w górę lub w dół powoduje nastawianie dnia tygodnia. Naciśnięcie środkowego przycisku joysticka zatwierdza nastawę dnia tygodnia i przechodzi do nastawy daty. Wyświetlana jest data z migającą pozycją dnia miesiąca. Wychylenie joysticka w lewo lub w prawo wybiera pozycję dnia miesiąca lub miesiąca sygnalizowane miganiem wybranej pozycji. Nastawa wartości wybranej pozycji odbywa się poprzez wychylenie joysticka w górę lub w dół. Po zakończeniu nastaw naciśnięcie środkowego przycisku joysticka powoduje zapisanie do RTC nowej nastawy daty (sygnalizowane napisem "SAVED") oraz wyjściem do wyświetlania czasu i daty (sygnalizowane napisem "RETURN").





    W czasie prób pierwszej wersji programu (bez DCF77) okazało się, że zegarek ma dość znaczne opóźnienie wynoszące ok. minuty na 5 dób (nie mierzyłem częstotliwości generatora LSE). Pomyślałem więc, że warto by zrobić synchronizację zegarka z DCF77. W tym celu zakupiłem moduł odbiornika DCF77 z układem MAS6180 (stąd: https://www.seguro.pl/sklep/?zobacz=5439&producent= ), zachęcony podawanym przez producenta tego modułu bardzo małym prądem zasilania (ok. 60uA, co w rzeczywistości takim się okazało).
    Moduł jest podłączony do płytki Discovery następująco:
    odbiornik DCF77 -------------> płytka Discovery
    V --------------> PE13
    G --------------> GND
    T --------------> PE15
    P1 --------------> PE14
    Szczególnie zwraca uwagę połączenie zasilania modułu (pin V) z pinem PE13. Okazało się, że pomimo sterowania włączaniem i wyłączaniem odbiornika przez pin P1, jak zaleca producent, odbiornik ciągle brał prąd praktycznie niezmiennej wartości, pomimo jego wyłączenia przez podanie "1" na pin P1. Więc kiedy odbiornik nie jest już potrzebny, ustawiam "0" na pinach V oraz P1(by tu uniknąć przepływu prądu przez wewnętrzną diodę od P1 do V).
    Próba synchronizacji z DCF77 rozpoczyna się w momencie włączenia zasilania na płytkę Discovery i trwa tak długo, aż synchronizacja zakończy się sukcesem. W czasie próby synchronizacji wyświetlany jest na LCD dolny pasek bargrafu, sygnalizujący włączenie odbiornika DCF77. Podczas synchronizowania, gdy odbierany jest sygnał DCF77, wyświetlany jest narastający wraz z odbiorem każdego bitu transmisji słupek bargrafu (wizualnie wygląda to jak sygnalizowanie ładowania baterii w telefonie komórkowym). Po udanej synchronizacji pełny słupek bargrafu miga przez 5 sekund, po czym się wygasza. Wtedy wyłączany jest odbiornik DCF77 i zegarek pracuje samodzielnie przez całą dobę. Po upływie doby włączany jest znów odbiornik DCF77 (dolny pasek bargrafu sygnalizuje to włączenie) i powtarzana jest próba synchronizacji.
    Podczas pisania procedury odbierającej dane DCF77 bardzo pomocnym okazał się emulator DCF77 opisany tutaj ( http://dhost.info/ky3orr/index.php?dzial=projekty&poddzial=cyfrowy_emulator_sygnalu_dcf77 ), do którego zbudowania wystarczyły mi części "z szuflady". Jedyną różnicą z pierwowzorem jest dołożenie wzmacniaczy tranzystorowych do sterowania dwubarwną LED (w oryginale za ciemno mi świeciła) oraz dołożenie dzielnika rezystorowego na wyjściu, by dopasować wysoki poziom logiczny z tego przyrządu do STM32L476. Ponadto przydatne były informacje i fragmenty kodu funkcji dekodującej pobrany sygnał stąd: http://elty.pl/upload/download/specyfikacja.pdf oraz stąd: http://www.mas-oy.com/wp-content/uploads/2016/05/DAEV6180B1COB.pdf

    Teraz kilka słów wrażen z eksploatacji oraz trochę wyników z pomiarów.
    Zegarek działa bardzo dobrze :) Synchronizacja z DCF77 zajmuje u mnie dwie, góra trzy minuty i to niezależnie od pogody i pory dnia (ale tylko przy zasilaniu bateryjnym i ustawieniu anteny ferrytowej równolegle do linii horyzontu, co widać na filmiku - poziome ułożenie płytki Discovery). Gdy mam włączony laptop, wystarczy odsunięcie zegarka na ok. 1m i już mu to starczy do synchronizacji. Natomiast, gdy zasilałem zegarek przez USB z laptopa, to dopiero mi synchronizował się (i znacznie dłużej mu to zajmowało), gdy położyłem go na parapecie okiennym na ponad 1,5m od laptopa i gdy było pochmurno (nisko wiszące chmury). Przy ładnej pogodzie nie chciał się w ogóle przy takim zasilaniu synchronizować. Obecne umieszczenie anteny nie jest optymalne - wymuszone przez obudowe, którą jest fabryczne etui, ale po położeniu całości na stole (antena jest wtedy poziomo), nie mam problemów z synchronizacją.
    Układ zegarka pobiera ok. 280uA (w szczycie ok. 360uA) i jest to w miarę zgodne z tym, co deklaruje producent płytki Discovery. Pomiar przeprowadzałem na pinach JP6 włączając amperomierz między środkowy pin i jeden ze skrajnych, zależnie od źródła zasilania. Gdy włączony jest odbiornik DCF77, pobór prądu wzrasta do ok. 340uA (w szczycie 440uA). Jednakże, aby osiągnąć takie wartości prądu, musiałem wprowadzić drobną zmianę na płytce Discovery. Mianowicie, musiałem usunąć rezystor zerowy R30 i połączyć przewodem środkowy pin JP5 z padem po wylutowanym R30, który jest bliżej jumpera JP5. Pominąłem wtedy zasilanie układu U8 i podałem zasilanie bezpośrednio do STM32L476 (U9). Wgranie programu zegarka do płytki Discovery jak "fabryka dała" (jakkolwiek możliwe, program też będzie działał), skutkuje poborem prądu na poziomie ok. 6mA (z czego zdecydowana większość idzie na zasilanie U8).
    W pierwszej wersji zasilania bateryjnego (jeszcze bez DCF77), zegarek działał na baterii CR2032, która starczyła na miesiąc i 3 dni nieprzerwanej pracy. Zasilanie z dwóch paluszków R3 (już z DCF77) wystarcza na 5 miesięcy nieprzerwanej pracy - z punktu widzenia użytkownika nie jest to dobry wynik. Ale biorąc pod uwagę, że w układzie zegarka pracuje bardzo zaawansowany mikrokontroler i obecność innych zasilanych, zbędnych w tej aplikacji, podzespołów na płytce Discovery, to wydaje się, że rzeczywiście producent uzyskał dobry wynik pod względem energooszczędności tego mikrokontrolera.
    W czasie eksploatacji zegarka okazało się, że konieczne jest włączenie kondensatora 220nF między wyprowadzenia G i V odbiornika DCF77 oraz kondensatora 220uF równolegle do baterii. Bez tych kondensatorów w miarę spadku napięcia zasilania, program zegarka miał tendencję do zawieszania się w momentach włączania odbiornika DCF77.
    W miarę zmniejszania napięcia baterii CR2032 prąd też malał, ale tylko do granicy napięcia 2,6V. Potem jest prawie dwukrotny wzrost poboru prądu (jakby uaktywniała się jakaś wewnętrzna przetwornica) i taki stan utrzymuje się aż do wyczerpania baterii i zaniku wskazań na LCD. W dołączonych plikach XLS są zapisane wyniki pomiarów.
    Kod programu zegarka zawarty jest w pliku freertos.c.

    Aby otworzyć projekt konfigu peryferiali w CubeMX, należy odszukać i wybrać plik zegarek_STM32L476_keil.ioc. Aby otworzyć projekt w Keilu, należy odszukać i wybrać plik zegarek_STM32L476_keil.uvprojx.
    Zegarek z DCF77 na STM32L467 Discovery


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • Sklep HeluKabel
  • Sklep HeluKabel
  • #3 15 Gru 2016 09:06
    Tytus Kosiarski
    Poziom 14  

    Oczywiście, że jest to przesada, jeśli chodzi o sprzęt, ale jak wspomniałem na początku, chciałem przekonać się sam o jego mikromocowości i sposobach uzyskania tejże. A wydawało mi się, że program zegarka, który z założenia ma pracować bez przerwy, będzie dobrą bazą programową do testów.
    KT