راه اندازی ای سی دیجیتال به انالوگ (DAC) با آردوینو

در این اموزش قصد تولید شکل موج سینوسی و ولتاژ DC توسط ای سی های مبدل دیجیتال به انالوگ با رابط SPI و I2C توسط اردوینو را داریم.در این اموزش نحوه راه اندازی ای سی های DAC مدل MCP4921 و MCP4725 توسط اردوینو را شرح می دهیم.

برای تولید شکل موج دلخواه (سینوسی – مثلثی و …) یا پالس مربعی مدارات انالوگی , ای سی و ماژولهای زیادی وجود دارد و همچنین قادر به تولید سیگنال بصورت مستقیم با میکروکنترلر نیز می باشیم (روش PWM یا استفاده از تایمر برای تولید پالس).

اما در صورت نیاز به تولید سیگنال با فرکانس پایین استفاده از ای سی های DAC مقرون به صرفه بوده و همچنین دارای مزایای زیر می باشد:

تولید ولتاژ DC دلخواه بدون نیاز به مدارات جانبی و تغییر ولتاژ مورد نظر بصورت نرم افزاری.

تولید سیگنال دلخواه با هر پترنی بدون نیاز به مدارات جانبی (در روش PWM نیاز به فیلتر پایین گذر برای بازسازی شکل موج سینوسی می باشد).

تولید سیگنال با کیفیت و پایدار نسبت به مدارات انالوگی (مولد موج سینوسی پل وین یا دیگر اسیلاتورها .تلرانس قطعات جانبی مثل خازن , سلف و تغییر ظرفیت این قطعات تحت شرایط محیطی و … ) و همچنین تولید سیگنال تمیز تر نسبت به روش PWM

عدم نیاز به فیلتر پایین گذر و مدارات جانبی برای تولید سیگنال با فرکانس های مختلف(در روش تولید سیگنال سینوسی توسط  PWM نیاز به تغییر خازن یا مقاومت فیلتر متناسب با فرکانسی اعمالی می باشد.)

افت نکردن دامنه سیگنال خروجی در فرکانس های مختلف.(افت دامنه سیگنال با افزایش فرکانس در ای سی AD9833)

درگیر کردن کمتر پردازنده میکروکنترلر در صورت مقایسه با تولید سیگنال  بصورت مستقیم با میکروکنترلر (در صورتی که میکروکنترلر دارای DMA باشد)

معایب: در صورت نیاز به تولید سیگنال فرکانس بالاتر نیاز به DAC های گرون تر می باشد و همچنین سرعت اینترفیس بین میکروکنترلر و مبدل در تولید سیگنال فرکانس بالا تاثیر گذار و مهم خواهد بود.

در این اموزش قصد راه اندازی MCP4921 با رابط SPI و همچنین MCP4725 با رابط I2C توسط اردوینو را داریم:

از لینک زیر

https://github.com/michd/Arduino-MCP492X

و لینک

https://github.com/RobTillaart/MCP4725

کتابخانه های مربوطه را دانلود می کنیم.

 

بعد از دانلود کتابخانه ها فایلهای فشرده را باز کرده و محتویات داخل ان را درون پوشه کتابخانه های اردوینو کپی می کنیم:

و همچنین برای MCP492X

مسیر نصب کتابخانه های اردوینو در Documents\Arduino می باشد.

در داخل برنامه اردوینو ابتدا کتابخانه I2C و کتابخانه های مبدلها را فراخوانی می نماییم:

#include "Wire.h"
#include "MCP492X.h"
#include "MCP4725.h"

MCP492X spiDac(10);

ایجاد شئی از کلاس MCP492 و مشخص کردن پایه chip select (CS) متصل به اردوینو

MCP4725 i2cDac(0x62,&Wire);	

ایجاد شئی از کلاس MCP4725 و مشخص کردن ادرس i2c مبدل و دادن  شئی کتابخانه Wire به ان

byte pos = 0;

متغییر pos برای جابجایی بین خانه های ارایه sine استفاده می شود.

