راه اندازی واحد DAC میکروکنترلر stm32f4xx  و تولید سیگنال سینوسی

در این آموزش به معرفی و راه اندازی واحد DAC میکروکنترلر stm32f4xx  و تولید سیگنال سینوسی با فرکانس مشخص مثلا، 1KHz به کمک آن می‌پردازیم.

معرفی واحد DAC میکروکنترلر stm32f4xx

واحد DAC به معنای Digital to Analog Converter است، به این معنا که داده های دیجیتال را به ولتاژ آنالوگ تبدیل می کند. برای مثال میکروکنترلر stm32f4xx دارای یک واحد DAC است که دو خروجی DAC1 و DAC2 را دارد که می توانند به صورت 12Bit و 8Bit تنظیم شوند در این پروژه ما قصد داریم به کمک واحد DAC یک موج سینوسی با فرکانس 1KHz تولید کنیم، پس در ابتدا باید داده های دیجیتال یک موج سینوسی را داشته باشیم تا به واحد DAC بدهیم و آنها را به آنالوگ تبدیل کنیم که برای این کار دو روش داریم یکی استفاده از فرمول موج سینوسی و دیگری استفاده از یک آرایه شامل تعداد مشخصی نقطه که یک موج سینوسی را تشکیل می دهند که هر چه تعداد نقطه ها بیشتر باشد شکل موج نهایی با تقریب بهتری شبیه موج سینوسی است. که من برای به دست آوردن این نقاط از نرم افزار متلب استفاده کردم:

t=linspace(0,2*pi,512); % a sin wave with 512 point

x=sin(t);

x=x+1; % DAC output is positive

%x=(x*(2^12-1))/2;  %DAC 12Bit

x=(x*(2^8-1))/2;    %DAC 8Bit

x1=round(x);

plot(x1)

نمودار سینوسی رسم شده در متلب

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

که نهایتا اعداد به دست آمده به این صورت است که چون DAC ما 8Bit بود ، اعداد بین 0 تا 255 هستند.

x1={ 128,129,131,132,134,135,137,138,140,142,143,145,146,148,149,151,152,154,155,157,159,160,162,163,165,166,168,169,171,172,173,175,176,178,179,181,182,184,185,186,188,189,190,192,193,195,196,197,198,200,201,202,204,205,206,207,209,210,211,212,213,214,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,235,236,237,238,239,239,240,241,242,242,243,244,244,245,245,246,247,247,248,248,249,249,250,250,250,251,251,252,252,252,253,253,253,253,254,254,254,254,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,254,254,254,253,253,253,252,252,252,251,251,251,250,250,249,249,248,248,247,247,246,246,245,244,244,243,243,242,241,240,240,239,238,237,237,236,235,234,233,232,231,231,230,229,228,227,226,225,224,223,222,221,219,218,217,216,215,214,213,212,210,209,208,207,205,204,203,202,200,199,198,196,195,194,192,191,190,188,187,186,184,183,181,180,179,177,176,174,173,171,170,168,167,165,164,162,161,159,158,156,155,153,152,150,149,147,145,144,142,141,139,138,136,135,133,131,130,128,127,125,124,122,120,119,117,116,114,113,111,110,108,106,105,103,102,100,99,97,96,94,93,91,90,88,87,85,84,82,81,79,78,76,75,74,72,71,69,68,67,65,64,63,61,60,59,57,56,55,53,52,51,50,48,47,46,45,43,42,41,40,39,38,37,36,34,33,32,31,30,29,28,27,26,25,24,24,23,22,21,20,19,18,18,17,16,15,15,14,13,12,12,11,11,10,9,9,8,8,7,7,6,6,5,5,4,4,4,3,3,3,2,2,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,8,8,9,10,10,11,11,12,13,13,14,15,16,16,17,18,19,20,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,41,42,43,44,45,46,48,49,50,51,53,54,55,57,58,59,60,62,63,65,66,67,69,70,71,73,74,76,77,79,80,82,83,84,86,87,89,90,92,93,95,96,98,100,101,103,104,106,107,109,110,112,113,115,117,118,120,121,123,124,126,127}

