U BOARD ir.

ورود به حساب کاربری
مرا بخاطر بسپار
گذرواژه را فراموش کرده اید؟
هنوز ثبت نام نکرده اید؟ تنها سه گزینه برای ثبت نام ثبت نام

U BOARD ir.

ثبت نام
ثبت نام
لطفا تمامی موارد خواسته شده را تکمیل نمایید لطفا ایمیل معتبر وارد نمایید لطفا گذرواژه را بیشتر از 6 کاراکتر وارد نمایید لطفا گذرواژه را مجددا بیشتر از 6 کاراکتر وارد نمایید
تولید موج سینوسی با AVR و DAC0800

تولید موج سینوسی با AVR و مبدل دیجیتال به آنالوگ DAC0800، معرفی مختصر آی سی DAC0800 و مدار خارجی و اتصالات آن، محاسبۀ ولتاژ خروجی DAC0800، روش تولید سیگنال سینوسی با DAC، رابطۀ فرکانس موج سینوسی خروجی و تایمر، بررسی نمونه کد راه اندازی DAC0800 با AVR

تولید موج سینوسی با AVR و DAC0800
data:image/jpeg;base64,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
رضا بداغی ۹۸/۱۲/۱۰ زمان موردنیاز برای مطالعه ۳۰ دقیقه

تولید موج سینوسی با AVR و DAC0800 تنها نیاز به راه اندازی پورت IO و ایجاد وقفۀ زمانی منظم دارد. به این صورت که با وقفۀ زمانی منظم، اعضای یک آرایه را در رجیستر PORTx قرار می دهیم. پایه های یکی از پورت ها به پایه های ورودی DAC0800 متصل اند. و مقادیر قرار گرفته در رجیستر PORTx، توسط آی سی DAC0800 به آنالوگ تبدیل می شوند. با وقفۀ زمانی منظم که می توانیم آن را با تایمر ایجاد کنیم، مقدار PORTx را تغییر می دهیم. بنابراین سیگنال آنالوگ خروجی تغییر می کند و اگر تغییرات با یک الگوی سینوسی باشد، سیگنال خروجی سینوسی است. در این نوشته به روش ساخت موج سینوسی با میکروکنترلرهای AVR و آی سی DAC0800 می پردازیم. این نوشته می تواند برای این کاربردها مفید باشد:

  • ساخت موج سینوسی سه فاز با AVR و DAC0800؛
  • فانکشن ژنراتور با AVR و DAC0800؛
  • اینورتر سینوسی با AVR و DAC0800؛
  • ساخت موج مثلثی با AVR و DAC0800؛
  • ساخت موج دندانه اره ای با AVR و DAC0800؛
  • و ... .

نمونه کدی را که در این نوشته بررسی می کنیم، در اتمل استودیو (میکروچیپ استودیو) برای میکروکنترلر ATmega64A نوشته ایم. فایل های پروژۀ اتمل استودیو به همراه فایل شبیه سازی نرم افزار پروتئوس در پیوست قرار دارند. این نمونه کد را در نرم افزار کدویژن نیز نوشته و در فایل پیوست قرار داده ایم. در ادامه ابتدا دربارۀ آی سی DAC0800 و خروجی آن صحبت می کنیم. سپس روش تولید موج سینوسی با آن را تشریح و در نهایت نمونه کد نوشته شده را بررسی می کنیم.

تولید-موج-سینوسی-dac

تصویر 1 – تولید موج سینوسی با AVR و DAC0800

 

آی سی DAC0800 و ملزومات راه اندازی آن

پیش از ورود به مبحث تولید موج سینوسی با AVR، ابتدا مختصراً آی سی DAC0800 را بررسی می کنیم. DAC0800 یک مبدل دیجیتال به آنالوگ هشت بیتی است. این DAC می تواند ورودی دیجیتال 8 بیتی را به سیگنال آنالوگ معادل تبدیل کند. خروجی DAC0800 دو جریان Sink در جهت مخالف هم است. که با مقاومت های پول آپ آن را به ولتاژ تبدیل می کنیم. مبدل دیجیتال به آنالوگ DAC0800 دارای 16 پایه است. هشت پایۀ آن برای دادۀ دیجیتال ورودی، دو پایه برای خروجی آنالوگ، دو پایه برای ولتاژهای مرجع، دو پایه برای تغذیۀ آی سی و دو پایه به نام های Threshold Control و Compensation است. پایه های مبدل دیجیتال به آنالوگ DAC0800 را در تصویر زیر می بینید.

پایه-پکیج

تصویر 2 – پایه های آی سی DAC0800

 

با توجه به مدار پیشنهادی دیتاشیت برای راه اندازی DAC0800، اتصالات آن را به صورت زیر برقرار کرده ایم. در این پروژه از ولتاژهای +15 و -15 ولت برای تغذیۀ DAC0800 (پایه های 13 و 3) استفاده کرده ایم. ولتاژ مرجع مثبت (پایۀ 14) و منفی (پایۀ 15) را 5 ولت و صفر در نظر گرفته ایم. این پایه ها را با مقاومت 5 کیلو اهم به 5 ولت و زمین متصل کرده ایم. با دو مقاومت 10 کیلو اهم نیز پایه های خروجی مثبت و منفی (پایه های 4 و 2) را پول آپ کرده ایم. پایه های 5 تا 12 به ترتیب به پایه های PA7 تا PA0 میکروکنترلر متصل می شوند. پایۀ 1 به زمین و پایۀ 16 با خازن 10 نانو فاراد به تغذیۀ منفی متصل می شوند. خازن های 100 نانو فاراد C2 و C3 نیز روی تغذیۀ مثبت قرار می گیرند.

نکته: شمارۀ پایه های ذکر شده بر اساس پکیج DIP این آی سی است.

نکته: خازن C1، سرامیکی و خازن های C2 و C3، الکترولیتی هستند.

مدار-راه-اندازی

تصویر 3 – مدار راه اندازی DAC0800 با AVR

 

محاسبۀ دامنۀ ولتاژ خروجی DAC0800

در دیتاشیت DAC0800 برای محاسبۀ جریان خروجی فرمولی آورده شده است. حداکثر جریانی که خروجی می کشد برابر است با:

Ifs = (Vref/Rref) * (255/256)

 

Ifs به معنای جریان حداکثر پایۀ خروجی است. اگر تمام پایه های دیجیتال ورودی 1 شوند، جریانی که از پایۀ Iout عبور می کند برابر Ifs خواهد بود. اگر تمام ورودی های دیجیتال صفر باشند، جریانی که از Iout بار (پایۀ 2) عبور می کند، برابر Ifs است. زمانی که Iout در ماکزیمم خود است، Iout بار (پایۀ 2) در مینیمم خود است. با توجه به مطالب گفته شده و تصویر زیر داریم:

Ifs4 = - Ifs2
Ifs4 = Ifs
Ifs4 = -Ifs
Ifs = (Vref/Rref) * (255/256)

KVL(*): Vo1 = VCC - R Ifs4 = VCC - R Ifs
KVL(**): Vo2 = VCC - R Ifs2 = VCC + R Ifs

