ให้บอร์ดตื่นบ่อยแค่ไหน แบตถึงจะอยู่กับงานเราไหว

หลังจากทำให้อุปกรณ์เข้าโหมดหลับได้แล้ว คำถามถัดไปมักเป็นว่าควรปลุกมันบ่อยแค่ไหน ถ้าตื่นถี่ข้อมูลก็ดูสด แต่ถ้าปล่อยให้นอนนานขึ้นก็อาจประหยัดไฟกว่า จนอยากเลือกรอบให้นานที่สุดเท่าที่ทำได้
แต่รอบที่เหมาะไม่ได้เริ่มจากแบตเพียงอย่างเดียวครับ มันเริ่มจากงานต้องรู้ความเปลี่ยนแปลงเร็วแค่ไหน และจะเกิดอะไรขึ้นถ้าระหว่างที่บอร์ดหลับมีเหตุการณ์ที่อยากรับรู้ผ่านไปแล้ว การประหยัดที่ทำให้ข้อมูลตอบโจทย์ไม่ได้ก็ยังไม่ใช่คำตอบของระบบ
บทนี้จึงจะค่อยๆ จัดงบพลังงานจากหน้าที่ของอุปกรณ์ โดยดูทั้งเวลาตื่น เวลาหลับ และงานที่เกิดซ้ำในแต่ละรอบ ส่วนอายุแบตจริงต้องอาศัยผลวัดกับแบตและวงจรที่ใช้อยู่ ไม่ใช้ค่าตัวอย่างของชิปแทนทั้งอุปกรณ์
เริ่มจากเวลาที่งานยอมรอได้
ถ้าระบบมีหน้าที่รายงานแนวโน้มที่เปลี่ยนช้า การรออ่านรอบถัดไปอาจยอมรับได้ แต่ถ้างานต้องตรวจเหตุการณ์สั้นๆ การหลับเป็นช่วงยาวโดยไม่มีทางปลุกจากเหตุการณ์นั้นอาจทำให้ไม่เห็นสิ่งที่เกิดขึ้นเลย ไม่ใช่เพียงเห็นช้าลง
จึงควรแยกว่าต้องการตัวอย่างตามรอบ หรือจำเป็นต้องตรวจการเปลี่ยนสถานะด้วยฮาร์ดแวร์ที่ปลุกได้ หากเลือกวิธีปลุกจากภายนอก ก็ต้องดูความสามารถของชิปกับวงจรที่ยังได้รับไฟระหว่างหลับ รวมถึงต้นทุนพลังงานของส่วนเฝ้าดูนั้นด้วย

เวลาที่คนดูเว็บรอเห็นข้อมูลยังมีทั้งช่วงรอปลุก ช่วงทำงาน และช่วงส่งต่อไปถึงหน้าจอ การตั้งรอบอ่านอย่างเดียวจึงยังไม่ใช่เวลาตอบสนองครบเส้นทาง หากมี retry เครือข่ายหรือการสรุปข้อมูลเพิ่ม ก็ควรนับเข้ามาตามหน้าที่จริง
เมื่อได้ขอบเขตนี้แล้ว เราจะมีเหตุผลในการเลือกช่วงตื่น ไม่ต้องตัดสินจากความรู้สึกว่าอ่านทุกนาทีน่าจะพอดีกับทุกงาน เพราะคำว่าพอดีต้องมีคำถามที่ข้อมูลนั้นกำลังตอบอยู่ก่อน
แยกพลังงานของแต่ละช่วงในหนึ่งรอบ
ในหนึ่งรอบอาจมีการบูต เตรียมเซนเซอร์ เชื่อมเครือข่าย อ่านค่า และส่งข้อมูล ก่อนกลับไปหลับ แต่ละช่วงใช้กระแสและระยะเวลาต่างกัน การเห็นช่วงหลับใช้ไฟน้อยจึงยังไม่พอจะสรุปผลเฉลี่ยของทั้งรอบ
ถ้าแรงดันอ้างอิงคงที่และวัดกระแสที่ขอบเขตเดียวกัน เราสามารถมองค่าเฉลี่ยจากผลรวม Iavg = Σ(Ii × ti) / T ได้ โดยแต่ละช่วงมีค่ากระแสกับเวลาของมัน แต่ถ้าเส้นทางพลังงานมีการแปลงแรงดันหรือโหลดเปลี่ยนซับซ้อน ก็ต้องเลือกวิธีวัดและคำนวณให้ตรงกับขอบเขตนั้น ไม่เอาคนละรางไฟมารวมกันตรงๆ

วิธีคิดนี้ช่วยให้เห็นว่าช่วงสั้นแต่กระแสสูงอาจมีส่วนมาก และช่วงกระแสต่ำที่ยาวก็ยังมีส่วนสะสมอยู่ เราควรเก็บข้อมูลทั้งรอบ ไม่ใช้มิเตอร์อ่านเพียงจังหวะที่บอร์ดนิ่งแล้วคูณเป็นทั้งวัน
ระหว่างเตรียมวัดให้จดด้วยว่า USB หรืออุปกรณ์ดีบักยังจ่ายไฟเข้ามาหรือไม่ หากพลังงานบางส่วนมาจากอีกทางหนึ่ง ผลฝั่งแบตที่วัดได้ก็อาจไม่ครอบคลุมอุปกรณ์ทั้งหมด และไม่ควรนำไปประมาณอายุแบบตัดทางนั้นออกโดยไม่ทดสอบใหม่
ลดงานซ้ำก่อนเพิ่มเวลาหลับอย่างเดียว
เมื่อแยกช่วงได้ อาจพบว่าส่วนที่กินเวลามากไม่ใช่การอ่านเซนเซอร์ แต่เป็นการเชื่อมต่อหรือเตรียมระบบที่ทำใหม่ทุกครั้ง การลดภาระตรงนั้นจึงอาจช่วยได้โดยยังรักษารอบข้อมูลที่งานต้องใช้ไว้
เช่น อาจพิจารณาว่าต้องส่งทุกครั้งที่อ่านหรือสามารถเก็บหลายตัวอย่างแล้วส่งเป็นชุดได้ แต่การทำเช่นนี้ต้องดูพื้นที่และความเสี่ยงหากไฟหายก่อนส่ง รวมถึงอายุข้อมูลที่ปลายทางยอมรับ ไม่ถือว่าการรวมส่งไม่มีผลต่อความหมายของข้อมูล
ส่วนการส่งเฉพาะเมื่อค่าเปลี่ยนมากกว่าขอบเขตที่กำหนด อาจลดข้อมูลบางแบบได้ แต่ควรมีรอบรายงานสถานะเป็นระยะด้วยตามความต้องการ ไม่ให้ฝั่งรับแยกไม่ออกว่าค่านิ่งหรืออุปกรณ์หาย และขอบเขตการเปลี่ยนต้องมาจากลักษณะงานกับความคลาดเคลื่อนที่ยอมรับ
การคงการเชื่อมต่อไว้กับการตัดทุกครั้งก็เป็นทางเลือกที่ต้องวัดร่วมกับช่วงตื่นจริง บางงานอาจเหมาะกับวิธีหนึ่งมากกว่าอีกวิธี แต่เราไม่ควรสรุปจากชื่อโหมดว่าแบบใดประหยัดกว่าในทุกช่วงเวลาโดยยังไม่มีผลของอุปกรณ์ชุดนั้น
ใส่ขอบเขตให้กรณีเชื่อมต่อไม่ได้
รอบทำงานที่คำนวณจากเครือข่ายพร้อมอาจต่างจากวันที่ access point หายไป หากปล่อยให้บอร์ดตื่นลองเชื่อมจนสำเร็จโดยไม่มีเพดาน งานที่ตั้งใจให้ตื่นสั้นๆ ก็อาจกลายเป็นเปิดวิทยุอยู่นานกว่าที่ออกแบบไว้มาก
จึงควรมีเวลาและจำนวนความพยายามสูงสุดของรอบ แล้วเลือกว่าจะเก็บข้อมูลหรือรายงานอย่างไรเมื่อยังส่งไม่ได้ การกลับไปหลับตามนโยบายไม่ใช่การทำให้ข้อมูลหายโดยปริยาย แต่ต้องเชื่อมกับแผน buffer และความสำคัญของข้อมูลก่อน
กรณีเริ่มระบบใหม่หลังแรงดันต่ำก็ต้องพิจารณาด้วย หากอุปกรณ์วนบูต เชื่อมต่อไม่ทัน แล้วเริ่มใหม่ซ้ำ การใช้พลังงานจริงอาจไม่เหมือนรอบที่เราทดสอบในสภาพแบตพร้อม ควรตรวจพฤติกรรมช่วงนี้ตามข้อกำหนดของวงจรและแบตที่ใช้
จากงบรอบไปถึงอายุแบตยังมีเงื่อนไข
ความจุที่ระบุบนแบตไม่ได้แปลว่าพลังงานทั้งหมดจะถูกใช้งานได้ในสภาพใดก็ได้ ยังต้องดูโหลด อุณหภูมิ จุดที่วงจรหยุดทำงาน การแปลงไฟ และสภาพแบตด้วย จึงควรเก็บสมมติฐานเหล่านี้เมื่อประมาณระยะเวลา ไม่ส่งตัวเลขเป็นคำรับรองโดยไม่มีขอบเขต
หากจะเปรียบเทียบรอบปลุกสองแบบ ให้ใช้แบตและวงจรที่เทียบกันได้ คงหน้าที่ที่ต้องทำ แล้วเก็บทั้งพลังงานกับความครบของข้อมูล เพราะรอบที่อยู่ได้นานกว่าแต่พลาดเหตุการณ์ที่งานต้องใช้ อาจไม่ใช่ตัวเลือกที่ใช้งานได้จริง
ระหว่างทดสอบควรเก็บจำนวนรอบตื่น รอบส่งสำเร็จ และเหตุที่ใช้เวลานานกว่าปกติ ข้อมูลนี้ช่วยอธิบายความต่างระหว่างผลคำนวณกับการใช้งานได้มากกว่าการมีเพียงเวลาวันเริ่มกับวันที่เครื่องหยุดทำงาน
หากเปลี่ยนรอบจากระยะไกล ควรบันทึกเวลาที่ตั้งค่าใหม่ไว้กับข้อมูลด้วย เพื่อไม่เอาผลจากสองนโยบายมารวมแล้วสรุปเป็นการใช้งานแบบเดียว รวมถึงกำหนดช่วงค่าที่รับได้ ป้องกันการตั้งรอบที่ทำให้ข้อมูลช้าเกินโจทย์หรือปลุกถี่เกินขอบเขตที่ออกแบบไว้
สรุป
การเลือกรอบตื่นควรเริ่มจากเวลาตอบสนองที่งานต้องใช้ แล้วจัดงบพลังงานให้ครอบคลุมแต่ละช่วง รวมถึงกรณีเครือข่ายไม่พร้อม เมื่อแยกการอ่าน การส่ง และเงื่อนไขเก็บข้อมูลไว้ได้ เราจะเลือกจุดประหยัดได้โดยยังรักษาหน้าที่ของอุปกรณ์ และมีสมมติฐานที่ตรวจต่อได้ก่อนสรุปอายุแบตจริงครับ


