ตัวอย่างการใช้งาน Current Sensors (เซ็นเซอร์วัดกระเเส) ประเภท Hall Effect Sensor

ตัวอย่างการใช้งาน Current Sensors (เซ็นเซอร์วัดกระเเส)

ประเภท Current Transformer Sensor

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

1
2
3
4

เนื่องจากตัว 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

5
6

               ภาพที่ 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

ทดสอบเซ็นเซอร์

8

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

9
10

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

11
12
13
14
15
16

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

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

17
18
19