- Modul DAC MCP4725 (digitální na analogový převodník)
- Komunikace I2C v MCP4725 DAC
- Požadované komponenty
- Kruhový diagram
- Programování DAC Arduino
- Digitální na analogový převod pomocí MCP4725 a Arduino
Všichni víme, že mikrokontroléry fungují pouze s digitálními hodnotami, ale ve skutečném světě se musíme vypořádat s analogovými signály. Proto je zde ADC (analogově-digitální převaděče), které převádějí analogové hodnoty reálného světa do digitální podoby, aby mikrokontroléry mohly zpracovávat signály. Ale co když potřebujeme analogové signály z digitálních hodnot, tak přichází DAC (Digital to Analog Converter).
Jednoduchým příkladem převaděče digitálních na analogové je nahrávání skladby ve studiu, kde umělec zpěvák používá mikrofon a zpívá píseň. Tyto analogové zvukové vlny jsou převedeny do digitální podoby a poté uloženy do souboru digitálního formátu a při přehrávání skladby pomocí uloženého digitálního souboru jsou tyto digitální hodnoty převedeny na analogové signály pro výstup reproduktoru. V tomto systému se tedy používá DAC.
DAC lze použít v mnoha aplikacích, jako je ovládání motoru, ovládání jasu LED světel, audio zesilovač, video kodéry, systémy pro sběr dat atd.
V mnoha mikroprocesorech je interní DAC, který lze použít k výrobě analogového výstupu. Procesory Arduino, jako je ATmega328 / ATmega168, však nemají vestavěný DAC. Arduino má funkci ADC (analogově-digitální převodník), ale nemá DAC (digitálně-analogový převodník). Má 10bitový DAC v interním ADC, ale tento DAC nelze použít jako samostatný. Takže zde v tomto výukovém programu Arduino DAC používáme další desku nazvanou MCP4725 DAC modul s Arduino.
Modul DAC MCP4725 (digitální na analogový převodník)
MCP4725 IC je 12bitový digitální převodník na analogový převodník, který se používá ke generování výstupních analogových napětí od (0 do 5 V) a je řízen pomocí komunikace I2C. Dodává se také s integrovanou energeticky nezávislou pamětí EEPROM.
Tento IC má 12bitové rozlišení. To znamená, že používáme (0 až 4096) jako vstup k poskytování napěťového výstupu s ohledem na referenční napětí. Maximální referenční napětí je 5V.
Vzorec pro výpočet výstupního napětí
O / P napětí = (referenční napětí / rozlišení) x digitální hodnota
Jako příklad použijeme 5 V jako referenční napětí a předpokládejme, že digitální hodnota je 2048. Takže pro výpočet výstupu DAC.
O / P napětí = (5/4096) x 2048 = 2,5V
Pinout MCP4725
Níže je obrázek MCP4725 s jasně označujícími názvy pinů.
Kolíky MCP4725 |
Použití |
VEN |
Výstup analogového napětí |
GND |
GND pro výstup |
SCL |
Sériová hodinová linka I2C |
SDA |
Sériová datová linka I2C |
VCC |
Vstupní referenční napětí 5V nebo 3,3V |
GND |
GND pro vstup |
Komunikace I2C v MCP4725 DAC
Tento DAC IC lze propojit s jakýmkoli mikrokontrolérem pomocí komunikace I2C. Komunikace I2C vyžaduje pouze dva vodiče SCL a SDA. Ve výchozím nastavení je adresa I2C pro MCP4725 0x60 nebo 0x61 nebo 0x62. Pro mě je to 0x61. Pomocí sběrnice I2C můžeme připojit více MCP4725 DAC IC. Jedinou věcí je, že musíme změnit I2C adresu IC. Komunikace I2C v Arduinu je již podrobně vysvětlena v předchozím tutoriálu.
V tomto tutoriálu propojíme DCP IC MCP4725 s Arduino Uno a poskytneme analogovou vstupní hodnotu na Arduino pin A0 pomocí potenciometru. Poté bude ADC použit k převodu analogové hodnoty do digitální podoby. Poté jsou tyto digitální hodnoty odeslány na MCP4725 po sběrnici I2C a převedeny na analogové signály pomocí IC DAC MCP4725. Arduino pin A1 se používá ke kontrole analogového výstupu MCP4725 z pinu OUT a nakonec k zobrazení hodnot ADC a DAC a napětí na 16x2 LCD displeji.
Požadované komponenty
- Arduino Nano / Arduino Uno
- Modul LCD displeje 16x2
- MCP4725 DAC IC
- 10k potenciometr
- Nepájivá deska
- Propojovací dráty
Kruhový diagram
Níže uvedená tabulka ukazuje spojení mezi MCP4725 DAC IC, Arduino Nano a Multi-meter
MCP4725 |
Arduino Nano |
Multimetr |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 nebo OUT |
A1 |
+ jsem terminál |
GND |
GND |
-ve terminálu |
VCC |
5V |
NC |
Spojení mezi 16x2 LCD a Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Od středového kolíku potenciometru k nastavení kontrastu LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K. |
GND |
Potenciometr je použit se středovým čepem připojen k A0 analogovému vstupu Arduino Nano, levý čep připojen k uzemnění a nejvíce vpravo čepu spojen s 5V z Arduino.
Programování DAC Arduino
Kompletní Arduino kód pro výukový program DAC je uveden na konci s ukázkovým videem. Zde jsme vysvětlili kód po řádku.
Nejprve zahrňte knihovnu pro I2C a LCD pomocí knihovny wire.h a liquidcrystal.h.
#zahrnout
Dále definujte a inicializujte piny LCD podle pinů, které jsme spojili s Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // Definujte piny LCD displeje RS, E, D4, D5, D6, D7
Dále definujte I2C adresu MCP4725 DAC IC
#define MCP4725 0x61
V nastavení neplatnosti ()
Nejprve začněte komunikaci I2C na pinech A4 (SDA) a A5 (SCL) Arduino Nano
Wire.begin (); // Zahájí komunikaci I2C
Dále nastavte LCD displej do režimu 16x2 a zobrazte uvítací zprávu.
lcd.begin (16,2); // Nastaví LCD v režimu 16X2 lcd.print ("CIRCUIT DIGEST"); zpoždění (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print („DAC s MCP4725“); zpoždění (2000); lcd.clear ();
V neplatné smyčce ()
1. Nejprve do vyrovnávací paměti vložte hodnotu kontrolního bajtu (0b01000000)
(010-Sady MCP4725 v režimu zápisu)
buffer = 0b01000000;
2. Následující příkaz načte analogovou hodnotu z pinu A0 a převede ji na digitální hodnoty (0-1023). Arduino ADC má 10bitové rozlišení, takže ho vynásobte 4, což dává: 0-4096, protože DAC má 12bitové rozlišení.
adc = analogRead (A0) * 4;
3. Toto prohlášení má najít napětí ze vstupní hodnoty ADC (0 až 4096) a referenční napětí jako 5V
float ipvolt = (5,0 / 4096,0) * adc;
4. Pod první řádek umístí nejvýznamnější bitové hodnoty do vyrovnávací paměti posunutím 4 bitů doprava do proměnné ADC a druhý řádek umístí nejméně významné bitové hodnoty do vyrovnávací paměti posunutím 4 bitů doleva do proměnné ADC.
buffer = adc >> 4; buffer = adc << 4;
5. Následující příkaz čte analogové napětí z A1, což je výstup DAC (pin OUTPUT DCP IC MCP4725). Tento pin lze také připojit k multimetru ke kontrole výstupního napětí. Zde se dozvíte, jak používat multimetr.
unsigned int analogread = analogRead (A1) * 4;
6. Dále se vypočítá hodnota napětí z proměnné analogové proměnné pomocí níže uvedeného vzorce
float opvolt = (5.0 / 4096.0) * analogread;
7. Následující příkaz se používá k zahájení přenosu s MCP4725
Wire.beginTransmission (MCP4725);
Odešle řídicí bajt do I2C
Wire.write (buffer);
Odešle MSB do I2C
Wire.write (buffer);
Odešle LSB do I2C
Wire.write (buffer);
Ukončí přenos
Wire.endTransmission ();
Nyní tyto výsledky konečně zobrazte na displeji LCD 16x2 pomocí lcd.print ()
lcd.setCursor (0,0); lcd.print ("A IP:"); lcd.print (adc); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvolt); lcd.setCursor (0,1); lcd.print ("D OP:"); lcd.print (analogový); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); zpoždění (500); lcd.clear ();
Digitální na analogový převod pomocí MCP4725 a Arduino
Po dokončení všech zapojení obvodu a nahrání kódu do Arduina změňte potenciometr a sledujte výstup na LCD . První řádek LCD zobrazí vstupní hodnotu a napětí ADC a druhý řádek výstupní hodnotu a napětí DAC.
Můžete také zkontrolovat výstupní napětí připojením multimetru ke kolíku OUT a GND na MCP4725.
Takto můžeme převést digitální hodnoty na analogové propojením DAC modulu MCP4725 s Arduino.