Elektronika     Automatyczny woltomierz panelowy LED (ATmega48)        




Jest to automatyczny 2-zakresowy woltomierz panelowy z 4-cyfrowym wyświetlaczem LED, zasilany sta-
bilizowanym napięciem 4.75-5.25V. Umożliwia pomiar dodatniego napięcia stałego, o wartości do 90V.
Sprawdzi się dobrze zamontowany, np. w regulowanym zasilaczu warsztatowym.
Sercem woltomierza jest popularny mikrokontroler ATmega48 z wbudowanym, wielokanałowym 10-bi-
towym przetwornikiem ADC (Analog to Digital Converter). Można również wykorzystać inne modele z tej
rodziny, czyli ATmega88/168/328 (mają ten sam rdzeń, ale większą ilość pamięci). Przygotowałem dla
nich odrębne wersje programu sterującego, który napisałem w asemblerze dzięki czemu zajmuje on
poniżej 250 bajtów. Reszta pamięci FLASH pozostanie nie wykorzystana, więc lepiej użyć tańszego
mikrokontrolera z mniejszą jej ilością.
Mierzone napięcie wejściowe Vin trafia na dzielnik napięcia, zbudowany z rezystorów R1, R2 i R3. Jest
to fragment typowego dzielnika, stosowanego we wszystkich multimetrach uniwersalnych. Zapewnia
bardzo dobrą dokładność podziału napięcia pod warunkiem, że użyte w nim rezystory mają małą tole-
rancję (1% lub niższą). Rezystory R1/R2+R3 i jednocześnie R1+R2/R3, tworzą napięcia o wartości
Vin/10 i Vin/100, które trafiają bezpośrednio do multipleksera kanałów przetwornika ADC.
Napięcie podawane bezpośrednio do pinów mikrokontrolera, nie powinno przekroczyć wartości jego
napięcia zasilania Vcc. Jednak każdy pin posiada dwie, wewnętrzne diody zabezpieczające (clamping
diodes) o spadku napięcia 0.5V, które chronią mikrokontroler przed za niskim/wysokim napięciem wej-
ściowym w stosunku do jego napięcia zasilania Vcc. Utrzymują one wszystkie sygnały trafiające do
mikrokontrolera w zakresie jego maksymalnych napięć wejściowych (od GND-0.5V do Vcc+0.5V).
Podanie napięcia wejściowego o wartości niższej/wyższej niż GND-0.5V/Vcc+0.5V, spowoduje prze-
pływ prądu przez dolną/górną diodę zabezpieczającą do masy/plusa zasilania, a w rezultacie zmniej-
szenie napięcia na pinie do wartości GND-0.5V/Vcc+0.5V. Jedynym ograniczeniem wewnętrznych diod
zabezpieczających jest zalecany maksymalny prąd, który może przez nie płynąć wynoszący 1mA.
Większy prąd może spowodować uszkodzenie diody zabezpieczającej, a następnie pinu/portu
mikrokontrolera.
Dlatego bezpieczną maksymalną wartością napięcia wejściowego Vin jest +/- 90V. Rezystor R1 ogra-
nicza prąd wewnętrznych diod zabezpieczających na pinie ADC0. Nawet w najgorszym przypadku, gdy
R1 ma najniższą rezystancję równą 89100 omów (tolerancja -1%), to przy napięciu Vin=90V przez diodę
zabezpieczającą popłynie prąd o wartości 1.01mA. Na pinie ADC1 prąd tych diod jest ograniczany przez
rezystory R1+R2, więc będzie on jeszcze mniejszy.
Mimo, że zakres maksymalnych napięć wejściowych na dowolnym kanale przetwornika ADC wynosi
od GND do Vcc, to podanie niższego/wyższego napięcia nie uszkodzi mikrokontrolera (może jednak
zaburzyć pracę samego przetwornika, zwłaszcza przy załączonej diodzie zabezpieczającej).
Fabryczne multimetry uniwersalne mają dzielnik o rezystancji wejściowej Rin=10M. W moim woltomierzu
wynosi ona tylko 100k, ponieważ przetwornik ADC w mikrokontrolerze działa dobrze jedynie ze źródłami
napięcia, o impedancji wyjściowej Zout do 10k. Dzielnik 1:10 ma Zout=R1*(R2+R3)/R1+(R2+R3)=9k,
a dzielnik 1:100 ma Zout=(R1+R2)*R3/(R1+R2)+R3=990, czyli oba spełniają wymagania przetwornika.
Ewentualne zwiększenie Rin (np. do 1M: R1=900k, R2=90k, R3=10k), zwiększy również Zout dzielnika
1:10 powyżej 10k, co może spowodować nieprawidłową pracę przetwornika ADC. Przy napięciu Vin=
90V woltomierz (Rin=100k) pobiera z niego prąd, o wartości ok. 900uA więc nie jest to zbyt duże obcią-
żenie. Z powodu braku rezystorów 9k i 90k zastąpiłem je połączonymi szeregowo, precyzyjnymi rezy-
storami o tolerancji 1% oraz dużo częściej spotykanych wartościach wynoszących, odpowiednio:
2.2k+6.8k i 15k+75k.
Układ U2, czyli popularna regulowana dioda Zenera TL431 pracuje, jako źródło napięcia odniesienia.
Na jego wyjściu otrzymuje się napięcie 2.44-2.55V (w zależności od tolerancji układu), które trafia na
regulowany dzielnik napięcia, zbudowany z wieloobrotowego potencjometru P1 (Helitrim) i rezystora
R13. Potencjometr służy do precyzyjnego ustawienia napięcia referencyjnego Vref na pinie AREF mikro-
kontrolera dla przetwornika ADC. Od wartości Vref zależy maksymalne napięcie Vin, które może mierzyć
przetwornik oraz rozdzielczość pomiaru, która wynosi: Vref/1024 [V]. Napięcie Vref nie może być niższe
od 1V, ani wyższe od napięcia zasilania Vcc.
Przykład: jeśli Vref=3.072V to przetwornik będzie mierzył napięcie 0-3.072V, które zamieni na wartość
cyfrową $0000-$03FF (10-bitów). Rozdzielczość pomiaru wyniesie 3mV, czyli każda zmiana napięcia o
3mV spowoduje zmianę wartości cyfrowej o 1. Jeśli mierzone napięcie będzie wyższe od Vref, to wartość
cyfrowa będzie zbliżona do maksymalnej, czyli $03FF.
Woltomierz ma 2 zakresy pomiarowe, które przełączają się automatycznie w zależności od wartości mie-
rzonego napięcia. Napięcie z dzielnika 1:10 trafia na pin ADC0. Jest to zakres LOW, który zapewnia po-
miar napięcia do 10.20V z rozdzielczością 10mV lub do 20.40V z rozdzielczością 20mV. Jeśli mierzone
napięcie przekracza podane wartości dla zakresu LOW, to woltomierz przełącza się automatycznie na
pomiar napięcia z dzielnika 1:100 (pin ADC1). Jest to zakres HIGH, który zapewnia pomiar maksymal-
nego dopuszczalnego napięcia 90V, z rozdzielczością 100 lub 200mV.
Wynik pomiaru jest wyświetlany na poczwórnym, zielonym wyświetlaczu LED1 ze wspólną anodą (zbę-
dne zera nie są pokazywane). Rezystory R4-R11 ograniczają prąd zasilający poszczególne segmenty
każdej z cyfr. Przy napięciu zasilania 4.75-5.25V prąd chwilowy wynosi ok. 13.5-15.5 mA na segment.
Jeżeli jasność świecenia wyświetlacza jest za słaba, to można zmienić ich wartość ze 100 do 68-75
omów. Tranzystory T1-T4 załączają napięcie zasilania dla danej cyfry na wyświetlaczu (powinny mieć
wzmocnienie hfe>130). Każda cyfra jest multipleksowana z częstotliwością ok. 60Hz (4ms świecenia).
Gdy zworka J1 jest zwarta (ON) zostaje włączony test wyświetlacza, który powoduje ciągłe wyświetlanie
wartości "88.88".
Po wlutowaniu wszystkich elementów w typowej kolejności, nie wkładamy jeszcze mikrokontrolera w po-
dstawkę tylko mierzymy rezystancję w następujących miejscach: na złączu CON1 powinna ona wynosić
100k, a pomiędzy pinami 23/24 podstawki - 9k. Podłączamy napięcie zasilania i sprawdzamy, czy poja-
wia się ono na pinach 8/7 i 8/20 podstawki oraz czy ma prawidłową polaryzację.
Jeśli mikrokontroler był już używany, to należy się upewnić że ma odpowiednio ustawione fuse i lock bi-
ty: FL (Fuse Low): $62, FH (Fuse High): $DF ($D9 dla ATmega328), FE (Fuse Extended): $F9 ($FF dla
ATmega48/328), LB (Lock Bits): $FF. Fabrycznie nowe mikrokontrolery ATmega48/88/168/328 mają
właśnie takie domyślne ustawienia. Powodują one, że mikrokontroler korzysta z wewnętrznego oscyla-
tora RC, o częstotliwości nominalnej 8 MHz (bity CKSEL3-0=0010); włączony jest dzielnik częstotliwo-
ści przez 8, co powoduje taktowanie mikrokontrolera zegarem 1 MHz (CKDIV8=0); wydłużony jest czas
jego startu do ok. 65ms po włączeniu napięcia zasilania (SUT1-0=10), a także włączona jest możliwość
jego zaprogramowania przez interfejs szeregowy (SPIEN=0). Należy bardzo uważać, aby nie dokonać
zmian w fuse/lock bitach, które uniemożliwią dalsze programowanie mikrokontrolera.
Następnie przy wyłączonym zasilaniu wkładamy mikrokontroler w podstawkę, włączamy zasilanie i pro-
gramujemy go odpowiednim wsadem przez złącze CON3, przy użyciu dowolnego programatora ISP (In-
System Programming). Złącze CON3 zawiera sygnały rozmieszczone w standardowy sposób zalecany
przez firmę Atmel, a pokazany na schemacie ideowym. Po prawidłowym zaprogramowaniu mikrokontro-
lera, odłączamy programator od woltomierza.
Jeśli wystarczy nam pomiar do 10.20V na zakresie LOW, to potencjometrem P1 ustawiamy napięcie
Vref=1.024V na pinie AREF mikrokontrolera, a zworkę J2 rozwieramy (OFF). Wtedy na zakresie LOW i
HIGH rozdzielczość pomiaru wyniesie, odpowiednio: 10 i 100 mV. Jeśli chcemy "poszerzyć" zakres LOW
tak, aby umożliwiał pomiar do 20.40V, to potencjometrem P1 ustawiamy napięcie Vref=2.048V, a zworkę
J2 zwieramy (ON). Takie "poszerzenie" pogarsza jednak rozdzielczość pomiaru na obu zakresach, która
wynosi w takim wypadku, odpowiednio: 20 i 200 mV.
Gdyby przetwornik ADC i rezystory w dzielnikach były idealne, to samo ustawienie napięcia Vref o war-
tości 1.024V lub 2.048V wystarczyłoby do prawidłowej pracy woltomierza. Niestety sam przetwornik, jak
i dzielniki napięcia wprowadzają błędy pomiaru. Aby je zminimalizować, należy dokonać kalibracji z uży-
ciem fabrycznego multimetru. W tym celu do źródła napięcia o wartości ok. 9V (np. baterii), podłączamy
jednocześnie woltomierz i równolegle do niego fabryczny multimetr, ustawiony na zakres pomiaru napię-
cia stałego do 20V. Następnie regulujemy potencjometrem P1, aż do uzyskania identycznego wskazania
na obu woltomierzach. Po takiej kalibracji woltomierz zapewnia już wystarczającą dokładność pomiarów
i jest gotowy do użytkowania. Przy braku lub ujemnym napięciu Vin na złączu CON1, wyświetlacz
powinien pokazywać wartość zerową "0.00".
Warto wspomnieć, że mikrokontrolery ATmega48/88/168/328 nie mają oddzielonej masy cyfrowej (pin 8)
od analogowej (pin 22). Muszą się one ze sobą łączyć na płytce drukowanej, ale tylko w jednym punkcie
- znacznie zmniejsza to wpływ zakłóceń, generowanych przez część cyfrową mikrokontrolera na jego
część analogową. Dodatkowo, aby zmniejszyć szumy i pobór prądu, zostaje wyłączony komparator ana-
logowy oraz zatrzymane taktowanie nieużywanych modułów mikrokontrolera (TWI, SPI, USART, TC0,
TC1, TC2). Na wszystkich pinach mikrokontrolera panuje ustalony stan logiczny, a na wejściach pomia-
rowych ADC0 i ADC1 są wyłączone cyfrowe bufory wejściowe. Ponadto przetwornik ADC wykonuje
pomiary tylko wtedy, gdy mikrokontroler jest "uśpiony" (tryb "ADC Noise Reduction"), co dodatkowo
niweluje wpływ wewnętrznych zakłóceń na wynik konwersji.
Moim celem było zbudowanie woltomierza panelowego, który mógłby zastąpić woltomierz z układem
ICL7107. W pewnym stopniu udało mi się to osiągnąć, ale nie do końca. W porównaniu do ICL7107 mój
woltomierz ma następujące wady: brak pomiaru napięć ujemnych (tylko dodatnie), brak zakresów do
200mV i 2V (nie mierzy z rozdzielczością 0.1 mV i 1 mV), mniejsza rezystancja wejściowa (100k), gorsza
dokładność pomiarów wynikająca z większej nieliniowości i niższej rozdzielczości przetwornika ADC.
Trzeba tu wspomnieć, że układ ICL7107 jest specjalizowanym woltomierzem i posiada dobrej jakości
przetwornik, o rozdzielczości 11-bitów. Natomiast przetwornik wbudowany w mikrokontroler ATmega
jest średniej jakości i ma rozdzielczość tylko 10-bitów.
Do zalet mojego woltomierza można zaliczyć: automatyczne przełączanie zakresów pomiarowych, szyb-
kość wykonywania pomiarów ok. 60x/s (ICL7107 - tylko 3x/s), nie wymaga ujemnego napięcia zasilania,
mniejszy pobór prądu - niestety kosztem jasności świecenia wyświetlacza (przy włączonej funkcji TEST
100-118 mA, dla ICL7107 jest to 160 mA).
Woltomierz zmontowałem na dwóch płytkach jednostronnych: głównej o wymiarach 60x50 mm i wyświe-
tlacza 65x30 mm, które są ze sobą zlutowane pod kątem prostym. W każdej znajdują się dwa otwory
montażowe o średnicy 3 mm, dzięki którym woltomierz może być przykręcony do obudowy. Jako małą
ciekawostkę dodam, że płytki prototypowe wykonałem bez trawienia (mini wiertarką z małym frezem).

ZAKRESVREFJ2MAKSYMALNE
WSKAZANIE
ROZDZIELCZOŚĆ
POMIARU
LOW1.024 VOFF10.20 V10 mV
2.048 VON20.40 V20 mV
HIGH1.024 VOFF90.0 V100 mV
2.048 VON200 mV
Ustawienia dotyczące zakresów pomiarowych.
OFF - zworka J2 rozwarta, ON - zworka J2 zwarta.


Rozkład wyprowadzeń wyświetlacza LED.

UWAGA! Woltomierz nie jest w żaden sposób zabezpieczony przed odwrotnym podłączeniem napięcia
zasilania Vcc. Pomylenie polaryzacji tego napięcia spowoduje uszkodzenie mikrokontrolera. Pomylenie
polaryzacji mierzonego napięcia wejściowego Vin nie spowoduje żadnych uszkodzeń.

SPIS ELEMENTÓW:

Rezystory:
R1 - 90k/1%
R2 - 9k/1%
R3 - 1k/1%
R4-R11 - 100
R12 - 470
R13-R17 - 1k
R18 - 10k
Potencjometry:
P1 - 5k (Helitrim)

Kondensatory:
C1 - 100n/63V
C2-C4 - 100n
C5 - 100u/10V
Cewki:
L1 - 10uH (dławik)

Tranzystory:
T1-T4 - BC557 (lub inny PNP)

Układy scalone:
U1 - ATmega48/88/168/328
U2 - TL431
Wyświetlacze:
LED1 - poczwórny, zielony LED ze
              wspólną anodą (AF-05643FG)

Złącza:
CON1, CON2 - goldpin 2x1 (męskie)
CON3 - goldpin 3x2 (męskie)

Inne:
U1 - podstawka DIP28 zwykła
J1, J2 - zworka 2x1