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

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

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

سیسوگ در قسمت یازدهم آموزش میکروکنترلر 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 سیسوگ را همراهی کنید.

 

منبع

 

لینک‌های دانلود

مطالب مرتبط

 

 

حمایت از electronic girl

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

0 نفر

پــــســنــدیـده انـد

توجه

electronic girl
electronic girl

دوستدار الکترونیک

دیدگاه ها

22 دیدگاه

  • مرادی
    ۳۰ خرداد ۱۴۰۰

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

    • Sisoog Os
      Sisoog Os
      ۱ تیر ۱۴۰۰

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

  • محمد
    ۱۵ آبان ۱۳۹۹

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

    • Zeus ‌
      zeus
      ۲۴ مرداد ۱۴۰۰

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

  • parisa
    ۱۴ مهر ۱۳۹۹

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

    • Sisoog Os
      Sisoog Os
      ۱۴ مهر ۱۳۹۹

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

  • parisa
    ۱۳ مهر ۱۳۹۹

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

    • Zeus ‌
      زئوس Zeus
      ۲۳ آبان ۱۳۹۹

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

  • farzin
    ۲۲ آبان ۱۳۹۸

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

    • Nasim Hematian
      electronic girl
      ۲ آذر ۱۳۹۸

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

  • میلاد
    ۴ مرداد ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۷ مرداد ۱۳۹۸

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

      • عرفان
        ۱ دی ۱۳۹۹

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

        • Zeus ‌
          زئوس Zeus
          ۲ دی ۱۳۹۹

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

  • سروش
    ۲۸ شهریور ۱۳۹۷

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

    • Zeus ‌
      زئوس Zeus
      ۳۱ شهریور ۱۳۹۷

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

    • سروش
      ۳۱ شهریور ۱۳۹۷

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

      • Zeus ‌
        زئوس Zeus
        ۳۱ شهریور ۱۳۹۷

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

        • سروش
          ۳۱ شهریور ۱۳۹۷

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

          • Zeus ‌
            زئوس Zeus
            ۱ مهر ۱۳۹۷

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

            0
  • Amir
    ۲۸ شهریور ۱۳۹۷

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

    • Nasim Hematian
      electronic girl
      ۳۱ شهریور ۱۳۹۷

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

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 10 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک