- MCP4725 DAC Module (ตัวแปลงดิจิตอลเป็นอนาล็อก)
- การสื่อสาร I2C ใน MCP4725 DAC
- ส่วนประกอบที่จำเป็น
- แผนภูมิวงจรรวม
- การเขียนโปรแกรม DAC Arduino
- การแปลงดิจิตอลเป็นอนาล็อกโดยใช้ MCP4725 และ Arduino
เราทุกคนรู้ดีว่าไมโครคอนโทรลเลอร์ทำงานกับค่าดิจิทัลเท่านั้น แต่ในโลกแห่งความเป็นจริงเราต้องจัดการกับสัญญาณอนาล็อก นั่นเป็นเหตุผลว่าทำไมADC (ตัวแปลงอนาล็อกเป็นดิจิตอล)จึงมีการแปลงค่าอนาล็อกในโลกแห่งความเป็นจริงให้อยู่ในรูปแบบดิจิตอลเพื่อให้ไมโครคอนโทรลเลอร์สามารถประมวลผลสัญญาณ แต่ถ้าเราต้องการสัญญาณอนาล็อกจากค่าดิจิทัลดังนั้นDAC (Digital to Analog Converter)จึงมาที่นี่
ตัวอย่างง่ายๆสำหรับตัวแปลงดิจิตอลเป็นอนาล็อกคือการบันทึกเพลงในสตูดิโอที่ศิลปินนักร้องใช้ไมโครโฟนและร้องเพลง คลื่นเสียงอะนาล็อกเหล่านี้จะถูกแปลงเป็นรูปแบบดิจิทัลแล้วจัดเก็บไว้ในไฟล์รูปแบบดิจิทัลและเมื่อเล่นเพลงโดยใช้ไฟล์ดิจิทัลที่จัดเก็บไว้ค่าดิจิทัลเหล่านั้นจะถูกแปลงเป็นสัญญาณอนาล็อกสำหรับเอาต์พุตของลำโพง ดังนั้นในระบบนี้จึงใช้ DAC
DAC สามารถใช้กับแอพพลิเคชั่นมากมายเช่นการควบคุมมอเตอร์, การควบคุมความสว่างของไฟ LED, เครื่องขยายเสียง, ตัวเข้ารหัสวิดีโอ, ระบบการเก็บข้อมูลเป็นต้น
ในไมโครคอนโทรลเลอร์หลายตัวมี DAC ภายในที่สามารถใช้เพื่อสร้างเอาต์พุตแบบอะนาล็อก แต่โปรเซสเซอร์ Arduino เช่น ATmega328 / ATmega168 ไม่มี DAC ในตัว Arduino มีคุณสมบัติ ADC (ตัวแปลงอนาล็อกเป็นดิจิตอล) แต่ไม่มี DAC (ตัวแปลงดิจิตอลเป็นอนาล็อก) มี DAC 10 บิตใน ADC ภายใน แต่ DAC นี้ไม่สามารถใช้เป็นแบบสแตนด์อโลนได้ ดังนั้นในบทช่วยสอน Arduino DAC นี้เราใช้บอร์ดเพิ่มเติมที่เรียกว่าMCP4725 DAC Module กับ Arduino
MCP4725 DAC Module (ตัวแปลงดิจิตอลเป็นอนาล็อก)
MCP4725 IC เป็นโมดูลตัวแปลงสัญญาณดิจิตอลเป็นอนาล็อก 12 บิตซึ่งใช้ในการสร้างแรงดันไฟฟ้าแบบอะนาล็อกเอาต์พุตจาก (0 ถึง 5V) และควบคุมโดยใช้การสื่อสาร I2C นอกจากนี้ยังมาพร้อมกับ EEPROM หน่วยความจำแบบไม่ลบเลือนบนบอร์ด
IC นี้มีความละเอียด 12 บิต ซึ่งหมายความว่าเราใช้ (0 ถึง 4096) เป็นอินพุตเพื่อให้เอาต์พุตแรงดันไฟฟ้าเทียบกับแรงดันอ้างอิง แรงดันอ้างอิงสูงสุดคือ 5V
สูตรคำนวณแรงดันขาออก
แรงดัน O / P = (แรงดันอ้างอิง / ความละเอียด) x ค่าดิจิตอล
ตัวอย่างเช่นถ้าเราใช้ 5V เป็นแรงดันอ้างอิงและสมมติว่าค่าดิจิทัลคือ 2048 ดังนั้นในการคำนวณเอาต์พุต DAC
O / P แรงดันไฟฟ้า = (5/4096) x 2048 = 2.5V
Pinout ของ MCP4725
ด้านล่างนี้เป็นภาพของ MCP4725 พร้อมระบุชื่อพินอย่างชัดเจน
หมุดของ MCP4725 |
ใช้ |
ออก |
เอาต์พุตแรงดันอนาล็อก |
GND |
GND สำหรับเอาต์พุต |
SCL |
สายนาฬิกาอนุกรม I2C |
SDA |
สายข้อมูลอนุกรม I2C |
VCC |
แรงดันอ้างอิงอินพุต 5V หรือ 3.3V |
GND |
GND สำหรับอินพุต |
การสื่อสาร I2C ใน MCP4725 DAC
DAC IC นี้สามารถเชื่อมต่อกับไมโครคอนโทรลเลอร์โดยใช้การสื่อสาร I2C การสื่อสาร I2C ต้องการเพียงสองสาย SCL และ SDA ตามค่าเริ่มต้นที่อยู่ I2C สำหรับ MCP4725 คือ 0x60 หรือ 0x61 หรือ 0x62 สำหรับฉันมันคือ 0x61 การใช้บัส I2C เราสามารถเชื่อมต่อ MCP4725 DAC IC หลายตัว สิ่งเดียวคือเราต้องเปลี่ยนที่อยู่ I2C ของ IC การสื่อสาร I2C ใน Arduino ได้อธิบายรายละเอียดไว้แล้วในบทช่วยสอนก่อนหน้านี้
ในบทช่วยสอนนี้เราจะเชื่อมต่อ MCP4725 DAC IC กับ Arduino Unoและระบุค่าอินพุตแบบอนาล็อกให้กับขา Arduino A0 โดยใช้โพเทนชิออมิเตอร์ จากนั้น ADC จะถูกใช้เพื่อแปลงค่าอนาล็อกเป็นรูปแบบดิจิทัล หลังจากนั้นค่าดิจิทัลเหล่านั้นจะถูกส่งไปยัง MCP4725 ผ่านบัส I2C เพื่อแปลงเป็นสัญญาณแอนะล็อกโดยใช้ DAC MCP4725 IC Arduino pin A1 ใช้เพื่อตรวจสอบเอาต์พุตอะนาล็อกของ MCP4725 จากพิน OUT และสุดท้ายแสดงทั้งค่า ADC & DAC และแรงดันไฟฟ้าในจอ LCD 16x2
ส่วนประกอบที่จำเป็น
- Arduino Nano / Arduino Uno
- โมดูลจอแสดงผล LCD 16x2
- MCP4725 DAC IC
- โพเทนชิออมิเตอร์ 10k
- เขียงหั่นขนม
- สายจัมเปอร์
แผนภูมิวงจรรวม
ตารางด้านล่างแสดงการเชื่อมต่อระหว่าง MCP4725 DAC IC, Arduino Nano และ Multi-meter
MCP4725 |
Arduino นาโน |
มัลติมิเตอร์ |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 หรือ OUT |
A1 |
+ และเทอร์มินัล |
GND |
GND |
-ve ขั้ว |
VCC |
5V |
NC |
การเชื่อมต่อระหว่าง 16x2 LCD และ Arduino Nano
จอแอลซีดี 16x2 |
Arduino นาโน |
VSS |
GND |
VDD |
+ 5V |
V0 |
จาก Potentiometer Center Pin เพื่อปรับความคมชัดของ LCD |
อาร์เอส |
D2 |
RW |
GND |
จ |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
ก |
+ 5V |
เค |
GND |
มิเตอร์จะใช้กับศูนย์ขาเชื่อมต่อกับอินพุต A0 อนาล็อกของ Arduino Nano ขาซ้ายเชื่อมต่อกับ GND และขวาขาส่วนใหญ่เชื่อมต่อกับ 5V ของ Arduino
การเขียนโปรแกรม DAC Arduino
โค้ด Arduino ที่สมบูรณ์สำหรับการสอน DAC จะได้รับในตอนท้ายพร้อมวิดีโอสาธิต ที่นี่เราได้อธิบายโค้ดทีละบรรทัด
อันดับแรก ได้แก่ ห้องสมุดสำหรับ I2C และจอแอลซีดีที่ใช้wire.hและliquidcrystal.hห้องสมุด
# รวม
ถัดไปกำหนดและเริ่มต้นพิน LCD ตามพินที่เราเชื่อมต่อกับ Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // กำหนดพินจอแสดงผล LCD RS, E, D4, D5, D6, D7
จากนั้นกำหนดที่อยู่ I2C ของ MCP4725 DAC IC
# กำหนด MCP4725 0x61
ในการตั้งค่าโมฆะ ()
เริ่มต้นการสื่อสาร I2C ที่พิน A4 (SDA) และ A5 (SCL) ของ Arduino Nano ก่อน
Wire.begin (); // เริ่มต้นการสื่อสาร I2C
ถัดไปตั้งค่าการแสดงผล LCD ในโหมด 16x2 และแสดงข้อความต้อนรับ
lcd.begin (16,2); // ตั้งค่า LCD ในโหมด 16X2 lcd.print ("CIRCUIT DIGEST"); ล่าช้า (1,000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC พร้อม MCP4725"); ล่าช้า (2000); lcd.clear ();
ในโมฆะลูป ()
1.อันดับแรกในบัฟเฟอร์ให้ใส่ค่าไบต์ควบคุม (0b01000000)
(010- ตั้งค่า MCP4725 ในโหมดเขียน)
บัฟเฟอร์ = 0b01000000;
2. คำสั่งต่อไปนี้อ่านค่าอนาล็อกจากพิน A0 และแปลงเป็นค่าดิจิทัล (0-1023) Arduino ADC มีความละเอียด 10 บิตดังนั้นให้คูณด้วย 4 ให้: 0-4096 เนื่องจาก DAC เป็นความละเอียด 12 บิต
adc = analogRead (A0) * 4;
3. คำสั่งนี้เป็นการหาแรงดันไฟฟ้าจากค่าอินพุต ADC (0 ถึง 4096) และแรงดันอ้างอิงเป็น 5V
ลอย ipvolt = (5.0 / 4096.0) * adc;
4. ด้านล่างบรรทัดแรกใส่ค่าบิตที่สำคัญที่สุดในบัฟเฟอร์โดยเลื่อน 4 บิตไปทางขวาในตัวแปร ADC และบรรทัดที่สองใส่ค่าบิตที่มีนัยสำคัญน้อยที่สุดในบัฟเฟอร์โดยเลื่อน 4 บิตไปทางซ้ายในตัวแปร ADC
บัฟเฟอร์ = adc >> 4; บัฟเฟอร์ = adc << 4;
5. ข้อความต่อไปนี้อ่านแรงดันอนาล็อกจาก A1 ซึ่งเป็นเอาต์พุต DAC (ขา OUTPUT ของ MCP4725 DAC IC) พินนี้ยังสามารถเชื่อมต่อกับมัลติมิเตอร์เพื่อตรวจสอบแรงดันไฟฟ้าขาออก เรียนรู้วิธีใช้มัลติมิเตอร์ที่นี่
int analogread ที่ไม่ได้ลงนาม = analogRead (A1) * 4;
6. นอกจากนี้ค่าแรงดันไฟฟ้าจาก แอนะล็อกแบบแปรผัน จะคำนวณโดยใช้สูตรด้านล่าง
ลอย opvolt = (5.0 / 4096.0) * analogread;
7. คำสั่งต่อไปนี้ใช้เพื่อเริ่มต้นการส่งข้อมูลด้วย MCP4725
Wire.beginTransmission (MCP4725);
ส่งไบต์ควบคุมไปยัง I2C
Wire.write (บัฟเฟอร์);
ส่ง MSB ไปยัง I2C
Wire.write (บัฟเฟอร์);
ส่ง LSB ไปยัง I2C
Wire.write (บัฟเฟอร์);
สิ้นสุดการส่งสัญญาณ
Wire.endTransmission ();
ในที่สุดก็แสดงผลลัพธ์เหล่านั้นในจอแสดงผล LCD 16x2 โดยใช้ 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 (อะนาล็อกอ่าน); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); ล่าช้า (500); lcd.clear ();
การแปลงดิจิตอลเป็นอนาล็อกโดยใช้ MCP4725 และ Arduino
หลังจากเสร็จสิ้นการเชื่อมต่อวงจรและอัปโหลดรหัสลงใน Arduino ที่แตกต่างกันไปมิเตอร์และดูเอาท์พุทบนหน้าจอ LCD บรรทัดแรกของ LCD จะแสดงค่า ADC และแรงดันไฟฟ้าเข้าและบรรทัดที่สองจะแสดงค่า DAC และแรงดันเอาต์พุต
คุณยังสามารถตรวจสอบแรงดันไฟฟ้าขาออกได้โดยเชื่อมต่อมัลติมิเตอร์เข้ากับขา OUT และ GND ของ MCP4725
นี่คือวิธีที่เราสามารถแปลงค่าดิจิตอลเป็นอะนาล็อกโดยการเชื่อมต่อโมดูล DAC MCP4725 กับ Arduino