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

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

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

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

مشخصات مبدل دیجیتال به آنالوگ میکروکنترلر 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 کلیک کنید.ایجاد تغییرات هم که خیلی راحته کمی کنجکاوی کنید یاد می‌گیرید.

توابع 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 ولت است.

 

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

 

مثال دوم

 #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;
  }

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

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

 

 

 

منبع:  میکرودیزاینرالکترونیک

 

مطلب قبلیوقفه‌ها در میکروکنترلر LPC1768
مطلب بعدیطبقه بندی سنسورها

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید