ตัวอย่างการใช้งาน Current Sensors (เซ็นเซอร์วัดกระเเส)
ประเภท Current Transformer Sensor
ถ้าดูจากตารางสินค้า (ตารางเปรียบเทียบคุณสมบัติของ Current Sensor (เซ็นเซอร์วัดกระแส) รุ่นต่างๆ) จะมีรหัส ESEN207, ESEN141, ESEN148 ทั้ง 2 ต่างกันตรงย่านการวัด แต่การหลักการใช้งานเหมือนกันคือวัดค่าออกมาเป็นกระแส แต่ ESEN148 ให้สัญญาณออกมาเป็นแรงดัน ในบทความนี้ จะขอยกตัวอย่าง ESEN141 Non-Invasive Current Sensor – (100A Max) Current Output




เนื่องจากตัว ESEN141 ให้สัญญาณออกมาเป็นกระแส ไม่สามารถนำไปต่อกับ MCU โดยตรง ต้องแปลงให้เป็นแรงดันก่อนใช้หลักการ V= I x R ต่อ R Burden เข้ากับเซ็นเซอร์ แล้วให้ MCU วัดแรงดันที่ตกคร่อม R Burden อีกที แต่สัญญาณหลัง R Burden ยังเป็นสัญญาณ AC อยู่ แต่ MCU รับสัญญาณไฟ DC ที่ 0-VCC ดังนั้นต้องยกระดับขึ้นไป 2.5 V จากวงจร R divider
คำนวณหาค่า R Burden
เนื่องจากตัว ESEN141 ให้สัญญาณออกมาเป็นกระแส เราต้องคำนวณค่า R Burden เพื่อให้ได้แรงดันตกคร่อม R ที่มีแอมพลิจูดที่เหมาะสมกับพอร์ต ADC ของ MCU เช่นในบอร์ด Arduino ต้องคำนวณค่า R Burden ให้สัญญาณออกมามีแอมพลิจูดไม่เกิน 5V แต่ถ้าในรุ่น ESEN148 จะให้สัญญาณออกมาเป็นแรงดันเลย เพราะมี R Burden ต่ออยู่ในเซ็นเซอร์อยู่แล้วไม่ต้องต่อเพิ่ม
1. กำหนดย่านการวัด
เราต้องทราบก่อนว่าต้องการวัดกระแสในย่านเท่าไหร่หรือโหลดกินกระแสเท่าไหร่ ถ้ากำหนดย่านสูงเกินไป สัญญาณที่ออกมามีขนาดเล็ก จะไม่เห็นความแตกต่างของสัญญาณมากนัก ในตัวอย่างนี้กำหนดที่ 100 A คือที่เซ็นเซอร์สามารถวัดได้สูงสุด
2. หาค่ากระแสสูงสุดในฝั่ง Primary (Primary peak-current) โดยคูณค่ากระแส RMS ด้วย √2
Primary peak-current = RMS current × √2 = 100 A × 1.414 = 141.4A
3. หาค่ากระแสสูงสุดในฝั่ง Secondary (Secondary peak-current) โดยนำค่า Primary peak-current ไปหารจำนวนรอบของ CT ในรุ่นนี้คือ 2000
Secondary peak-current = Primary peak-current / no. of turns = 141.4 A / 2000 = 0.0707A
4. หาค่า R Burden เมื่อ CT วัดกระแสได้สูงสุด ค่าแรงดังสุงสุดที่ผ่าน R Burden จะต้องไม่เกินไฟแรงดันอ้างอิงของพอร์ต ADC (analog reference voltage (AREF)) ของ MCU ที่ใช้ โดยนำไปหาร 2 ก่อน ถ้าใช้บอร์ด Arduino UNO R3 แรงดัน AREF คือ 5V : AREF /2 =5/2=2.5V ดังนั้นจะหา ค่าความต้านทาน R Burden ในอุดมคติจะหาได้จาก
Ideal burden resistance = (AREF/2) / Secondary peak-current = 2.5 V / 0.0707 A = 35.4 Ω
แต่ค่า R ทั่วไปที่ใกล้เคียงที่สุดนั้นไม่ใช่ 35 Ω ดังนั้นค่าที่ใกล้เคียงที่สุด คือ 39 Ω หรือ 33 Ω แนะนำให้ใช้ 33 Ω ±1%
ถ้าเลือกใช้ MCU ตัวอื่นที่ใช้ไฟ AREF ที่ 3.3 V ดังนั้นจะหาค่า R Burden ได้จาก
Ideal burden resistance = (AREF/2) / Secondary peak-current = 1.35V / 0.0707A = 19.1 Ω
5. ยกระดับแรงดันสัญญาณ ด้วยวิธี DC Bias
ตอนนี้ถ้าเราต่อ CT เข้ากับ R burden และทำการวัดกระแส สัญญาณที่ออกมาจาก CT จะยังเป็นสัญญาณ AC อยู่ ดังนั้นถ้าต่อเข้ากับ MCU ที่วัดสัญญาณที่วัดสัญญาณ DC เท่านั้น ต้องยกระดับสัญญาณ AC เป็นไฟ DC โดยจะยกไป AREF/2 จากวงจรแบ่งแรงดัน (Voltage Divider) จาก R1 และ R2 จากสูตร Vout = Vin x R2 /(R1 + R2) เช่น ถ้าใช้บอร์ด Arduino Uno DC Bias ขึ้นไป 2.5 V จึงเลือกใช้ค่า R1, R2 ที่ 100k Ω เท่ากัน ส่วน Capacitor C1 ทำหน้าเป็น Filter noise แนะนำเป็น 10 uF
แสดงวงจรใช้งาน Non-Invasive Current Sensor – (100A Max) กับ Arduino วัดไฟ AC
ภาพที่ 1 (คลิกที่ภาพเพื่อขยาย) ภาพที่ 2 (คลิกที่ภาพเพื่อขยาย)
จากภาพที่ 1 จะเห็นได้ว่า ต่อ R Burden คร่อมกับขาเอาท์พุตของเซ็นเซอร์ จากที่ได้คำนวณมาแล้วข้างต้น ข้างหนึ่งต่อกับวงจร R divider ที่ลดทอนเหลือ 2.5 V และข้างหนึ่งของ R Burden ต่อเข้ากับ ขา ADC 1 ของ Arduino
ในกรณีที่ โหลดที่เซ็นเซอร์วัดอยู่กินกระแสน้อยเกินไป ให้สัญญาณที่ตกคร่อม R Burden ต่ำมาก (ระดับ mV) ผู้ใช้ต้องเพิ่มแอมพลิจูดของสัญญาณให้เหมาะสมกับ แรงดันที่ขา ADC ของ Arduino รับได้คือไม่เกิน 0 – 5 V โดยอาจะเพิ่มรอบขดลวดสายไฟที่ฝั่ง Primary หรือต่อวงจรขยายสัญญาณ จากภาพที่ 2 เป็นวงจรขยายแบบ Non-inverting Operational Amplifier โดยใช้ Op-amp เบอร์ LM358 โดยอัตราขยายสัญญาณคำนวณจากสูตร AV = 1+ VR1/VR2 ดังภาพ
ตัวอย่างโค้ดโปรแกรม
#include "EmonLib.h" // Include Emon Library EnergyMonitor emon1; // Create an instance void setup() { Serial.begin(9600); emon1.current(1, 111.1); // Current: input pin, calibration. } void loop() { double Irms = emon1.calcIrms(1480); // Calculate Irms only Serial.print(Irms*230.0); // Apparent power Serial.print(" "); Serial.println(Irms); // Irms }
อธิบายคำสั่งโค้ดส่วนต่างๆ
#include "EmonLib.h" // Include Emon Library EnergyMonitor emon1; // Create an instance
ดึงคำสั่งจาก Library EmonLib มาใช้ โดยใช้คำสั่ง #include “EmonLib.h” จากนั้นประกาศ Instance ชื่อ emon1
void setup() { Serial.begin(9600); emon1.current(1, 111.1); // Current: input pin, calibration. }
ในฟังชั่น Setup ก่อนที่จะเริ่มอ่านค่าจากเซ็นเซอร์ ให้เปิดใช้งาน Hardware Serial กำหนด baud rate เป็น 9600 bps กำหนดค่าให้ฟังชั่น current โดยประกอบด้วย ชื่อขาอนาล็อก และค่าที่เซ็นเซอร์อ่านได้สูงสุด
void loop() { double Irms = emon1.calcIrms(1480); // Calculate Irms only Serial.print(Irms*230.0); // Apparent power Serial.print(" "); Serial.println(Irms); // Irms }
จากโค้ดจะเห็นได้ว่า
ในฟังก์ชั่น Loop วนอ่านสัญญาณอนาล็อกจากเซ็นเซอร์โดยใช้ฟังชั่น calIrms โดยใส่พารามิเตอร์เป็น จำนวนการอ่าน และเก็บไว้ในตัวแปร Irms จากนั้นส่งค่าตัวแปรแสดงผ่านพอร์ต Serial
ทดสอบเซ็นเซอร์

ทดสอบเซ็นเซอร์ ไฟ AC 220V โดยให้โหลดเป็นหลอดไฟจำนวน 4 หลอด ทดสอบเซ็นเซอร์เมื่อเทียบกับดิจิตอลมิเตอร์ Fluke รุ่น DM119


เมื่อนำ Non-Invasive Current Sensor วัดไฟกระแส AC สัญญาณที่ออกจากวงจรเป็นสัญญาณไฟ DC ที่มีสัญญาณ AC ผสม เมื่อวัดได้ 0A (ไม่มีโหลด) สัญญาณจะออกประมาณ 2.5 V เมื่อโหลดกินกระแสมากขึ้น แรงดันสัญญาณจะมีแอมพลิจูดเพิ่มขึ้น แต่จะไม่เกินกว่า 5V (แรงดันแหล่งจ่ายของเซ็นเซอร์)






จากตารางผลการทดสอบจะเห็นได้ว่า เมื่อเปรียบเทียบค่าที่ได้จากการวัดของดิจิตอลมิเตอร์ และที่วัดได้จากเซ็นเซอร์ มีความคลาดเลื่อนประมาณ 1.45%, 2.22% และ 0.20%
การชดเชยค่า Error เซ็นเซอร์ อาจทำได้โดยการเก็บตัวอย่างค่าที่วัดได้มากขึ้น ทำให้ทราบค่าที่ Error ได้แม่นยำขึ้น และนำค่าไปปรับในโค้ดโปรแกรมบน Arduino ให้ชดเชยค่าคงที่ในการหาแรงดันและกระแสที่ผู้ผลิตกำหนดไว้


