روش های سخت افزاری و نرم افزاری کاهش جریان مصرفی آردوینو

مقدمه

یکی از پارامترهای مهم در پروژه های الکترونیک ، میزان عمر باتری است. میکروکنترلر atmega328 که از اون در برد آردوینو استفاده شده ، برق مصرفی زیادی رو داره. برد آردوینو UNO ، حداقل 15 میلی آمپر جریان مصرفی داره . در این جلسه قصد داریم یاد بگیریم که چگونه میشه این جریان مصرفی رو با استفاده از تکنیک های سخت افزاری و نرم افزاری تا 10 میکروامپر پایین بیاریم. 

اگه با برد آردوینو آشنایی ندارید ، پیشنهاد میکنم برای فهم بهتر این مطلب ابتدا دوره آردوینو سایت رو مطالعه بفرمایید: 

همچنین پیشنهاد میکنم جلسه مربوط به مولتی متر رو از لینک زیر مطالعه کنید: 

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

روش های سخت افزاری

حذف سخت افزار اضافی : 

هر آیسی به یک میزان تغذیه ای نیاز داره تا عملکرد خودش رو به خوبی انجام بده. با کاهش تعداد  IC ها ، میتونیم مقداری از برق مصرفی رو کاهش بدیم. برد آردوینو UNO ، دارای یک آیسی مبدل USB به UART هست که با استفاده از اون سیگنال های USB رو به سیگنال های قابل فهم برای میکروکنترلر تبدیل میکنه. با استفاده از برد آردوینو pro mini به جای برد آردوینو UNO میتونیم میزان جریان مصرفی رو تا حد خوبی پایین بیاریم. چون در برد آردوینو pro mini ، این آیسی وجود نداره و طبیعتا نیازی به تغذیه هم برای این آیسی نیست. پس جریان مصرفی پایین میاد. 

حذف رگولاتورهای خطی: 

[post_shop]

 

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

فرمول توان اتلافی یک رگولاتور

با استفاده از رگولاتورها خطی ، جریان ورودی و جریان خروجی برابر هستند. همچنین در بهترین شرایط دارای بازدهی 70 درصد هستند. 

به جای استفاده از این رگولاتورها ما میتونیم از رگولاتورهای سوییچینگ استفاده کنیم. این رگولاتورها بازدهی بالاتری دارند ، چون جریان ورودی الزاما با جریان خروجی برابر نیست. مثلا با بار خروجی کم ، این رگولاتورها ، بازدهی در حدود 90 درصد هم دارند. ضمنا با استفاده از این رگولاتورها ، نه تنها میشه ولتاژ رو کاهش داد ( با استفاده از مبدل باک ( به انگلیسی Buck Converter ) ) ، بلکه میشه اون رو بالا هم برد. ( با استفاده از مبدل بوست (به انگلیسی Boost Converter )) . 

کاهش ولتاژ : 

یکی از ساده ترین راه ها برای کاهش جریان مصرفی آردوینو ، پایین آوردن ولتاژی هست که به برد میدید. مثلا اگه ولتاژ رو از 5 ولت بیاریم به 3.3 ولت ، جریان مصرفی رو میشه تا چند میلی امپر پایین آورد. 

البته نکته ای که در اینجا باید بهش توجه کرد این هست که با کاهش ولتاژ ورودی ، فرکانس کاری سیستم هم باید پایین بیاریم. مثلا اگه ولتاژ رو کاهش بدیم ولی کلاک سیستم رو نیاریم پایین ، میکروکنترلر ممکنه از خودش رفتارهای عجیب و غریب نشون بده. برد arduino UNO و برد پرومینی ( مدل 5 ولت) ، از کریستال 16 مگاهرتز استفاده میکنند. اما اگه به دیتاشیت Atmega328P نگاه کنیم ، خواهیم دید که ماکزیمم فرکانسی پیشنهادی برای وقتی که ولتاژ 3.3 ولت رو به برد اعمال میکنیم ، برابر 13 مگاهرتز هست. به همین دلیل هم هست که برد  پرومینی مدل 3.3 ولت از کریستال 8 مگاهرتز به جای کریستال 16 مگاهرتز استفاده میکنه. 

