آموزش راه اندازی ماژول مبدل دیجیتال به آنالوگ MCP4725 با آردوینو

راه‌ اندازی ماژول مبدل دیجیتال‌ به آنالوگ MCP4725 با آردوینو

در این آموزش تصمیم داریم نحوه راه اندازی ماژول مبدل دیجیتال به آنالوگ MCP4725 را با آردوینو برای شما دانش‌پژوهان عزیز بیان کنیم.

لازم است بدانید که میکروکنترلرها فقط با مقادیر دیجیتال کار می‌کنند اما در دنیای ‌واقعی، ما نیاز به ایجاد ارتباط توسط سیگنال‌های آنالوگ، خواهیم ‌داشت. به همین دلیل در تمامی میکروکنترلرها واحد ADC (مبدل آنالوگ به دیجیتال)، برای تبدیل مقادیر آنالوگ دنیای‌ واقعی به مقادیر دیجیتال تعبیه‌شده‌ تا بتوانند تمام سیگنال‌ها را پردازش ‌کنند. اما تصور کنید در پروژه‌ای، اگر به تبدیل مقادیر دیجیتال به سیگنال‌های آنالوگ یا به عبارت دیگر به واحد DAC (مبدل دیجیتال به آنالوگ) نیازداشته ‌باشیم، چه می‌شود؟ اگر به دنبال پاسخ این سوال هستید تا پایان این آموزش با ما همراه باشید.

راهکار این موضوع استفاده از یک مبدل دیجیتال به آنالوگ است. یک مثال ساده از کاربرد این قطعه، ضبط آهنگ در استودیو است که در آن خواننده با استفاده از میکروفن، آهنگی را می‌خواند و سپس این امواج‌ صوتی ‌آنالوگ به مقادیر دیجیتال تبدیل ‌شده و در آخر در یک فایل با فرمت ‌دیجیتال ذخیره ‌می‌شوند. هنگامی که این آهنگ پخش می‌شود، مقادیر دیجیتال به سیگنال‌های آنالوگ تبدیل و از طریق بلندگو پخش می‌شوند. بنابراین به آسانی می‌توان تشخیص داد که در این سیستم پخش صدا از یک DAC (مبدل دیجیتال به آنالوگ) استفاده می‌شود. امروزه از مبدل‌های دیجیتال به آنالوگ در پروژه‌های بسیاری مانند کنترل موتور، روشنایی چراغ‌های ال‌ای‌دی، تقویت کننده‌های صوتی، انکودرهای ویدئویی، سیستم‌های جمع‌آوری‌ داده ، MP3 و … استفاده‌ می‌شود.

تعریف واحد DAC در ماژول آردوینو

در بسیاری از میکروکنترلرها، یک واحد DAC داخلی وجود دارد که می‌توان از آن برای تولید خروجی آنالوگ استفاده‌ کرد. اما میکروکنترلرهای استفاده‌شده در ماژول‌های آردوینو مانند ATmega328/ATmega168 فاقد DAC داخلی هستند. البته در همه‌ی این‌ آردوینوها یک واحد ADC داخلی وجود دارد که دارای یک DAC ده‌ بیتی درساختار خود هستند، اما این DAC نمی‌تواند به‌ صورت مستقل استفاده ‌شود و زمانی ما با مشکل رو به رو می‌شویم که در پروژه خود نیاز داشته باشیم توسط آردوینو دستورات خود را روی قطعاتی با ورودی آنالوگ اجرا کنیم، بنابراین لازم است یک واحد DAC مستقل در آردوینو تعریف کنیم .

و ما برای تعریف این واحد و اجرای دستورات در آردوینو نیاز به یک مبدل دیجیتال به آنالوگ داریم در ادامه با اتصال ماژول مبدل دیجیتال به آنالوگ MCP4725 به آردوینو، یک واحد DAC مستقل برای آن تعریف ‌کنیم.

معرفی ماژول مبدل دیجیتال به آنالوگ MCP4725

ماژول MCP4725، یک مبدل دیجیتال به آنالوگ 12بیتی است و کاربرد آن برای تولید ولتاژ ‌خروجی‌‍ آنالوگ در بازه‌ی 0 تا 5 ولت می‌باشد. این ماژول دارای یک تراشه‌ی حافظه‌ غیرفرار EEPROM می‌باشد و از طریق رابط I2C با آردوینو ارتباط برقرار می‌کند.

تراشه MCP4725 دارای رزولوشن 12 بیتی است، بدین معنا ه این معنا که با دریافت یک مقدار از 0 تا 4096 در ورودی، با توجه به ولتاژ مرجع یک ولتاژ آنالوگ در خروجی میسازد. (ولتاژ مرجع حداکثر میتواند 5 ولت باشد)

نحوه‌ی محاسبه‌ی ولتاژ خروجی

برای محاسبه میزان ولتاژی که قصد دارید در خروجی این ماژول مبدل دریافت کنید با توجه به میزان ولتاژ ورودی یا تغذیه و همچنین مقدار دیجیتال، بایستی از فرمول زیر استفاده نمایید:

O/P Voltage = (Reference Voltage / Resolution) x Digital Value

به عنوان مثال: اگر مقدار دیجیتال را 2048 و ولتاژ مرجع را 5 ولت فرض ‌کنیم، برای محاسبه خروجی DAC خواهیم داشت:

O/P Voltage = (5/ 4096) x 2048 = 2.5V

پین‌های ماژول MCP4725

درادامه تصویری از ماژول MCP4725 را مشاهده می‌کنید که درآن نام هر یک از پایه‌های ماژول به وضوح نشان داده ‌شده‌است:

پین‌های ماژول MCP4725

‌درجدول زیر، ‌عملکرد هر پین به ‌طور خلاصه بیان ‌شده‌است:

پایه‌های MCP4725کاربرد
OUTولتاژ خروجی آنالوگ
GNDGND خروجی
SCLکلاک سریال ارتباط I2C
SDAداده‌ی سریال ارتباط I2C
VCCولتاژ مرجع ورودی 5 یا 3.3 ولت
GNDGND ورودی

استفاده از رابط I2C در ماژول MCP4725

این آی سی مبدل آنالوگ به دیجیتال را می‌توانید با استفاده از ارتباط I2C به هر میکروکنترلری متصل‌ نمایید. ارتباط I2C، فقط به دو سیم کلاک (SCL) و دیتا (SDA) نیاز دارد و می‌توانید از طریق ‌آن، چندین تراشه MCP4725 را به آردوینو متصل‌ نمایید. فقط در نظر داشته ‌باشید که در ‌این‌ حالت می‌بایست آدرس I2C تراشه‌ها را تغییر دهید زیرا به صورت پیش ‌فرض آدرس I2C تراشه MCP4725 معادل 0X60 ،0X61 یا 0X62 می‌باشد.

شکل امواج در ارسال سیگنال‌های دیجیتال از آردوینو توسط کلاک و دیتای I2C به مبدل دیجیتال به آنالوگ

راه اندازی ماژول مبدل دیجیتال به آنالوگ MCP4725


در این آموزش، ابتدا ماژول MCP4725 را به آردوینو Uno متصل ‌کرده و با استفاده از یک پتانسیومتر، سیگنال ‌آنالوگ ‌ورودی را به پین ​​A0 آردوینو اعمال‌ می‌نماییم. سپس با به ‌کارگیری واحد ADC آردوینو، سیگنال آنالوگ ورودی را به دیجیتال تبدیل می‌کنیم. این مقادیر دیجیتال از طریق رابط I2C، به ماژول MCP4725 ارسال می‌شود تا از طریق واحد DAC تراشه MCP4725 به سیگنال‌های آنالوگ تبدیل ‌شود. برای بررسی خروجی ‌آنالوگ تراشه MCP4725، پین OUT ماژول MCP4725 را به پین A1 آردوینو متصل‌ می‌کنیم و درنهایت، هر دو مقادیر ADC و DAC و ولتاژها را بر روی صفحه ‌نمایش LCD 16×2  نمایش می‌دهیم.

 با یادگیری کامل راه اندازی LCD کاراکتری با ماژول رابط سریال I2C و آردوینو می‌توانید دانش بیشتری در رابطه با نحوه عملکرد و کارایی این ماژول در پروژه‌های گوناگون به ‌دست آورید.