Vout(p-p) = Vo2 - Vo1 = 2R Ifs = 2R (Vref/Rref) * (255/256)

 

جریان های خروجی آی سی از مقاومت های پول آپ روی پایه های 2 و 4، کشیده می شود. بنابراین ولتاژی روی این پایه ها می افتد. در KVL(*) و KVL(**) این ولتاژها را محاسبه کرده ایم. با توجه به مقادیر مقاومت های این پروژه، ولتاژ پیک تو پیک موج سینوسی خروجی برابر است با:

Vout(p-p) = Vo2 - Vo1 = 2 * 10k * (5/5k) * (255/256) = 19.92v

 

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

تصویر 4 – شماتیک برای محاسبۀ ولتاژ خروجی DAC0800

 

می توانیم تنها یکی از خروجی های آی سی را استفاده کنیم. اما در این صورت ولتاژ دارای آفست خواهد بود. برای حذف آفست خروجی و به دست آوردن تفاضل Vo1 و Vo2 می توانیم از تقویت کنندۀ تفاضلی استفاده کنیم. در تصویر زیر یک تقویت کنندۀ تفاضلی که با استفاده از یک اپ امپ ساخته ایم، آمده است. ورودی های این تقویت کنندۀ تفاضلی همان خروجی های آی سی DAC0800 هستند. گین آن نیز با توجه به مقدار مقاومت ها برابر 1 است. بنابراین خروجی آن برابر Vo2 – Vo1 است. زمانی که Vo2 در حداکثر مقدار خود است، Vo1 مینیمم است و بالعکس. پس اگر موج سینوسی روی آنها ایجاد شود، با هم 180 درجه اختلاف فاز خواهند داشت. بنابراین دامنۀ شکل موج حاصل از تفاضل آنها، دو برابر دامنۀ هر یک از آنهاست. در ادامه به تولید موج سینوسی با AVR و DAC0800 می پردازیم.

تقویت-کننده-تفاضلی

تصویر 5 – تقوییت کنندۀ تفاضلی با گین 1 با اپ امپ LM741

 

روش تولید موج سینوسی با AVR و DAC0800

برای کار با مبدل دیجیتال به آنالوگ DAC0800 و راه اندازی آن با میکروکنترلرهای AVR یا هر میکروکنترلر دیگر، باید یک دادۀ 8 بیتی به صورت موازی به پایه های ورودی آن بدهیم. اگر مقادیر صفر تا 255 را به ورودی آن بدهیم، خروجی آن از صفر تا ولتاژ حداکثر تغییر می کند. برای این که موج سینوسی در خروجی داشته باشیم، دادۀ 8 بیتی را باید طبق الگوی سینوسی به آن بدهیم. برای این کار می توانیم از Lookup table سینوسی استفاده کنیم. Lookup tableها را می توانیم از سایت هایی که آنها را تولید می کنند کپی کنیم. این مقادیر، یک Lookup table هشت بیتی 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

 

اگر این مقادیر با تأخیر زمانی منظم به ورودی DAC داده شوند، خروجی آن 256 پله تغییر سطح ولتاژ است. که این 256 پله تغییر سطح ولتاژ، یک شکل موج سینوسی را به وجود می آورد. هر چه تعداد مقادیر Lookup table بیشتر باشد، خروجی بیشتر به موج سینوسی شبیه است. تعداد مقادیر Lookup table در پروژۀ این نوشته را 256 مقدار در نظر گرفته ایم.

خروجی-سینوسی

تصویر 6 – پله های خروجی DAC حاصل از تبدیل مقادیر Lookup table به ولتاژ آنالوگ و تشکیل موج سینوسی

 

محاسبۀ فرکانس موج سینوسی خروجی DAC

برای این که فرکانس موج سینوسی ثابت باشد، مقادیر Lookup table باید در فواصل زمانی ثابت به DAC0800 داده شوند. این فاصلۀ زمانی را با تایمر 1 در AVR خواهیم ساخت. حال می خواهیم رابطۀدورۀ تناوب موج سینوسی را با تعداد پله هایی که تایمر می شمارد به دست آوریم. شکل موج سینوسی خروجی، 256 پله دارد. بنابراین دوره تناوب موج سینوسی که نام آن را T می گذاریم برابر 256 * t است. t همان فاصلۀ زمانی ثابت است که با تایمر 1 ساخته می شود. تایمر را روی مد CTC با مقدار TOP برابر OCR1A تنظیم و وقفۀ مقایسۀ A را نیز فعال می کنیم. در این صورت شمارندۀ تایمر (TCNT1) از صفر تا مقدار رجیستر OCR1A می شمارد و وقفۀ مقایسه اتفاق می افتد. در روتین این وقفه مقادیر Lookup table را در پورت A قرار می دهیم. دوباره تایمر از صفر تا OCR1A می شمارد و وقفۀ مقایسه دوباره اتفاق می افتد. در این هنگام مقدار بعدی Lookup table را در پورت A قرار می دهیم. زمان بین دو وقفۀ تایمر، همان t است. وقتی 256 بار وقفه اتفاق بیفتد، 256 مقدار Lookup table به ترتیب با وقفۀ زمانی t در پورت A قرار می گیرند. در این پروژه مقدار فرکانس کلاک تایمر 1، همان کلاک CPU یعنی 8 مگاهرتز است. به تصویر زیر دقت کنید. مقدار رجیستر OCR1A نسبت به فرکانس موج سینوسی (freq) از فرمول زیر به دست می آید. برای تغییر فرکانس موج سینوسی، OCR1A باید تغییر کند. که با قرار دادن مقدار فرکانس مورد نظر در فرمول، مقدار OCR1A محاسبه می شود.

تایمر 1 و 3 در AVR

T = 1/freq = 256 * t , t = OCR1A * (1/F_CPU)

1/freq = 256 * (OCR1A *(1/F_CPU))

OCR1A = F_CPU / (256 * freq) , F_CPU = 8MHz

OCR1A = 31250/freq

 

رابطه-فرکانس-موج-سینوسی-ocr1a

تصویر 7 – تولید موج سینوسی با AVR و DAC0800، رابطۀ بین فرکانس موج سینوسی و رجیستر OCR1A

 

نمونه کد تولید موج سینوسی با AVR و DAC0800

ابتدا فرکانس CPU را 8 مگاهرتز دیفاین و پس از آن کتابخانه هایی را فراخوانی کرده ایم. در ادامه Lookup table سینوسی را در یک آرایه آورده ایم.

#define F_CPU	8000000UL

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include 
#include "Libs/clcd.h"

unsigned char const_source[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 };

 

روتین وقفۀ مقایسۀ A تایمر 1 را هم به این شکل می نویسیم. هر بار مقدار شمارندۀ تایمر (TCNT1) به مقدار OCR1A برسد، یک وقفۀ مقایسه اتفاق می افتد. و این روتین وقفه اجرا می شود. دفعۀ اول، عضو صفرم آرایۀ const_source در PORTA قرار می گیرد. دفعۀ دوم، عضو یکم آرایه و به همین ترتیب اعضای صفرم تا عضو شمارۀ 255 در PORTA قرار می گیرند. شرط if برای این است که مقدار ph1 از 255 بیشتر نشود و دفعۀ بعد دوباره عضو صفرم آرایه در PORTA قرار بگیرد. پورت A میکروکنترلر به ورودی DAC متصل است و نتیجۀ تداوم این روند، شکل موج سینوسی در خروجی DAC است.

