Kiedy byłem studentem Wydziału Elektroniki i Technik Informacyjnych Politechniki Warszawskiej, dla zdecydowanej większości przyszłych inżynierów przedmioty traktujące o elektronice analogowej były znacznie trudniejsze od tych „cyfrowych”.
Napięcia, prądy, zakłócenia, szumy i trzaski, wzmocnienia różnicowe... Rany, niech ktoś to wreszcie zastąpi jakimś porządnym układem cyfrowym, po co tak się męczyć?! Mielibyśmy tylko dwa stany, zero i jeden, łatwą i przyjemną algebrę Boole’a, wszystko zdeterminowane i określone, czyż życie nie byłoby piękniejsze? Jak by to ująć – naukowcy od wielu lat próbują uczynić nasze życie coraz bardziej cyfrowym, wplatając przetwarzanie cyfrowe do coraz większej liczby zastosowań. A na drodze staje nam rzeczywistość – piękna i frustrująca zarazem.
Weźmy na przykład takie jajko, uważane za przyrodniczy cud inżynieryjny. Lekkie, a zarazem wytrzymałe. Czy jego gładką, acz lekko chropowatą powierzchnię da się całkowicie odwzorować przy użyciu równań matematycznych bazujących na liczbach całkowitych? Gdyby jajko dostało ostre krawędzie, nadal jego skorupka tak dobrze pełniłaby swoją funkcję? Przecież nadtłukujemy ją właśnie po to, by łatwiej było je całkowicie rozbić. Albo odgłos spadającego liścia podczas lekkiego wiatru – przecież widmo amplitudowo-fazowe (a w zasadzie cały spektrogram) takiego dźwięku to jakiś kosmos. Możemy go przybliżać znanymi nam metodami matematycznymi, lecz to nadal będzie tylko przybliżenie, nieoddające pierwowzoru idealnie, a jedynie z jakimś akceptowalnym dla nas przybliżeniem.
Do czego dążę? Możemy mieć najdoskonalsze filtry cyfrowe, najszybsze jednostki obliczeniowe oraz najwydajniejsze układy mnożące i pamiętające, a na początku i końcu tego łańcucha zawsze stoi przyroda z całą swoją niedoskonałością.
Dlatego, aby móc wprowadzić sygnał do naszego cyfrowego, idealnego świata, potrzebny jest przetwornik analogowo-cyfrowy (ADC). Zaś na końcu musimy ten sygnał uczynić zrozumiałym dla naszych zmysłów, posługując się przetwornikami cyfrowo-analogowymi (DAC) – rysunek 1. Same przetworniki to temat z pogranicza „cyfry” i „analogu”, bowiem stanowią one pomost między tymi dwoma światami, lecz nawet przy ich użyciu należy ten sygnał analogowy odpowiednio przygotować. Może on pochodzić z różnych źródeł, chociażby z czujników: natężenia światła, temperatury czy położenia.
Czyli co, układy analogowe wiecznie żywe? Na to wygląda. Nadal potrzebujemy multiplekserów, zdolnych do przełączania wejścia między różnymi źródłami, wzmacniaczy, którymi ten sygnał przygotujemy do obróbki lub po obróbce, a także filtry, których zadaniem jest „wygładzenie” odtworzonego po przetwarzaniu sygnału lub – wręcz przeciwnie – obrobienie go tak, by w toku przetwarzania na postać cyfrową nie wystąpiły jakieś niepożądane zjawiska. Niekiedy nawet nie opłaca się przekształcać sygnału na postać cyfrową, bo wymagana obróbka jest na tyle prosta, że wystarczy sam układ analogowy. Przykład? Przedwzmacniacz gramofonowy. Choć reszta toru audio może zawierać już przetwarzanie cyfrowe.
Coraz częściej mamy również do czynienia z integracją bloków analogowych w strukturach układów cyfrowych. Sztandarowym przykładem mogą być mikrokontrolery, mające na pokładzie z reguły ADC, DAC, jakiś multiplekser i niekiedy prosty wzmacniacz operacyjny. W tym wypadku widać wyraźną przewagę części cyfrowej nad analogową. Lecz stosunek ten bywa odwrócony: do układu stricte analogowego (na przykład wzmacniacza napięciowego) został dodany niewielki moduł cyfrowy, komunikujący się za pośrednictwem I²C (lub innego interfejsu), który umożliwia łatwą zmianę jego wzmocnienia lub wyłączenie wyjścia. Mamy układ analogowy? Mamy. Czy łatwo można nim sterować z poziomu aplikacji? Owszem.
„Analogowe” mikrokontrolery
Niemal każdy szanujący się, współczesny mikrokontroler ma w sobie coś analogowego. Różnice widać w podejściu – producent układu mógł potraktować tę część po macoszemu, a mógł też otoczyć ją szczególną opieką. To drugie podejście oferuje chociażby Analog Devices – firma wszak słynąca ze swoich cudeniek w świecie „analogu” – w postaci rodziny mikrokontrolerów określanych jako precision analog.
Na rysunku 2 znajduje się schemat blokowy mikrokontrolera ADuC7026. Od strony cyfrowej nie ma się czego przyczepić: wydajny rdzeń ARM, sporo pamięci, interfejsy sprzętowe SPI i I²C, a także timery wspierające realizację sterowników silnika. Użytkownik ma do dyspozycji nawet kawałek programowalnego układu logicznego w postaci tzw. PLA.
Zaś od strony analogowej mamy wszystko, czego potrzeba do niezbyt szybkich zastosowań: przetwornik analogowo-cyfrowy z multiplekserem, stabilne źródło napięcia odniesienia (nie to, co w układach serii ATtiny…) i aż cztery (!) przetworniki cyfrowo-analogowe z wbudowanymi filtrami rekonstrukcyjnymi. Żyć, nie umierać! Ale najlepszy w tym jest błąd nieliniowości wbudowanego przetwornika analogowo-cyfrowego, szczegółowo pokazany na rysunku 3. Niemal równomiernie rozłożony na wszystkich 4096 osiągalnych przez wyjście przetwornika poziomach napięcia to coś, co niezwykle upraszcza konstruowanie układów korzystających z analogowych czujników.
W porządku, ale na tym oferta „analogowych” mikrokontrolerów wcale się nie kończy. Przykładowo ADuCM410 to prawdziwy kombajn zawierający mnóstwo analogowych cudeniek – rysunek 4. Prościej byłoby chyba wymienić, czego tam nie ma, bo zasoby są znaczące: dwanaście (!) przetworników cyfrowo/analogowych, wzmacniacze o programowalnym wzmocnieniu (PGA), wzmacniacze transimpedancyjne (TIA) do pomiaru natężenia prądu, szybkie komparatory… I to wszystko może zostać tak skonfigurowane, by działało nawet podczas zerowania rdzenia mikrokontrolera – tak przynajmniej zapewnia producent.
Na fotografii 1 można zobaczyć płytkę ewaluacyjną z tym zacnym mikrokontrolerem, która umożliwia wypróbowanie jego możliwości. Co ważne, ten układ jest dostępny w magazynach znanych dystrybutorów, nie jest więc tylko nigdy niewidzianym w sprzedaży „wyrobem pokazowym”.