مبدل دیجیتال به آنالوگ میکروکنترلرهای LPC1768

کاربران عزیز وبسایت میکرو دیزاینر الکترونیک اگر جلسه قبلی آموزش میکروکنترلر LPC1768 را خونده باشید میدانید که قسمت مبدل آنالولوگ به دیجیتال یا ADC میکروکنترلر را برسی کردیم و یادگرفتیم که اگر سیگنال آنالوگی بود و خواستیم تبدیل به دیجیتال کنیم باید از ADC استفاده کنیم.ولی اگر سیگنال دیجیتال باشه و بخواهیم آن را تبدیل به آنالوگ کنیم چی؟

برای تبدیل سیگنال دیجیتال به آنالوگ از DAC یا مبدل دیجیتال به آنالوگ استفاده می شود.در میکروکنترلر LPC1768 یک واحد DAC پیش بینی شده است که در در این جلسه یاد راه اندازی اونو یاد میگیریم.

آموزش میکروکنترلرهای LPC1768 جلسه هفتم: مبدل دیجیتال به آنالوگ lpc17xx_dac.h

مشخصات مبدل دیجیتال به آنالوگ میکروکنترلر LPC1768

  •  دارای دقت 10 بیتی
  • دارای حالت کاهش توان
  • DAC از نوع آرایه مقاوتی
  • خروجی بافر شده حداکثر 700 میلی آمپر
  • حداکثر سرعت 1مگاهرتز
  • سرعت قابل تنظیم نسب به توان

راه اندازی مبدل دیجیتال به آنالوگ میکروکنترلر LPC1768

  1. تنظیم کلاک با استفاده از بیت های 22و23 رجیستر PCLKSEL0  یا از Configuration Wizard بصورت دستی.
  2. تنظیم پین AOUT بعنوان خروجی
  3. گذاشتن مقادیر دیجیتال در رجیستر DACR
  • نکته : اطلاعات DAC را با GPDMA مستقیم میتوان روی حافظه نوشت که در مباحث پیشرفته آموزش LPC1768 اینا را برسی میکنیم.
  • نکته : برای دسترسی به Configuration Wizard روی فایل system_LPC17xx.c که بهمراه فایل های CMSIS روی پروژه اضافه کردین یا بطور خودتار توسط KEIL اضافه شده کلیک کنید تا باز بشه. اگر فایل متنی را آورد در زیر فایل متنی روی نوشته Configuration Wizard کلیک کنید.ایجاد تغییرات هم که خیلی راحته کمی کنجکاوی کنید یاد میگیرید.
مطلب پیشنهادی:  اتصال استپر موتور به بورد STM32F103C8

توابع CMSIS  مبدل دیجیتال به آنالوگ میکروکنترلر LPC1768

تابع DAC_Init

void    DAC_Init(LPC_DAC_TypeDef *DACx);
  • ورودی تابع باید LPC_DAC باشه.

تابع DAC_SetBias

void    DAC_SetBias (LPC_DAC_TypeDef *DACx,uint32_t bias);
  • ورودی اول تابع باید LPC_DAC باشه.
  • ورودی دوم نسبت توان مصرفی با عملکرد DAC تنظیم میکنه.اگر صفر باشه 700uA و اگر یک باشه 350uA البته میتونید بجای صفر و یک بترتیب DAC_MAX_CURRENT_700uA یا DAC_MAX_CURRENT_350uA بنویسید.

نکته : زمان تنظیم شده در فیلد BIAS در صورتی معتبر است که بار خازنی روی پایه AOUT نباید از 100Pf بیشتر نباشه.

تابع  DAC_UpdateValue

void    DAC_UpdateValue (LPC_DAC_TypeDef *DACx, uint32_t dac_value);
  • ورودی اول تابع باید LPC_DAC باشه.
  • ورودی دوم مقدار دیجیتال 10 بیتی میباشد که باید به آنالوگ تبدیل بشه.

مثال اول

 #include "inc/lpc17xx.h"
  #include "inc/lpc17xx_dac.h"
   #include "inc/lpc17xx_pinsel.h"

  int main(void){
/*
	 * Init DAC pin connect
	 * AOUT on P0.26
	 */
	PINSEL_CFG_Type PinCfg;
	PinCfg.Funcnum = 2;
	PinCfg.OpenDrain = 0;
	PinCfg.Pinmode = 0;
	PinCfg.Pinnum = 26;
	PinCfg.Portnum = 0;
	PINSEL_ConfigPin(&PinCfg);
	
    DAC_Init(LPC_DAC);
	DAC_SetBias(LPC_DAC,DAC_MAX_CURRENT_350uA);
	DAC_UpdateValue (LPC_DAC,1000);
   return 1;
  }

خروجی مثال اول ولتاژ ثابت تقریبا 3 ولت است.

مبدل دیجیتال به آنالوگ lpc17xx_dac.h

مثال دوم

 #include "inc/lpc17xx.h"
  #include "inc/lpc17xx_dac.h"
   #include "inc/lpc17xx_pinsel.h"
	//cpu clock = 100Mhz 
	 
    void delay(uint32_t j){// j us
       uint32_t i=0;
       for(i=0;i<(100*j);i++);
     }

  int main(void){
	uint16_t i;

/*
	 * Init DAC pin connect
	 * AOUT on P0.26
	 */
	PINSEL_CFG_Type PinCfg;
	PinCfg.Funcnum = 2;
	PinCfg.OpenDrain = 0;
	PinCfg.Pinmode = 0;
	PinCfg.Pinnum = 26;
	PinCfg.Portnum = 0;
	PINSEL_ConfigPin(&PinCfg);
	

    DAC_Init(LPC_DAC);
	DAC_SetBias(LPC_DAC,DAC_MAX_CURRENT_700uA);
	
	  while(1){
     	   for(i=0;i<1023;i++){
		   DAC_UpdateValue (LPC_DAC,i);
		   delay(100);
	       }
	  }
   return 1;
  }

خروجی مثال دوم : یک سیگنال دندانه اره ای است که در شکل زیر میتونید مشاهده کنید.

مطلب پیشنهادی:  آموزش برنامه نویسی میکروکنترلرهای ARM [از شی گرایی تا توابع CMSIS]

مبدل دیجیتال به آنالوگ lpc17xx_dac.h

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

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

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

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

3 دیدگاه

  1. اقا دست درد نکنه خدا قوت

  2. ضمن عرض سلام و خسته نباشید
    سوال داشتم بابت اینکه در برنامه keil من بعد از کامپایل کردن clcd.c ارور هایی میده واصلا اونو اجرا نمیکنه یعنی اگر یه برنامه ای برحسب ال سی دی باشد اونو کامپایل نمیکنه

    • میلاد جهاندیده

      سلام، بنده خیلی متوجه سناریو شما نشدم ولی کیفیت داستان این است که هر لایبری شما اضافه کنید و از توابع آن استفاده کنید یا خطا میده و کامپایل نمیشه و یا از توابع آن استفاده میکنه مگر اینکه توابع کار خاصی نکنند!