8-bitowa kontrofensywa (3). Przetwornik C/A i wzmacniacz operacyjny

8-bitowa kontrofensywa (3). Przetwornik C/A i wzmacniacz operacyjny
Pobierz PDF Download icon
Firma Microchip, jeden z największych na świecie graczy w obszarze projektowania i produkcji mikrokontrolerów, wymyślił strategię, dzięki której użytkownicy poszukujący nieskomplikowanych mikrokontrolerów chętnie sięgną po 8-bitowe, sprawdzone mikrokontrolery PUC. Zastosowano pomysłowe połączenie starego, ale sprawdzonego i bardzo popularnego rdzenia PIC16 z nietypowymi, nowatorskimi peryferiami, pracującymi niezależnie od rdzenia (core independent). Ta "niezależność" polega na tym, że działanie układów peryferyjnych nie zależy od częstotliwości taktowania mikrokontrolera i ich praca nie obciążą CPU. Mogą zatem wykonywać pewne specyficzne czynności dużo szybciej niż rdzeń, a jedyne obszary wspólne, to rejestry konfiguracyjne i rejestry danych.

Przetwornik cyfrowo analogowy to stale „egzotyczny” moduł peryferyjny. Być może dlatego, że można go wykonać za pomocą sygnału PWM, jednak wymaga to zewnętrznego filtra dolnoprzepustowego, co komplikuje aplikację. Mikrokontroler PIC16F1619 ma wbudowany typowy przetwornik C/A o rozdzielczości 8 bitów. W innych mikrokontrolerach są wbudowywane też moduły o rozdzielczości 5- i 10-bitowej.

Schemat blokowy przetwornika pokazano na rysunku 1. Jego zasadniczymi elementami są drabinka rezystorów oraz analogowy multiplekser. Drabinka jest złożona z 256 oporników o rezystancji ok 600 V. Do ostatniego, górnego rezystora jest dołączony dodatni biegun napięcia referencyjnego określającego maksymalne napięcie na wyjściu przetwornika. Napięciem referencyjnym może być: napięcie zasilające mikrokontrolera (VDD), napięcie z zewnętrznego źródła doprowadzone do wejścia Vref+ oraz napięcie z modułu FVR_buffer2. Ujemny biegun napięcia referencyjnego jest na stałe dołączony do VSS (masa mikrokontrolera).

Umieszczenie typowego przetwornika C/A w mikrokontrolerze daje wiele korzyści. Po pierwsze. można go użyć w roli programowalnego napięcia referencyjnego dla wbudowanych modułów komparatora lub przetwornika A/C. Innym popularnym zastosowaniem jest wytwarzanie regulowanego napięcia referencyjnego w konstrukcjach zasilaczy sterowanych cyfrowo. Można w ten sposób regulować napięcie wyjściowe i/lub ograniczenie prądowe. Można go użyć jako generatora napięcia o kształcie sinusoidalnym czy o dowolnie innym kształcie, na przykład w zasilaczach arbitralnych.

Konfiguracja przetwornika C/A w MCC jest bardzo łatwa. Trzeba włączyć moduł (opcja Enable DAC), wybrać dodatnie napięcie referencyjne oraz odblokować wyjście napięcia na wyprowadzenie DACOUT1 (rysunek 2). MCC automatycznie konfiguruje linię RA0 jako wyjście analogowe. Możliwe jest przypisanie wyjścia modułu DAC tylko do tej linii.

Do obsługi przetwornika są generowane dwie funkcje – DAC1_Initialize() i DAC1_SstOutput(). Pierwsza z nich zapisuje rejestr konfiguracyjny zgodnie z tym, co ustawiliśmy w oknie MCC oraz wpisuje do rejestru sterującego wartość domyślną 0x33. Druga funkcja zapisuje 8-bitowy rejestr DAC1CON1 ustalający napięcie wyjściowe. Zależy ono od dwóch parametrów: napięcia referencyjnego i wartości zapisanej do rejestru DAC1CON1. Dla ustawienia napięcia referencyjnego równego VDD=3,3 V zmiana najmłodszego bitu rejestru sterującego spowoduje zmianę napięcia na wyjściu o około 3,3 V/254= 0,013 V. Gdybyśmy chcieli, aby napięcie wyjściowe miało wartość np. 1 V, to powinniśmy zapisać do rejestru DAC1CON1 liczbę 1/0,013=77. Oczywiście, z powodu niezbyt dużej rozdzielczości przetwornika i błędów wynikających z zaokrągleń do wartości całkowitych nie będzie można ustawić dokładnie tego napięcia. Wybranie napięcia referencyjnego o wartości na przykład 2,048 V z modułu FVR trochę poprawia sytuację. Zmiana najmłodszego bitu powoduje zmianę napięcia na wyjściu dokładnie o 2,048/256=0,008 V. To „dokładnie” wynika z tego, że wynik dzielenia nie musi być zaokrąglany do wartości całkowitej. Dla 1 V na wyjściu do rejestru DAC1CON1 trzeba wpisać 1/0,008=125. Tu również należy przypomnieć, że napięcie z modułu FVR jest ustawianie z dokładnością 1…2%. Reasumując, jeżeli napięcie na wyjściu przetwornika musi być dokładnie ustalone, to trzeba zastosować dokładne zewnętrzne napięcie referencyjne o wartości będącej jedną z potęg liczby 2 (1,024 V lub 2,048 V). W każdym wypadku trzeba wziąć pod uwagę dokładność samego konwertera wynoszącą maksymalnie ±1,5 LSB.

Testowanie działanie będzie polegało na wystawieniu na wyjściu napięcia +1 V i zmierzenia czy jest prawidłowe. Na początek ustawimy napięcie referencyjne równe VDD=3,3 V i do rejestru DAC1CON1 wpisujemy wyliczoną wartość 77. Napięcie powinno być mierzone na wyprowadzeniu RA0 skonfigurowanym jako wyjście analogowe. Niestety, tak nie możemy zrobić. W module Curiosity RA0 jest połączone na stałe z linią danych PEGD programatora/debugera. Ponieważ zależy nam na przetestowaniu modułu, a nie na wyprowadzeniu napięcia na pin mikrokontrolera, to możemy zmierzyć napięcie podając je na wejście już skonfigurowanego przetwornika A/C. Takie połączenie wyjścia C/A z wejściem A/C można zrobić wewnątrz mikrokontrolera. Najpierw w konfiguracji A/C ustawiamy aktywne wejście C/A (rysunek 3). Program testowy najpierw zapisuje rejestr DAC1CON1, a potem przetwornik mierzy napięcie z wyjścia C/A (listing 1).

Do odczytania wartości zmierzonego napięcia użyjemy przetwornika A/C i debugera programu MPLAB X IDE. Wynik pomiaru dla wpisanej wartości 77 został pokazany na rysunku 4. Jak widać, przetwornik zmierzył ok 992 mV, czyli o 8 mV mniej, niż się spodziewaliśmy.

Teraz zmienimy napięcie referencyjne na 2,048 V dla przetworników A/C i C/A. Ustawiamy oba bufory FVR na wartość ×2 (1,012 V×2) oraz konfigurujemy napięcie referencyjne z FVR dla obu przetworników. Tę konfigurację pokazano na rysunku 5. Teraz trzeba ponownie przeliczyć współczynniki, aby wartości cyfrowe odpowiadały napięciu w woltach. Dla napięcia Vref=2,048 V i przetwornika C/A już wiemy, że trzeba wpisać do rejestru DAC1CON1 liczbę 128. Dla przetwornika A/C mamy zakres pomiarowy 2,048 V i rozdzielczość 10-bitową. Zmiana najmłodszego bitu odpowiada napięciu 2,048 V/1024=2 mV. Program testowy będzie teraz wyglądał, jak na listingu 2.

Wynik testowania przetwornika C/A pokazano na rysunku 6. Zmierzone przez przetwornik A/C napięcie ma wartość 1,002 V, czyli o 2 mV większą od spodziewanej. Zastosowanie napięcia referencyjnego o wartości równej potędze liczby 2 (211) spowodowało widoczne zwiększenie dokładności pomiaru. Oczywiście, trzeba tu uwzględnić dokładność samego napięcia z FVR i dokładność przetworników. Jednak dla dużej liczby praktycznych pomiarów napięcia oraz generowania napięcia przez moduł przetwornica C/A ta dokładność będzie bardziej niż wystarczająca. Bardzo dokładne napięcia będą wymagały dokładnych, kompensowanych temperaturowo źródeł referencyjnych oraz dokładniejszych, zewnętrznych przetworników.

