آشنایی با برخی اصطلاحات ADC در میکروکنترلرهای STM32F1

توسط | 19 اسفند, 1398 | میکروکنترلر | 6 دیدگاه ها

اصطلاحات ADC در میکروکنترلرهای STM32F1، رزولوشن و فرکانس نمونه برداری ADC، مد Dual و مد Independent در ADC، مد Single Channel و مد Multi Channel در ADC، مد تبدیل Single و مد تبدیل Continuous در ADC، مد تبدیل Regular و مد تبدیل Injected در ADC، کاربرد ADC در میکروکنترلرهای STM32F1
اصطلاحات-adc-stm32

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-کاربرد-adc-فتوسل

تصویر 1 – تصویر یک فتوسل

2-کاربرد-adc-سنسور-دود

تصویر 2 – تصویر یک  سنسور دود

3-کاربرد-adc-سنسور-وزن

تصویر 3 – تصویر یک  سنسور وزن

4-کاربرد-adc-میکروکنترلرهای-stm32f1-اسیلوسکوپ

تصویر 4 – تصویر اسیلوسکوپ

از بررسی اصطلاحات ADC در میکروکنترلرهای STM32F1 نتیجه می گیریم:

  1. جهت پردازش هر سیگنال آنالوگ با میکروکنترلرها باید از واحد ADCآنها استفاده شود.
  2. رزولوشن ADC یک ملاک بسیار مهم است که به معنی مقدار هر Stepو در نهایت دقت اندازه گیری می باشد.
  3. فرکانس نمونه برداری ADC در میکروکنترلرهای STM32F1 را باید با توجه به نیاز و کاربرد تعیین کرد.
  4. ADC در میکروکنترلرهای STM32F1 دارای رزولوشن 12 بیتی است.
  5. برای اندازه گیری خروجی بسیاری از سنسورها با میکروکنترلرها، نیاز به استفاده از واحد ADC است. عوامل محیطی مانند دما، وزن، دود، اکسیژن و … .
  6. اگر از هر واحد ADC در میکروکنترلرهای STM32F1 به صورت جدا و مستقل استفاده شود، یعنی از واحد ADC در مد Independent استفاده شده است.
  7. تفاوت میان دو مد تبدیل Regular و مد تبدیل Injected ، در اولویت آن ها در انجام تبدیل آنالوگ به دیجیتال است.

 

رضا اسدی

رضا اسدی

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

آموزش میکروکنترلرهای ARM سری STM32 یوبرد

آموزش میکروکنترلرهای AVR یوبرد

آموزش میکروکنترلرهایARM سری LPC یوبرد

آموزش Arduino یوبرد

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

راه-اندازی-dac-stm32

راه اندازی DAC در STM32

راه اندازی DAC در STM32، ویژگی های DAC در میکروکنترلرهای STM32F1، بلوک دیاگرام DAC در STM32، اتصالات راه اندازی DAC در میکروکنترلر STM32F107VC، نمونه کد رجیستری راه اندازی واحد DAC در میکروکنترلرهای STM32F1، ساخت موج سینوسی با STM32، راه اندازی مبدل دیجیتال به آنالوگ STM32 با توابع HAL

راه-اندازی-سون-سگمنت-با-آردوینو

راه اندازی سون سگمنت با آردوینو

راه اندازی سون سگمنت با آردوینو UNO، راه اندازی سون سگمنت 4 تایی آند مشترک با آردوینو، اتصال سون سگمنت به آردوینو، کتابخانۀ سون سگمنت برای آردوینو، نمونه کد راه اندازی سون سگمنت، نمایش اعداد در سون سگمنت 4 تایی، نکات راه اندازی سون سگمنت

راه-اندازی-adc-در-آردوینو

راه اندازی ADC در آردوینو

راه اندازی ADC در آردوینو، راه اندازی LCD گرافیکی KS0108 با کتابخانۀ U8g2، اتصالات لازم برای راه اندازی ADC و LCD گرافیکی KS0108، نمونه کد راه اندازی ADC آردوینو، فرمول محاسبۀ دما با TMP36، راه اندازی سنسور دما با آردوینو، راه اندازی فتوسل (LDR) با آردوینو

کنترل موتور براشلس با STM32

از ویژگی‌های تایمرهای Advanced میکروکنترلرهای STM32، امکان ایجاد PWM شش مرحله‌ای است. PWM شش مرحله‌ای در کنترل موتورهای براشلس کاربرد دارد و در STM32 می‌توان با تایمرهای Advanced، موتورهای براشلس را کنترل کرد. PWM شش مرحله‌ای نسبت به روش‌های دیگر کنترل موتور براشلس، عملکرد بهتر، مصرف انرژی کمتر و سطح ایمنی بالاتری را فراهم می‌آورد.

از مباحث آموزش STM32

فیوزبیت EESAVE