گام اول) تهیه قطعات موردنیاز:

پیش از شروع به اتصالات و راه اندازی ماژول مبدل دیجیتال به آنالوگ MCP4725، ابتدا لازم است اقلامی‌ که در لیست زیر همراه با لینک خرید قرار داده‌شده اند، تهیه و آماده نمایید:

گام دوم) انجام سیم‌بندی و اتصالات

در این بخش می‌توانید مدار راه اندازی ماژول مبدل دیجیتال به آنالوگ MCP4725 را با کمک بررسی شماتیک و جداول آماده شده در ادامه، کامل نمایید.

شماتیک نحوه سیم‌کشی مدار راه اندازی مبدل دیجیتال به آنالوگ MCP4725 با آردوینو
  • اگر می‌خواهید مقادیر ولتاژ خروجی ماژول را بر روی مولتی‌متر نمایش‌دهید، طیق جدول زیر اتصالات را برقرارنمایید.
MCP4725Arduino NanoMultimeter
SDAA4NC
SCLA5NC
A0 or OUTA1+ve terminal
GNDGND-ve terminal
VCC5VNC
  • برای اتصال آردوینو NANO به یک ال‌سی‌دی کاراکتری، طبق جدول زیر ماژول‌ها را به یکدیگر متصل ‌نمایید.
LCD 16×2Arduino Nano
VSSGND
VDD5V+
V0From Potentiometer Centre Pin to adjust contrast of LCD
RSD2
RWGND
ED3
D4D4
D5D5
D6D6
D7D7
A5V+
KGND


برای اتصال پتانسیومتر، پین وسط آن را به ورودی آنالوگ A0 آردوینو متصل ‌کرده و دو پین دیگر را به پین GND و 5 ولت آردوینو متصل ‌نمایید.

اتمام مرحله پایانی اتصالات مدار

گام سوم) آپلود کد در آردوینو:

در این قسمت ابتدا کد کامل آردوینو برای راه اندازی ماژول مبدل دیجیتال به آنالوگ MCP4725 آورده ‌شده‌ است که در ادامه به توضیح آن خواهیم پرداخت:

#include<Wire.h>                   //Include Wire library for using I2C functions 

#include <LiquidCrystal.h>         //Include LCD library for using LCD display functions 


#define MCP4725 0x61              //MCP4725 address as 0x61 Change yours accordingly

LiquidCrystal lcd(2,3,4,5,6,7);   //Define LCD display pins RS,E,D4,D5,D6,D7

 

unsigned int adc;

byte buffer[3];                   


void setup() 

{

  Wire.begin();                    //Begins the I2C communication

  lcd.begin(16,2);                 //Sets LCD in 16X2 Mode

  lcd.print("CIRCUIT DIGEST");   

  delay(1000);

  lcd.clear();

  lcd.setCursor(0,0);

  lcd.print("Arduino");

  lcd.setCursor(0,1);

  lcd.print("DAC with MCP4725");

  delay(2000);

  lcd.clear();

  


}


void loop() 


