آموزش ADC میکروکنترلر STM32

معرفی واحد ADC

این آموزش همه ی سری های STM32F4x را شامل می شود مگر آنکه در بخش هایی خاص تفاوت به وضوح ذکر شود.

مبدل 12 بیتی ADC تقریبا یک مبدل آنالوگ به دیجیتال متوالی است. این واحد دارای 19 کانال چندمنظوره است که امکان اندازه گیری سیگنال از 16 منبع خارجی، دو منبع داخلی و کانال VBAT را دارد. تبدیل A/D کانال ها را می توان در حالت تکی، پیوسته ، پایش یا ناپیوسته انجام داد. نتیجه ی تبدیل ADC در یک ریجیستر داده ی 16 بیتی تراز راست یا چپ ذخیره می شود.

قابلیت دیگر این واحد، ویژگی نگهبان (watchdog) آنالوگ است که اجازه می دهد برنامه تشخیص دهد که ولتاژ ورودی از آستانه تعریف شده ی کاربر بالاتر یا پایین تر است.

ویژگی های واحد ADC

• دقت 6، 8، 10، 12 بیتی
• تولید وقفه در پایان تبدیل، در انتهای تبئیل تزریق شده و در موردی که نگهبان آنالوگ یا اعلان overrun
• مد های تبدیل پیوسته و تکی
• حالت پایش برای تبدیل اتوماتیک از کانال 0 تا n
• کانال های هشمند برای برنامه ریزی زمان نمونه برداری
• پیکربندی DMA برای ذخیره ی داده دوگانه/سه گانه ی حالت های ADC
• پیکربندی تاخیر بین تبدیل ها
• نیازمندی منبع 2.4 الی 3.6 ولت برای سرعت کامل و تا 1.8 ولت برای سرعت کمتر
• محدوده ورودی ولتاژ ADC: بزگتر از VREF- و کوچکتر از VREF+


توصیف عملکرد ADC

بلوک دیاگرام واحد ADC در شکل نمایش داده شده است و می توانید واحد های داخلی ADC را برای میکروکنترلر STM32F4x مشاهده کنید:


آموزش ADC، بلوک دیاگرام واحد تبدیل آنالوگ به دیجیتال

پین های ADC در جدول زیر نمایش داده شده است، این پین ها معمولا در همه ی میکروکنترلر ها به صورت استاندارد برای واحد ADC نام گذاری می شوند:

نام

نوع سیگنال

ملاحظات

VREF+

ورودی، مرجع مثبت آنالوگ

1.8 V ≤VREF+ ≤VDDA

VDDA

ورودی، تغذیه آنالوگ

2.4 V ≤VDDA ≤VDD (3.6 V) for full speed

1.8 V ≤VDDA ≤VDD (3.6 V) for reduced speed

VREF-

ورودی، مرجع منفی آنالوگ

VREF– = VSSA

VSSA

ورودی، تغذیه آنالوگ منفی

equal to VSS

ADCx_IN[15:0]

سیگنال های وروی آنالوگ

16 کانال ورودی آنالوگ


فعال یا غیر فعال سازی واحد ADC

واحد ADC توسط تنظیم بیت ADON در ریجیستر ADC_CR2 فعال می شود. هنگامی که بیت ADON برای اولین بار تنظیم می شود، واحد ADC از حالت Power-down خارج می شود. تبدیل (Conversion) آنالوگ به دیجیتال زمانی شروع می شود که بیت SWSTART یا JSWSTART تنظیم شده باشد. شما می توانید با پاک کردن بیت ADON تبدیل را متوقف و واحد ADC را در حالت Power-down قرار دهید. در این حالت واحد ADC تقریبا توانی مصرف نمی کند (فقط چند μA).

کلاک ADC

واحد ADC دارای دو نوع کلاک است:

  • کلاک برای مدار آنالوگ: ADCCLK، رایج برای همه ADC ها
    این ساعت از کلاک APB2 تقسیم شده توسط یک prescaler، قابل برنامه ریزی است که اجازه می دهد تا ADC در fPCLK2 / 2، /4، /6 یا /8 کار کند. برای حداکثر مقدار ADCCLK به سند فنی ها مراجعه کنید.
  • کلاک برای رابط دیجیتال (برای دسترسی به خواندن / نوشتن ریجیستر ها)
    این کلاک برابر با کلاک APB2 است. کلاک رابط دیجیتال را می توان برای هر ADC از طریق ریجیستر فعال سازی کلاک خارجی RCC APB2 بصورت جداگانه فعال یا غیرفعال کرد (RCC_APB2ENR).

انتخاب کانال واحد ADC

هر واحد ADC شامل 16 کانال چندگانه(multiplexed) است، تبدیل آنالوگ به دیجیتال قابلیت سازماندهی به دو گروه را دارد:

  • منظم(regular)
  • و تزریق شده(injected)

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