ISR(TIMER1_COMPA_vect)
{
	static unsigned int ph1=0;
	PORTA = const_source[ph1];
	ph1++;
	if(ph1 > 255) ph1 = 0;
}

 

در تابع main ابتدا چند متغیر تعریف کرده و مقدار اولیۀ فرکانس را 10 هرتز قرار داده ایم. مقدار delay_const را که در نهایت در OCR1A قرار می گیرد، طبق فرمول به دست آورده ایم. در سطر بعد پورت A را برای اتصال به DAC و پورت D را برای اتصال به LCD خروجی کرده ایم. به دو پایۀ PE4 و PE5 دو دکمه برای تغییر فرکانس متصل کرده ایم. در اینجا با یک کردن بیت های 4 و 5 رجیستر PORTE، پول آپ داخلی آنها را فعال کرده ایم. در سطرهای بعد تایمر 1 را در مد شمارۀ 4 پیکربندی کرده ایم. مقدار OCR1A آن هم برابر delay_const قرار داده ایم. سپس وقفۀ مقایسۀ تایمر 1 را فعال، LCD را راه اندازی و پرچم کلی وقفه ها را فعال کرده ایم. در LCD نیز مقدار فرکانس اولیه را نمایش داده ایم.

int main(void)
{
	unsigned int delay_const=0;
	unsigned char freq=10;
	char lcd_str[16];
	
	delay_const=(unsigned int) 31250/freq;

	DDRA=0xFF;
	DDRD=0xFF;
	PORTE=(1<<PORTE5) | (1<<PORTE4);

	TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
	TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
	OCR1AH=(delay_const>>8);
	OCR1AL=(delay_const&0xFF);

	TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (1<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);

	lcd_init(16);
	lcd_clear();
	sprintf(lcd_str,"Frequency = %d",freq);
	lcd_puts(lcd_str);
	
	sei();

 

نتیجه-مقدار-اولیه-فرکانس

تصویر 8 – تولید موج سینوسی با AVR، مقدار اولیۀ فرکانس

 

تغییر فرکانس موج سینوسی

برای تولید موج سینوسی با AVR با فرکانس متغیر، دو دکمه به پایه های PE4 و PE5 متصل کرده ایم. با فشردن دکمۀ روی PE5 چون که به صورت داخلی پول آپ است، بیت پنجم رجیستر PINE صفر می شود. بنابراین برنامۀ درون if اول اجرا می شود. فرکانس یک واحد کم می شود و مقدار delay_const با توجه به فرمول به دست می آید. delay_const یک مقدار 16 بیتی است. 8 بیت با ارزش آن را در OCR1AH و 8 بیت کم ارزشش را در OCR1AL قرار داده ایم. در سطرهای بعد محدودۀ 1 تا 100 هرتز برای مقدار فرکانس در نظر گرفته ایم. سپس مقدار فرکانس را در LCD نمایش داده ایم. با فشردن دکمۀ روی PE4، برنامه وارد if دوم می شود و فرکانس یک واحد افزایش می یابد. در اینجا هم مثل if قبلی OCR1A مقداردهی و فرکانس در LCD نمایش داده می شود. وقتی مقدار OCR1A تغییر می کند، تعداد پله های شمارش تایمر و در نتیجه مقدار t هم تغییر می کند. این تغییر در نهایت باعث می شود که فرکانس موج سینوسی تغییر کند. در تصویر زیر موج سینوسی فرکانس متغیر با AVR با فرکانس های 25 هرتز و 70 هرتز آمده است.

نکته: در مقداردهی به رجیسترهای 16 بیتی در AVR دقت شود که اول باید در بایت با ارزش نوشت و سپس در بایت کم ارزش.

پورت IO در AVR

while (1)
{
		
	if(!((PINE & (1<<5)) == (1<<5)))
	{
		_delay_ms(200);
		freq--;
		delay_const=(unsigned int) 31250/freq;
		OCR1AH=(delay_const>>8);
		OCR1AL=(delay_const&0xFF);
		if (freq>100) freq=100;
		if (freq<1) freq=1;
		lcd_clear();
		sprintf(lcd_str,"Frequency = %d",freq);
		lcd_puts(lcd_str);
	}
		
	if(!((PINE & (1<<4)) == (1<<4)))
	{
		_delay_ms(200);
		freq++;
		delay_const=(unsigned int) 31250/freq;
		OCR1AH=(delay_const>>8);
		OCR1AL=(delay_const&0xFF);
		if (freq>100) freq=100;
		if (freq<1) freq=1;
		lcd_clear();
		sprintf(lcd_str,"Frequency = %d",freq);
		lcd_puts(lcd_str);
	}
}

 

نتیجه-تولید-موج-سینوسی

تصویر 9 – نتیجۀ نهایی راه اندازی DAC با AVR و تولید موج سینوسی با AVR و DAC0800

 

نتایج تولید موج سینوسی با AVR و DAC0800

  • 1- در راه اندازی DAC با میکروکنترلرهای AVR یا میکروکنترلرهای دیگر، در صورتی که نوع ارتباط DAC، ارتباط موازی باشد، تنها نیاز است ورودی DAC را به یک پورت میکروکنترلر متصل کنیم و مقادیر دیجیتال را روی آن پورت قرار دهیم.
  • 2- آی سی DAC0800 تعداد 8 پایۀ ورودی دارد که مقادیر دیجیتال را به صورت موازی می گیرد. دو پایۀ خروجی هم دارد که سیگنال های آنالوگ روی آنها قرار می گیرد.
  • 3- ولتاژ خروجی DAC0800 به ولتاژ مرجع، مقاومت روی پایۀ ولتاژ مرجع و مقاومت های پول آپ خروجی بستگی دارد.
  • 4- می توان با یک تقویت کنندۀ تفاضلی دو خروجی DAC0800 را به یک خروجی تبدیل کرد و ولتاژ آفست را حذف کرد.
  • 5- در تولید موج سینوسی با DAC باید مقادیری که توالی آنها الگوی سینوسی دارد، در زمان های منظم به ورودی DAC داده شوند.
  • 6- هر چه تعداد مقادیر Lookup table بیشتر باشد، خروجی DAC به شکل موج مورد نظر شبیه تر است.
  • 7- وقفه های زمانی منظم را می توان به روش های مختلفی ساخت. یکی از این روش ها استفاده از تایمر است.
  • 8- در استفاده از تایمر به روش های مختلفی می توان وقفه های زمانی منظم ایجاد کرد. یکی از این روش ها استفاده از مد CTC تایمر است.
  • 9- در پروژۀ این نوشته، برای تغییر فرکانس کافی است تعداد پلیه های شمارش تایمر تغییر کند. که این کار با تغییر OCR1A صورت گرفته است.
  • 10- فرکانس موج سینوسی خروجی با مقدار OCR رابطۀ عکس دارد. هر چه مقدار OCR کمتر شود، فرکانس موج سینوسی خروجی بیشتر می شود و بالعکس.

 

data:image/jpeg;base64,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
رضا بداغی
کارشناس الکترونیک هواپیمایی، نویسنده و مدیر محتوای یوبرد، طراح و برنامه نویس سیستم های مبتنی بر میکروکنترلر
اگر دیدگاهی دارید میتوانید از طریق فرم زیر دیدگاه خود را در سایت درج کنید.
نویسنده: سید محمد تاریخ: ۲۸ شهریور ۱۴۰۰ ساعت: ۰۴:۴۲:۴۸ ب.ظ
ممنون بابت مطالب آموزشی خوب. AD1866 رو از کجا میتونیم بخریم؟
نویسنده: رضا بداغی تاریخ: ۲۹ شهریور ۱۴۰۰ ساعت: ۱۲:۵۷:۱۴ ب.ظ

خواهش میکنم. زنده باشید. برای خریدش فروشگاه های اینترنتی رو بررسی کنید

نویسنده: امین مزروعی تاریخ: ۲۲ مرداد ۱۴۰۰ ساعت: ۰۹:۲۰:۱۵ ق.ظ
مهندس میشه لطفا مفهوم خط زیر را توضیح بدید: خروجی DAC0800 به صورت جریان Sink است که با استفاده از مقاومت پول آپ به ولتاژ تبدیل می شود
نویسنده: رضا بداغی تاریخ: ۲۳ مرداد ۱۴۰۰ ساعت: ۱۱:۱۱:۵۳ ب.ظ

یعنی این که توی پایه های خروجی، ترانزیستورها open-colector هستند. همون طوری که توی تصویر مدار داخلیش مشخصه. کلکتور ترانزیستورها از داخل به تغذیه متصل نیست. همچنین موقع روشن شدن این ترانزیستورها، جریان به سمت داخله. اگه مقاومت پول آپ از پایۀ خروجی به VCC وصل کنیم، و ترانزیستور یا ترانزیستورها روشن بشن، جریان از VCC خارج از مدار، از مقاومت پول آپ عبور میکنه و وارد پایۀ DAC میشه. در واقع پایۀ خروجی DAC جریان رو میکشه. وقتی که چنین پایۀ خروجی جریان رو بکشه میگیم جریان sink. در مقابل جریان سورس وجود داره. که اگه پایۀ خروجی یه آی سی، جهت جریانش رو به بیرون باشه، بهش میگیم جریان source. حالا با قرار دادن مقاوت میشه این جریان ها رو به ولتاژ تبدیل کرد. توی DAC0800 ولتاژ پایۀ خروجی میشه ولتاژ تغذیه منهای ولتاژی که در اثر جریان sink روی مقاومت میفته. موفق باشید

نویسنده: ناهید تاریخ: ۳۱ تیر ۱۴۰۰ ساعت: ۰۸:۲۲:۵۴ ب.ظ
سلام . کدهای داده شده در کد ویژن وارد کردم کلی error داد که.....!!!!!
نویسنده: رضا بداغی تاریخ: ۱ مرداد ۱۴۰۰ ساعت: ۰۸:۴۶:۰۶ ب.ظ

سلام. توی پیوست پروژۀ کدویژن هست. فایل پیوست رو دانلود کنید. بدون ارور کامپایل کردم. اگه برای شما ارور بده احتمالا کدویژن شما مشکل داره. من از کدویژن نسخۀ 3.12 استفاده می کنم. موفق باشید

نویسنده: سلام مهندس عزيز تاریخ: ۱۴ آذر ۱۳۹۹ ساعت: ۰۲:۰۱:۴۱ ق.ظ

برنامه بالا به زبان بيسيك موجود دارين ٢-اگر برنامه ساده تري با حق الزحمه پرداخت كنيم خدمتتون سريع برام مينويسين فقط با كليدي كم و زياد بشه يا با ورودي adc فركانسش كم وزياد بشه در محدوده هرتز تا ١٠٠ كيلو حداكثر ممنون ميشم سريع بهم خبرشو بدين

نویسنده: رضا بداغی تاریخ: ۱۵ آذر ۱۳۹۹ ساعت: ۰۹:۴۴:۴۸ ب.ظ

سلام. خیر این نمونه کد رو فقط به زبان C نوشتیم. متاسفانه در حال حاضر پروژه انجام نمیدم. در ضمن برای رسیدن به فرکانس 100 کیلوهرتز باید تعداد اعضای آرایۀ const source رو کم کنید. اینجوری با فرکانس تایمر 8 مگاهرتز، با تعداد اعضای آرایۀ 80 تا، میشه فرکانس 100 کیلوهرتز ساخت. و خب چون تعداد عضوهای اون ارایه کم میشه، موج خروجی با موجی که توی تصاویر این نوشته میبینید متفاوته و کمتر شبیه سینوسیه.

نویسنده: مهدی تاریخ: ۲۱ آبان ۱۳۹۹ ساعت: ۰۱:۵۱:۴۵ ب.ظ
سلام جناب مهندس وقت بخیر من میخواستم هنگام شروع به کار مدار،فرکانس موج خروجی از ۱ شروع بشه و به صورت خودکار تا ده هرتز در مدت ۲ ثانیه افزایش پیدا کنه و روی ده هرتز ثابت بشه و بعد بشه با کلید ها فرکانس رو تغییر داد. من خواستم با یک تایمر جدا این کار رو انجام بدم اما جواب نگرفتم اگه شما راهنمایی کنید ممنون میشم
نویسنده: رضا بداغی تاریخ: ۲۷ آبان ۱۳۹۹ ساعت: ۰۹:۰۳:۴۵ ب.ظ

دوست عزیز متغیر freq هم به صورت عمومی volatile تعریف کنید.

نویسنده: رضا بداغی تاریخ: ۲۶ آبان ۱۳۹۹ ساعت: ۰۹:۴۶:۲۷ ب.ظ

سلام. خواهش میکنم. خب ببنید شما باید به این روش عمل کنید. اول تایمر 3 و وقفه ش رو مطابق کد زیر پیکربندی کنید. بعد برید سراغ تایمر 1. یعنی وقفۀ تایمر 3 رو هم قبل از پیکربندی تایمر 1 پیکربندی کنید.

// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: 1000.000 kHz
// Mode: Normal top=0xFFFF
// Timer Period: 2 ms
// Timer3 Overflow Interrupt: On
TCCR3A=(0<<COM3A1) | (0<<COM3A0) | (0<<COM3B1) | (0<<COM3B0) | (0<<COM3C1) | (0<<COM3C0) | (0<<WGM31) | (0<<WGM30);
TCCR3B=(0<<ICNC3) | (0<<ICES3) | (0<<WGM33) | (0<<WGM32) | (0<<CS32) | (1<<CS31) | (0<<CS30);
TCNT3H=0xF8; // TCNT3 = 63536
TCNT3L=0x30;
ETIMSK=(0<<TICIE3) | (0<<OCIE3A) | (0<<OCIE3B) | (1<<TOIE3) | (0<<OCIE3C) | (0<<OCIE1C);

 

الان تایمر 3 از 63536 تا 65535میشمره که میشه 2000 پله. فرکانس CPU تو این پروژه 8 مگاهرتزه. مطابق کد بالا، تقسیم فرکانسی 8 برای تایمر 3 انتخاب شده. بنابراین کلاک تایمر میشه 1 مگاهرتز. 2000 پله که طی بشه، زمان بین هر سرریز برابر 2000 تا 1 میکروثانیه میشه که میشه 2 میلی ثانیه. حالا میخوایم هر 200 میلی ثانیه یک واحد به فرکانس اضافه بشه، که توی 2 ثانیه، فرکانس از 1 بشه 10 هرتز. بنابراین تو وقفه این کد رو می نویسیم.

// Timer3 overflow interrupt service routine
interrupt [TIM3_OVF] void timer3_ovf_isr(void)
{
static unsigned char counter=0;
// Reinitialize Timer3 value
TCNT3H=0xF830 >> 8;
TCNT3L=0xF830 & 0xff;        
// Place your code here
counter++;
if(counter>=100)
{
  counter=0;
  freq++;
  if(freq>=10)
  {
    TCCR3A=0x00;
    TCCR3B=0x00;
    TCNT3H=0x00;
    TCNT3L=0x00; 
    ETIMSK &=~ (1<<TOIE3);
  }
}
}

 

در این صورت هر 2 میلی ثانیه ک وقفه اتفاق بیفته، یه واحد به counter اضافه میشه. تا این که مقدار counter برابر 100 بشه. این نشون میده که 200 میلی ثانیه سپری شده. حالا هر 200 میلی ثانیه یک واحد به freq اضافه میشه. وقتی فرکانس برابر 10 میشه، برنامه وارد شرط پایانی میشه و تایمر 3 و وقفۀ اون غیر فعال میشه. و دیگه از اون به بعد افزایش مقدار freq با تایمر 3 انجام نمیشه.

اون کد قبلی مشکلش این بود که چون همون اول مقدار counter کم بود وشرط اول صحیح نبود، وارد else میشد و کلاً تایمر 3 رو غیر فعال میکرد. ولی این کد دیگه اینطوری نیست

فقط دقت کنید که این روند 9 بار تکرار میشه. چون مقدار اولیۀ فرکانس برابر 1 هرتزه. بنابراین افزایش فرکانس با تایمر 3 در کل 1.8 ثانیه طول میکشه. شما میتونید به جای اون مقدار 100مقدار 111 رو قرار بدید. که البته باز هم مقدار دقیق بدست نمیاد. و زمان این افزایش فرکانس میشه 1998 میلی ثانیه.

موفق باشید.

نویسنده: رضا بداغی تاریخ: ۲۲ آبان ۱۳۹۹ ساعت: ۰۴:۲۱:۱۹ ب.ظ

سلام. خیلی ممنون. تنها کاری که باید انجام بدید اینه که مقدار اولیۀ متغیر freq رو 1 بذارید.حالا بعد از روشن شدن میکروکنترلر باید با یه تاخیر زمانی یک واحد یک واحد به مقدار freq اضافه بشه. تا جایی که به 10 برسه. حالا این تاخیر زمانی ممکنه با توابع delay به وجود بیاد یا با یه تایمر. و بهتره با تایمر باشه. یه متغیر رو توی وقفۀ تایمر ++ کنید. (منظورم یه تایمر دیگه ست.) بعد شرط بذارید که هر وقت مقدارش مثلاً به 250 رسید، یه واحد به freq اضافه بشه. بعد مقدار freq هم توی همون شرط بذارید که در صورتی این کار انجام بشه که مقدار freq کمتر از 10 باشه. در غیر این صورت تو همون روتین وقفۀ تایمر هم شمارش تایمر رو غیر فعال کنید و هم میتونید کلاً تایمر رو غیر فعال کنید. چنین کدی مثلاً توی روتین وقفۀ سرریز تایمر 3 بنویسید:

ISR(...){
static counter = 0;
counter++;
if((counter>250) && (freq<=10))
{
counter=0;
freq++;
}
else
{
غیر فعال کردن تایمر 3 و وقفۀ اون;
}
TCNT3=0x...;
}

 

این مقدار 250 رو مثال عرض کردم. ببینید با توجه به فرکانسی که برای تایمر انتخاب میکنید، چه مقداری باید بدید که 10 تا شمارش رو توی 2 ثانیه انجام بده. همچنین ممکنه نیاز باشه برای رسیدن به مقدار صحیح، آخر روتین وقفه به TCNT هم مقداری بدید که از اون شروع به شمارش کنه.

در نظر داشته باشید که قبل از فعال کردن پرچم کلی وقفه ها، تایمر 3 رو هم فعال کرده باشد. همچنین دقت کنید که تایمر مربوط به این کار رو قبل از تایمر مربوط به تعیین فرکانس موج خروجی فعال کنید. تو این مثال برای این پروژه، اول تایمر 3 و بعد تایمر 1 رو فعال کنید.

 

نویسنده: محمد تاریخ: ۱ آبان ۱۳۹۹ ساعت: ۰۴:۰۴:۱۴ ب.ظ
سلام اقای مهندس من یه مشکلی دارم تو شبیه سازی در پروتئوس اینکه وقتی کلید ها رو برای تغییر فرکانس میزنم فرکانس تغییر نمیکنه بلکه باید چند بار بزنم تا فرکانس یک واحد تغییر کنه به نظر شما مشکل از چیه؟
نویسنده: رضا بداغی تاریخ: ۶ آبان ۱۳۹۹ ساعت: ۰۳:۳۰:۲۶ ب.ظ

سلام. این مشکل ممکنه به دلیل مطابق نبودن گذر زمان پروتئوس با واقعیت باشه. اگه کلید رو نگه دارید فرکانس تغییر میکنه. اما بازم زمان تغییرش بیشتر از زمان واقعیه. همچنین ممکنه فرکانس کاری انتخاب شده توی برنامه با فرکانس انتخاب شده توی پروتئوس متفاوت باشه. تو پروتئوس روی میکروکنترلر دابل کلیک کنید و مقدار CKSEL Fuses رو روی حالت Int RC 8MHz قرار بدید. چون توی برنامۀ نوشته شده (توی پیوست) هم 8 مگاهرتز انتخاب شده. موفق باشید.

نویسنده: مهدی تاریخ: ۲۰ مهر ۱۳۹۹ ساعت: ۰۱:۵۰:۲۱ ب.ظ
سلام جناب مهندس خیلی مچکرم بابت پاسخگوییتون به سوالات من میخوام یک اینورتر بسازم به اینصورت که این شکل موج سینوسی رو با یک شکل موج مثلثی فرکانس بالا حدود 15KHZ مقایسه کنم شما اپ امپی رو میتونید پیشنهاد بدید که در ورودی دو شکل موج سینوسی و مثلثی رو دریافت و مقایسه کنه و در خروجی سیگنال منطقی صفر و یک با سطح ولتاژ ۵ ولت بده خیلی سپاس گزارم
نویسنده: رضا بداغی تاریخ: ۳۰ مهر ۱۳۹۹ ساعت: ۱۰:۰۴:۳۱ ب.ظ

 سلام. بله میشه. مدهای Fast PWM هم میشه استفاده کرد. در این صورت تو خروجی یه موج PWM داریم که عرض پالس اون با دامنۀ مقدار سینوسی تغییر میکنه. البته باید این مورد هم در نظر بگیریم. اگه فرضاً فرکانس کلاک واحد تایمر 8 مگاهرتز باشه، زمان هر پله میشه 0.125 میکروثانیه. برای رسیدن به فرکانس 15 کیلوهرتز باید زمان 66.6 میکروثانیه سپری بشه. بنابراین نیازه که تعداد 533 پله طی بشه. بنابراین باید حداقل مقدار TCNTx برابر 65003 باشه. حالا برای این که مقایسه بین TCNTx و OCRxy انجام بشه، باید تغییر مقدار موج سینوسی بین 65003 و 65536 باشه. مگر این که از مدهای کمتر از 16 بیت مثلاً مد 10 بیتی یا 9 بیتی استفاده کنیم. که در این صورت محاسبات متفاوته.

نویسنده: مهدی تاریخ: ۲۸ مهر ۱۳۹۹ ساعت: ۰۳:۲۵:۴۱ ق.ظ
سلام وقت بخیر مهندس جان میشه این مقایسه رو تو خود میکرو انجام داد؟ مثلا به جای این که مقادیر سینوسی رو توی پورت Aقرار بدیم توی رجیستر OCRn یک تایمر دیگه مثلا تایمر ۳ قرار بدیم و مود این تایمر رو رو حالت pwm تصحیح فاز بذاریم
نویسنده: رضا بداغی تاریخ: ۲۲ مهر ۱۳۹۹ ساعت: ۰۵:۲۰:۵۱ ب.ظ

سلام. خواهش میکنم. برای این که توی خروجی اپ امپ سیگنال صفر و 5 بگیرید میشه از اپ امپ های single supply استفاده کنید. فقط مشکلش اینه که شما اگه ولتاژ تغذیه مثبت این اپ امپ رو 5 ولت بدید و ولتاژ تغذیۀ منفی اون رو به زمین وصل کنید، خروجی اون دقیقاً صفر و 5 نمیشه. چون امپ ها همیشه ولتاژ اشباع شون مقداری از ولتاژ تغذیه شون کمتره (مثلاً 1 ولت). برای مثال خروجی میشه 1 ولت و 4 ولت. برای رفع این مشکل میشه اپ امپ با تغذیۀ دوبل استفاده کرد. طوری که ولتاژ تغذیۀ منفی رو 1- بذارید و ولتاژ تغذیۀ  مثبت رو 6 ولت. در این صورت اون اختلاف جبران میشه و خروجی شما میشه صفر و 5. البته کار خوب اینه که همین مدار هم از به اشباع رفتنش جلوگیری بشه تا توی اون فرکانس عملکرد بهتری داشته باشه. برای این کار میشه ازمدارات جلوگیری از اشباع که با دیود و مقاومت ساخته میشن استفاده کرد. که در این صورت میشه مقدار خروجی رو با تغییر مقدار اون مقاومت ها طوری تغییر داد که خروجی بین 0 و 5 تغییر وضعیت بده. همچنین میشه ولتاژها رو هم مثلاً 12- و 12 گذاشت. حالا برای بحث فرکانس هم بهتره یه اپ امپ با slew rate  بالاتر از 20 v/us بذارید. اپ امپ LF351 رو الان با پی اسپایس با موج مثلثی 15 کیلوهرتز تست کردم خروجی جالبی نداشت. slew rate این اپ امپ 16 هستش. اپ امپ با slew rate بالاتر چیزی به ذهنم نمیرسه. خواهش میکنم. موفق باشید.

نویسنده: مهدی تاریخ: ۱۸ مهر ۱۳۹۹ ساعت: ۰۲:۲۵:۳۵ ب.ظ
سلام اقای مهند میشه بفرمایید چطور میشه دامنه موج سینوسی خروجی رو تغییر داد
نویسنده: رضا بداغی تاریخ: ۱۹ مهر ۱۳۹۹ ساعت: ۱۰:۳۹:۴۴ ق.ظ

توی سوال قبلیتون جواب دادم.

نویسنده: مهدی تاریخ: ۱۵ مهر ۱۳۹۹ ساعت: ۰۳:۵۹:۲۴ ب.ظ
سلام جناب مهندس وقتتون بخیر ممنون بایت مطلبتون اگه میشه بفرمایید که امکان تغییر دامنه موج سینوسی از طریق avr هم وجود داره و چطور میشه این کار رو انجام داد.
نویسنده: رضا بداغی تاریخ: ۱۹ مهر ۱۳۹۹ ساعت: ۱۰:۳۳:۵۴ ق.ظ

سلام. بله این کار امکان پذیره. توی این قسمت:

PORTA = const_source[ph1];

اگه مقدار const_source رو در یک عدد کمتر از 1 ضرب کنید، مقادیری که روی پورت A قرار میگیره به نسبت اون عدد کاهش پیدا میکنه. به این شکل:

PORTA = gain * const_source[ph1];

همچنین مقدار قرار گرفته توی پورت A باید عدد صحیح باشه. پس به این شکل تغییر پیدا میکنه:

PORTA = (unsigned char) (gain * const_source[ph1]);

الان اگه مقدار متغیر gain که float هستش بین 0 و 1 تغییر کنه، دامنۀ سیگنال هم بین صفر و حداکثر تغییر میکنه.

 

نویسنده: محمد اقبالی تاریخ: ۱۴ مهر ۱۳۹۹ ساعت: ۰۹:۳۰:۲۰ ب.ظ
با سلام من یک اینورتر تبدیل برق باطری به برق شهر 220 ولت دارم ولی خروجی ان شبه سینوسی یا همان مربعی است میخواستم آن را به سینوسی کامل تبدیل کنم میشه لطفااگه مدار یا غیره ...دارید برام ایمیل کنید اینورترم 150 وات هست ممنون میشم با تشکر
نویسنده: رضا بداغی تاریخ: ۱۹ مهر ۱۳۹۹ ساعت: ۱۰:۳۵:۴۶ ق.ظ

سلام. بنده برای این کار مدار تست شده ندارم. همچنین نمیدونم اینورتری که دارید دارای چه ساختاری هست. اگه اینورتری که دارید توی خروجیش از ترانس افزاینده استفاده شده، میشه در اولیۀ ترانس فیلتر RC قرار داد و مربعی رو تا حدودی به سینوسی شبیه کرد. البته با این کار دامنۀ سیگنال کاهش پیدا میکنه. همچنین مقاومت چون در مسیر جریان بالا قرار میگیره باید توان بالا باشه. شاید نیازی به مقاومت نباشه و تنها با موازی کردن یه خازن با اولیۀ ترانس این کار انجام بشه. مقدار خازن هم بستگی به ساختار اینوتر داره.

نویسنده: سعید تاریخ: ۷ مهر ۱۳۹۹ ساعت: ۰۹:۴۷:۳۹ ق.ظ
با سلام جای تشکر دارد که یک هموطن ایرانی مطالبی به این زیبایی را بیان نموده است من تازه شروع کردم و بیشتر از مطالب خارجی که درکش برام سخته استفاده میکنم خوشحال خواهم شد اگر در رابطه با ساخت cnc و کنترل چند موتور همزمان و نحوه ارتباط با grbl منبع خوب و کاربردی معرفی نمایید نا گفته نماند که من قصد کار با بردهای اردینو را ندارم و بهتر میدانم که خودم زحمت ساخت را بکشم . با سپاس فراوان سعید سعیدی
نویسنده: رضا بداغی تاریخ: ۳ آذر ۱۳۹۹ ساعت: ۰۸:۴۲:۰۲ ب.ظ

سلام خواهش میکنم نظر لطفتونه. بنده در این زمینه فعالیت نداشتم و نمی تونم منبعی خدمتتون معرفی کنم.

نویسنده: علی موسوی تاریخ: ۱۴ مرداد ۱۳۹۹ ساعت: ۰۹:۲۰:۱۸ ب.ظ
سلام. آقای مهندس میشه توضیح بدید چطور میشه اون آرایه اعداد ثابت رو به دست آورد؟ ممنون از شما
نویسنده: رضا بداغی تاریخ: ۱۶ مرداد ۱۳۹۹ ساعت: ۰۸:۴۹:۴۱ ب.ظ

سلام. یه روشش این فرموله:

constant_source[i]=[(127*sin(xi))+128]

فرضاً میخواید از 8 مقدار استفاده کنید. پس باید 8 مقدار ورودی صفر و 45 و 90 و 135 و 180 و 225 و 270 و 315 درجه رو به ورودی تابع بدید. در این صورت اعداد خروجی بین صفر تا 255 هستش. اگه میخواید یه سینوسی دقیق تر داشته باشید، باید تعداد اعضای اون آرایه رو بالا ببرید که نیاز داره تعداد بیشتری ورودی بدید. مثلاً میخواید تعدادش 100 تا باشه. پس 100 تا ورودی باید بدید به تابع. این ورودی ها هم میشن:

x0=0

x1=1 * (360/100)

x2=2 * (360/100)

...

x99=99 * (360/100)

زوایای ورودی هم به این شکل انتخاب میشن. توجه داشته باشید که کروشه توی فرمول نماد جزء صحیحه.

نویسنده: بهاره تاریخ: ۵ تیر ۱۳۹۹ ساعت: ۰۴:۳۲:۱۳ ب.ظ
سلام. جناب مهندس میشه مقاومت های پول آپ رو وصل نکرد؟ من دیدم معمولاً مقاومت پول آپ رو برای ورودی های دیجیتال و برای بالا کشیدن ولتاژ اونا استفاده میکنن.
نویسنده: رضا بداغی تاریخ: ۷ تیر ۱۳۹۹ ساعت: ۰۷:۲۱:۱۵ ب.ظ

سلام. خیر باید وصل کنید. چون خروجی اون open-collector هستش و خروجی ولتاژ آنالوگ با جریان Sink عبوری از مقاومت های پول آپ به وجود میاد. پول آپ کردن با این که خیلی مواقع برای ورودی های دیجیتال استفاده میشه، صرفاً برای ورودی دیجیتال نیست و گاهی (مثل خروجی DAC0800) برای خروجی هم استفاده میشه.

نویسنده: فرشته تاریخ: ۳ تیر ۱۳۹۹ ساعت: ۰۱:۲۶:۵۶ ق.ظ
سلام آقای مهندس. dac رو میشناسید که نیاز به ولتاژ دوبل نداشته باشه و بدون نیاز به ولتاژ منفی کار کنه؟
نویسنده: رضا بداغی تاریخ: ۴ تیر ۱۳۹۹ ساعت: ۰۷:۰۲:۵۳ ب.ظ

سلام. آی سی AD1866 یه نمونه 16 بیتی برای صداست که نیاز به منبع دوبل نداره. AD7801 هم یه DAC با منبع تغذیۀ تکی هستش.

نویسنده: مصطفی حمیدی تاریخ: ۲۷ خرداد ۱۳۹۹ ساعت: ۱۰:۳۴:۰۵ ب.ظ
تشکر از مطلب خوبتون. عالی بود. میشه فقط از یکی از پایه های خروجی استفاده کرد یا باید حتماً از دو تاش خروجی گرفت؟
نویسنده: رضا بداغی تاریخ: ۲۹ خرداد ۱۳۹۹ ساعت: ۱۱:۵۴:۰۵ ب.ظ

سلام. خواهش میکنم. ممنون. بله میشه. ولی در این صورت آفست خروجی رو دارید.

نویسنده: هادی نبی زاده تاریخ: ۱۹ خرداد ۱۳۹۹ ساعت: ۰۹:۵۰:۲۲ ق.ظ
سلام جناب مهندس خسته نباشید. ممنون از مطالب مفیدی که گذاشتید. سوالی که من دارم اینه برای ایجاد موج سینوسی سه فاز با اختلاف فازهای 120 درجه بایستی از سه پورت AVR استفاده کنم و اعداد رو طوری بچینم که بین سه پورت اختلاف فاز 120 درجه ایجاد بشه؟ و سوال دیگه اینکه می تونم تغییرات فرکانس رو در طول زمان با یک آهنگ خاص و به صورت اتوماتیک ایجاد کنم؟ همچنین خروجی موج سینوسی سه فاز ایجاد شده رو می تونم برای درایو یک اینورتر سه فاز که یک موتور سه فاز رو کنترل می کنه استفاده کنم؟
نویسنده: رضا بداغی تاریخ: ۱۹ خرداد ۱۳۹۹ ساعت: ۱۰:۵۹:۳۰ ب.ظ

سلام. خیلی ممنون. خواهش میکنم. بله. شما از آرایه ای که توی همین پروژه انجام شده استفاده کنید. البته برای این که اختلاف فاز با دقت بالاتری 120 درجه بشه، 255 تا (یا تعدادی دیگه ای) از مقادیر آرایه رو استفاده کنید. که اگه تقسیم بر 3 بشه، خارج قسمتش عدد صحیح بشه. در این صورت توی وقفۀ تایمر به سه تا پورت مقدار میدید. مثلاً اگه از 255 تا مقدارش استفاده کنیم، به این شکل:

PORTA=const_source[ph1];
PORTB= const_source[ph1+85];
PORTC= const_source[ph1+170];
Ph1++;
if (ph1>=255) ph1=0;

از آرایۀ counst source بهتره یه مقدار نزدیک ولتاژ صفر یعنی عدد نزدیک 127 روئ حذف کنید تا نبودنش توی شکل موج خروجی زیاد تأثیرگذار نباشه.

دربارۀ تغییر فرکانس: الان تغییر فرکانس با کلید انجام میشه. شما برنامه ای بنویسید که مثلاً با delay و حلقۀ for یه متغیر مقدارش خطی یا غیر خطی تغییر کنه. و باعث تغییر مقدار delay بشه بعد از این delayی که مقدارش با آهنگ برنامه ریزی شده تغییر میکنه، مقدار فرکانس رو تغییر بدید.

دربارۀ اینورتر هم توجه داشته باشید که اینورتر ولتاژ DC رو به AC تبدیل می کنه. و نمیشه بهش ولتاژ AC داد. مگر این که منظور شما این باشه که یک اینورتر رو باز کنیم و این ولتاژ رو به جایی از مدارش بدیم و اون هم تقویتش کنه. که این هم باید توجه بشه که اینورترها انواع مختلفی دارن. ولی در کل میشه خروجی DAC رو تقویت کرد و ازش یه اینورتر ساخت.

نویسنده: اصغر تاریخ: ۲۷ اردیبهشت ۱۳۹۹ ساعت: ۰۷:۴۶:۰۸ ق.ظ
سلام مهندس ممنون از مدارتون . آیاممکنه یه فرکانس تا حدود 10کیلو هرتز که با پتانسیومتر تغییر کنه با این مدار داشته باشیم؟ اگه ایمیل بدین ممنون میشم .
نویسنده: رضا بداغی تاریخ: ۲۷ اردیبهشت ۱۳۹۹ ساعت: ۱۰:۴۹:۴۵ ب.ظ

سلام. خواهش میکنم. به صورت تئوری بله. اگه مقدار OCR1A رو 3 قرار بدیم، طبق فرمولی که محاسبه کردیم، فرکانس موج سینوسی حدود 10 کیلو هرتز میشه. ولی باید توجه کرد که در این صورت باید پورت IO با فرکانس حدود 2.6 مگاهرتز تغییر وضعیت بده. اگر DAC0800 هم بتونه با این فرکانس ورودی رو دریافت کنه، میکروکنترلر AVR ممکنه نتونه. باید به دیتاشیت یا User Manual های AVR مراجعه کنید و حداکثر قرکانس تغییر وضعیت پایه های IO رو ببینید.

نویسنده: سمیرا تاریخ: ۱۸ اردیبهشت ۱۳۹۹ ساعت: ۰۹:۱۹:۳۲ ق.ظ
وایییی دستتون درد نکنه. کلی با این dac کلنجار رفتم تا آخرش از روی شماتیکی که قرار دادید فهمیدم ترتیب پایه های اون برعکس نام گذاری شده. فرمولی هم نوشتید برای محاسبه خروجی که توی پایان نامهم نوشتم. در کل خیلی ممنونم خیلی کارمو راه انداخت
نویسنده: رضا بداغی تاریخ: ۲۰ اردیبهشت ۱۳۹۹ ساعت: ۰۵:۳۳:۵۸ ب.ظ

خواهش میکنم. موفق باشید. ان شاء الله که مفید بوده باشه.

نویسنده: محمد تاریخ: ۲۵ اسفند ۱۳۹۸ ساعت: ۰۱:۵۷:۳۴ ب.ظ
سلام ممنون از مطلب خوبتون. یه سوال دارم. چرا توی تعریف آرایه const source از volatile استفاده کردید؟ ممنون
نویسنده: رضا بداغی تاریخ: ۲۶ اسفند ۱۳۹۸ ساعت: ۰۱:۴۳:۰۹ ق.ظ

سلام خواهش میکنم. چون از نرم افزار کدویژن برای نوشتن برنامه استفاده کردیم. توی کدویژن برای تعریف متغیر با کلاس حافظۀ اتوماتیک، باید متغیر رو بدون آوردن کلمۀ auto تعریف کنیم. در این صورت ممکنه کامپایلر، کلاس حافظه متغیر رو از نوع رجیستر قرار بده. برای جلوگیری از این خطا باید از volatile استفاده کنیم. البته این کار دلایل دیگه ای هم داره که توی نوشته های «انواع متغیر در زبان برنامه نویسی C» و «کلاس های حافظه در زبان برنامه نویسی C حوزۀ تعریف و طول عمر متغیرها» توضیح داده شدن.

نویسنده: mina askari تاریخ: ۱۹ اسفند ۱۳۹۸ ساعت: ۰۴:۳۹:۱۸ ب.ظ
سلام. من میخوام یک پروژه دارم که امکانات چندانی نداره. توی پروژه از DAC استفاده میشه. من AVR کلاسهای استاد اسدی رو شرکت کردم و AVR رو خوب بلدم. اما سوالی که برام پیش اومده اینه که برم سراغ میکروکنترلرهای ARM STM32 چون خودشون DAC دارن یا اینکه نه با همین AVR انجام بدم؟ ممنون میشم در این مورد راهنماییم کنید.
نویسنده: رضا بداغی تاریخ: ۲۱ اسفند ۱۳۹۸ ساعت: ۱۲:۲۸:۲۷ ق.ظ

سلام. از نظر من اگر توی استفاده از سخت افزار مشکلی ندارید، با همین میکروکنترلر AVR و آی سی های DAC میتونید کار کنید. البته باید شرایط پروژه هم در نظر بگیرد. تعداد بیت های DAC، فرکانس تایمر میکروکنترلر، که بتونید باهاش موج های مختلف با فرکانس های مختلف بسازید و شرایط دیگۀ پروژه. ولی اگه فکر میکنید لازمه که تعداد سخت افزار کمتری استفاده بشه، میتونید از DAC میکروکنترلرهای STM32 استفاده کنید. چون اگه از DAC میکروکنترلرهای STM32 استفاده کنید، یه آی سی کمتر استفاده کردید. یه نکته هم دقت کنید و اون این که اگه میخواید PCB بزنید، ترتیب پایه های DAC0800 (پکیج DIP) جالب نیست و ممکنه باعث بشه برد مدار چاپی دو لایه استفاده کنید. این مورد رو هم در نظر داشته باشید که ممکنه برنامه نویسی میکروکنترلرهای STM32 براتون مشکل تراز برنامه نویسی میکروکنترلرهای AVR باشه.

نویسنده: رسول نظرپور تاریخ: ۱۸ اسفند ۱۳۹۸ ساعت: ۱۱:۲۵:۰۶ ق.ظ
سلام آقای بداغی. یک آیسی DAC با دقت 12 بیت خوب بهم معرفی می کنید؟
نویسنده: رضا بداغی تاریخ: ۱۸ اسفند ۱۳۹۸ ساعت: ۱۱:۴۷:۲۵ ب.ظ

سلام. آی سی DAC7621 یه آی سی DAC با ورودی موازیه و آی سی های DAC60501M و DAC60501Z هم DACهای با ورودی سریال (یعنی I2C و SPI) هستن. هر سه DAC هم 12 بیتی هستن.

فرم پاسخ به دیدگاه