Na rynku dostępnych jest bardzo wiele najróżniejszych układów przetworników analogowo-cyfrowych oraz cyfrowo-analogowych. Jeszcze więcej układów integruje te przetworniki celem realizowania swoich funkcji – znanym wielu amatorom przykładem może być termometr cyfrowy DS18B20. Biorąc pod uwagę, w jak wielu układach potrzebna jest konwersja między sygnałami analogowymi, a danymi cyfrowymi, aż dziw bierze, jak rzadko hobbyści korzystają z dedykowanych układów ADC i DAC, i jak jeszcze rzadziej robią to poprawnie.
Moduł ADC w mikrokontrolerze, a dedykowany układ ADC
Jednym z pytań, które hobbysta może zadać, jest to dotyczące stosowania zewnętrznego układu ADC, gdy mikrokontroler ma już taki moduł w swojej strukturze. To prawda, i w większości zastosowań przetworniki te mogą być wystarczające.
Jednakże mają one szereg ograniczeń, z których większość hobbystów nie zdaje sobie sprawy. Wystarczy jednak spojrzeć na specyfikację typowego modułu ADC, i porównać ją ze specyfikacją dedykowanego układu, by zobaczyć pierwszy problem. Dla przykładu niech posłuży mikrokontroler AVR ATMega328P, znany każdemu użytkownikowi Arduino. Nota podaje szereg istotnych parametrów, ale nas interesują cztery:
- nieliniowość całkowita INL: 0,6 LSB typowo;
- nieliniowość różnicowa DNL: 0,3 LSB typowo;
- błąd wzmocnienia: ±3,5 LSB;
- błąd przesunięcia (offsetu): ±3,5 LSB.
W efekcie bez dokładnej kalibracji 10-bitowy przetwornik ADC w mikrokontrolerze ma w praktyce tylko 8 bitów, bo ostatnim dwóm najmniej znaczącym bitom nie można ufać. Porównajmy to z dedykowanym układem ADC, a dokładniej z ADC101S021 firmy Texas Instruments. Układ ten również oferuje 10-bitową rozdzielczość, ale istotne dla porównania parametry wyglądają tak:
- nieliniowość całkowita INL: od –0,13 LSB do +0,14 LSB;
- nieliniowość różnicowa DNL: od –0,09 LSB do +0,12 LSB;
- błąd wzmocnienia: ±0,7 LSB maksymalnie;
- błąd przesunięcia (offsetu): ±1,0 LSB maksymalnie.
Już na starcie zyskujemy większą pewność co do wartości przedostatniego bitu, czyli bez kalibracji mamy 9 bitów rozdzielczości. Po kalibracji błędu przesunięcia i wzmocnienia uzyskamy prawdziwie dziesięciobitową dokładność. Ale możemy pójść o krok dalej i zakupić dokładniejszy układ, na przykład 12-bitowy, na przykład MCP3221 firmy Microchip:
- nieliniowość całkowita INL: 0,75 LSB typowo;
- nieliniowość różnicowa DNL: 0,5 LSB typowo;
- błąd wzmocnienia: ±2 LSB maksymalnie;
- błąd przesunięcia (offsetu): ±3 LSB maksymalnie.
Wygląda to nieco gorzej, niż dla modułu wewnątrz mikrokontrolera, ale pamiętajmy o dwóch dodatkowych bitach – po eliminacji błędów wzmocnienia i offsetu efektywna rozdzielczość wyniesie przynajmniej 10 bitów. Czy można lepiej? Jasne! Układ ADC121S021 firmy Texas Instruments oferuje pod pewnymi względami lepsze parametry:
- nieliniowość całkowita INL: od –0,4 LSB do +0,55 LSB;
- nieliniowość różnicowa DNL: od –0,3 LSB do +0,6 LSB;
- błąd wzmocnienia: –1,6 LSB maksymalnie;
- błąd przesunięcia (offsetu): –0,25 LSB maksymalnie.
Mógłbym wymieniać kolejne, dostępne układy, ale myślę, że nie jest to konieczne, bo łatwo zauważyć, iż praktycznie każdy dedykowany przetwornik ADC sprawdzi się lepiej, niż wewnętrzny moduł ADC w mikrokontrolerze, zwłaszcza gdy zależy nam na ich precyzji.
Warto jednak wspomnieć o tym, iż niektóre mikrokontrolery posiadają dość zaawansowane moduły ADC, potrafiące wykonywać automatyczne pomiary i generować przerwanie tylko wtedy, gdy zostanie przekroczona określona wartość minimalna lub maksymalna. Moduły te potrafią też wykonywać automatycznie operację uśredniania wyników i oversamplingu dla większej rozdzielczości i mniejszych szumów kosztem częstotliwości próbkowania. Oczywiście są i układy potrafiące to samo, a nie będące częścią mikrokontrolera, jak na przykład dwukanałowy, 12-bitowy przetwornik ADC z rozbudowanym systemem kontrolnym, ADS7142 firmy Texas Instruments. Układ ten potrafi prowadzić automatyczną akwizycję danych i zasygnalizować przekroczenie progów minimalnych, maksymalnych oraz bycia między nimi dla obu kanałów niezależnie. Automatycznie koryguje błąd offsetu, choć błąd wzmocnienia jest dość spory i stanowi typowo ±0,03% pełnego zakresu mierzonych napięć.