ADC در میکروکنترلرهای STM32F1 یک واحد مهم است که در کنار واحدهای دیگر در داخل میکروکنترلر قرار گرفته است. ADC مخفف Analog to Digital Converter به معنی مبدل آنالوگ به دیجیتال است. مبدل آنالوگ به دیجیتال STM32F1 دوازده بیتی است. در ادامه با بخشی از آموزش ADC در STM32 با موضوع اصطلاحات ADC در میکروکنترلرهای STM32F1 با ما همراه باشید.
زمانی که بخواهیم یک سیگنال آنالوگ را به عنوان ورودی به میکروکنترلر STM32 بدهیم، باید از پایه های ADC استفاده کنیم. همۀ آی سی های دیجیتال از جمله میکروکنترلرها تنها قابلیت فهم و تحلیل سیگنال های دیجیتال را دارد. بنابراین در صورت ورود یک سیگنال آنالوگ، به بلوکی به نام ADC جهت تبدیل سیگنال آنالوگ به دیجیتال نیاز است. بلوک ADC سیگنال آنالوگ ورودی یک میکروکنترلر را به عنوان ورودی از پایه های مخصوص خود دریافت می کند و در نهایت، خروجی را در یک رجیستر قرار می دهد. به این معنی که ورودی بلوک ADC، آنالوگ و خروجی این بلوک دیجیتال است. برای آشنایی با واحد ADC میکروکنترلرهای AVR به نوشتۀ «آموزش مبدل آنالوگ به دیجیتال ADC میکروکنترلرهای AVR» مراجعه فرمایید.
راه اندازی ADC در AVR (فیلم آموزش AVR مقدماتی – فیلم آموزش ADC در میکروکنترلرهای AVR)
راه اندازی ADC در STM32 (فیلم آموزش ARM STM32 مقدماتی – فیلم آموزش ADC در STM32)
راه اندازی ADC در آردوینو (فیلم آموزش آردوینو مقدماتی – فیلم آموزش ADC در آردوینو)
رزولوشن و فرکانس نمونه برداری در ADC
در ADC دو موضوع مهم دارد. به این معنی که اگر بخواهید ADC دو میکروکنترلر را بررسی کنید، باید به این دو موضوع توجه کرده و آن ها را با یکدیگر مقایسه کنید. آموزش این دو موضوع از ارکان مهم آموزش ADC STM32 است.
دقت ADC یا رزولوشن ADC
دقت یا رزولوشن ADC به تعداد حالاتی می گوییم که ولتاژ مرجع ADC بر آن تقسیم می شود. رزولوشن ADC بر اساس بیت بیان می شود. مثلاً می گوییم ADC میکروکنترلر STM32F1 برابر 12 بیت است. بنابراین ولتاژ مرجع بر 2 به توان 12 تقسیم می شود. هر چه رزولوشن ADC بیشتر باشد، دقت ADC بالاتر خواهد بود. یک مثال دیگر این است که اگر ADC میکروکنترلر مورد نظر ما 8 بیتی باشد و ولتاژ مرجع میکروکنترلر 3.3 ولت باشد، برای محاسبۀ دقت این بلوک ADC لازم است تا مقدار 3.3 ولت را بر 2 به توان 8 تقسیم کنید. یعنی دقت اندازه گیری این بلوک ADC در این میکروکنترلر حدوداً 0.0129 ولت خواهد بود. پس اگر ورودی بلوک ADC، 0.001 ولت باشد، بلوک ADC مقدار 0 (از 255) را در خروجی قرار می دهد و اگر ولتاژ ورودی 0.013 ولت باشد، بلوک ADC مقدار 1 (از 255) را در خروجی قرار می دهد. اگر مقدار ولتاژ ورودی برابر 3.3 ولت باشد، خروجی ADC برابر 255 خواهد بود. با توجه به این توضیح می توان گفت اگر ورودی آنالوگ بین صفر تا Vref تغییر کند، خروجی دیجیتال بین صفر تا 2n – 1 تغییر می کند. برای مشاهدۀ فرمول محاسبۀ خروجی ADC نسبت به ورودی آنالوگ، به نوشتۀ آموزش ADC میکروکنترلرهای AVR مراجعه کنید.
فرکانس نمونه برداری ADC
به عنوان مثال، بلوک ADC یک میکروکنترلر دارای فرکانس نمونه برداری 100 کیلوهرتز است. این فرکانس اهمیت بسیار زیادی دارد. چون اگر فرکانس کاری سیگنال ورودی 200 باشد، این یعنی فرکانس نمونه برداری میکروکنترلر، نصف فرکانس سیگنال مورد نظر است. در نتیجه در هر دو سیکل از سیگنال، تنها یک نمونه از سیگنال خواهیم داشت در صورتی که بنابر نیاز گاهی لازم است از سیگنال ورودی در هر سیکل ده الی بیست بار نمونه برداری شود پس باید فرکانس نمونه برداری بلوک ADC میکروکنترلر ده الی بیست برابر فرکانس سیگنال ورودی مورد نظر باشد.
فرکانس نمونه برداری ADC، در برخی کاربردها بسیار اهمیت دارد و در برخی از کاربردهای دیگر اهمیت به سزایی ندارد. برای مثال زمانی که دما اندازه گیری می شود در هر دقیقه و هر ساعت دما تغییر زیادی نخواهد داشت، در نتیجه نمونه برداری های زیادی نیز در هر ساعت لازم نیست.
تقسیم بندی ADC بر اساس عملکرد و ساختار داخلی
ADC ها را بر اساس نحوۀ عملکرد و ساختار داخلی به چهار روش اصلی تقسیم می کنند:
- روش Flash ADC یا روش آنی یا همزمان؛
- روش Sigma ADC ؛
- روش Successive Approximation ADC یا ADC تقریب متوالی؛
- روش ADC Comparison .
هر کدام از روش ها، دارای معماری داخلی متفاوتی هستند و هر کدام با استفاده از روشی به خصوص سیگنال آنالوگ را به سیگنال دیجیتال تبدیل می کنند. اما این تبدیل در هر چهار روش به دو مرحلۀ ثابت Sample and Hold و Quantizer تقسیم می شود.
بررسی چند اصطلاح در واحد ADC در میکروکنترلرهای STM32F1
اکنون می خواهیم چند اصطلاح معروف و کاربردی مربوط به واحد ADC در میکروکنترلرهای STM32F1 را بررسی کنیم.
مد Dual در ADC و مد Independent در ADC
میکروکنترلرهای STM32F1 دارای چند واحد ADC است. اگر از هر کدام از این واحدهای ADC به صورت جداگانه و مستقل استفاده شود، به آن مد Independent گفته می شود و اگر از دو واحد ADC به صورت همزمان استفاده شود، به آن، مد Dual گفته می شود. به عنوان مثال اگر ما از ADC1 و ADC2 به طور همزمان استفاده کنیم، می توان دو مقدار را به صورت همزمان تبدیل کرده و دریافت کرد. مثلاً زمانی که بخواهید مقدار دما و رطوبت را در هر لحظه داشته باشید، می توانید از مد Dual استفاده کنید. در این مد تنها می توان از دو واحد ADC به صورت همزمان استفاده کرد و اگر میکروکنترلر ما دارای سه واحد ADC باشد، ADC سوم باید به صورت مستقل و جدا مورد استفاده قرار می گیرد.
مد Single Channel در ADC و مد Multi Channel در ADC
می دانیم واحد ADC در میکروکنترلرهای STM32F1 دارای چندین پایه است. اگر تنها یک پایه را به عنوان ورودی ADC بخوانیم، یعنی از مد Single Channel در ADC استفاده کرده ایم و اگر چند پایه را به عنوان ورودی قرائت کنیم، یعنی از مد Multi Channel در ADC استفاده کرده ایم. به عنوان مثال فرض کنید بخواهید از پورت A1 که دارای قابلیت ADC است استفاده کنید و از پایه های دیگر پورت A نیز به عنوان GPIO بهره ببرید. در این حالت لازم است تا ADC را بر روی کانال Single تنظیم کنید.
مد تبدیل Single در ADC و مد تبدیل Continuous در ADC
اگر در هنگام وقوع یک واقعه، عمل نمونه برداری از سیگنال ورودی آنالوگ و تبدیل آن به سیگنال دیجیتال صورت گیرد، می گوییم مد تبدیلSingle است و اگر ورودی آنالوگ به صورت مداوم به میکروکنترلر وارد شود و تبدیل آنالوگ به دیجیتال به صورت مداوم انجام شود، به این حالت مد تبدیل Continuous می گویند.
مد تبدیل Regular در ADC و مد تبدیل Injected در ADC
زمانی که از سیگنال آنالوگ ورودی، نمونه برداری انجام می شود، مقادیر نمونه برداری شده جهت تبدیل می تواند وارد مد تبدیلRegular و یا مد تبدیل Injected شود. تفاوت میان این دو مد در اولویت آن هاست. مد تبدیل Injected دارای اولویت بالاتری نسبت به مد تبدیل Regular است. به این معنی که اگر یک تبدیل در مد تبدیل Regular در حال انجام باشد و در همان زمان یک تبدیل جدید بخواهد در مد تبدیل Injected شروع شود، عملیات تبدیل در مد تبدیل Regular متوقف شده، تبدیل با مد تبدیل Injected شروع می شود و به طور کامل انجام می شود و در نهایت پس از اتمام عملیات تبدیل در مد تبدیل Injected، مد تبدیل Regular که کار خود را نیمه کاره رها کرده بود، از ابتدا دوباره شروع به کار می کند و تبدیل خود را کامل می کند.
داشتن دو واحد برای انجام تبدیل آنالوگ به دیجیتال در میکروکنترلرهای STM32F1، باعث می شود که مدهای عملیاتی مختلفی وجود داشته باشد و کار با واحد ADC در میکروکنترلرهای STM32F1 دارای انعطاف بیشتری باشد.
کاربرد ADC در میکروکنترلرهای STM32F1
از کاربردهای ADC در میکروکنترلرهای STM32 می توان به تبدیل خروجی سنسورهای آنالوگ دما به دیجیتال، تبدیل سیگنال صوت به دیجیتال، تبدیل سیگنال سنسور وزن، تبدیل سیگنال سنسور اکسیژن، تبدیل سیگنال سنسور دود (سنسورهای دود اکثراً به صورت آنالوگ هستند اما به تازگی سنسورهای دیجیتال دود نیز روانۀ بازار شده است)، آمپرمتر، ولت متر، اسیلوسکوپ، فتوسل (مقاومت متغیر با نور) و … اشاره کرد. به صورت کلی هر عنصری که خروجی اش آنالوگ باشد و بخواهیم به عنوان ورودی به میکروکنترلر دهیم، به بلوک ADC نیاز دارد.
تصویر 1 – تصویر یک فتوسل
تصویر 2 – تصویر یک سنسور دود
تصویر 3 – تصویر یک سنسور وزن
تصویر 4 – تصویر اسیلوسکوپ
از بررسی اصطلاحات ADC در میکروکنترلرهای STM32F1 نتیجه می گیریم:
- جهت پردازش هر سیگنال آنالوگ با میکروکنترلرها باید از واحد ADCآنها استفاده شود.
- رزولوشن ADC یک ملاک بسیار مهم است که به معنی مقدار هر Stepو در نهایت دقت اندازه گیری می باشد.
- فرکانس نمونه برداری ADC در میکروکنترلرهای STM32F1 را باید با توجه به نیاز و کاربرد تعیین کرد.
- ADC در میکروکنترلرهای STM32F1 دارای رزولوشن 12 بیتی است.
- برای اندازه گیری خروجی بسیاری از سنسورها با میکروکنترلرها، نیاز به استفاده از واحد ADC است. عوامل محیطی مانند دما، وزن، دود، اکسیژن و … .
- اگر از هر واحد ADC در میکروکنترلرهای STM32F1 به صورت جدا و مستقل استفاده شود، یعنی از واحد ADC در مد Independent استفاده شده است.
- تفاوت میان دو مد تبدیل Regular و مد تبدیل Injected ، در اولویت آن ها در انجام تبدیل آنالوگ به دیجیتال است.
سلام آقای اسدی. لطفا توی یک چند جمله می فرمایید که ADC توی میکروکنترلرهای STM32 چه تفاوت هایی با ADC توی AVR داره؟
سلام. من تفاوت های ADC میکروکنترلرهای سری STM32F1 و میکروکنترلرهای AVR ATmega128 رو به طور کلی میگم. توی ATmega128 ما یه واحد ADC داریم که 8 بیتیه. توی STM32F1 دو واحد ADC با رزولوشن 12 بیت داریم. ADC توی STM32F1 دارای سنسور دمای داخلیه همچنین یه Analog Watchdog در میکروکنترلرهای STM32 هست که میتونیم برای ورودی آنالوگ محدوده تعیین کنیم که در صورت خروج مقدار ورودی از اون محدوده، یه وقفه اتفاق میفته. به خاطر این که دو واحد ADC توی میکروکنترلرهای STM32F1 وجود داره، مفاهیمی مثل Dual Mode و Independent Mode به وجود میاد که توی متن توضیح داده شده. همچنین ADC توی میکروکنترلرهای STM32F1 تعداد وقفه های بیشتری نسبت به ADC میکروکنترلرهای ATmega128 وجود داره. برای آشنایی بیشتر با ADC در میکروکنترلرهای AVR به نوشتۀ آموزش ADC میکروکنترلرهای AVR مراجعه کنید.
سلام مطالب بسیار ساده ورروان بیان شده که نشان درک درست و عمیق شما از مباحث دارد و ممنون از اشتراک دانشتون. امیدوارم توضیحات بیشتری از بخش" تقسیم بندی ADC بر اساس عملکرد و ساختار داخلی" ارائه بدید .
سلام دوست عزیز. ممنون از نظرتون . ان شاءالله در آینده این موضوع رو مورد بحث قرار میدیم
با سلام و عرض ادب. من تو یک سایت دیدم که نوشته کنترل سطح اب با میکرو کنترل بدون نیاز به سنسور. ایا این امکان پذیر است؟
بدین صورت که از adc استفاده میشه. یک پراب با مقاومت ۴۷ کیلو اهم و یک طرف سیم نیز به vcc وصل میشه.
آیا این امکان پذیر است؟
سلام. من دقیق نمیدونم منظور از مطالب اون سایتی که میفرمایید چی هست. به هر حال اون مقاومت 47 کیلواهمی که استفاده میشه و پرابی که ساخته میشه خودش حکم سنسور داره. حالا دقیق نمیدونم از چه خاصیتی برای تغییر ولتاژ خروجی اون مدار پراب استفاده میکنه. اون مدار اگر خروجی آنالوگ داشته باشه و به طور صحیح با کم و زیاد شدن سطح آب ولتاژ خروجیش تغییر کنه و پایدار باشه ، میشه این کارو کرد. منظورم از پایدار بودن اینه که مثلا اگه امروز برای سطح آب خروجی مدار پراب 1.5 ولت شد، فردا هم اگه سطح آب همون اندازه بود، باز خروجی مدار 1.5 ولت باشه. یعنی خروجی پراب فقط به سطح آب وابسته باشه و نه پارامترهای دیگه.