PROJEKT] STM32 na analogowo – sterowanie zasilacza laboratoryjnego [2]

Jest to druga część artykułu, część pierwszą możesz przeczytać na naszej stronie.

Przetwornik ADC

W tym momencie zasadnicza część zasilacza, czyli układ cyfrowego zadawania napięcia wyjściowego. Ale w konstrukcjach zasilaczy często wykorzystuje się drugi dużo bardziej popularny analogowy moduł peryferyjny – przetwornik cyfrowo analogowy ADC. Mając do dyspozycji ten przetwornik można mierzyć na przykład napięcie wyjściowe. Można też mierzyć prąd wyjściowy po zastosowaniu konwertera I/U. Ten pomiar umożliwia zaimplementowanie funkcji zabezpieczenia prądowego. Po przekroczeniu określonej wartości prądu wyjściowego można wyłączyć obwód wyjściowy za pomocą przekaźnika lub włączyć ograniczenie prądowe wykorzystując dodatkowy układ analogowy sterowany z przetwornika DAC.

 

Pomiar napięcia wyjściowego

Jest to bardzo prosty pomiar. Napięcie jest wstępnie dzielone dzielnikiem rezystancyjnym i podawane na wejście przetwornika. Potem pozostaje tylko przeliczyć odczytaną wartość po konwersji, przeliczyć na napięcie w woltach i wyświetlić. Jeżeli założymy, że napięcie wyjściowe nie jest większe niż 30V, a napięcie referencyjne przetwornika ma wartość +3V, to dzielnik wejściowy powinien dzielić napięcie w stosunku 1:10. Na rysunku 6 pokazano dzielnik o całkowitej rezystancji ok. 100kΩ.

Rys. 6. Dzielnik 1:10 do pomiaru napięcia wyjściowego

Dzielnik ma w obwodzie potencjometr, bo dokładne dobranie rezystorów o odpowiednich wartościach i tolerancji jest kłopotliwe. Potencjometr powinien być wykonany jako precyzyjny wieloobrotowy.

 

Pomiar prądu wyjściowego

Ponieważ najłatwiej jest mierzyć napięcie, to prąd mierzy się metodą techniczną. W mierzony obwód wtrąca się rezystor o jak najmniejszej rezystancji (bocznik). Płynący przez rezystor prąd powoduje na nim spadek napięcia, który z prawa Ohma jest równy U=I*R. Przy znanej rezystancji R prąd będzie równy I=U/R. Załóżmy, że nasz zasilacz będzie dostarczał prądu o maksymalnej wartości 2A, a bocznik będzie miał rezystancję 0,1Ω. Maksymalny spadek napięcia U=2A*0,1Ω=0,2V. Z jednej strony 200mV spadku na wyjściu to sporo jak na zasilacz, ale z drugiej strony dość trudno będzie zmierzyć dokładnie to napięcie przetwornikiem o zakresie napięci wejściowych 0…3V. Najprostszym rozwiązaniem będzie wzmocnienie napięcia stałego odkładającego się na boczniku za pomocą wzmacniacza operacyjnego pracującego w konfiguracji wzmacniacza nieodwracającego. Wzmocnienie takiego układu dobiera się bardzo prosto za pomocą dzielnika złożonego z 2 rezystorów – rysunek 7.

Wzmocnienie układu wynosi G=1+R2/R1. Jeżeli przyjmiemy, że dla 2A będziemy potrzebowali napięcia wyjściowego na poziomie 2V, to wzmocnienie musi być 10-krotne, a stosunek R1/R1 ma być równy 9. Rzeczywisty układ pomiarowy może wyglądać tak jak na rysunku 8. Żeby dokładnie ustalić wzmocnienie można w szereg z rezystorem R2 włączyć potencjometr.

Rys. 7. Wzmacniacz nieodwracający

 

Rys. 8. Układ do pomiaru prądu

