کاهش توان مصرفی میکروکنترلر (کم کردن مصرف برق)
محتویات
همانطور که بنزین یا گازوئیل برای حرکت موتور ها، کامیون ها و اتومبیل ها (البته به استثنای تسلا!) مهم است، برق در اکثر کاربرد های الکترونیکی و بیشتر از آن، برای کاربرد های مبتنی بر سیستم امبدد که معمولاً دارای باتری هستند (دارای انرژی محدود)، اهمیت دارد. از تلفن های همراه معمولی گرفته تا دستگاههای خانه هوشمند، همگی به برق احتیاج دارند.
ماهیت محدود انرژی باتری نشان می دهد که باید اطمینان حاصل شود که میزان مصرف انرژی این دستگاه ها باید معقول باشد تا به پذیرش و استفاده از آن ها تشویق شود. به ویژه در دستگاه های مبتنی بر اینترنت اشیاء که در آن می توان انتظار داشت دستگاه با یکبار شارژ بدون تعویض باتری، 8 تا 10 سال دوام بیاورد.
این روند باعث اجرای اقداماتی برای مصرف توان کم در طراحی سیستم های امبدد شده است و در طول سال ها، طراحان، مهندسان و تولیدکنندگان چندین راه را برای مدیریت مؤثر توان مصرفی محصولات توسعه داده اند تا اطمینان حاصل کنند که آن ها با یکبار شارژ عمر طولانی تری دارند. بسیاری از این تکنیک ها بر روی میکروکنترلر، که قلب اکثر دستگاه ها است، تمرکز می کنند. در مقاله امروز، برخی از این تکنیک ها و نحوه استفاده از آن ها برای به حداقل رساندن مصرف توان در میکروکنترلر ها را بررسی خواهیم کرد. اگرچه ریزپردازنده توان کمتری مصرف می کند، اما می توان آن را در همه جا روی میکروکنترلر قرار داد.
روش های صرفه جویی در توان برای میکروکنترلر ها
1. حالت های خواب
حالت های خواب (که معمولاً به آن ها حالت های کم مصرف گفته میشود) قطعاً محبوب ترین روش برای کاهش مصرف توان در میکروکنترلر ها هستند. آن ها عموماً شامل غیرفعال کردن مدار یا ساعت های خاصی هستند که برخی از لوازم جانبی میکروکنترلر ها را هدایت می کنند.
بسته به معماری و سازنده، میکروکنترلر ها معمولاً حالت های خواب متفاوتی دارند که هر حالت دارای قابلیت غیرفعال کردن مدار داخلی یا جانبی بیشتری نسبت به دیگری است. حالت های خواب معمولاً از خواب عمیق یا خاموش، تا حالت های بیکار و چرت متغیر هستند.
برخی از حالت های موجود در زیر توضیح داده شده است. لازم به ذکر است که ویژگی ها و همچنین نام این حالت ها ممکن است از سازنده ای به سازنده دیگر متفاوت باشد.
حالت بیکار/خواب
این معمولاً ساده ترین حالت از حالت های کم مصرف برای طراحان است. این حالت به میکروکنترلر اجازه می دهد تا با سرعت بسیار سریع به عملکرد کامل بازگردد. بنابراین، اگر چرخه توان دستگاه مستلزم خروج از حالت خواب باشد، این حالت بهترین حالت نیست، زیرا مقدار زیادی از توان هنگام خروج میکروکنترلر از حالت خواب خارج می شود. بازگشت به حالت فعال از حالت آماده به کار معمولاً بر اساس وقفه است. این حالت با خاموش کردن درخت ساعت (clock tree) که مدار پردازنده را راه اندازی می کند، روی میکروکنترلر اجرا می شود در حالی که ساعت فرکانس بالا میکروکنترلر همچنان در حال کار است. با این کار، پردازنده قادر است بلافاصله عملیات بیدار شدن را از سر بگیرد. گیت ساعت به طور گسترده ای برای قطع سیگنال ها در حالت های کم مصرف برای میکروکنترلر ها به کار گرفته شده است و این حالت به طور موثر سیگنال های ساعت را در سراسرCPU گیت می کند.
2.حالت آماده به کار
حالت آماده به کار یکی دیگر از حالت های کم مصرف است که اجرای آن برای طراحان آسان است. این بسیار شبیه به حالت بیکار/خواب است زیرا شامل استفاده از گیت ساعت در سراسر پردازنده نیز می شود، اما تفاوت عمده حالت آماده به کار این است که اجازه می دهد محتوای حافظه را تغییر دهید که معمولاً در حالت بیکار/خواب این امکان پذیر نیست.
در حالت آماده به کار، لوازم جانبی با سرعت بالا مانند DMA (دسترسی مستقیم به حافظه)، پورت های سریال، ADC و لوازم جانبی AES در حال اجرا هستند تا اطمینان حاصل شود که بلافاصله پس از بیدار شدن CPU در دسترس هستند. برای میکروکنترلر های خاص، حافظه RAM نیز فعال نگه داشته می شود و می تواند توسط DMA که اجازه می دهد تا داده ها بدون دخالت پردازنده ذخیره و دریافت شوند، قابل دسترسی باشد. برای این میکروکنترلر های کم مصرف، توان خروجی در این حالت می تواند به اندازه 50uA/MHZ باشد.
حالت خواب عمیق
حالت خواب عمیق، به طور کلی شامل غیرفعال کردن ساعت های فرکانس بالا و سایر مدارات درون میکروکنترلر میشود و تنها مدار ساعت هایی را که برای راه اندازی عناصر حیاتی مانند تایمر نگهبان (watchdog timer)، تشخیص قهوهای شدن (brown out detection) و مدار بازنشانی (reset circuitry) استفاده میشود، باقی میگذارد. سایر میکروکنترلر ها ممکن است عناصر دیگری را برای بهبود کارایی کلی به آن اضافه کنند. مصرف برق در این حالت بسته به میکروکنترلر می تواند تا 1uA باشد.
حالت توقف/ خاموش
در این حالت، اسیلاتور های بالا و پایین معمولاً غیرفعال میشوند و فقط برخی از رجیستر های پیکربندی و سایر عناصر حیاتی روشن هستند.
ویژگی های همه حالت های خواب ذکر شده در بالا از یک میکروکنترلر به میکروکنترلر دیگر متفاوت است، اما قاعده کلی همین است. هر چه خواب عمیقتر باشد، تعداد وسایل جانبی بیشتری در طول خواب غیرفعال میشود و میزان توان مصرفی کمتر می شود که به معنای آن است که مقدار توان مصرفی برای بازگرداندن سیستم بیشتر است. بنابراین، این به طراح بستگی دارد که این تغییر را در نظر بگیرد و میکروکنترلر مناسب را برای کار انتخاب کند.
2. تغییر فرکانس پردازنده
این یکی دیگر از روشهای پرطرفدار برای کاهش مقدار توان مصرفی یک میکروکنترلر است. این تا حد زیادی قدیمی ترین روش و کمی پیچیده تر از حالت های خواب است. این شامل فریموری است که به طور پویا ساعت پردازنده را راه اندازی میکند و بین فرکانس بالا و پایین متناوب میشود، زیرا رابطه بین فرکانس پردازنده و مقدار توان مصرفی خطی است (همانطور که در زیر نشان داده شده است).
اجرای این روش معمولاً از این الگو پیروی می کند: هنگامی که سیستم در حالت بیکار است، فریمور فرکانس ساعت را روی سرعت پایین تنظیم می کند و به دستگاه اجازه می دهد مقداری انرژی ذخیره کند و هنگامی که سیستم نیاز به انجام محاسبات سنگین دارد، سرعت ساعت بالا می رود.
معکوس این فرآیند نیز برای تغییر فرکانس پردازنده وجود دارد که نتیجه این است که فریمور بد توسعه یافته است. این زمانی به وجود می آید که فرکانس ساعت در زمانی که سیستم در حال انجام محاسبات سنگین است در پایین نگه داشته شود.
فرکانس پایین در این حالت به این معنی است که سیستم برای انجام وظیفه تعیین شده بیشتر از زمان لازم زمان می برد و بنابراین همان مقدار توانی را مصرف می کند که طراحان سعی در صرفه جویی در آن داشتند. بنابراین، هنگام پیاده سازی این تکنیک در کاربرد های مهم حیاتی، باید مراقبت بیشتری انجام شود.
3. ساختار فریمور نگه دارنده وقفه (Interrupt Handler Firmware Structure)
این یکی از تکنیک های مدیریت توان در میکروکنترلر ها است. این کار توسط چند میکروکنترلر مانند هسته های ARM cortex-M که یک بیت خواب در خروجی (sleep-on-exit) در رجیستر SCR دارند امکان پذیر شده است.
این بیت قابلیت خواب پس از اجرای روتین وقفه را برای میکروکنترلر فراهم می کند. این میتواند یک تکنیک بسیار مفید برای سنسور های رشته ها و سایر کاربرد های بلندمدت مبتنی بر جمع آوری داده ها باشد.
اکثر تکنیک های دیگر، نتیجه تغییر در تکنیک هایی هستند که در بالا ذکر شده است. به عنوان مثال، تکنیک زمان بندی انتخابی محیطی اساساً نوعی تغییر از حالت های خواب است که در آن طراح وسایل جانبی را برای روشن یا خاموش کردن انتخاب میکند. این تکنیک به دانش عمیق میکروکنترلر نیاز دارد و ممکن است برای مبتدیان چندان مناسب نباشد.
4. فریمور بهینه سازی شده
یکی از بهترین راه ها برای کاهش میزان توان مصرفی میکروکنترلر، نوشتن فریمور کارآمد و بهینه سازی شده است. فریمور به طور مستقیم بر میزان کار انجام شده توسط پردازنده در هر زمان تأثیر می گذارد و به طور گسترده به میزان توان مصرفی میکروکنترلر کمک می کند. هنگام نوشتن فریمور باید از کمترین کد استفاده کرد، زیرا وقتی هر دستور غیرضروری اجرا می شود، بخشی از انرژی ذخیره شده در باتری هدر می رود. در زیر برخی از نکات مبتنی بر C برای توسعه بهینه فریمور آورده شده است.
- از کلاس “Static Const” تا آنجا که ممکن است برای جلوگیری از کپی در زمان اجرا از آرایه ها، ساختار ها و… که توان مصرف می کنند، استفاده کنید.
- از اشاره گرها استفاده کنید. آن ها احتمالاً برای مبتدیان سخت ترین بخش زبان C هستند، اما برای دسترسی موثر به ساختار ها و واحد ها بهترین هستند.
- از Modulo اجتناب کنید!
- در صورت امکان از متغیر های محلی بیشتر از متغیر های سراسری استفاده کنید. متغیر های محلی در پردازنده قرار دارند در حالی که متغیر های سراسری در حافظه ذخیره می شوند، پردازنده سریعتر به متغیر های محلی دسترسی پیدا می کند.
- در صورت امکان از انواع داده های بدون علامت استفاده کنید.
- در صورت امکان “شمارش معکوس” را برای حلقه ها اتخاذ کنید.
- به جای رشته های بیت برای اعداد صحیح بدون علامت، از بیت masks استفاده کنید.
روش های دیگری نیز برای کاهش میزان مصرف توان توسط میکروکنترلر علاوه بر رویکرد های مبتنی بر نرمافزار ذکر شده در بالا وجود دارد که مبتنی بر سختافزار مانند تکنیک کنترل ولتاژ هسته هستند، اما در مقاله ای دیگر به آن ها خواهیم پرداخت.
نتیجه گیری
داشتن یک وسیله کم مصرف از انتخاب میکروکنترلر شروع می شود و وقتی سعی می کنید گزینه های متنوع موجود در بازار را بررسی کنید، می تواند کاملاً گیج کننده باشد. در حین اسکن کردن، دیتاشیت برای به دست آوردن عملکرد کلی میکروکنترلر ها خوب است، اما برای کاربرد های مهم توان، می تواند یک روش بسیار پرهزینه باشد.
برای درک ویژگی های توان یک میکروکنترلر، توسعه دهندگان باید مشخصات الکتریکی و قابلیت های کم مصرف موجود در میکروکنترلر را در نظر بگیرند. طراحان نه تنها باید نگران مصرف جریان هر یک از حالت های توان اعلام شده توسط دیتاشیت میکروکنترلر باشند، بلکه باید زمان بیدار شدن، منابع بیدار شدن و تجهیزات جانبی را که برای استفاده در حالت های کم مصرف در دسترس هستند، بررسی کنند.
برای انتخاب میکروکنترلری که توان کمی مصرف کند مهم است که ویژگی های آن را نیز درنظر بگیرید تا از انتخاب خود مطمئن شوید. میکروکنترلر ها یکی از بزرگترین پیشرفت های فناوری بودهاند و در حال حاضر چندین میکروکنترلر کم مصرف وجود دارد که به شما اطمینان می دهد منابعی برای حفظ بودجه انرژی خود دارید. تعدادی از آن ها همچنین چندین نرم افزار تجزیه و تحلیل توان را ارائه می دهند که می توانید برای طراحی موثر از آن ها استفاده کنید.