Battery for MCU

ช่วงนี้เงียบหายไป ก็จะวุ่นๆนิดหน่อยเกี่ยวกับเรื่องของ Battery ที่ใช้ในงาน Micro Controller ยิ่งถ้าเป็นงานทางด้าน iot ยิ่งสำคัญ ซึ่งแน่นอนหละว่าการที่จะให้ Node หรืออุปกรณ์ของเรานั้นสามารถทำงานได้นานขึ้นมีอยู่หลายปัจจัยด้วยกัน แต่หลักๆที่จะต้องพิจารณาก็จะมีดังต่อไปนี้

  • Hardware Design
  • Power Source
  • Coding

Hardware Design: ถ้าเราใช้บอร์ดสำเร็จรูปตระกูล ESP8266 อย่างเช่น WeMos D1 mini หรือ Nodemcu ซึ่งจริงๆก็สะดวกสบายมาก เพราะเสียบสาย USB ก็สามารถโปรแกรมด้วย Arduino IDE ได้แล้วแถมมี Regulator on board มาให้ด้วย ทำให้การต่อ sensor ต่างๆที่ใช้ไฟ 3.3v สะดวกขึ้น มี led แสดงสถานะของบอร์ด มี WiFi ในตัว แต่ถ้านำไปใช้งานทางด้าน iot ที่ต้องทำงานด้วย battery หรืองานที่มีข้อจำกัดทางด้านการจ่ายไฟเลี้ยงให้แล้วหละก็ อาจจะไม่เหมาะนัก เพราะอุปกรณ์เสริมที่ว่ามาทั้งหมดนั้นมีการใช้กระแสในการทำงาน ถ้าจะเอาไปใช้จริงอาจต้องบัดกรีหรือมีการตัดลายวงจรบางส่วนที่ไม่จำเป็นออก ซึ่ง IC Regulator ที่ยอดฮิตก็มีหลายตัวด้วยกัน ยกตัวอย่างเช่น

  • MCP16251 : StepUp Switching Regulator
  • MCP1700 : LDO Regulator
  • AMS1117-5 : LDO Regulator

โดยที่การเลือก regulator มาใช้กับงานที่แหล่งจ่ายไฟเป็นแบบแบตเตอรรี่หรือต้องการประหยัดพลังงาน จะมี term ตัวหนึ่งที่ผู้ออกแบบอุปกรณ์ให้ความสำคัญก็คือ Quiescent Current นั่นก็คืออัตราการกินกระแสในสภาวะปกติ อย่างที่ได้กล่าวไปข้างต้น ดังนั้นถึงแม้เราจะให้ MCU ของเรา Deep Sleep ขนาดไหน เจ้า Regulator ที่ต่อไว้ก็ต้องการกระแสเพื่อใช้ในสถานะปกติอยู่ดี ฉะนั้นเมื่อเปิด Datasheet ดู Quiescent Current ยิ่งน้อยเท่าไหร่ ก็ยิ่งประหยัดไฟได้ดีขึ้น แต่ก็ต้องดูว่าไม่ใช่เลือกแต่ IC ที่ Quiescent Current น้อยๆ แต่สุดท้ายจ่ายกระแสให้กับ MCU และวงจรการทำงานที่เหลือของอุปกรณ์ไม่ได้

Battery LifePo4 ขนาด 10Ah

Power Source: แน่นอนหละว่าแบตที่มีขนาดความจุยิ่งเยอะยิ่งดี แต่ก็ต้องคำนึงถึงความเหมาะสมด้วย เพราะความจุเยอะก็มักจะตามมาด้วยขนาด น้ำหนัก และราคา ที่สูงขึ้น ส่วนจะเลือกแบตประเภทไหนนั้น ก็ขึ้นอยู่กับว่าเราออกแบบ Hardware ไว้อย่างไร บางอุปกรณ์อาจจะใช้ StepUp Regulator เพื่อที่จะใช้ไฟให้คุ้มค่าจากแบตที่สุด เรียกได้ว่าความจุแบตเหลือน้อยๆ เมื่อผ่าน Regulator แล้วตัว MCU ของเราก็ยังทำงานได้ หรือกรณีของ StepDown Regulator ก็จะจ่ายไฟที่มากกว่าแรงดันที่กำหนดไว้ เช่น 5-12v แล้วปรับค่าลงมาเหลือ 5 หรือ 3.3v คราวนี้ก็ซัดแบตก้อนใหญ่ความจุเยอะได้ ส่วนแบบไหนจะดีกว่ากันก็ขึ้นอยู่กับเทคนิคของแต่ละท่าน หรือจะตัดในส่วนของ Regulator ไปเลยแล้วจ่ายตรงให้กับ mcu ก็ได้ ซึ่งก็ต้องเลือกในส่วนของชนิด Battery ให้เหมาะสมและดูงานของเราด้วยว่าสามารถทำงานในแรงดันที่จ่ายให้ได้ถูกต้องหรือไม่

Coding: ทุกบรรทัด ทุกคำสั่งในการทำงานแต่ละบรรทัดของโปรแกรมทีเราเขียน หมายถึงรอบการทำงานของ MCU ของอุปกรณ์ของเรา และนั่นย่อมหมายถึงพลังงานที่ใช้จากแหล่งที่จ่ายให้กับอุปกรณ์ ยิ่ง Code ของเรายาวและมีการทำงานที่นานขึ้น นั่นก็จะทำให้อุปกรณ์ของเราใช้พลังงานนานขึ้นด้วย ฉะนั้นบางครั้งเมื่อออกแบบวงจรทางด้าน Hardware เสร็จแล้ว เขียน Code ที่สามารถทำงานเสร็จ ได้ผลอย่างที่ต้องการแล้ว เราควรทำการ Optimize Code ของเราด้วย หรือในกรณีของการทำ DeepSleep อันนี้ขึ้นกับตระกูลของ MCU ที่ใช้ ซึ่งก็จะมีการ DeepSleep ได้หลายแบบ บางแบบยังสามารถเชื่อมต่อ WiFi ได้ บางแบบตัดทุกอย่างรอ External Interrupt อย่างเดียวเพื่อปลุกขึ้นมาให้ทำงานต่อ ก็จะประหยัดการใช้พลังงานไปได้อีก

คราวนี้มาดูตัว Battery ที่ผมกำลังทดสอบอยู่ ซึ่งที่เห็นก็เป็นส่วนหนึ่งเท่านั้น เพราะสั่งมาทดสอบค่อนข้างเยอะ และที่เจอเหมือนกันหมดก็คือ อย่าเชื่อ label ที่แปะไว้ว่า 5000mAh โดยเฉพาะที่สั่งมาจากจีน ที่พบคือส่วนมากความจุมักจะหารครึ่งจาก label เลยด้วยซ้ำซึ่งจะทำให้การคำนวนการใช้งานของอุปกรณ์ของเรานั้นผิดพลาดไปเยอะ

สารพัด Battery ที่จะนำมาทดลองกับ MCU

ที่เห็นในรูปด้านบน (โต๊ะทำงานก็จะรกๆหน่อยนะครับ 0_0″) จริงๆแล้วมีแบตแค่สองประเภทเท่านั้นเอง คือ Li-ion และ LifePo4 จะต่างกันก็แค่ขนาดและความจุเท่านั้น โดยคุณสมบัติหลักๆที่แตกต่างกันของแบตสองประเภทนี้ก็คือแรงดันที่จ่าย

  • Li-ion แรงดันจะอยู่ที่ประมาณ 3.7-4.2v
  • LifePo4 แรงดันจะอยู่ที่ประมาณ 3.2-3.6v

ถ้าเป็น MCU ตระกูล ESP8266 ที่ระบุ Maximum Voltage ไว้ที่ 3.6v การใช้งานด้วยแบต Li-ion อาจจะไม่เหมาะนักถึงแม้ความจุต่อขนาดมักจะมากกว่าแบตแบบ LifePo4 ยกเว้นใช้งานผ่าน LDO Regulator ส่วน LifePo4 นั้นด้วยแรงดันปกติก็สามารถที่จะต่อตรงให้กับ MCU ตระกูล ESP8266 หรือแม้กระทั่งบอร์ด Arduino Pro mini แบบ 3.3v ที่ทำงานที่ 8Mhz ก็สามารถต่อเข้าที่ขา RAW ได้เลย โดยไม่ต้องเสียพลังงานของแบตเพื่อเลี้ยงให้กับ Regulator

ไว้โอกาสถัดๆไปจะมาลองวัดและคำนวน Power Consumption ของ MCU กันรวมถึงการทดสอบความจุของ Battery กันด้วยว่าที่แปะไว้ 5000MAh หรือแม้กระทั่งเจ้าก้อนใหญ่สุด 10Ah นั้นความจุจริงๆจะอยู่ที่เท่าไหร่ และถ้าเรามาใช้ในงาน iot ของเราจะอยู่ได้นานขนาดไหน ไว้เจอกันใหม่ในบทความหน้าครับ

Author: Joe D.S.
Just a man on earth

2 thoughts on “Battery for MCU

  1. เป็นอีกหนึ่งบทความ (https://www.iottechexpo.com/2018/11/iot/overcoming-iots-battery-barrier-with-self-powered-sensors/) ที่ได้เขียนอธิบายไว้ว่าหนึ่งใน bottle neck ของการเติบโตของ IoT นั้นคือเรื่องของแบตเตอร์รี่ maintenance. ตอนนี้ตัวผมเองก็กำลังวิจัยเรื่อง Enhance battery-powered Internet of Things (IoT) device clouds with micro-scale energy harvesting technologies based on radio frequency (RF) energy อยู่ที่ San Diego. ผ่านมาเจอ meetjoeblog ตอนกำลัง research ESP32 + LoRa technology และรู้สึกว่าเขียนได้สนุกน่าติดตามมากๆๆ ไว้มีโอกาสมา California ก็ทักผมมาได้นะครับ

    1. ด้วยความยินดีครับ เรื่อง Battery เป็นปัญหาใหญ่เลย แต่ก็มา trade-off กับ Application ที่ใช้อะครับ แบตเตอรี่อยู่นานขึ้น, ต้นทุน, ความยากง่ายในการ access site เพื่อเข้าเปลี่ยนแบต แต่พลังงานเป็นเรื่องใหญ่ของงาน iot จริงๆครับ

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.