حالا برای این که در خروجی DAC موج سینوسی داشته باشیم باید به صورت پیوسته  اعداد آرایه بالا را با فاصله زمانی مشخص به DAC بدهیم تا آنها را به ولتاژ آنالوگ بین 0 تا 3.3 ولت تبدیل کند و در خروجی قرار دهد. برای این کار می توانیم از تایمر کمک بگیریم یعنی تایمر در فاصله های زمانی مشخص اینتراپت تولید کند و در هر اینتراپت تایمر داده جدید به DAC فرستاده شود و تبدیل انجام شود که این عملیات در نرم افزار Stm32CubeMx به تبدیل با تحریک شمارنده و یا  DAC with timer trigger  نامیده می شود که تنظیمات و کد آن به صورت زیر است:

مطلب پیشنهادی:  آموزش میکروکنترلرهای LPC1768 جلسه هشتم: وقفه ها در LPC1768

نرم افزار Stm32CubeMx

راه اندازی واحد DAC میکروکنترلر stm32f4xx 

شکل 2: Stm32f4xx Pinout

شکل 3: Stm32f4xx clock configuration

نرم افزار Stm32CubeMx

شکل 4: Stm32f4xx DAC and Timer4 configuration

DMA for DAC configuration

شکل 5:DMA for DAC configuration

چگونگی تنظیم فرکانس سیگنال سینوسی :

با مراجعه به دیتاشیت Stm32f407 متوجه می شویم که تایمر 4 بر روی باس APB1 قرار دارد که ما فرکانس آن را 42MHz تنظیم کرده ایم (مطابق شکل 3 ) و هدف ما این است که فرکانس موج سینوسی خروجی DAC که باهمان  512 عدد ساخته می شود، 1KHz باشد بنابراین باید هر تناوب 1 میکروثانیه باشد و فاصله ی هر دو نقطه برابر است با  و در رابطه با تنظیمات تایمر باید گفت که هدف ما در استفاده از تایمر ایجاد اینتراپتی است که در آن داده ی بعدی به DAC داده شود و به همین ترتیب ادامه دهیم تا به داده 512 ام برسیم و ادامه دهیم پس ما باید تنظیم کنیم که هر اینتراپت چه زمانی رخ دهد برای این منظور داریم:

چگونگی تنظیم فرکانس سیگنال سینوسی

چیستی و چگونگی عملکرد و تنظیمات DMA :

DMA به معنی Direct Memory Access یعنی دسترسی مستقیم به حافظه است و در مواردی که حجم زیادی داده می خواهد از حافظه به یک جانبی (peripheral) مثل DAC در اینجا منتقل شود و یا برعکس از یک جانبی به حافظه منتقل شود مثل ADC در بخش بعدی استفاده می شود که این کار باعث می شود در انتقال داده بین حافظه و جانبی ها CPU (پردازنده اصلی) درگیر نشود و به بقیه ی وظایفش رسیدگی کند و این انتقال توسط واحد DMA controller انجام شود وعملکرد میکروکنترلر بهبود یابد. این قابلیت در میکروکنترلر های AVR  وجود نداشت ولی به دلیل فرکانس کاری بالای میکروکنترلر های ARM این قابلیت در آنها اضافه شده است.

مطلب پیشنهادی:  مفهوم نام‌گذاری میکروکنترلرهای کمپانی ST

نکته ای که خوب است در رابطه با تنظیمات DMA بدانیم این است که دو Mode کاری برای آن در نرم افزار Stm32CubeMx تعریف شده است یکی Circular و دیگری Normal  که در حالت Circular وقتی که داده ها (در اینجا 512  نقطه ی نمودار که گفته بودیم) به ترتیب منتقل شدند دوباره نشانگر به ابتدای آرایه بر می گردد و آنها را به طور متناوب منتقل می کند ولی در حالت Normal تنها یکبار این انتقال صورت می گیرد و چون ما در اینجا می خواستیم که به طور متناوب موج سینوسی را داشته باشیم از Circular Mode استفاده کردیم.

کامپایلر Keil :