{

  buffer[0] = 0b01000000;            //Sets the buffer0 with control byte (010-Sets in Write mode)

  adc = analogRead(A0) * 4;          //Read Analog value from pin A0 and convert into digital (0-1023) multiply with 4 gives (0-4096)

  

  float ipvolt = (5.0/4096.0)* adc;  //Finding voltage formula (A0)

  buffer[1] = adc >> 4;              //Puts the most significant bit values

  buffer[2] = adc << 4;              //Puts the Least significant bit values

  

 

  unsigned int analogread = analogRead(A1)*4 ; //Reads analog voltage from A1

  

  float opvolt = (5.0/4096.0)* analogread; //Finding Voltage Formula (A1)

  

  Wire.beginTransmission(MCP4725);         //Joins I2C bus with MCP4725 with 0x61 address

  

  Wire.write(buffer[0]);            //Sends the control byte to I2C 

  Wire.write(buffer[1]);            //Sends the MSB to I2C 

  Wire.write(buffer[2]);            //Sends the LSB to I2C

  

  Wire.endTransmission();           //Ends the transmission


  lcd.setCursor(0,0);     

  lcd.print("A IP:");

  lcd.print(adc);                   //Prints the ADC value from A0

  lcd.setCursor(10,0);

  lcd.print("V:");                  //Prints the Input Voltage at A0

  lcd.print(ipvolt);

  lcd.setCursor(0,1);

  lcd.print("D OP:");

  lcd.print(analogread);             //Prints the ADC value from A1 (From DAC)

  lcd.setCursor(10,1);

  lcd.print("V:");

  lcd.print(opvolt);                 //Prints the Input Voltage at A1 (From DAC)

   

  delay(500);

  lcd.clear();

}

توضیحات کد:

  • ابتدا کتابخانه‌های I2C و LCD را به برنامه اضافه‌‌می‌کنیم:
#include<Wire.h>            
#include <LiquidCrystal.h>
  • سپس پین‌های ال‌سی‌دی را با توجه به این ‌که به ‌کدام یک ازپین‌های آردوینو ‌نانو متصل‌ کردیم، تعریف و مقداردهی اولیه ‌می‌شود:
LiquidCrystal lcd(2,3,4,5,6,7); //Define LCD display pins RS,E,D4,D5,D6,D7
  • سپس آدرس I2C  تراشه MCP4725 را تعریف‌ می‌کنیم:
#define MCP4725 0x61
در تابع ()Setup:
  • ابتدا ارتباط I2C را با دستور زیر در پین‌های A4 و A5 آردوینو نانو آغاز‌ می‌کنیم.
Wire.begin();       //Begins the I2C communication

  • صفحه‌نمایش ال‌سی‌دی را درحالت 2*16 تنظیم‌ و یک پیام خوش‌آمدگویی بر روی ان نمایش می‌دهیم.
