STM32: OSPEEDR, czyli szybko, szybciej i najszybciej (2). Praktyczne pomiary dynamiki GPIO

Udostępnij

W pierwszej części materiału opisaliśmy podstawowe zagadnienia dynamiki wyjść GPIO w mikrokontrolerach STM32. Aby pokazać praktyczny wpływ konfiguracji OSPEEDR na działanie wyjść MCU, wykonaliśmy w naszym laboratorium prosty eksperyment pomiarowy, którego wyniki stanowią jednak niezwykle ważną wskazówkę dla projektantów PCB i programistów.

Badanym sygnałem był przebieg prostokątny generowany programowo na linii PC9 mikrokontrolera STM32F411RE, skonfigurowanej w trybie wyjścia typu push-pull. Dla tego samego pinu kolejno ustawiano wszystkie cztery tryby szybkości wyjściowej: Low speed, Medium speed, High speed oraz Very high speed. Następnie dla każdego ustawienia mierzono czas narastania sygnału przy różnych obciążeniach pojemnościowych dołączonych pomiędzy linię GPIO a masę.Celem eksperymentu nie było wyznaczenie lub weryfikacja wartości katalogowych, lecz pokazanie ważnych zależności pomiędzy parametrami czasowymi a otoczeniem układowym mikrokontrolera. W praktyce taki pomiar dobrze pokazuje, dlaczego ustawienia szybkości GPIO nie można analizować w oderwaniu od rzeczywistego obciążenia linii.

Zainteresowanym Czytelnikom pozostawiamy samodzielne odniesienie wyników przedstawionych w niniejszym artykule do wartości zapisanych w nocie katalogowej mikrokontrolera STM32F411RE i wyjaśnienie różnic pomiędzy parametrami zmierzonymi dla odpowiadających sobie ustawień GPIO.

Konfiguracja stanowiska pomiarowego

Do eksperymentu wykorzystaliśmy płytkę z mikrokontrolerem STM32 NUCLEO-F411RE, zasilaną z portu USB. Badanym wyjściem była linia PC9 skonfigurowana jako wyjście push-pull bez wewnętrznego podciągania i bez wewnętrznego rezystora pull-down. Sygnał był przełączany pomiędzy stanem niskim a wysokim z częstotliwością około 690 kHz – na tyle małą, aby możliwa była wygodna obserwacja pojedynczego zbocza narastającego.Pomiar wykonaliśmy szybkim oscyloskopem Keysight MSOX-3054G z użyciem oryginalnej sondy pasywnej 10:1. Punkt masy sondy podłączony został możliwie blisko badanego pinu (tj. do najbliższego wyprowadzenia GND w złączu slotu Arduino), aby ograniczyć wpływ indukcyjności przewodu masowego na obserwowany kształt zbocza. Zastosowaliśmy sprężynkę masy zamiast przewodu z krokodylkiem (o tym, dlaczego wybraliśmy akurat takie rozwiązanie, przeczytasz w tym artykule). W kolejnych seriach pomiarowych do linii GPIO dołączaliśmy kondensatory o pojemnościach 10 pF, 47 pF i 100 pF. Pierwszy pomiar wykonany został bez dodatkowego kondensatora, pozostawiając jedynie pojemność pasożytniczą płytki, wejścia oscyloskopu i sondy pomiarowej. W każdej serii mikrokontroler automatycznie przełączał cztery kolejne ustawienia rejestru OSPEEDR:

GPIO_SPEED_FREQ_LOW
GPIO_SPEED_FREQ_MEDIUM
GPIO_SPEED_FREQ_HIGH
GPIO_SPEED_FREQ_VERY_HIGH

Dla każdego wariantu rejestrowano czas narastania, rozumiany jako czas przejścia sygnału pomiędzy poziomami 10% i 90% amplitudy (tj. napięcia zasilania 3,3 V). Taka definicja jest najczęściej stosowana przy ocenie dynamiki sygnałów cyfrowych, ponieważ eliminuje niejednoznaczność związaną z progami logicznymi konkretnych układów odbiorczych.

Wyniki pomiarów

Wyniki (uzyskane za pomocą automatycznego pomiaru wykonywanego przez oscyloskop) należy traktować jako osiągi dla konkretnego przypadku – przy innym layoucie PCB, a nawet po zastosowaniu innego modelu oscyloskopu, wyniki będą inne, ale zależności opisane w artykule pozostają uniwersalne.

Pomiar bez dodatkowego obciążenia pojemnościowego