برای جلوگیری از پاک شدن محتوای حافظۀ EEPROM داخلی میکروکنترلرهای AVR در هنگام پاک کردن حافظۀ فلش آن، فیوزبیتی به نام EESAVE وجود دارد که باید فعال شود. در غیر این صورت، هر بار که حافظۀ فلش پاک می‌شود، حافظۀ EEPROM نیز پاک می‌شود. فیوزبیت EESAVE به صورت پیش‌فرض غیر فعال است و برای حفظ محتوای EEPROM باید فعال شود. حفظ محتوای EEPROM در بسیاری از پروژه‌ها ضروری است.

از مباحث آموزش AVR

تفاوت Event با وقفه در STM32

در میکروکنترلرهای STM32، علاوه بر وقفه‌های خارجی، Eventهای خارجی هم وجود دارند. تفاوت Event خارجی با وقفۀ خارجی این است که در وقفۀ خارجی، اجرای کد وجود دارد و با اتفاق افتادن آن، کدهای روتین وقفه اجرا می‌شوند، اما در Event خارجی، اجرای کد وجود ندارد و اتفاق افتادن آن فقط باعث می‌شود  میکروکنترلر از مد کاهش مصرف توان خارج شود.

از مباحث آموزش STM32

کلاک خروجی در STM32

در میکروکنترلرهای STM32، قابلیتی وجود دارد که می‌توان از برخی قسمت‌های واحد RCC، یک سیگنال کلاک را انتخاب کرد و آن را روی یک پایۀ خروجی تحت عنوان MCO قرار داد. سیگنال کلاک خروجی می‌تواند از قسمت‌هایی نظیر کلاک سیستم، خروجی PLLها، خروجی اسیلاتورهای HSE و HSI یا از بخش‌هایی دیگر باشد. این سیگنال خروجی می‌تواند برای سنکرون سازی و یا تأمین کلاک یک مدار یا آی سی دیگر به کار رود.

از مباحث آموزش STM32

وقفۀ Pin change در AVR

در برخی میکروکنترلرهای AVR، وقفه‌های Pin change وجود دارند که تفاوتشان با وقفۀ خارجی این است که در وقفۀ خارجی می‌توان تعیین کرد وقفه با لبۀ پایین‌رونده یا بالارونده یا تغییر سطح اتفاق بیفتد، اما وقفۀ Pin change با هر لبه یا تغییر سطح سیگنال اتفاق می‌افتد. همچنین هر وقفۀ خارجی با تحریک تنها یک پایۀ ورودی اتفاق می‌افتد. اما هر وقفۀ Pin change، چند پایۀ ورودی دارد و تحریک هر یک از آنها، باعث اتفاق افتادن وقفۀ Pin change می‌شود.
از مباحث آموزش آردوینو

خواندن فرکانس و دیوتی سایکل با آردوینو

یک روش برای خواندن Duty Cycleو فرکانس موج PWM ، قابلیت Capture تایمرهاست. برای بردهای آردوینو مبتنی بر AVR، کتابخانۀ TimerOne،  فاقد قابلیت کپچر است. اما در کتابخانۀ HardwareTimer میکروکنترلرهای STM32 در آردوینو، می‌توان از کپچر استفاده کرد و مد input PWM تایمرهای STM32 را فعال کرد و دو کپچر را به کار گرفت و فرکانس و دیوتی سایکل موج ورودی را خواند.

از مباحث آموزش آردوینو

اولویت وقفه‌ها در STM32

 

از مباحث آموزش stm32در میکروکنترلرهای STM32، قابلیتی وجود دارد که می‌توان از برخی قسمت‌های واحد RCC، یک سیگنال کلاک را انتخاب کرد و آن را روی یک پایۀ خروجی تحت عنوان MCO قرار داد. سیگنال کلاک خروجی می‌تواند از قسمت‌هایی نظیر کلاک سیستم، خروجی PLLها، خروجی اسیلاتورهای HSE و HSI یا از بخش‌هایی دیگر باشد. این سیگنال خروجی می‌تواند برای سنکرون سازی و یا تأمین کلاک یک مدار یا آی سی دیگر به کار رود.

از مباحث آموزش STM32

6 دیدگاه ها

  1. سلام آقای اسدی. لطفا توی یک چند جمله می فرمایید که 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 مراجعه کنید.

      پاسخ
  2. سلام مطالب بسیار ساده ورروان بیان شده که نشان درک درست و عمیق شما از مباحث دارد و ممنون از اشتراک دانشتون. امیدوارم توضیحات بیشتری از بخش" تقسیم بندی ADC بر اساس عملکرد و ساختار داخلی" ارائه بدید .

    پاسخ
    • سلام دوست عزیز. ممنون از نظرتون . ان شاءالله در آینده این موضوع  رو مورد بحث قرار میدیم

      پاسخ
  3. با سلام و عرض ادب. من تو یک سایت دیدم که نوشته کنترل سطح اب با میکرو کنترل بدون نیاز به سنسور. ایا این امکان پذیر است؟
    بدین صورت که از adc استفاده میشه. یک پراب با مقاومت ۴۷ کیلو اهم و یک طرف سیم نیز به vcc وصل میشه.

    آیا این امکان پذیر است؟

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

      پاسخ

یک دیدگاه بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

ضبط پیام صوتی

زمان هر پیام صوتی 4 دقیقه است