lcd.begin(16,2);               //Sets LCD in 16X2 Mode
lcd.print("CIRCUIT DIGEST");   
  delay(1000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Arduino");
  lcd.setCursor(0,1);  
  lcd.print("DAC with MCP4725");
  delay(2000);
  lcd.clear();    
در تابع ()loop :

1.ابتدا در Bufer[0] مقدار بایت ‌کنترلی را به 0b01000000 تنظیم می‌کنیم. با این تنظیمات تراشه MCP4725 را در مد نوشتن قرار می‌گیرد.

buffer[0] = 0b01000000;         

2. عبارت زیر، مقدارآنالوگ را از پین A0 ماژول MCP4725 می‌خواند و به مقادیردیجیتال در بازه‌ی (0-1023) تبدیل ‌می‌کند. از آن‌جایی‌که رزولوشن ADC در آردوینو 10بیتی است و رزولوشن این آی‌سی 12بیتی و دربازه‌ی (0-4096) می‌باشد، می‌بایست در عدد 4 ضرب ‌شود.

adc = analogRead(A0) * 4;       

3. با عبارت زیر، مقدار ولتاژ بر اساس مقدار ADC ورودی در بازه‌ی (0-4096) و به ازای ولتاژ‌ مرجع 5 ولت محاسبه می‌شود.

float ipvolt = (5.0/4096.0)* adc; 

4. در خط اول با جابه‌جایی (شیفت دادن) 4 بیت متغیر ADC به سمت‌ راست، مقادیر باارزش‌ترین بیت در Buffer[1] قرار‌می‌دهیم و در خط دوم با جابه‌جایی 4 بیت متغیر ADC به سمت‌چپ، مقادیر کم‌ ارزش‌ترین بیت را در  Buffer[2] قرارمی‌دهیم.

buffer[1] = adc >> 4;              
buffer[2] = adc << 4;    

 5. عبارت زیر ولتاژ آنالوگ را از پین A1 آردوینو می‌خواند، این پین درواقع همان خروجی آنالوگ ماژول DAC MCP4725 می‌باشد که می‌توانید آن را به مولتی‌متر نیز متصل‌ کرده و ولتاژخروجی را بررسی ‌کنید.

unsigned int analogread = analogRead(A1)*4 ;  

6. بیشترین مقدار ولتاژ آنالوگ‌ متغیر، با استفاده از فرمول زیر محاسبه‌ می‌شود:

 float opvolt = (5.0/4096.0)* analogread;

7. عبارت زیر برای شروع انتقال داده به وسیله‌ی ماژول MCP4725 استفاده ‌می‌شود.

Wire.beginTransmission(MCP4725); 

 8. عبارت زیر بایت ‌کنترلی را به I2C ارسال می‌کند.

Wire.write(buffer[0]); 

9. بیت MSB یا پرارزش‌ترین بیت را به I2C می‌فرستد.

Wire.write(buffer[1]); 

10. بیت LSB یا کم‌ ارزش‌ترین بیت را به I2C می‌فرستد.

Wire.write(buffer[2]); 

11. دستور زیر نیز، تبادل اطلاعات را پایان‌می‌دهد.

Wire.endTransmission();

12. درنهایت می‌توانید بااستفاده از تابع ()lcd.print، نتایج را برروی صفحه‌نمایش LCD 16×2 نمایش‌دهید.

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(analogread);   
  lcd.setCursor(10,1);
  lcd.print("V:");
  lcd.print(opvolt);         
  delay(500);
  lcd.clear();    

گام آخر) تبدیل مقادیر دیجتال به آنالوگ با ماژول MCP4725 و آردوینو

پس از برقراری اتصالات و آپلود کد بر روی آردوینو، پتانسومتر را تغییردهید و نتایج‌ خروجی را بر روی ال‌سی‌دی تماشا کنید. در خط اول ال‌سی‌دی، مقدار ADC ورودی و ولتاژ آنالوگ نمایش‌ داده می‌شود و در خط دوم، مقادیر DAC و ولتاژ خروجی نمایش داده می‌شود.

البته شما می‌توانید، ولتاژ خروجی را با اتصال مولتی‌متر به پین OUT و GND ماژول MCP4725 نیز بررسی ‌نمایید.

تست ولتاژ خروجی مدار توسط مولتی‌متر

به ‌این‌ ترتیب توانستیم با اتصال ماژول DAC MCP4725 به آردوینو، مقادیردیجیتال را به سیگنال‌های آنالوگ تبدیل ‌کنیم.

سخن آخر

امیدواریم با یادگیری کامل نحوه راه اندازی ماژول مبدل دیجیتال به آنالوگ MCP4725 در این آموزش، توانایی استفاده از این ماژول را در پروژه‌های گوناگون خود به‌دست آورده باشید. چنانچه هنگام یادگیری و پیاده‌سازی این مطلب دچار مشکل شده‌ و سؤالی ذهن شما را درگیر کرده، می‌توانید تنها با ارسال پرسش خود در بخش دیدگاه همین صفحه، برای تیم کارشناس آکادمی روبوایکیو راه‌حل خود را در اسرع زمان از ما دریافت نمایید.

مقالات مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.
You need to agree with the terms to proceed

پر بازدید ترین مقالات