پس از تنظیمات فوق در نرم افزار Stm32CubeMX مطابق  شکل 6 با فشردن گزینه Generate source code پنجره ای نمایش داده می شود که با مشخص کردن محل ذخیره فایل ها، اسم پروژه و همچنین کامپایلر مورد نظر که برای من نرم افزار Keil V5 بود و فشردن کلید OK پروژه مورد نظر در نرم افزار Keil ایجاد و باز می‌شود ولی اگر هنوز کتابخانه مربوط به stm32f4xx را در keil نصب نکرده باشید به شما پیام می‌دهد و از شما می خواهد که کتابخانه مورد نظر را دانلود و نصب کنید که برای این کار باید به اینترنت متصل شوید و مراحل دانلود و نصب به ترتیب در خود نرم افزار انجام می شوند.

مطلب پیشنهادی:  آموزش میکروکنترلرهای LPC1768 جلسه سوم: ایجاد پروژه در Keil

راه اندازی واحد DAC میکروکنترلر stm32f4xx  و تولید سیگنال سینوسی

شکل 6:  تولید کدها برای کامپایلر keil V5

سپس با باز شدن کامپایلر Keil تابع main را باز می کنیم و کد های خودمان  را به آن اضافه می کنیم:

راه اندازی واحد DAC میکروکنترلر stm32 

شکل 7: تابع main

راه اندازی واحد DAC میکروکنترلر stm32

شکل 8: تعریف متغیری برای 512 نقطه تابع سینوسی

راه اندازی واحد DAC میکروکنترلر stm32f4xx 

شکل 9: توابع فعال کردن timer وdac و مقدار دهی dac

راه اندازی واحد DAC میکروکنترلر stm32f4xx 

شکل 10: توابع مختلف مربوط به dac و توضیحات مربوط به هر کدام در stm32f4xx_hal_dac.c

اکنون برنامه این بخش کامل شده است و شما می توانید اگر اسیلوسکوپ دارید سیگنال خروجی را با اسیلوسکوپ مشاهده کنید و در غیر این صورت با یک LED و مقاومت، خروجی DAC را به زمین وصل کنید و برای فرکانس های پایین تر مثلا 1 هرتز کاهش و افزایش متناوب نور LED را مشاهده کنید و فرکانس آن را هم به کمک مولتی متر اندازه بگیرید  البته در بخش دوم و سوم این سیگنال سینوسی را بر روی صفحه نمایشگر نشان خواهیم داد.

راه اندازی واحد DAC میکروکنترلر stm32f4xx 

شکل 11: مشاهده فرکانس 1Hz سیگنال خروجی واحد DAC میکروکنترلر stm32f4xx

نویسنده مطلب : خانم مهسا مهدیه نجف آبادی

دوستان عزیز بزودی قسمت بعدی این آموزش با عنوان « معرفی و راه اندازی واحد ADC میکروکنترلر stm32f4xx و نمونه برداری با نرخ مشخص، (30KHz ) از سیگنال خروجی DAC » منتشر می‌شود. اگر سوالی داشتین در قسمت #کامنت های سایت بنویسید.

درباره ی جهاندیده

کاربر عزیز از اینکه مطالب سایت ما را مطالعه میکنید بینهایت سپاسگذارم.با نظرات سازنده خود به ما انگیزه بیشتری دهید تا مطالب آموزشی بیشتری را تولید و منتشر کنیم. استیوجابز میگه "شغل شما بخش عمده ای از زندگیتان را تشکیل خواهد داد، پس تنها راهی که از این بخش احساس رضایت خواهید کرد این است که باور داشته باشید در حال انجام کار بزرگی هستید. بهترین راه برای انجام یک کار بزرگ نیز لذت بردن از آن کار است. اگر نمی دانید چه باید انجام دهید عجله نکنید و سعی نمایید اول راه خود را بیابید. با پیدا کردن راه درست مانند یک رابطه ی خوب با گذشت سال ها هر روز همه چیز بهتر و بهتر می شود و همواره رو به جلو پیش خواهید رفت. بنابراین به دنبال آن چیزی بگردید که قلباً شما را راضی می کند. عجله نکنید." امیدوارم همیشه موفق باشید.

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

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

2 دیدگاه

  1. طیف پردازان اسپادانا

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

    • خیلی ممنون بابت اطلاع رسانی برای جذب نیرو ، اگر از دوستان کسی علاقمند بود براتون معرفی میشه.