ARM, آموزش, آموزش STM8, توصیه شده, مقاله های سیسوگ

مبدل آنالوگ به دیجیتال (ADC) | قسمت دوازدهم آموزش STM8

ADC in STM8

سیسوگ در قسمت یازدهم آموزش میکروکنترلر STM8 راه اندازی LCD کاراکتری توسط میکروکنترلر STM8 را آموزش داد. در این قسمت از مجموعه مقالات آموزش میکروکنترلر STM8 سیسوگ قصد دارد مبحث مهم  و کاربردی مبدل آنالوگ به دیجیتال (ADC) را آموزش دهد. با سیسوگ همراه باشید.

 

مبدل آنالوگ به دیجیتال (ADC):

گاهی لازم است ورودی آنالوگ به میکروکنترلر داده شود  و این ورودی مورد پردازش قرار گیرد. در میکروکنترلرهای مدرن امروزی مبدل آنالوگ به دیجیتال (ADC) قابلیت مهمی به شمار می آید. برای خواندن خروجی آنالوگ از سنسورها، اندازه گیری ولتاژ و غیره از ADC استفاده می شود. برای مثال، ما می‌توانیم از یک ADC  برای خواندن سنسور دمای LM35 استفاده کنیم. ولتاژ خروجی سنسور متناسب با درجه حرارت است و ما می‌توانیم از اطلاعات ولتاژ برای محاسبه دما استفاده کنیم. میکروکنترلر STM8  دارای چندین کانال و بلوک ADC است. به عنوان مثال، STM8S3F3 دارای 5 کانال و یک بلوک ADC است. ADC میکروکنترلر STM8 نیز مانند ADC دیگر میکروکنترلرهاست. تنها چند ویژگی اضافی دارد. شکل زیر نشانگر بلوک ADC میکروکنترلر STM8 است:

 

بلوک ADC میکروکنترلر STM8

 

قبل از استفاده از ADC، باید چند نکته را که باعث افزایش عملکرد ADC می‌شود، بیان کنم:

امپدانس ورودی باید کمتر از 10kΩ باشد.
بهتر است کلاک ADC را در حدود 4 مگاهرتز یا کمتر قرار دهید.
اشیمیت تریگر باید غیرفعال شود.
در صورت امکان، از بافر ورودی و مدار فیلتر استفاده کنید.
اگر ADC دارای پین رفرنس باشد، این پین باید به یک رفرنس دقیق مانند LM336 متصل شود. توصیه می‌شود از یک تراشه رگولاتور  LDO مناسب استفاده کنید.
پین‌های ADC که مورد استفاده قرار نمی‌گیرند باید غیرفعال یا پیکربندی شوند. این کار باعث کاهش مصرف برق خواهد شد.
خواندن ADC باید در فواصل زمانی منظم و ثابت باشد تا از نوسانات زمانی در خواندن ADC جلوگیری شود.
برای افزایش پایداری بهتر است از بیت‌های سمت راست (بیت های پرارزش ADC) استفاده کنید تا تأثیرات نویز را حذف نمایید.
فاصله ترک‌های PCB / سیم‌ها به کانال های ADC باید کوتاه باشد تا نویز را کاهش دهند.

 

اتصالات سخت افزاری

 

اتصالات سخت افزاری میکروکنترلر STM8

کد نمونه ADC

 

توضیحات

در ابتدا، باید کلاک ماژول ADC را فعال کنیم:

 

در مرحله دوم، باید پین ADC را به عنوان یک GPIO شناور بدون وقفه تنظیم کنیم.

 

برای راه اندازی ADC  به اطلاعاتی در مورد کانال ADC مورد نظر نیاز است:

 

خط دوم تابع فوق بیان می کند که ما قصد داریم از کانال ADC 4 (PD3) بدون هیچ اشمیت تریگری استفاده کنیم. همچنین نمی خواهیم از تریگرهای خارجی ماژول GPIO استفاده کنیم. از آنجا که کلاک اصلی در 8 مگاهرتز در حال اجرا است، ADC با تقسیم کلاک اصلی / کلاک ADC فرکانس نمونه برداری 444 کیلوهرتز را دریافت می کند.همچنین می خواهیم از حالت تبدیل مستمر استفاده کنیم زیرا می خواهیم به طور مداوم ورودی ADC را بخوانیم و نمی خواهیم آن را در فواصل خاص اندازه گیری کنیم. در نهایت استفاده از بیت های سمت راست ADC باعث می شود مقدار پایدارتری داشته باشیم.

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

 

