ข้ามไปที่เนื้อหา

การวัดแรงดันแบตเตอรี่แรงดันสูง (High-Voltage Monitoring)

ไมโครคอนโทรลเลอร์ (3.3V หรือ 5V) ไม่สามารถวัดแรงดันแบตเตอรี่ 12V หรือ 16V ได้โดยตรง เราจึงต้องใช้วงจร Voltage Divider (แบ่งแรงดัน)


1. วงจรแบ่งแรงดัน (Voltage Divider Circuit)

เราใช้ตัวต้านทาน 2 ตัวเพื่อลดทอนแรงดันลงมาให้อยู่ในระดับที่ปลอดภัย

แผนผังวงจร

Battery (+) ---- [ R1 ] ----+---- ADC Pin (A0)
                            |
                         [ R2 ]
                            |
Battery (-) ----------------+---- GND

การคำนวณ (3S Battery 12.6V -> 3.3V ADC)

  • R1: 10 kΩ
  • R2: 2.2 kΩ
  • สูตร: $V_{out} = V_{in} \times \frac{R2}{R1 + R2}$
  • $12.6V \times \frac{2.2}{10 + 2.2} \approx 2.27V$ (ปลอดภัยสำหรับพิน 3.3V)

2. โค้ดสำหรับคำนวณ (Arduino/ESP32)

เมื่ออ่านค่า Digit ได้แล้ว ต้องแปลงกลับเป็นแรงดันจริงโดยใช้ค่า Ratio ของตัวต้านทาน

const float R1 = 10000.0;
const float R2 = 2200.0;
const float ratio = (R1 + R2) / R2;

void setup() {
  Serial.begin(115200);
}

void loop() {
  int rawADC = analogRead(34); // อ่านจากพิน GPIO 34
  float pinVoltage = (rawADC * 3.3) / 4095.0; // แปลงเป็นโวลต์ที่พิน (สำหรับ ESP32 12-bit)
  float batteryVoltage = pinVoltage * ratio; // แปลงเป็นโวลต์ของแบตเตอรี่จริง

  Serial.print("Battery: ");
  Serial.print(batteryVoltage);
  Serial.println(" V");
  delay(1000);
}

🛠️ เคล็ดลับความแม่นยำ (Pro Tips)

  1. วัดค่าตัวต้านทานจริง: ตัวต้านทานมีความคลาดเคลื่อน (Tolerance) ควรใช้มัลติมิเตอร์วัดค่า R จริงก่อนนำมาใส่ในโค้ด
  2. ใช้ Capacitor กรองสัญญาณ: ต่อ C 0.1uF คร่อม R2 เพื่อให้ค่า ADC นิ่งขึ้น
  3. Calibration: หากค่าที่อ่านได้ไม่ตรงกับมัลติมิเตอร์ ให้ปรับค่า "3.3" ในโค้ดทีละนิดเพื่อให้ตรงกับแรงดันอ้างอิงของบอร์ดจริง