فهرست مطالب:
- مرحله 1: تجدید نظر
- مرحله 2: چرا AnalogRead () مقدار بین 0 تا 1023 را برمی گرداند؟
- مرحله 3: بنابراین AREF چیست؟
- مرحله 4: AREF خارجی
- مرحله 5: AREF داخلی
تصویری: پین Arduino AREF: 6 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:54
در این آموزش ما نحوه اندازه گیری ولتاژهای کوچکتر با دقت بیشتر را با استفاده از پین های ورودی آنالوگ در Arduino یا برد سازگار خود با پین AREF بررسی می کنیم. با این حال ، ابتدا کمی تجدید نظر می کنیم تا سرعت شما را افزایش دهیم. لطفاً قبل از اولین کار با AREF این پست را کاملاً بخوانید.
مرحله 1: تجدید نظر
ممکن است به خاطر داشته باشید که می توانید از تابع Arduino analogRead () برای اندازه گیری ولتاژ جریان الکتریکی حسگرها و غیره با استفاده از یکی از پین های ورودی آنالوگ استفاده کنید. مقدار () analogRead () بین صفر تا 1023 خواهد بود ، که صفر نشان دهنده صفر ولت و 1023 نشان دهنده ولتاژ عملکرد برد آردوینو در حال استفاده است.
و وقتی می گوییم ولتاژ کار - این ولتاژی است که بعد از مدار تغذیه در اختیار آردوینو قرار دارد. به عنوان مثال ، اگر یک برد معمولی Arduino Uno دارید و آن را از سوکت USB اجرا می کنید - مطمئناً 5 ولت از سوکت USB در رایانه یا هاب در دسترس برد است - اما با وزش ولتاژ کمی در اطراف جریان اتصال به میکروکنترلر - یا منبع USB فقط خراشیده نمی شود.
این را می توان با اتصال Arduino Uno به USB و قرار دادن یک مجموعه مولتی متر برای اندازه گیری ولتاژ در پین های 5V و GND به راحتی نشان داد. برخی از تخته ها تا 4.8 ولت ، برخی بالاتر اما همچنان زیر 5 ولت باز خواهند گشت. بنابراین اگر به دنبال دقت هستید ، برد خود را از منبع تغذیه خارجی از طریق سوکت DC یا پین Vin - مانند 9V DC تغذیه کنید. سپس بعد از عبور از مدار تنظیم کننده قدرت ، 5 ولت خوبی خواهید داشت ، برای مثال تصویر.
این مهم است زیرا دقت هر یک از مقادیر analogRead () با نداشتن 5 ولت واقعی تحت تأثیر قرار می گیرد. اگر گزینه ای ندارید ، می توانید از ریاضیات در طرح خود برای جبران افت ولتاژ استفاده کنید. به عنوان مثال ، اگر ولتاژ شما 4.8 ولت است - دامنه analogRead () 1023 0 0 به 4.8 0 0 و نه 0 ~ 5 ولت مربوط می شود. این ممکن است بی اهمیت به نظر برسد ، اما اگر از حسگری استفاده می کنید که مقداری را به عنوان ولتاژ باز می گرداند (به عنوان مثال سنسور دما TMP36) - مقدار محاسبه شده اشتباه خواهد بود. بنابراین به منظور دقت ، از منبع تغذیه خارجی استفاده کنید.
مرحله 2: چرا AnalogRead () مقدار بین 0 تا 1023 را برمی گرداند؟
این به دلیل وضوح ADC است. وضوح (برای این مقاله) درجه ای است که می توان چیزی را به صورت عددی نشان داد. هر چه وضوح تصویر بالاتر باشد ، دقت بیشتری در نمایش چیزی وجود دارد. ما وضوح را بر حسب تعداد بیت های وضوح اندازه گیری می کنیم.
به عنوان مثال ، وضوح 1 بیتی فقط دو (دو به توان یک) مقدار صفر و یک را مجاز می کند. وضوح 2 بیتی به چهار (دو در توان دو) مقدار صفر ، یک ، دو و سه اجازه می دهد. اگر سعی کنیم محدوده پنج ولت را با وضوح دو بیت اندازه گیری کنیم و ولتاژ اندازه گیری شده چهار ولت باشد ، ADC ما عددی 3 نشان می دهد-زیرا چهار ولت بین 3.75 و 5V افت می کند. تصور این با تصویر آسان تر است.
بنابراین با مثال ما ADC با وضوح 2 بیتی ، تنها می تواند ولتاژ را با چهار مقدار احتمالی حاصل نشان دهد. اگر ولتاژ ورودی بین 0 تا 1.25 باشد ، ADC عددی 0 را برمی گرداند. اگر ولتاژ بین 1.25 و 2.5 باشد ، ADC مقدار عددی 1. و غیره را برمی گرداند. با محدوده ADC آردوینو 1023 0 0-ما 1024 مقدار ممکن داریم-یا 2 به توان 10. بنابراین آردوینوهای ما دارای ADC با وضوح 10 بیت هستند.
مرحله 3: بنابراین AREF چیست؟
به طور خلاصه ، هنگامی که آردوینو شما قرائت آنالوگ می کند ، ولتاژ اندازه گیری شده در پین آنالوگ مورد استفاده را با ولتاژ مرجع مقایسه می کند. در استفاده معمولی analogRead ، ولتاژ مرجع ولتاژ کارکرد برد است.
برای بردهای آردوینو معروف تر مانند بردهای Uno ، Mega ، Duemilanove و Leonardo/Yún ، ولتاژ کار 5 ولت است. اگر برد برد آردوینو دارید ، ولتاژ کار 3.3 ولت است. اگر چیز دیگری دارید - صفحه محصول Arduino را بررسی کنید یا از تامین کننده برد خود بپرسید.
بنابراین اگر ولتاژ مرجع شما 5 ولت است ، هر واحد بازگردانده شده توسط analogRead () 0.00488 ولت ارزش دارد (این عدد با تقسیم 1024 به 5 ولت محاسبه می شود). اگر بخواهیم ولتاژها را بین 0 و 2 یا 0 تا 4.6 اندازه گیری کنیم ، چه کنیم؟ چگونه ADC می داند که 100٪ محدوده ولتاژ ما چقدر است؟
و دلیل پین AREF در آن نهفته است. AREF به معنی مرجع آنالوگ است. این به ما این امکان را می دهد که آردوینو را از منبع تغذیه خارجی به عنوان ولتاژ مرجع تغذیه کنیم. به عنوان مثال ، اگر بخواهیم ولتاژها را با حداکثر برد 3.3 ولت اندازه گیری کنیم ، 3.3 ولت خوب و نرم را به پین AREF وارد می کنیم - شاید از IC تنظیم کننده ولتاژ.
سپس هر مرحله ADC حدود 3.22 میلی ولت را نشان می دهد (1024 را به 3.3 تقسیم کنید). توجه داشته باشید که کمترین ولتاژ مرجع که می توانید داشته باشید 1.1 ولت است. دو نوع AREF وجود دارد - داخلی و خارجی ، بنابراین اجازه دهید آنها را بررسی کنیم.
مرحله 4: AREF خارجی
AREF خارجی جایی است که ولتاژ مرجع خارجی را به برد آردوینو وارد می کنید. این می تواند از منبع تغذیه تنظیم شده باشد ، یا در صورت نیاز به 3.3 ولت می توانید آن را از پین 3.3 ولت آردوینو دریافت کنید. اگر از منبع تغذیه خارجی استفاده می کنید ، حتماً GND را به پین GND آردوینو وصل کنید. یا اگر از منبع 3.3V Arduno استفاده می کنید - فقط یک جهنده را از پین 3.3V به پین AREF اجرا کنید.
برای فعال کردن AREF خارجی ، از موارد زیر در void setup () استفاده کنید:
analogReference (EXTERNAL) ؛ // از AREF برای ولتاژ مرجع استفاده کنید
این ولتاژ مرجع را به هر چیزی که به پین AREF وصل کرده اید - که البته دارای ولتاژ بین 1.1 ولت و ولتاژ عملکرد برد است ، تنظیم می کند. نکته بسیار مهم - هنگام استفاده از مرجع ولتاژ خارجی ، باید مرجع آنالوگ را روی EXTERNAL تنظیم کنید. قبل از استفاده از analogRead (). این کار از کوتاه شدن ولتاژ مرجع داخلی فعال و پین AREF جلوگیری می کند که می تواند به میکروکنترلر روی برد آسیب برساند. در صورت لزوم برای برنامه خود ، می توانید با موارد زیر به ولتاژ عملکرد برد AREF (یعنی - به حالت عادی) بازگردید.
analogReference (DEFAULT) ؛
اکنون برای نشان دادن AREF خارجی در محل کار. با استفاده از AREF 3.3V ، طرح زیر ولتاژ A0 را اندازه گیری می کند و درصد کل AREF و ولتاژ محاسبه شده را نمایش می دهد:
#شامل "LiquidCrystal.h"
LCD مایع LiquidCrystal (8 ، 9 ، 4 ، 5 ، 6 ، 7) ؛
int analoginput = 0؛ // پین آنالوگ ما
int analogamount = 0؛ // مقدار ورودی مقدار float = 0 را ذخیره می کند؛ // برای ذخیره مقدار درصد ولتاژ شناور = 0 استفاده می شود. // برای ذخیره مقدار ولتاژ استفاده می شود
void setup ()
{lcd.begin (16 ، 2) ؛ analogReference (EXTERNAL) ؛ // از AREF برای ولتاژ مرجع استفاده کنید}
حلقه خالی ()
{lcd.clear ()؛ analogamount = analogRead (analoginput) ؛ درصد = (analogamount/1024.00)*100 ؛ ولتاژ = مقدار مشابه*3.222 ؛ // در میلی ولت lcd.setCursor (0 ، 0) ؛ lcd.print ("٪ AREF:")؛ lcd.print (درصد ، 2) ؛ lcd.setCursor (0 ، 1) ؛ lcd.print ("A0 (mV):")؛ lcd.println (ولتاژ ، 2) ؛ تأخیر (250) ؛ }
نتایج طرح بالا در ویدئو نشان داده شده است.
مرحله 5: AREF داخلی
میکروکنترلرهای روی بردهای آردوینو ما همچنین می توانند ولتاژ مرجع داخلی 1.1 ولت ایجاد کنند و ما می توانیم از آن برای کارهای AREF استفاده کنیم. به سادگی از خط استفاده کنید:
مرجع analog (داخلی) ؛
برای بردهای Arduino Mega ، از موارد زیر استفاده کنید:
analogReference (INTERNAL1V1) ؛
در void setup () و شما خاموش هستید. اگر آردوینو مگا دارید ولتاژ مرجع 2.56 ولت نیز موجود است که با موارد زیر فعال می شود:
analogReference (INTERNAL2V56) ؛
سرانجام - قبل از نتیجه گیری از پین AREF ، همیشه قرائت ها را با یک مولتی متر خوب شناخته شده تنظیم کنید.
نتیجه
عملکرد AREF با اندازه گیری سیگنال های آنالوگ به شما انعطاف پذیری بیشتری می دهد.
این پست توسط pmdway.com برای شما ارسال شده است - همه چیز برای سازندگان و علاقه مندان به لوازم الکترونیکی ، با ارسال رایگان در سراسر جهان.
توصیه شده:
اتصال ICSP برای آردوینو نانو بدون سرصفحه پین لحیم کاری شده اما Pogo Pin: 7 مرحله
اتصال ICSP برای آردوینو نانو بدون سرآیند پین لحیم شده اما Pogo Pin: یک اتصال ICSP برای Arduino Nano بدون سرصفحه پین لحیم شده روی برد اما Pogo Pin ایجاد کنید. قسمت 3 × 2 پین سوکت x1 - APitch 2.54mm Dupont Line Wire Female Pin Connector Housing Terminal x6 -BP75-E2 (1.3mm Head مخروطی) فنر تست پروب Pogo Pin
صفحه نمایش 4 رقمی 7 بخش 14 پین با آردوینو: 3 مرحله
4 Digit 7 Segment Display 14 پین با آردوینو: همیشه ایده خوبی است که آزمایش کنید آیا دستگاه به درستی کار می کند یا خیر اگر آن جزء دارای تعداد زیادی پین باشد. در این پروژه ، صفحه نمایش 4 رقمی 7 سگمنت 14 پین خود را آزمایش کرده ام. همه بخش 7 0 تا 9 را همزمان نمایش می دهد
Lego Arduino Nano بدون سرپوش پین: 3 مرحله
لگو آردوینو نانو بدون سرپوش سرپوش: من برای آردوینو نانو خود به محفظه ای نیاز داشتم که هیچ پین هدر به آن لحیم نشده باشد. من آن را زیبا و کوچک می خواستم
دستگاه پین بال دنده رومیزی با استفاده از پلت فرم جاسازی شده مبتنی بر Evive- Arduino: 18 مرحله (همراه با تصاویر)
Tabletop Pinball Machine Using Evive- Arduino based Embedded Plaform: یک آخر هفته دیگر ، یک بازی هیجان انگیز دیگر! و این بار ، آن چیزی نیست جز بازی های مورد علاقه همه - پین بال! این پروژه به شما نشان می دهد که چگونه می توانید دستگاه پین بال خود را به راحتی در خانه بسازید. تنها چیزی که شما نیاز دارید اجزای موجود در این برنامه است
ISP 6 پین تا 8 پین سوکت: 4 مرحله
ISP 6 پین تا 8 پین سوکت: دلیل اصلی این پروژه من برنامه نویسی ATTiny45 بود که دارای اتصال 8 پین است ، در حالی که USBtinyISP من (از Ladyada) فقط 10 پین و 6 پین اتصال دارد. بعد از حدود 3-4 هفته جست و جو در اینترنت ، چیزی پیدا نکردم که