byte sine[256] = {
  131 , 134 , 137 , 140 , 144 , 147 , 150 , 153 , 156 , 159 , 162 , 165 , 168 , 171 , 174 , 177 ,
  180 , 183 , 185 , 188 , 191 , 194 , 196 , 199 , 201 , 204 , 206 , 209 , 211 , 214 , 216 , 218 ,
  220 , 222 , 225 , 227 , 229 , 230 , 232 , 234 , 236 , 237 , 239 , 240 , 242 , 243 , 245 , 246 ,
  247 , 248 , 249 , 250 , 251 , 252 , 252 , 253 , 254 , 254 , 255 , 255 , 255 , 255 , 255 , 255 ,
  255 , 255 , 255 , 255 , 255 , 254 , 254 , 253 , 252 , 252 , 251 , 250 , 249 , 248 , 247 , 246 ,
  245 , 243 , 242 , 240 , 239 , 237 , 236 , 234 , 232 , 230 , 229 , 227 , 225 , 222 , 220 , 218 ,
  216 , 214 , 211 , 209 , 206 , 204 , 201 , 199 , 196 , 194 , 191 , 188 , 185 , 183 , 180 , 177 ,
  174 , 171 , 168 , 165 , 162 , 159 , 156 , 153 , 150 , 147 , 144 , 140 , 137 , 134 , 131 , 128 ,
  125 , 122 , 119 , 116 , 112 , 109 , 106 , 103 , 100 , 97  , 94  , 91  , 88  , 85  , 82  , 79  ,
  76  , 73  , 71  , 68  , 65  , 62  , 60  , 57  , 55  , 52  , 50  , 47  , 45  , 42  , 40  , 38  ,
  36  , 34  , 31  , 29  , 27  , 26  , 24  , 22  , 20  , 19  , 17  , 16  , 14  , 13  , 11  , 10  ,
  9   , 8   , 7   , 6   , 5   , 4   , 4   , 3   , 2   , 2   , 1   , 1   , 1   , 1   , 1   , 1   ,
  1   , 1   , 1   , 1   , 1   , 2   , 2   , 3   , 4   , 4   , 5   , 6   , 7   , 8   , 9   , 10  ,
  11  , 13  , 14  , 16  , 17  , 19  , 20  , 22  , 24  , 26  , 27  , 29  , 31  , 34  , 36  , 38  ,
  40  , 42  , 45  , 47  , 50  , 52  , 55  , 57  , 60  , 62  , 65  , 68  , 71  , 73  , 76  , 79  ,
  82  , 85  , 88  , 91  , 94  , 97  , 100 , 103 , 106 , 109 , 112 , 116 , 119 , 122 , 125 , 128
};

برای تولید سیگنال سینوسی باید یکسری مقادیر که بیانگر مقدار min و max دامنه و مقادیر بین ان است به مبدل DAC طبق بازه زمانی خاص انتقال داده شود.

void setup() {

  spiDac.begin();

  i2cDac.begin();

اماده سازی ای سی های مبدل با صدا زدن تابع begin

  i2cDac.setMaxVoltage(5.0);

تعیین حداکثر ولتاژ تولیدی ای سی با رابط i2c با توجه به ولتاژ اعمالی به تغذیه ای سی

//0 to 4095
  spiDac.analogWrite(0);

چون ای سی های مبدل از نوع 12 بیتی می باشند پس از عدد 0 تا 4095 می توانیم توابع مربوطه را مقداردهی نماییم.که در اینجا با قرار دادن عدد 0 ولتاژ صفر ولت روی پایه خروجی و همچنین با قرار دادن عدد 4095 با توجه به ولتاژ تغذیه ای سی حداکثر ولتاژ روی پایه خروجی تولید می شود. اگر ولتاژ تغذیه ای سی را برابر 5 ولت قرار دهیم با قرار دادن عدد 4095 ولتاژ 5 ولت روی پایه خروجی تولید می شود.

//0 to 4095
  i2cDac.setValue(2048);
  
}

از لینک زیر می توانید برنامه تست و فایل شبیه سازی را دانلود نمایید:

دانلود فایل

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

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

گیل الکترونیک
سبد خرید
empty basket

هیچ محصولی در سبد خرید نیست.