ADC_IN3، ADC_IN8، ADC_IN2، ADC_IN2، ADC_IN0، ADC_IN2، ADC_IN2، ADC_IN15

  • یک گروه منظم(regular) می تواند ماکزیمم از 16 تبدیل تشکیل شود. کانال های منظم و ترتیب آنها در توالی تبدیل باید در ریجیستر های ADC_SQRx انتخاب شوند. تعداد کل تبدیلات در گروه منظم باید در بیت [L[3:0 در ریجیستر ADC_SQR1 نوشته شود.
  • یک گروه تزریق شده(injected) می تواند ماکزیمم از 4 تبدیل تشکیل شود. کانال های تزریق شده و ترتیب آنها در توالی تبدیل باید در ریجیستر ADC_JSQR انتخاب شوند. تعداد کل تبدیلات در گروه تزریق شده باید در بیت [L[1:0 در ریجیستر ADC_JSQR نوشته شود.

کانال های داخلی سنسور دما، VREFINT و VAR

  • برای سری STM32F40x و STM32F41x، سنسور دما به صورت داخلی به کانال ADC1_IN16 وصل شده است. مرجع ولتاژ داخلی برای VREFINT به کانال ADC1_IN17 متصل شده است.
  • برای سری STM32F42x و STM32F43x، سنسور دما به صورت داخلی به کانال ADC1_IN18 متصل شده که با VBAT مشترک است. تنها یکی از تبدیل ها بایستی انتخاب شود، هنگامی که هر دو همزمان تعیین شوند تنها VBAT انجام می شود. مرجع ولتاژ داخلی برای VREFINT به کانال ADC1_IN17 متصل شده است.
    کانال VBAT، که به کانال ADC1_IN18 متصل شده است، همچنین می تواند بعنوان کانال تزریق شده یا عادی استفاده شود.
  • سنسور دما محدوده کارکردی 40- الی 125 درجه سانتی گراد داشته و دارای دقت 1.5 درجه ی سانتی گراد می باشد.

حالت های پیکربندی ADC

دو حالت مستقل یا Independent و دوتایی یا DUAL برای ADC قابل پیکربندی است.
در حالت مستقل پنج حالت تبدیل وجود دارد:

  1. یک کانال، حالت تبدیل تکی (Single-channel, single conversion mode)
  2. چند کانال (پایش)، حالت تبدیل تکی (Multichannel (scan), single conversion mode)
  3. حالت تبدیل پیوسته ی یک کانال (Single-channel continuous conversion mode)
  4. حالت تبدیل پیوسته ی چند کانال (پایش) (Multichannel (scan) continuous conversion mode)
  5. حالت تبدیل تزریق شده (Injected conversion mode)

یک کانال، حالت تبدیل تکی

(Single-channel, single conversion mode)

این ساده ترین حالت ADC است. در این حالت ، ADC یک تیدل (یک نمونه) از یک تک کانال x را اجرا می کند و بعد از اتمام تبدیل کار را خاتمه می دهد.


آموزش ADC، تبدیل آنالوگ به دیجیتال کانال ها

مثالی از کاربرد

این حالت می تواند برای اندازه گیری یک سطح ولتاژ برای تصمیم گیری آنکه سیستم شروع به کار نماید یا نه، مورد استفاده قرار گیرد. مثلا اندازه گیری سطح ولتاز باتری قبل از اینکه سیستم شروع به کار نماید: اگر باتری در سطح low بود پیامی ظاهر شود و کاربر را مطلع کند و سیستم را شروع به کار ننماید.

چند کانال (پایش)، حالت تبدیل تکی

(Multichannel (scan), single conversion mode)

این حالت برای تبدیل بعضی کانال ها به صورت متوالی در حالت مستقل استفاده می شود. با استفاده از ترتیب سنج ADC، می توانید از این حالت ADC برای پیکربندی هر دنباله تا 16 کانال به طور پیوسته با زمان نمونه گیری متفاوت و در سفارش های مختلف استفاده کنید. بعنوان نمونه:


آموزش ADC، تبدیل آنالوگ به دیجیتال چند کانال

به این ترتیب، شما لازم نیست که ADC را در طول فرایند تبدیل متوقف کنید تا کانال بعدی را با زمان نمونه برداری متفاوت تنظیم مجدد کنید. این حالت موجب صرفه جویی در بار اضافی CPU و توسعه نرم افزار سنگین می شود.


آموزش ADC، تبدیل آنالوگ به دیجیتال چند کانال متوالی

مثالی از کاربرد

این حالت می تواند هنگام شروع یک سیستم برای دانستن برخی از پارامترها مانند مختصات نوک بازو در یک سیستم کنترلی بازو استفاده شود. در این مورد، شما باید موقعیت هر یک از مفصل ها را در سیستم کنترلی بازو در حالت power-on بخوانید تا مختصات نوک بازو را به دست بیاورد.

این حالت همچنین می توانید برای اندازه گیری سطوح مختلف سیگنال (ولتاژ، فشار، دما، و غیره) به تنهایی استفاده شود تا برای آغاز بکار یا توقف سیستم به منظور حفاظت از تجهیزات و افراد تصمیم گیری شود.
همچنین می تواند برای تبدیل سیگنال های ناشی از فشار سنج ها برای تعیین جهت ها و مقادیر مختلف سوپاپ ها و تغییر شکل یک شیء مورد استفاده قرار گیرد.

حالت تبدیل پیوسته ی یک کانال

(Single-channel continuous conversion mode)

حالت تبدیل پیوسته ی یک کانال، یک کانال را به طور مداوم و به طور نامحدود در کانال منظم تبدیل می کند.
ویژگی حالت مداوم اجازه می دهد تا ADC در پس زمینه کار کند. ADC کانال ها را بدون هیچ مداخله ای از CPU به طور مداوم تبدیل می کند. علاوه بر این، DMA را می توان در حالت حلقه ای (circular) استفاده کرد، در نتیجه بار CPU کاهش می یابد.
این مثال از دو روش استفاده می کند: وقفه ها و DMA. برای انتخاب هر یک از دو مورد به سادگی define USE_DMA_Transfer# را در main.c اضافه کنید یا کامنت گذاری کنید. البته قبل از هر کاری اسناد مربوط به پیکربندی را مطالعه کنید.


آموزش ADC، تبدیل آنالوگ به دیجیتال پیوسته

مثالی از کاربرد

این حالت ADC می تواند برای نظارت بر ولتاژ باتری، اندازه گیری و تنظیم درجه حرارت اجاق و غیره اجرا شود.
در مورد تنظیم درجه حرارت اجاق گاز، درجه حرارت خوانده می شود و با دمای تعیین شده توسط کاربر مقایسه می شود. هنگامی که درجه حرارت اجاق به دمای مورد نظر می رسد، مقاومت گرمایی خاموش می شود.

حالت تبدیل پیوسته ی چند کانال (پایش)

(Multichannel (scan) continuous conversion mode)

حالت پیوسته ی چند کانال یا پایش را می توان برای تبدیل بعضی کانال ها به صورت متوالی با ADC در حالت مستقل استفاده کرد. با ترتیب سنج، شما می توانید هر دنباله ای از 16 کانال را به طور پیوسته با زمان نمونه برداری متفاوت و سفارشات مختلف پیکربندی کنید. این حالت شبیه به حالت تبدیل تکی چند کاناله است به جز اینکه پس از آخرین کانال دنباله تبدیل متوقف نمی شود و ترتیب تبدیل از کانال اول دوباره شروع می شود و به طور نامحدود ادامه می یابد.


آموزش ADC، تبدیل آنالوگ به دیجیتال پیوسته

مثالی از کاربرد

این حالت می تواند برای نظارت بر ولتاژ و درجه حرارت چندگانه در یک شارژر باتری چند منظوره استفاده شود. ولتاژ و دمای هر یک از باتری ها در طول فرآیند شارژ خوانده می شوند. هنگامی که ولتاژ یا درجه حرارت به حداکثر سطح می رسد، باتری مربوطه بایستی از شارژر جدا شود.

حالت تبدیل تزریق شده

(Injected conversion mode)

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


آموزش ADC، تبدیل آنالوگ به دیجیتال حالت تزریق شده

مثالی از کاربرد

این حالت می تواند برای همگام سازی تبدیل کانال ها به یک رویداد استفاده شود. جالب است که در کاربرد های کنترل موتور، سوئیچینگ ترانزیستور نویز ایجاد می کند که اندازه گیری های ADC را تحت تاثیر قرار می دهد و باعث تبدیل اشتباه می شود. با استفاده از یک تایمر، حالت تبدیل تزریق می تواند به منظور تأخیر اندازه گیری های ADC پس از سوئیچینگ ترانزیستور اجرا شود.


وقفه های ADC

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

رویداد وقفه

پرچم رویداد

بیت کنترل فعال سازی

پایان تبدیل یک گروه عادی

EOC

EOCIE

پایان تبدیل یک گروه تزریق شده

JEOC

JEOCIE

وضیعت بیت نگهبان آنالوگ تنظیم شده

AWD

AWDIE

Overrun

OVR

OVRIE

0 پاسخ

پاسخ دهید

میخواهید به بحث بپیوندید؟
مشارکت رایگان.

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

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