- Moduł DAC MCP4725 (przetwornik cyfrowo-analogowy)
- Komunikacja I2C w DAC MCP4725
- Wymagane składniki
- Schemat obwodu
- Programowanie DAC Arduino
- Konwersja cyfrowo-analogowa za pomocą MCP4725 i Arduino
Wszyscy wiemy, że Mikrokontrolery pracują tylko z wartościami cyfrowymi, ale w realnym świecie mamy do czynienia z sygnałami analogowymi. Właśnie dlatego ADC (konwertery analogowo-cyfrowe) służy do konwersji rzeczywistych wartości analogowych na postać cyfrową, tak aby mikrokontrolery mogły przetwarzać sygnały. Ale co, jeśli potrzebujemy sygnałów analogowych z wartości cyfrowych, więc oto przetwornik cyfrowo - analogowy (DAC).
Prostym przykładem konwertera cyfrowo-analogowego jest nagrywanie piosenki w studio, w którym artysta wokalista używa mikrofonu i śpiewa piosenkę. Te analogowe fale dźwiękowe są konwertowane do postaci cyfrowej, a następnie przechowywane w pliku w formacie cyfrowym, a gdy utwór jest odtwarzany przy użyciu zapisanego pliku cyfrowego, te wartości cyfrowe są konwertowane na sygnały analogowe dla wyjścia głośnika. Czyli w tym systemie zastosowano DAC.
DAC może być używany w wielu zastosowaniach, takich jak sterowanie silnikiem, regulacja jasności diod LED, wzmacniacz audio, kodery wideo, systemy akwizycji danych itp.
W wielu mikrokontrolerach znajduje się wewnętrzny przetwornik cyfrowo-analogowy, który można wykorzystać do wytworzenia wyjścia analogowego. Ale procesory Arduino, takie jak ATmega328 / ATmega168, nie mają wbudowanego DAC. Arduino ma funkcję ADC (konwerter analogowo-cyfrowy), ale nie ma przetwornika cyfrowo-analogowego (DAC). Ma 10-bitowy DAC w wewnętrznym ADC, ale ten DAC nie może być używany jako samodzielny. Więc tutaj, w tym samouczku Arduino DAC, używamy dodatkowej płytki o nazwie MCP4725 DAC Module z Arduino.
Moduł DAC MCP4725 (przetwornik cyfrowo-analogowy)
MCP4725 IC to 12-bitowy moduł konwertera cyfrowo-analogowego, który służy do generowania wyjściowych napięć analogowych od (0 do 5 V) i jest sterowany za pomocą komunikacji I2C. Jest również wyposażony we wbudowaną nieulotną pamięć EEPROM.
Ten układ scalony ma rozdzielczość 12-bitową. Oznacza to, że używamy (od 0 do 4096) jako danych wejściowych, aby zapewnić napięcie wyjściowe w odniesieniu do napięcia odniesienia. Maksymalne napięcie odniesienia wynosi 5 V.
Wzór do obliczenia napięcia wyjściowego
Napięcie O / P = (napięcie odniesienia / rozdzielczość) x wartość cyfrowa
Na przykład, jeśli użyjemy 5V jako napięcia odniesienia i przyjmijmy, że wartość cyfrowa to 2048. Więc do obliczenia wyjścia DAC.
Napięcie O / P = (5/4096) x 2048 = 2,5 V.
Pinout MCP4725
Poniżej znajduje się obraz MCP4725 z wyraźnie zaznaczonymi nazwami pinów.
Kołki MCP4725 |
Posługiwać się |
NA ZEWNĄTRZ |
Wyjścia napięcia analogowego |
GND |
GND dla wyjścia |
SCL |
Linia zegara szeregowego I2C |
SDA |
Linia danych szeregowych I2C |
VCC |
Wejściowe napięcie odniesienia 5 V lub 3,3 V. |
GND |
GND dla wejścia |
Komunikacja I2C w DAC MCP4725
Ten układ scalony DAC może być połączony z dowolnym mikrokontrolerem za pomocą komunikacji I2C. Komunikacja I2C wymaga tylko dwóch przewodów SCL i SDA. Domyślnie adres I2C dla MCP4725 to 0x60, 0x61 lub 0x62. Dla mnie to 0x61. Korzystając z magistrali I2C możemy podłączyć wiele układów scalonych DAC MCP4725. Jedyną rzeczą jest to, że musimy zmienić adres I2C układu scalonego. Komunikacja I2C w Arduino została już szczegółowo wyjaśniona w poprzednim samouczku.
W tym samouczku połączymy układ scalony DAC MCP4725 z Arduino Uno i dostarczymy analogową wartość wejściową do pinu A0 Arduino za pomocą potencjometru. Następnie ADC zostanie użyty do konwersji wartości analogowej na postać cyfrową. Następnie te wartości cyfrowe są wysyłane do MCP4725 przez magistralę I2C w celu konwersji na sygnały analogowe za pomocą układu DAC MCP4725 IC. Pin A1 Arduino służy do sprawdzania wyjścia analogowego MCP4725 z pinu OUT i ostatecznie wyświetla wartości i napięcia ADC i DAC na wyświetlaczu LCD 16x2.
Wymagane składniki
- Arduino Nano / Arduino Uno
- Moduł wyświetlacza LCD 16x2
- Układ scalony DAC MCP4725
- Potencjometr 10 k
- Płytka prototypowa
- Przewody połączeniowe
Schemat obwodu
Poniższa tabela przedstawia połączenie między układem DAC MCP4725, Arduino Nano i multimetrem
MCP4725 |
Arduino Nano |
Multimetr |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 lub OUT |
A1 |
+ ve terminal |
GND |
GND |
-ve terminal |
VCC |
5V |
NC |
Połączenie między wyświetlaczem LCD 16x2 i Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Od środkowego kołka potencjometru do regulacji kontrastu wyświetlacza LCD |
RS |
D2 |
RW |
GND |
mi |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
ZA |
+ 5V |
K. |
GND |
Potencjometr jest używany bolcu dołączony do wejścia A0 analog Arduino Nano, lewa sworzeń połączony z masą, a najbardziej odpowiednim kołkiem podłączony do 5V z Arduino.
Programowanie DAC Arduino
Kompletny kod Arduino do samouczka DAC jest podany na końcu wraz z filmem demonstracyjnym. Tutaj wyjaśniliśmy kod linia po linii.
Najpierw dołącz bibliotekę dla I2C i LCD za pomocą biblioteki wire.h i liquidcrystal.h.
#zawierać
Następnie zdefiniuj i zainicjalizuj piny LCD zgodnie z pinami, które połączyliśmy z Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // Zdefiniuj piny wyświetlacza LCD RS, E, D4, D5, D6, D7
Następnie zdefiniuj adres I2C układu scalonego DAC MCP4725
# zdefiniować MCP4725 0x61
W konfiguracji void ()
Najpierw rozpocznij komunikację I2C na pinach A4 (SDA) i A5 (SCL) Arduino Nano
Wire.begin (); // Rozpoczyna komunikację I2C
Następnie ustaw wyświetlacz LCD na tryb 16x2 i wyświetl komunikat powitalny.
lcd.begin (16,2); // Ustawia LCD w trybie 16X2 lcd.print ("CIRCUIT DIGEST"); opóźnienie (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC z MCP4725"); opóźnienie (2000); lcd.clear ();
W pustej pętli ()
1. Najpierw w buforze umieść wartość bajtu kontrolnego (0b01000000)
(010-Ustawia MCP4725 w trybie zapisu)
bufor = 0b01000000;
2. Poniższa instrukcja odczytuje wartość analogową ze styku A0 i konwertuje ją na wartości cyfrowe (0-1023). Arduino ADC ma rozdzielczość 10-bitową, więc pomnóż ją przez 4 daje: 0-4096, ponieważ przetwornik DAC ma rozdzielczość 12-bitową.
adc = analogRead (A0) * 4;
3. To stwierdzenie ma na celu znalezienie napięcia z wartości wejściowej ADC (od 0 do 4096) i napięcia odniesienia jako 5V
float ipvolt = (5.0 / 4096.0) * adc;
4. Poniżej pierwszej linii umieszcza się najbardziej znaczące wartości bitów w buforze poprzez przesunięcie o 4 bity w prawo w zmiennej ADC, a druga linia umieszcza najmniej znaczące wartości bitów w buforze poprzez przesunięcie o 4 bity w lewo w zmiennej ADC.
bufor = adc >> 4; bufor = adc << 4;
5. Poniższa instrukcja odczytuje napięcie analogowe z A1, które jest wyjściem DAC (pin OUTPUT układu scalonego DAC MCP4725). Ten pin można również podłączyć do multimetru, aby sprawdzić napięcie wyjściowe. Dowiedz się, jak korzystać z multimetru tutaj.
unsigned int analogread = analogRead (A1) * 4;
6. Następnie wartość napięcia ze zmiennego odczytu analogowego jest obliczana przy użyciu poniższego wzoru
float opvolt = (5,0 / 4096,0) * odczyt analogowy;
7. Poniższa instrukcja służy do rozpoczęcia transmisji z MCP4725
Wire.beginTransmission (MCP4725);
Wysyła bajt kontrolny do I2C
Wire.write (bufor);
Wysyła MSB do I2C
Wire.write (bufor);
Wysyła LSB do I2C
Wire.write (bufor);
Kończy transmisję
Wire.endTransmission ();
Teraz wreszcie wyświetl te wyniki na wyświetlaczu LCD 16x2 za pomocą lcd.print ()
lcd.setCursor (0,0); lcd.print ("Adres IP:"); lcd.print (adc); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvolt); lcd.setCursor (0,1); lcd.print ("D OP:"); lcd.print (odczyt analogowy); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); opóźnienie (500); lcd.clear ();
Konwersja cyfrowo-analogowa za pomocą MCP4725 i Arduino
Po wykonaniu wszystkich połączeń obwodów i przesłaniu kodu do Arduino, zmieniaj potencjometr i obserwuj wyjście na LCD . Pierwsza linia wyświetlacza LCD pokaże wejściową wartość ADC i napięcie, a druga linia pokaże wyjściową wartość i napięcie DAC.
Możesz również sprawdzić napięcie wyjściowe, podłączając multimetr do pinów OUT i GND MCP4725.
W ten sposób możemy przekonwertować wartości cyfrowe na analogowe poprzez połączenie modułu DAC MCP4725 z Arduino.