بقیه کد مربوط به چاپ داده های ADC بر روی LCD است.

 

مبدل ADC بر روی STM8

 

 

سیسوگ در قسمت سیزدهم قصد دارد تایمر نگهبان آنالوگ (AWD) را آموزش دهد. در ادامه آموزش های میکروکنترلر STM32 سیسوگ را همراهی کنید.

 

منبع

 

مطالب مرتبط

 

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

26 دیدگاه در “مبدل آنالوگ به دیجیتال (ADC) | قسمت دوازدهم آموزش STM8

  1. Avatar for رضا رضا گفت:

    سلام برا ساخت ضبط صدا با میکروstm میشه راهنمایی کنید
    ممنون

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      سلام
      خوب برای دخیره صدا در اولین اقدام باید بتونی حداقل ۸ کیلو سمپل از ADC بگیری، که فکر نمیکنم مشکل خاصی باشه
      بعد اگر بخوای به شکل فایل ذخیره کنی، باید فایل سیستم رو هندل کنی که میتونی از کتابخانه elm-chanاستفاده کنی
      و فایل رو با فرمت pcm wave توی یه فایل ذخیره کنی
      این کل مراحلی هست که لازمه طی بشه

  2. Avatar for مهرداد مهرداد گفت:

    با عرض سلام و خسته نباشید. سوالی داشتم. میخواستم بدانم برای اتصال نمایشگر oled با تراشه ssd1306 به میکروکنترلر stm8 کتابخانه ای هست برای برنامه نویسی؟ چطور باید وصل کنیم و برنامه اش را بنویسیم؟ باتشکر

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

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

  3. Avatar for مرادی مرادی گفت:

    با سلام
    ممنون بابت آموزشهای کاربردی که در سایت قرار دادید خیلی قابل استفاده بود
    موفق باشید

    1. Avatar for Sisoog Os Sisoog Os گفت:

      سلام خواهش میکنم دوست عزیز

  4. Avatar for محمد محمد گفت:

    سلام میشه یه مقدار بیشتر درباره مقاومت ورودی توضیح بدین؟
    مثلا من میخوام برا اندازه گیریه یه ولتاژ بالا از تقسیم مقاومتی 100 کیلو و 3.3 کیلو استفاده کنم میشه ؟

    1. Avatar for zeus zeus گفت:

      باید ببینید مقاومت ورودی میکروکنترلر چقدر هست (فکر کنم حدود ده کیلو یا صد کیلو باشه) خوب این مقاومت پایه ورودی adc با زمین خواهد بود که احتمالا در نمونه شما موازی خواهد شد مقاومت ۳٫۳ کیلو اهم شما که در نوع خود باعث ایجاد خطای اندکی خواهد شد.
      برای جلوگیری از حالت خیلی راحت میتوان از یه تقویت کننده عملیاتی استفاده کرد به عنوان بافر

  5. Avatar for parisa parisa گفت:

    سلام چطور سنسور با 5v رو با این کد راه اندازی کنم ؟

    1. Avatar for Sisoog Os Sisoog Os گفت:

      سلام میتونید تقسیم مقاومتی بگذارید

  6. Avatar for parisa parisa گفت:

    سلام برای راه اندازی یه سنسور آنالوگ با ورودی ۵ ولت باید چه تغییراتی توی کد داد ؟ ممنون میشم جواب بدید متشکر

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام
      احتمالا باید از تقسیم مقاومتی استفاده کنید
      البته توجه داشته باید رینج خروجی سنسور مورد استفاده تون چیه

  7. Avatar for farzin farzin گفت:

    با سلام
    یه سوال کوچیک!!
    “اشیمیت تریگر باید غیرفعال شود” منظور از اشمیت تریگر adc چیه ؟ و کاربردش چگونه است؟

    1. Avatar photo electronic girl گفت:

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

  8. Avatar for میلاد میلاد گفت:

    سلام خسته نباشید
    کد اتصال دو ADC چطوری میشه؟
    لطفا راهنمایی کنید خیلی واجبه

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام ببخشید منظورتون رو متوجه نشدم ؛ یعنی میخواید با استفاده از دو واحد ADC از یک سینگال نمونه برداری کنید تا نرخ نمونه برداری رو افزایش بدید یا خیر منظورتون این هست که از دو کانال ADC استفاده کنید ؟

      1. Avatar for عرفان عرفان گفت:

        سلام خسته نباشید
        سوال بنده هم همین مورده چطور میشه دو کانال رو خوند مثلا کانال 5 و کانال 6

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

          سلام دوست عزیز
          خوب برای این کار چندین راه وجود داره ولی مرسوم ترین راه ها یکی این هست که اول کانال یک رو بخونید بعد کانال دو و الی آخر (استفاده از اینتراپت اتمام تبدیل خیلی کمک میکنه که پردازنده گیر نکنه)
          راه مرسوم دیگه استفاده از dma هست که کلا پردازنده درگیر نمیشه – فقط باید تنظیم کنید که خود adc تبدیل رو به شکل چرخشی انجام بده و dma نمونه ها رو کپی کنه توی متغییری که تعریف کردید.
          مثالش هم فکر میکنم توی مثال های st بتونید پیدا کنید.

  9. Avatar for سروش سروش گفت:

    با عرض سلام و خسته نباشید
    در آموزش فوق عنوان کرده بودید از فیلتر استفاده بشه ، می خواستم ببینم چطور می شه این کارو کرد و البته از چه فیلتری ؟یعنی انقدر نویز روی سنسورهای حرارتی زیاده؟
    با تشکر از وقتی که برای آموزش بدون چشم داشت می گذارید.
    موفق باشید!

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام
      شاید مدار بدون فیلتر هم تا حدودی زیادی خوب کار کنه و با چند فیلتر نرم افزاری بشه کلا بی خیال مدارات فیلتر خارجی شد ؛ اما چیزی که مشخصه نویز همیشه توی همه شرایطی وجود داره و برای حصول نتیجه دلخواه لازمه که نویز های غیر ضرروری رو حذف کنید در واقع نتیجه ایده آل اینه ممکنه نویز تا حدود مشخصی نتیجه رو اینقدری روی نتیجه تاثیر گذار نباشه و بشه ازش چشم پوشی کرد
      به صورت میشه فیلتر رو پیاده سازی کرد ، یه شکل یک نرم افزار و با پردازش سینگال این کار رو انجام داد یا با استفاده از یک مدار خارجی !
      مدار فیلتر میتونه اکتیو یا پسیو باشه که نوع المان های مورد استفاده متفاوته و نوع فیلتر با نوع استفاده مشخص میشه
      اینجا منظور فیلتر پایین گذر مدنظر هست که در ساده ترین حالت ممکن با مقاومت و خازن میشه ساختش

    2. Avatar for سروش سروش گفت:

      دوست بزرگوار خیلی لطف کردی امیدوارم همواره موفق باشید .
      در نمونه برنامه ای فیلتر های FIR استفاده کرده بود . با متلب ضرایب فیلترو محاسبه کرده بود و بعد یه کد C++ واسش نوشته بود .
      خیلی متوجه نشدم چطور حساب کرده ولی امیدوارم خیلی زود بفهمم. 🙂
      در پناه خدا باشید.

      1. Avatar for زئوس Zeus زئوس Zeus گفت:

        خواهش میکنم دوست عزیز
        نرم افزاری زیادی برای محاسبه فیلتر های دیجیتال و حتی آنالوگ وجود داره حتی برخی از این نرم افزار های کد برنامه رو هم تولید میکنند
        به عنوان نمونه میتونید نرم افزار filter solution رو سرچ کنید.

        1. Avatar for سروش سروش گفت:

          خیلی ممنون.
          خیلی لطف کردید.
          موفق و موید باشید!

          1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  10. Avatar for Amir Amir گفت:

    سلام
    کارتون عالیه
    کمتر کسیه که با STM8 کار کنه …
    ممنون از آموزش خوبتون

    1. Avatar photo electronic girl گفت:

      سلام
      خواهش میکنم دوست عزیز… خوشحال میشیم اگه کمکی به یادگیری همراهان سیسوگ کرده باشیم

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

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