تذکر: ممکنه شما ولتاژ 3.3 ولت رو به میکروکنترلر اعمال کنید و از کریستال 16 مگاهرتز هم استفاده کنید ، اما هیچ مشکلی پیش نیاد. شاید پیش خودتون بگید که همیشه همین کار رو میکنم ولی در شرایط مختلف ممکنه اوضاع فرق کنه و میکروکنترلر به درستی کار نکنه. رفتار حرفه ای تر اون هست که از دیتاشیت خود میکروکنترلر استفاده کنید و به توصیه های اون به صورت دقیق عمل کنید. 

در شکل زیر نموداری از رابطه ی بین ولتاژ و فرکانس کاری میکروکنترلر رو مشاهده میکنید :

رابطه بین ولتاژ و ماکزیمم فرکانس کاری در avr

در شکل زیر هم نموداری وجود داره که در اون ، رابطه بین ولتاژ و جریان مصرفی آردوینو بررسی شده. در این مثال یک sketch خالی رو بر روی atmega328P آپلود کردیم . ( فرکانس کاری مورد استفاده 1 مگاهرتز هست)

رابطه ی بین ولتاژ و جریان مصرفی در avr

کاهش کلاک سیستم : 

در پروژه هایی که نیاز نیست ، تعداد دستورالعمل های زیادی در یک مدت زمان کم اجرا بشه ، میتونیم کلاک سیستم رو مقداری کاهش بدیم و با این کار جریان مصرفی رو کمی پایین بیاریم. مثلا اگه از یک برد آردوینو با ولتاژ تغذیه 5 ولت استفاده کنیم و کلاک سیستم رو از 16 مگاهرتز به 8 مگاهرتز برسونیم ، در این صورت جریان مصرفی از 12 میلی امپر به حدود 8.5 میلی امپر میرسه. برای درک بهتر رابطه ی بین کلاک سیستم و جریان مصرفی برد آردوینو ، میتونیم از نمودار زیر استفاده کنیم : 

رابطه ی بین فرکانس و جریان مصرفی در avr

همونطور که در شکل بالا هم مشاهده میکنید ، کاهش کلاک سیستم میتونه عمر باتری رو سه برابر کنه. البته توجه داشته باشید که با این کار تعداد دستورالعمل ها در هر ثانیه میاد پایین و این کار شاید برای بعضی از پروژه ها گزینه مناسبی نباشه. 

روش های نرم افزای

تا الان ما توضیح دادیم که چگونه میشه جریان مصرفی رو پایین آورد. اما توضیح ندادیم که این جریان رو چه بخش هایی از میکروکنترلر مصرفی میکنند. در داخل Atmega328P یک سری مدارات وجود داره تا بار پردازشی پردازنده رو کم کنند. این بخش ها و مدارات ، خودشون یه سری توان مصرف میکنند. مثلا دستور analogWrite رو در نظر بگیرید. برای ایجاد یک موج PWM با استفاده از این دستور ، اصلا پردازنده کاری انجام نمیده. یعنی پردازنده نمیاد کلاک های مورد نظر رو بشماره و خودش موج رو ایجاد کنه. به جاش آردوینو از یکی از تایمرهای داخلی خودش استفاده میکنه تا تعداد کلاک های مورد نظر رو بشماره و پس از این که به مقدار مورد نظر رسید ، یک وقفه به پردازنده ارسال میکنه. در این هنگام ، پردازنده کار خودش رو متوقف میکنه و به وقفه رسیدگی می کنه. با این کار میکروکنترلر میتونه در یک لحظه چند تا کار رو با هم دیگه انجام بده. در زیر نام تعدادی از مدارات داخلی میکروکنترلر Atmega328P آورده شده : 

همه این مدارات مستقل ، برای کار کردن نیاز به یک توان دارند. مگر این که ما آنها را به صورت دستی غیر فعال کنیم.  مدار Brown-out مداری است که اگر ولتاژ تغذیه میکروکنترلر از حد مشخصی پایین تر رفت ، میکروکنترلر رو ریست میکنه. واحد ADC ( مخفف Analog to digital Converter ) همونطور که از اسمش هم مشخص هست برای تبدیل یک ولتاژ آنالوگ ( از 0 تا VCC ) به یک عدد دیجیتال ( از صفر تا 1023 ) تبدیل کنه. اگه به ADC در یک پروژه نیاز ندارید ، با غیر فعال کردن اون میتونید توان مصرفی میکروکنترلر رو تا حد خوبی پایین بیارید. 

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

لینک دانلود کتابخانه

با استفاده این کتابخانه میتونید تعیین کنید که میکروکنترلر چه مدت زمانی در حالت sleep قرار بگیره. این مدت زمان میتونه از چند میلی ثانیه باشه تا بی نهایت. همچنین میتونید تعیین کنید که کدوم یک از بخش های میکروکنترلر غیر فعال بشه و خلاصه این که میتونید توان مصرفی میکروکنترلر رو تا حد خوبی پایین بیارید. 

در مثال زیر ، ما از یک میکروکنترلر Atmega328P استفاده کردیم که ولتاژ کاری اون برابر 5 ولت و کریستال متصل شده به اون هم 16 مگاهرتز هست. حالا میخوایم جریان مصرفی اون رو اندازه گیری کنیم. توجه کنید که این میکروکنترلر رو به صورت تنها بر روی بردبرد قرار دادیم تا و مدارات لازم رو در کنار اون قرار دادیم تا جریان مصرفی به حداقل مقدار خودش برسه. 

#include "LowPower.h"

void setup()
{
  pinMode(13,OUTPUT);
}

void loop() 
{
  digitalWrite(13,HIGH);
  delay(2000);
  digitalWrite(13,LOW);
  LowPower.powerDown(SLEEP_2S, ADC_OFF, BOD_OFF);
}

 

در کد بالا ، ابتدا LED متصل به پایه 13 دیجیتال ، به مدت 2 ثانیه چشمک میزنه و سپس میکروکنترلر به مدت 2 ثانیه خاموش میشود و در این مدت واحد ADC و Brown-out detect هم غیر فعال می شود. در این حالت جریان مصرفی میکروکنترلراز 14 میلی آمپر به 6 میکروآمپر کاهش پیدا میکنه. همچنین اگه از تکنیک هایی سخت افزاری که معرفی کردیم ( مثل کاهش فرکانس و ولتاژ) در نهایت یه جدولی مشابه با جدول زیر خواهیم رسید: 

[/post_shop]

شاید برای شما عجیب باشه که چرا کاهش کلاک میکروکنترلر بر روی جریان مصرفی میکروکنترلر در حالت sleep ، تاثیری نمیذاره؟ چون در حالت sleep بخش کلاک هم غیر فعال هست. بدیهی است که ما نمیخوایم میکروکنترلر رو در sleep نگه داریم. بنابراین در پروژه هایی که نیازی نیست به صورت پیوسته یک داده خونده بشه ، میشه میکروکنترلر رو تا 50 درصد در حالت خاموش نگه داشت و با استفاده از تکنیک هایی که گفتیم ، مدت زمان استفاده از باتری رو افزایش بدیم. 

خوب دوستان. به پایان این جلسه هم رسیدیم. مثل همیشه میتونید ما رو در تلگرام و یا اینستاگرام دنبال کنید: 

اشتراک گذاری:
مطالب زیر را حتما بخوانید

4 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

  • سلام دوستان ، یه سوال دارم، باتری کتابی رو میتونم بدون هیچ مداری با آدابتور پنج ولت هزار میلی آمپر بدون هیچ مدار و … شارژ کنم؟ لطفا کمکم کنید

    • با سلام. باتری کتابی ولتاژ 9 ولت دارد. آداپتور شما ولتاژ 5 ولت دارد. در صورت شارژ ممکن است هر اتفاقی بیفتد و هیچ تضمینی بر شارژ صحیح و درست آن نمی باشد. پیشنهاد می شود حتما شارژر مخصوص باتری های کتابی را تهیه کنید. لینک زیر نمونه ای از این شارژر ها آورده شده است
      :
      نمونه ای از یک شارژر باتری کتابی

  • سلام
    خسته نباشید
    با تشکر از متن مفیدتون
    اینکه چرا در ولتاژ ثابت با کاهش فرکانس، جریان کم میشه رو متوجه میشم اما اینکه چرا در فرکانس ثابت با کاهش ولتاژ جریان کم میشه رو متوجه نمیشم.
    اگه میشه توضیح بدید.
    ممنون

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

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