Wzmacniacz operacyjny

Mikrokontroler PIC16F1619 nie ma wbudowanego modułu wzmacniacza operacyjnego i dlatego do jego testowania użyłem mikrokontrolera 16f1769 zamówionego za pomocą programu próbek Microchipa. Schemat blokowy jednego modułu wzmacniacza pokazano na rysunku 7. Do każdego z wejść wzmacniacza można doprowadzać sygnały analogowe poprzez programowany multiplekser. W najbardziej typowym układzie do wejść wzmacniacza można dołączyć wyprowadzenia mikrokontrolera OPAxINx+ i OPAxINx–. Poza tym, multiplekser może przyłączyć do wejść wzmacniacza wewnętrzne sygnały z wyjść przetwornika C/A, źródła napięcia referencyjnego FVR_buffer2 oraz z wyjścia generatora przebiegu piłokształtnego (Programmable Ramp Generator). Wejście odwracające można wewnątrz układu programowo połączyć z wyjściem i wzmacniacz zaczyna pracować jako bufor ze wzmocnieniem 1 (wtórnik).

Moduł wzmacniacza przetestowałem podłączając wyjście przetwornika cyfrowo analogowego do wejścia nieodwracającego. Potem skonfigurowałem wzmacniacz do pracy jako bufor ze wzmocnieniem 1 – tryb pracy unity gain pokazany na rysunku 8. W takiej konfiguracji napięcie z wyjścia przetwornika C/A jest podawane na wejście bufora i jest dostępne na wyjściu RC2/OPA1OUT, jak to zostało pokazano na rysunku 9. W mikrokontrolerach PIC16F1769 zastosowano 10-bitowe przetworniki C/A. W konfiguracji trzeba wybrać format wyniku, dodatnie i ujemne (może być podawane na dedykowane wyprowadzenie) napięcie referencyjne oraz sposób obsługi bufora danych wejściowych (rysunek 10). Oprogramowanie MCC generuje funkcje void DAC1_Load10bitInputData(uint16_t input10BitData) oraz void DAC2_Load10bitInputData(uint16_t input10BitData) zapisujące dane do bufora przetwornika – pokazano je na listingu 3.

T estowanie układu polega na zapisywaniu bufora przetwornika i mierzeniu napięcia na wyjściu wzmacniacza połączonego z wyjściem przetwornika, jak na rys. 9. Dla napięcia referencyjnego FVR_Buffer2 o wartości 2,048 V mamy dla jednego bitu 2,048 V/1024=2 mV. Zapisanie do przetwornika liczby 1000 powoduje ustawienie napięcia na wyjściu wzmacniacza równego 2 mV×1000=2 V. W ten sposób przetestowałem oba przetworniki i mierzone napięcie było równe założonemu z dokładnością 1…2 mV. Pomiary były wykonywane popularnym multimetrem i trudno stwierdzić czy błąd był spowodowany niedokładnością pomiaru, czy niedokładnością napięcia referencyjnego. Jednak tak małe błędy na pewno nie będą miały wpływu na typowe aplikacje, na przykład, przy budowie sterownika do warsztatowego zasilacza sterowanego cyfrowo. Przetwornik C/A mikrokontrolera PIC16F1769 idealnie nadaje się do ustalenia napięcia wyjściowego i progu zadziałania ograniczenia prądowego.

Tomasz Jabłoński, EP

 

 

Artykuł ukazał się w
Elektronika Praktyczna
styczeń 2017
DO POBRANIA
Pobierz PDF Download icon
Materiały dodatkowe
Zobacz też
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik wrzesień 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio wrzesień 2020

Świat Radio

Magazyn użytkowników eteru

Automatyka Podzespoły Aplikacje wrzesień 2020

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna wrzesień 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich sierpień 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów