อ่าน ADC ได้ตัวเลขแล้ว แปลงเป็นแรงดันได้เลยไหม

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

ก่อนเริ่มอ่านด้วยโค้ด ลองตรวจการต่อ กราวด์ร่วม และแรงดันที่จุดเข้าขาด้วยมิเตอร์ก่อน การตรวจตรงนี้ช่วยแยกว่าวงจรให้แรงดันตามที่ออกแบบหรือยัง ถ้าจุดนี้ไม่ตรง การแก้สูตรแสดงผลท้ายโปรแกรมก็เพียงทำให้ผลดูตรงบางช่วงโดยยังมีสาเหตุเดิมอยู่
raw count ยังไม่ใช่มิลลิโวลต์
ตัวเลขดิบจาก ADC เป็นผลการแปลงตามการตั้งค่าที่เลือก ทั้งความละเอียดและ attenuation มีผลกับวิธีอ่าน ขณะเดียวกันชิปแต่ละรุ่นก็อาจรองรับวิธี calibration ต่างกัน จึงไม่ควรเอาสูตรของบอร์ดหนึ่งไปใช้กับอีกตระกูลโดยสมมติว่าช่วงอ่านเหมือนกันทั้งหมด
ใน ESP-IDF มี driver สำหรับ calibration เพื่อแปลงค่าดิบให้เป็นแรงดันตามวิธีที่ชิปรองรับ ส่วน framework หรือไลบรารีชั้นบนอาจมีคำสั่งช่วยอีกที เราควรตรวจว่าคำสั่งที่เรียกคืนหน่วยใด และใช้การตั้งค่าตรงกับตอนอ่านจริงหรือไม่ จะได้ไม่แปลงซ้ำหรือใช้อัตราส่วนผิด
เมื่อได้แรงดันที่ขาแล้ว จึงค่อยย้อนอัตราส่วนของวงจรแบ่งแรงดันกลับไปหาค่าต้นทาง เช่น ถ้าฟังก์ชันคืนมิลลิโวลต์ของขา ADC เราก็ยังต้องคำนวณแรงดันแบตจากอัตราส่วน ไม่ควรติดป้ายว่าแรงดันแบตให้ค่าที่เพิ่งอ่านออกมาตรงๆ
การแยกตัวแปรเป็น raw_count, adc_mv และ source_mv ช่วยให้ตามค่าระหว่างทางได้ง่ายกว่าการรวมเป็นตัวเลขเดียว ถ้าค่าผิด เราจะรู้ว่าควรเริ่มจากการอ่าน การแปลงหน่วย หรืออัตราส่วนวงจรครับ
เทียบกับมิเตอร์โดยเก็บเงื่อนไขให้ครบ
การลองวัดจุดเดียวแล้วบวกค่าชดเชยคงที่อาจทำให้ตรงที่จุดนั้น แต่ยังไม่บอกว่าช่วงอื่นตรงด้วยหรือไม่ ถ้าต้องการประเมินวิธีแปลง ควรมีจุดเทียบหลายระดับภายในช่วงที่ใช้งานจริง พร้อมจดว่ามิเตอร์วัดที่ต้นทางหรือที่ขา ADC
ตัวอย่างรายการที่จะเก็บมีแรงดันจากมิเตอร์ ค่าดิบ ค่าแรงดันหลัง calibration ค่าอัตราส่วนที่ใช้ และสถานะโหลดของบอร์ด ข้อมูลเหล่านี้เป็นช่องที่จะนำไปกรอกผลจริง ไม่ใช่ตารางตัวเลขตัวอย่างที่เราควรแต่งขึ้นเพื่อให้เหมือนทดสอบแล้ว

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


