- MCP4725 DAC modulis (digitālais uz analogo pārveidotāju)
- I2C komunikācija MCP4725 DAC
- Nepieciešamās sastāvdaļas
- Ķēdes shēma
- DAC Arduino programmēšana
- Digital to Analog Conversion izmantojot MCP4725 un Arduino
Mēs visi zinām, ka mikrokontrolleri darbojas tikai ar digitālajām vērtībām, bet reālajā pasaulē mums ir jārisina analogie signāli. Tāpēc ADC (Analog to Digital Converter) ir paredzēts, lai reālās pasaules analogās vērtības pārveidotu digitālā formā, lai mikrokontrolleri varētu apstrādāt signālus. Bet ko tad, ja mums ir nepieciešami analogie signāli no digitālajām vērtībām, tāpēc šeit parādās DAC (Digital to Analog Converter).
Vienkāršs pārveidotāja Digital to Analog pārveidotāja piemērs ir dziesmas ierakstīšana studijā, kur mākslinieks dziedātājs izmanto mikrofonu un dzied dziesmu. Šie analogie skaņas viļņi tiek pārveidoti digitālā formā un pēc tam saglabāti digitālā formāta failā, un, kad dziesma tiek atskaņota, izmantojot saglabāto digitālo failu, šīs digitālās vērtības tiek pārveidotas par analogiem signāliem skaļruņu izejai. Tātad šajā sistēmā tiek izmantots DAC.
DAC var izmantot daudzās lietojumprogrammās, piemēram, motora vadībā, LED apgaismojuma vadības spilgtumā, audio pastiprinātājā, video kodētājos, datu iegūšanas sistēmās utt.
Daudzos mikrokontrolleros ir iekšējs DAC, ko var izmantot analogās izejas ražošanai. Bet tādiem Arduino procesoriem kā ATmega328 / ATmega168 nav iebūvēts DAC. Arduino ir ADC funkcija (Analog to Digital Converter), bet tai nav DAC (Digital to Analog Converter). Iekšējā ADC ir 10 bitu DAC, taču šo DAC nevar izmantot kā atsevišķu. Tāpēc šeit, šajā Arduino DAC apmācībā, mēs izmantojam papildu plāksni ar nosaukumu MCP4725 DAC modulis ar Arduino.
MCP4725 DAC modulis (digitālais uz analogo pārveidotāju)
MCP4725 IC ir 12 bitu digitālā analogā pārveidotāja modulis, ko izmanto, lai ģenerētu izejas analogo spriegumu no (0 līdz 5 V), un to kontrolē, izmantojot I2C sakarus. Tas arī nāk ar iebūvētu nepastāvīgo atmiņu EEPROM.
Šim IC ir 12 bitu izšķirtspēja. Tas nozīmē, ka mēs izmantojam (0 līdz 4096) kā ievadi, lai nodrošinātu izejas spriegumu attiecībā pret atsauces spriegumu. Maksimālais standartspriegums ir 5V.
Formula izejas sprieguma aprēķināšanai
O / P spriegums = (atsauces spriegums / izšķirtspēja) x digitālā vērtība
Piemēram, ja mēs izmantojam 5V kā atskaites spriegumu un pieņemsim, ka digitālā vērtība ir 2048. Tātad, lai aprēķinātu DAC izeju.
O / P spriegums = (5/4096) x 2048 = 2,5 V
MCP4725 pinout
Zemāk ir MCP4725 attēls ar skaidri norādītiem tapu nosaukumiem.
MCP4725 tapas |
Izmantot |
OUT |
Izejas analogais spriegums |
GND |
GND izejai |
SCL |
I2C sērijveida pulksteņa līnija |
SDA |
I2C sērijas datu līnija |
VCC |
Ieejas atsauces spriegums 5 V vai 3,3 V |
GND |
GND ievadei |
I2C komunikācija MCP4725 DAC
Šo DAC IC var sasaistīt ar jebkuru mikrokontrolleru, izmantojot I2C komunikāciju. I2C komunikācijai nepieciešami tikai divi vadi SCL un SDA. Pēc noklusējuma MCP4725 I2C adrese ir 0x60 vai 0x61 vai 0x62. Man tā 0x61. Izmantojot I2C kopni, mēs varam savienot vairākus MCP4725 DAC IC. Vienīgais ir tas, ka mums ir jāmaina IC I2C adrese. I2C komunikācija Arduino jau ir detalizēti izskaidrota iepriekšējā apmācībā.
Šajā apmācībā mēs savienosim MCP4725 DAC IC ar Arduino Uno un nodrošināsim analogo ieejas vērtību Arduino pin A0, izmantojot potenciometru. Tad ADC tiks izmantota, lai pārveidotu analogo vērtību digitālā formā. Pēc tam šīs digitālās vērtības tiek nosūtītas uz MCP4725 caur I2C kopni, lai tās pārveidotu analogos signālos, izmantojot DAC MCP4725 IC. Arduino tapa A1 tiek izmantota, lai pārbaudītu MCP4725 analogo izeju no tapas OUT un beidzot parādītu gan ADC, gan DAC vērtības, gan spriegumu 16x2 LCD displejā.
Nepieciešamās sastāvdaļas
- Arduino Nano / Arduino Uno
- 16x2 LCD displeja modulis
- MCP4725 DAC IC
- 10k potenciometrs
- Maizes dēlis
- Džemperu vadi
Ķēdes shēma
Zemāk esošajā tabulā parādīts savienojums starp MCP4725 DAC IC, Arduino Nano un daudzmetru
MCP4725 |
Arduino Nano |
Multimetrs |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 vai OUT |
A1 |
+ ve terminālis |
GND |
GND |
-ve terminālis |
VCC |
5V |
NC |
Savienojums starp 16x2 LCD un Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
No potenciometra centra tapas, lai pielāgotu LCD kontrastu |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
Potenciometrs tiek izmantots ar centra pin savienots A0 analog ievadi Arduino Nano, Left pin savienots ar GND un labo visvairāk pin savienots ar 5V no Arduino.
DAC Arduino programmēšana
Pilnīgs Arduino kods DAC apmācībai tiek dots beigās ar demonstrācijas video. Šeit mēs esam izskaidrojuši kodu pa rindām.
Pirmkārt, iekļaujiet bibliotēku I2C un LCD, izmantojot wire.h un liquidcrystal.h bibliotēku.
# iekļaut
Pēc tam definējiet un inicializējiet LCD tapas atbilstoši tapām, kuras esam savienojuši ar Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // Definējiet LCD displeja tapas RS, E, D4, D5, D6, D7
Pēc tam definējiet MCP4725 DAC IC I2C adresi
#define MCP4725 0x61
Tukšajā iestatījumā ()
Vispirms sāciet I2C sakarus ar Arduino Nano tapām A4 (SDA) un A5 (SCL).
Wire.begin (); // Sākas I2C komunikācija
Pēc tam iestatiet LCD displeju 16x2 režīmā un parādiet sveiciena ziņojumu.
lcd.begin (16,2); // LCD iestata 16X2 režīmā lcd.print ("CIRCUIT DIGEST"); kavēšanās (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC ar MCP4725"); kavēšanās (2000); lcd.clear ();
Tukšuma cilpā ()
1. Vispirms buferī ievietojiet kontroles baita vērtību (0b01000000)
(010-komplekts MCP4725 rakstīšanas režīmā)
buferis = 0b01000000;
2. Šis apgalvojums nolasa analogo vērtību no tapas A0 un pārvērš to ciparu vērtībās (0-1023). Arduino ADC ir 10 bitu izšķirtspēja, tāpēc reiziniet to ar 4: 0-4096, jo DAC ir 12 bitu izšķirtspēja.
adc = analogRead (A0) * 4;
3. Šim apgalvojumam jāatrod spriegums no ADC ieejas vērtības (no 0 līdz 4096) un atskaites spriegums kā 5V
pludiņš ipvolt = (5,0 / 4096,0) * adc;
4. Zem pirmās rindas vissvarīgākās bitu vērtības ievieto buferī, 4 bitus novirzot pa labi ADC mainīgajā, bet otrajā rindiņā vismazāk bitu vērtības tiek ievietotas buferī, 4 bitus novirzot pa kreisi ADC mainīgajā.
buferis = adc >> 4; buferis = adc << 4;
5. Šis paziņojums nolasa analogo spriegumu no A1, kas ir DAC izeja (MCP4725 DAC IC OUTPUT pin). Šo tapu var arī savienot ar multimetru, lai pārbaudītu izejas spriegumu. Uzziniet, kā izmantot multimetru šeit.
neparakstīts int analogais = analogRead (A1) * 4;
6. Tālāk sprieguma vērtību no mainīgā analogrindas aprēķina, izmantojot tālāk sniegto formulu
pludiņš opvolt = (5,0 / 4096,0) * analogais lasījums;
7. Šis paziņojums tiek izmantots, lai sāktu pārsūtīšanu ar MCP4725
Wire.beginTransmission (MCP4725);
Nosūta vadības baitu uz I2C
Wire.write (buferis);
Nosūta MSB uz I2C
Wire.write (buferis);
Nosūta LSB uz I2C
Wire.write (buferis);
Beidz pārraidi
Wire.endTransmission ();
Tagad beidzot parādiet šos rezultātus LCD 16x2 displejā, izmantojot 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 (analogais); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); kavēšanās (500); lcd.clear ();
Digital to Analog Conversion izmantojot MCP4725 un Arduino
Pabeidzot visus ķēdes savienojumus un augšupielādējot kodu Arduino, mainiet potenciometru un skatieties izeju uz LCD . Pirmajā LCD rindiņā tiks parādīta ieejas ADC vērtība un spriegums, bet otrajā - izejas DAC vērtība un spriegums.
Varat arī pārbaudīt izejas spriegumu, savienojot multimetru ar MCP4725 OUT un GND tapām.
Šādi mēs varam pārveidot digitālās vērtības analogās, sasaistot DAC moduli MCP4725 ar Arduino.