Bocznik pomiarowy powinien mieć rezystancje tak małą jak to możliwe, szczególnie dla większych prądów. Jednak zmniejszanie rezystancji powoduje konieczność większego wzmocnienia spadku napięcia na boczniku. Przy dużych wzmocnieniach pojawiają się problemy ze stabilnością i trzeba mieć duże doświadczenie w aplikowaniu takich układów. Poza tym dostęp precyzyjnych rezystorów o bardzo małych rezystancjach jest trudny i są to elementy kosztowne. Dlatego konstruktor musi przyjąć rozsądny kompromis pomiędzy rezystancją bocznika i wzmocnieniem wzmacniacza pomiarowego. W ostateczności można wykorzystać specjalizowane układy scalone z wbudowanym kalibrowanym bocznikiem i zoptymalizowanym wzmacniaczem pomiarowym.

W naszym rozwiązaniu można przyjąć, że wzmocnienie może sięgać granicy x50. Żeby układ był bardziej stabilny można mu ograniczyć pasmo od góry przez równoległe dołączenie do R2 kondensatora o pojemności kilu nF. Ja zmontowałem „na pająka” taki układ ze wzmocnieniem x10 i w czasie testów sprawował się zupełnie poprawnie.

W mikrokontrolerach rodziny STM32F100 są wbudowane 2 niezależne przetworniki o rozdzielczość 12 bitów. Napięcie podawane na wejście analogowe można przypisać do jednej z 2 grup: grupy podstawowej (regular channel) i grupy nazwie injected channel. Grupa injected ma wysoki priorytet wyzwalania konwersji. Jeżeli pojawi się sygnał wyzwalania dla tej grupy kanałów, to zostanie zatrzymane przetwarzanie w grupie regular (po zakończeniu cyklu) i przetwornik będzie przetwarzał sygnały z wejść grupy injected. Ten mechanizm został stworzony po to by zapewnić jak najszybszą konwersję dla sygnałów krytycznych z punktu widzenia algorytmów przetwarzania sygnałów. Oprócz priorytetu są jeszcze inne różnice. Grupa injected może przetwarzać sygnały z maksymalnie 4 wejść, ale do każdego kanału jest przypisany osobny rejestr wyniku. Do grupy regular można przypisać maksymalnie 16 wejść, a rejestr wyniku jest jeden wspólny. W naszym zasilaczu przy stosunkowo dużej wydajności rdzenia i szybkich przetwornikach spokojnie możemy użyć grupy regular do pomiaru napięcia i prądu wyjściowego.

Sygnał taktujący przetwornikiem ADCCLK może mieć maksymalną częstotliwość 14 MHz. Rdzeń STM32F100 może być taktowany z częstotliwością nie większą niż 24 MHz i z taką maksymalną częstotliwością pracują obie magistrale APB1 i APB2. Sygnał taktujący przetwornikiem jest brany z szyny APB2 i dzielony przez wstępny dzielnik – preskaler o programowanym podziale przez 2, 4 6 i 8. Żeby uzyskać maksymalna prędkość taktowania wybieramy podział przez 2 i otrzymujemy ADCCLK-12 MHz.

Znając częstotliwość taktowania można określić jak długo będzie trwała konwersja:

T= sampling time + 12,5 TADCCLK (TADCCLK – okres sygnału taktowania przetwornika)

Czas 12,5TADCCLK wynika z przetwarzania 12-bitowego przy metodzie sukcesywnej aproksymacji. Czas sampling time jest programowany i może mieć jedną z wartości: 1,5, 7,5, 13,5, 28,5, 41,5, 55,5 71,5 oraz 239,5 TADCCLK.

Moduł przetwornika trzeba przed użyciem skonfigurować, zapewnić taktowanie i włączyć. Każdy z pomiarów będzie wyzwolony programowo. Dlatego trzeba wyłączyć pomiar ciągły i wyzwalanie zewnętrzne. Czas trwania jednaj konwersji zależy od częstotliwości taktowania modułu przetwornika.

Przetwornik może mierzyć napięcia z 16 wejść analogowych przełączanych analogowym multiplekserem. My potrzebujemy zmierzyć napięcie wyjściowe i napięcie z konwertera prąd/napięcie (czyli w sumie prąd wyjściowy). Ustalmy, że napięcie będzie mierzone w kanale 0 (linia PA0), a prąd w kanale 1 (PA1). Linie PA0 i PA1 trzeba skonfigurować jako wejścia analogowe – listing 5.

List. 5. Konfiguracja wejść analogowych

 

Na listingu 6 pokazano konfigurację taktowania i funkcja włączenia przetwornika.

List. 6. Konfiguracja taktowania i włączenie przetwornika

 

Taktowany i włączony moduł ADC można poddać procedurze kalibracji. Wtedy według zapewnień producenta poprawia się jakość konwersji – listing 7.

List. 7. Kalibracja przetwornika

 

Teraz kiedy przetwornik jest taktowany, zasilony i skalibrowany, trzeba jeszcze wykonać konfigurację. Moduł ADC jest dość rozbudowany i może pracować w różnych trybach. Nas będzie interesowała praca w konfiguracji regular z pomiarem w 2 kanałach. Możliwe jest włączenie automatycznego przemiatania kanałów pomiarowych. Wtedy po zakończeniu pomiaru z jednego kanału automatycznie inicjowany jest pomiar w następnym kanale. Jednak jest z tym problem, bo w trybie regular wynik konwersji jest zapisywany do jednego rejestru. Użytkownik kiedy jest włączone skanowanie nie wie w danym momencie z którego kanału odczytuje pomiar. Tę niedogodność można wyeliminować stosując przesyłanie wyników poszczególnych pomiarów przez kanał DMA do tablicy wyników umieszczonej w pamięci RAM. Ja postanowiłem zastosować klasyczną metodę polegającą na konfigurowaniu jednego kanału pomiarowego przed pomiarem, wykonaniu i zapisaniu pomiaru, a następnie skonfigurowaniu następnego kanału i wykonaniu pomiaru z tego kanału. Do tego celu zdefiniowałem funkcję konfiguracyjną ADCInit konfigurującą przetwornik do pracy niezależnej i bez wyzwalanie zewnętrznego. Pomiar jest wykonywany z jednego kanału w trybie jednokrotnym (skanowanie kanałów jest wyłączone).

List. 8. Konfiguracja przetwornika ADC

 

Po skonfigurowaniu kanał z którego będzie odczytywany pomiar jest wybierany funkcją ADC_RegularChannelConfig z dwoma argumentami. Pierwszy argument określa kanał pomiarowy, a drugi czas konwersji. Wykonanie jednego pomiaru z konkretnego kanału wygląda następująco:

  • Wybieramy kanał w którym będziemy wykonywać pomiar (funkcja ADC_RegularChannelConfig)
  • Wyzwalamy programowo jeden pomiar (funkcja ADC_SoftwareStartConvCmd)
  • Czekamy na zakończenie konwersji (funkcja ADC_GetFlagStatus)
  • Po zakończeniu pomiaru odczytujemy rejestr wyniku (funkcja ADC_GetConversionValue)

Na listingu 9 jest pokazana pętla pomiaru i wyświetlenia napięcia wyjściowego i prądu.

List. 9. Pomiar i wyświetlenie napięcia i prądu wyjściowego

 

 

Podsumowanie

Bogate wyposażenie w peryferyjne moduły analogowe, atrakcyjna cena i dostępność powodują, że stosowanie 32-bitowych mikrokontrolerów rodziny STM32F1 do budowy sterowników analogowych zasilaczy stabilizowanych jest jak najbardziej uzasadnione. Mikrokontrolery 8-bitowe stosowane najczęściej w sterownikach zasilaczy cierpią głównie na brak przetworników cyfrowo-analogowych. Tu nie ma tego problemu. Oczywiście można się zastanawiać czy w takim dość prostym programowo zastosowaniu potrzebny jest 32-bitowy rdzeń. Jednak jeżeli popatrzymy na to ze strony praktycznej to nie ma to znaczenia. Ważne, że mamy do dyspozycji mikrokontroler z potrzebnymi zasobami w cenie jednostki 8-bitowej.

Tomasz Jabłoński