Zbocza sygnałów zarejestrowane zostały przy użyciu sondy pasywnej 10:1, której pojemność wejściowa (widziana od strony badanego układu) wynosi nominalnie 11 pF. Całkowite obciążenie pojemnościowe wyjścia GPIO było zatem sumą tej wartości oraz niewielkiej pojemności pasożytniczej reprezentowanej przez pady mikrokontrolera, ścieżki na PCB oraz złącze goldpin – całkowita pojemność zamyka się w takim przypadku (typowo) w kilkunastu pikofaradach.

Czas narastania wyniósł nieco ponad 7 ns w przypadku ustawienia OSPEEDR na wartość 00 (Low speed). Wraz ze zwiększaniem dynamiki wyjścia zbocze stawało się coraz bardziej strome, aby osiągnąć poziom 1 nanosekundy w trybie Very High Speed. Co ważne, w każdym kolejnym z czterech pomiarów udział nadstrzału (overshoot) rósł coraz bardziej, obejmując zakres od niecałych 4% do ponad 34%.

Pomiar z obciążeniem 10 pF

W drugiej części naszego eksperymentu dołączyliśmy równolegle do sondy oscyloskopowej niewielki kondensator 10 pF. Zbocza we wszystkich czterech pomiarach były mniej strome w porównaniu do odpowiadających im pomiarów dla wyjścia STM32 bez dodatkowej pojemności: czas narastania mieścił się w przedziale od 8,4 ns (Low speed) do 1,6 ns (Very high speed), a co ciekawe nadstrzał także był zauważalnie wyższy we wszystkich pomiarach.

Pomiar z obciążeniem 47 pF

Wymiana kondensatora na element o pojemności 47 pF spowodowała dalsze wydłużenie czasów narastania – tym razem wynosiły one 11,8 ns w trybie Low speed i 3,7 ns w trybie Very high speed. W dwóch najszybszych trybach zaczęły być widoczne powtarzalne zafalowania na dole zbocza narastającego, o amplitudzie około 800 mV.

Pomiar z obciążeniem 100 pF

Podłączenie najwyższego obciążenia o pojemności 100 pF spowodowało drastyczne wydłużenie czasów narastania, które tym razem objęły zakres od 16,9 ns (tryb Low speed) do 7,2 ns (tryb Very high speed). Zafalowanie na dole zbocza stało się bardziej wyraźne, choć jego amplituda nie wzrosła względem wcześniejszego pomiaru.

Interpretacja wyników

Z punktu widzenia projektanta najważniejsza jest nie sama wartość wpisana do rejestru OSPEEDR, lecz rzeczywisty kształt sygnału na wyjściu. Nasz eksperyment dobitnie pokazuje, że linia GPIO nie przełącza abstrakcyjnego „zera” i „jedynki”, zdecydowanie daleko jej zatem do idealnego generatora sygnału prostokątnego. W rzeczywistości tranzystory wyjściowe ładują i rozładowują konkretną pojemność. W praktyce składają się na nią pojemności: wejścia układu odbiorczego, ścieżki i ewentualnych przelotek w PCB, zabezpieczeń ESD (ta składowa potrafi być niemała w przypadku zwykłych diod TVS), złącza, przewodu, a nawet sondy pomiarowej oscyloskopu podłączonego na czas pomiaru. Przy małym obciążeniu nawet ustawienie Low speed może być wystarczające dla wielu typowych zastosowań. Jest to korzystne, ponieważ łagodniejsze zbocza zwykle oznaczają mniejsze ryzyko dzwonienia, przesłuchów i emisji zakłóceń. Przy większym obciążeniu pojemnościowym zbyt wolne ustawienie może jednak wydłużyć czas narastania do poziomu uniemożliwiającego poprawne działanie danego interfejsu. Wtedy konieczne jest przejście na tryb Medium, High albo Very high speed.

Warto zwrócić uwagę, że w tym artykule pochyliliśmy się jedynie nad analizą zachowania wyjść GPIO w domenie czasu – bo tak właśnie trzeba rozpatrywać sygnały cyfrowe „widziane” przez wejścia współpracujących z mikrokontrolerem układów (np. pamięci zewnętrznych czy czujników cyfrowych). Przejście do domeny częstotliwości pozwala spojrzeć na zagadnienie z jeszcze szerszej perspektywy – tutaj bowiem ujawniają się bardzo ważne zagadnienia związane z kompatybilnością elektromagnetyczną (EMC). Takie pomiary także dla Was przeprowadziliśmy, a ich efekty przeanalizujemy w kolejnym odcinku tego cyklu.

Przemysław
Przemysław
Redaktor Naczelny portalu HardwareDesigner.pl. Konstruktor elektronik i programista embedded z ponad 20-letnim doświadczeniem w projektowaniu PCB. Z wykształcenia elektronik medyczny i elektroradiolog, specjalizuje się w projektowaniu i badaniach aparatury medycznej, laboratoryjnej i pomiarowej.

Czytaj więcej

Wybrane dla Ciebie