Precyzyjne opóźnienia w połączeniu z trybami oszczędzania energii w STM32, część 2

Wyniki testów

Układ z rysunku 2 można uruchomić na „motylu”, który trzeba doposażyć w kwarc zegarkowy i dwa kondensatory – odpowiednie miejsce zostało przewidziane na płytce. Potrzebne dwie diody świecące są podłączone tak samo jak na rysunku 2. Do wyprowadzenia PA0 trzeba podłączyć rezystor ściągający do masy i przycisk do zasilania. Wyprowadzenie PA0 jest dostępne na PIN2 złącza JP1 modułu ethernetowego – w omawianym przykładzie moduł ten nie jest używany. Do styków 1 i 2 złącza JP6 zamiast zworki podłączamy amperomierz, który mierzy prąd pobierany przez mikrokontroler. Do wyprowadzenia FREQ (PE7) podłączamy częstościomierz.

Tab. 1. Prąd zasilania w zależności od częstotliwości taktowania w poszczególnych trybach oszczędzania energii

Częstotliwość nominalna HCLK 12 MHz 18 MHz 24 MHz 36 MHz 48 MHz 72 MHz
Częstotliwość nominalna SYSCLK 48 MHz 72 MHz 48 MHz 72 MHz 48 MHz 72 MHz
Dzielnik AHB 4 4 2 2 1 1
Tryb aktywny 10,8 ± 0,5 mA 15,4 ± 0,8 mA 17,3 ± 1,0 mA 24,5 ± 1,3 mA 28,3 ± 1,3 mA 35,7 ± 1,4 mA
Tryb uśpienia 5,9 ± 0,2 mA 7,6 ± 0,4 mA 7,1 ± 0,4 mA 9,4 ± 0,6 mA 9,3 ± 0,6 mA 12,7 ± 1,0 mA
Tryb zatrzymania – regulator 1,8 V włączony 35 ± 1,5 µA
Tryb zatrzymania – regulator 1,8 V w stanie niskiego poboru energii 27 ± 1,4 µA
Tryb czuwania 3,36 ± 0,04 µA

W tabeli 1 zestawiono zmierzone wartości prądu zasilania dla sześciu wartości HCLK, po trzy dla minimalnej i maksymalnej częstotliwości SYSCLK, jakie można uzyskać z wyjścia PLL1. Pomiary zostały wykonane przy odłączonym interfejsie JTAG, którego działanie wpływa na ich wyniki, szczególnie istotnie zwiększając pobór prądu w trybie zatrzymania. W trybie aktywnym i uśpienia prąd zasilania powinien zależeć od częstotliwości taktowania. Widać jednak, że nie jest on dokładnie proporcjonalny do częstotliwości HCLK i zależy też od częstotliwości SYSCLK. Najprawdopodobniej istotna część prądu zasilania jest pobierana przez układy taktujące. Potwierdzają to pomiary dla trybu uśpienia, w którym przestają być taktowane rdzeń i pamięci. Ponieważ w testowanym układzie aktywna jest stosunkowo niewielka część peryferii, to za pobór prądu w tym trybie muszą odpowiadać głównie oscylator HSE i pętle PLL. W trybach głębokiego uśpienia (zatrzymania i czuwania) pobór prądu nie zależy od częstotliwości taktowania, gdyż wtedy HSE jest wyłączony. Wartości prądu zasilania w tych trybach są, zgodnie z oczekiwaniem, rzędu mikroamperów. Należy podkreślić, że dla uzyskania tak niskiego poboru prądu konieczne jest wywołanie funkcji AllPinsDisable. Jej pominięcie i pozostawienie „wiszących” wejść niweczy uzyskane oszczędności, zwłaszcza w trybie zatrzymania, gdyż mikrokontroler pobiera wtedy dodatkowo ponad 1,5 mA.

Tab. 2. Pomiary rzeczywistych czasów opóźnień

Częstotliwość nominalna HCLK 18 MHz 36 MHz 72 MHz
Częstotliwość f0 iteracji pętli bez funkcji opóźniających 300 kHz 563 kHz 912 kHz
Częstotliwość f1 iteracji pętli z opóźnieniami 1 µs + 1 µs 47,9 kHz 85,3 kHz 136,4 kHz
Częstotliwość f20 iteracji pętli z opóźnieniami 20 µs + 20 µs 22,6 kHz 24,3 kHz 24,4 kHz
Częstotliwość f1m iteracji pętli z opóźnieniami 1 ms + 1 ms 0,498 kHz 0,499 kHz 0,500 kHz
Najkrótsze możliwe opóźnienie: 0,5(1/f1 – 1/f0) 8,8 ± 0,1 µs 4,97 ± 0,04 µs 3,12 ± 0,02 µs
Opóźnienie 20 µs: 0,5(1/f20 – 1/f0) 20,4 ± 0,4 µs 19,7 ± 0,3 µs 20,0 ± 0,3 µs
Opóźnienie 1 ms: 0,5(1/f1m – 1/f0) 1002 ± 7 µs 1001 ± 7 µs 999,5 ± 7 µs

Dokładność pomiaru częstotliwości ± (0,1% + 3)

 

W tabeli 2 zestawiono wyniki pomiarów opóźnień. Minimalne opóźnienie, jakie daje się uzyskać, wołając funkcję USleep z parametrem 1, zależy od częstotliwości taktowania rdzenia, czego należało oczekiwać, gdyż wynika ono z ilości instrukcji, które musi wykonać ta funkcja i procedura obsługi przerwania licznika. Przy maksymalnej dopuszczalnej częstotliwości taktowania 72 MHz nie udało się uzyskać opóźnienia krótszego niż 3 µs. Należy uznać, że dokładność realizacji opóźnień jest zadowalająca.
Marcin Peczarski

O autorze