اطلاعیه

Collapse
No announcement yet.

توضیح ADC در Arduino

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    توضیح ADC در Arduino

    میکروکنترلرها فقط دیجیتال میفهمن. یعنی فقط صفر و یک میدونن چیه. یک کلید فشار داده شده یا نه. این نمونه ای از سیگنال دیجیتاله. موقعی یه میکروکنترلر با 5 ولت کار میکنه اون میفهمه که 0 ولت یعنی منطق 0 و 5 ولت یعنی منطق 1. ولی واقعیت اینه در عمل همه چی به این سادگی ها نیست و دنیا یه دنیای خاکستری هست. مثلا 2.72 ولت یعنی چی؟صفره یا یک؟ توی دنیای آنالوگ ما اغلب نیاز داریم که ولتاژ های مختلفی رو اندازه گیری کنیم. یه سنسور آنالوگ که با 5 ولت کار میکنه خروجیش میتونه از 0.01 تا 4.99 تغییر کنه. خوشبختانه اکثر میکروکنترلرها یه واحد داخلی توی خودشون دارم که میتونن ولتاژ آنالوگ رو به یه عدد دیجیتال تبدیل کنن. اسم اون واحد ADC هست.
    ADC چیست؟
    ADC مخفف عبارت Analog to Digital Converter هست که به معنی مبدل آنالوگ به دیجیتال هست. حالا این چیکار میکنه؟ میاد ولتاژهای ورودی آنالوگ که روی یه پایه میفته رو تبدیل میکنه به اعداد دیجیتال. با تبدیل اعداد آنالوگ به اعداد دیجیتال ما میتونیم ارتباط با دنیای آنالوگ اطرفمون رو شروع کنیم. بدون این که هیچ دغدغه ای داشته باشیم. در عکس زیر پایه های ADC برد آردوینو رو آوردیم:

    توی یه میکروکنترلر همه ی پایه ها این خاصیت رو ندارن تا ولتاژ آنالوگ رو به دیجیتال تبدیل کنن. توی بردهای آردوینو فقط پایه هایی میتونن این کار رو انجام بدن که جلوی شماره ای که دارن از حرف “A” استفاده بشه. مثلا A0 یا A2 .
    برد آردوینو 6 تا پایه مبدل آنالوگ به دیجیتال داره که با نام های A0 تا A5 شماره گذاری شدن.
    توی میکروکنترلرها و بردهای مختلف ADC های مختلفی وجود داره. ADC که در برد آردوینو استفاده میشه 10 بیتی هست یعنی میتونه یه ولتاژ آنالوگی که داره رو با دقت 210 (1024) بخونه. منظور از این جمله اینه که هر ولتاژ آنالوگ که روی پایه اش میفته بهش یه عدد از 0 تا 1023 نسبت میده و هر چی این ولتاژ بالاتر باشه عدده هم بالاتره. مثلا اگه ولتاژ صفر بیاد عدد 0 رو میخونه و اگه ولتاژ 5 بیاد عدد 1023 رو میخونه. و بقیه ولتاژ ها هم به همین ترتیب. حالا هر چه این دقت بالاتر باشه طبیعی هست که ولتاژ رو دقیق تر میتونه تبدیل کنه. مثلا اگه دقت 16 بیتی باشه به ولتاژها عددی بین 0 تا 65534 نسبت میده. خوب اگه با اون ADC که دقتش 10 بیتی هست مقایسه کنیم میبینیم که این ADC داره ولتاژ ها رو بهتر به عددهای دیجیتال تبدیل میکنه.
    این که ADC چجوری این کار رو انجام میده نسبتا پیچیده هست. چندین راه مختلف برای این کار وجود داره( از ویکیپدیا بخونید) اما یکی از راه های معمولی که خیلی استفاده میشه اینه که اون ولتاژ آنالوگ ورودی یه خازن داخلی رو شارژ میکنه بعد مدت زمانی که طول میکشه تا این خازن در یک مقاومت داخلی تخلیه بشه رو اندازه گیری میکنن. میکروکنترلر تعداد سیکل ساعتی که سپری میشه قبل از این که خازن به طور کامل تخلیه بشه رو نشون میده.
    نحوه تبدیل ولتاژ آنالوگ به عدد دیجیتال توسط ADC
    ADC یه نسبت تبدیل داره. این به معنی هست که ADC مقدار 5 ولت آنالوگ رو برابر 1023 قرار میده و هر چی که کمتراز 5 ولت باشه یه مقداری از 0 تا 1023 بهش نسبت میشه. فرمول ADC طبق رابطه زیر هست:

    مثالی که الان میخوایم بزنیم مربوط به آردوینو هست. توی آردوینو دقت مبدل آنالوگ به دیجیتال 10 بیتی هست بنابراین رزولوشن اندازه گیری میشه از 0 تا 1023 هست. پس به جای Resolution of the ADC میذاریم 1023 . ولتاژ آردوینو یا به عبارت دیگه ولتاژ سیستم که در رابطه بالا تحت عنوان System voltage اومده مقدارش برابر 5 ولت هست. خوب تا اینجا رابطه ی بالا به شکل زیر در میاد:

    حالا فرض کنید ولتاژ آنالوگ ورودی شما 2.12 ولت هست. اون عددی که ADC به ما تحویل میده طبق رابطه ی بالا برابر میشه با :

    که با یه طرفین وسطین ساده بدست میاریم:



    مساله: اگر ولتاژ سیستم شما 3.3 ولت بود و ADC شما دقت 9 بیتی داشت. مقداری که مبدل آنالوگ به دیجیتال برای ولتاژ ورودی 2.12 ولت نشون میداد چقدر بود؟
    مثال ADC برای برد آردوینو

    در ابتدا باید یکی از پایه های آنالوگ رو به صورت ورودی تعریف کنیم. برای این که پایه مون با شکل بالا تطبیق داشته باشه از پایه A3 استفاده میکنیم:
    pinMode(A3, INPUT)

    سپس با دستور ()analogRead مقدار آنالوگ خودمون رو به دیجیتال تبدیل میکنیم و در متغیر عدد صحیحی مثل x میریزیم:
    int x = analogRead(A3); //Reads the analog value on pin A3 into x

    در رابطه بالا عددی که توی متغیر x ریخته میشه یه عدد بین 0 تا 1023 هست. چون دقت ADC برد آردوینو 10 بیتی هست.
    نکته: ما این مقدار رو در یه متغیر عدد صحیح میریزیم چون متغیر از نوع Byte فقط تا 8 بیت میتونه داده رو توی خودش نگهداری کنه.پس حتما حواستون باشه که نوع متغیری که تعریف میکنید int باشه.
    Serial.print(“Analog value: “)
    ; Serial.println(x)
    اگه ما مقدار ولتاژ آنالوگ خودمون رو تغییر بدیم باید مقدار عددی x هم تغییر کنه. مثلا اگه x برابر 334 شد و آردوینو ما 5 ولتی بود در این صورت مقدار ولتاژ آنالوگ ما چقدره؟ مولتی متر بذارید رو نقطه ی مورد نظر مدار. باید چیزی حدود 1.63 ولت رو اندازه گیری کنه.

    منبع : roboav
    جدیدترین ویرایش توسط علی چمانی; ۱۰:۵۴ ۱۳۹۶/۰۵/۱۵.

    #2
    پاسخ : توضیح ADC در Arduino

    نوشته اصلی توسط علی چمانی نمایش پست ها
    میکروکنترلرها فقط دیجیتال میفهمن
    نه یکم هم آنالوگ میفهمن اتفاقا !!!
    خیلی هاشون یه واحد دارن به نام On-chip Analog Comparator
    یه گذری بهش بزن تا متوجه بشی
    باهاش کارای توپی هم انجام دادن مثل خازن سنج
    ! Life doesn't get easier , you just get stronger

    دیدگاه

    لطفا صبر کنید...
    X