ถ้าคุณเป็นสายประดิษฐ์หรือนักวิทยุสมัครเล่น การวัดค่าขดลวด (Inductor - L) และตัวเก็บประจุ (Capacitor - C) ถือเป็นเรื่องที่หลีกเลี่ยงไม่ได้ แต่แทนที่เราจะซื้อเครื่องวัดแพงๆ วันนี้เราจะมาสร้างเครื่อง LC Meter ด้วยตัวเอง โดยอิงจากวงจรสุดคลาสสิกตั้งแต่ยุค 1920s อย่าง "Franklin Oscillator" ครับ!
โปรเจกต์นี้ไม่ได้เน้นสร้างเครื่องที่แม่นยำระดับห้องแล็บ แต่เน้นความสนุกในการเรียนรู้ว่า "เราจะเปลี่ยนค่าความต้านทาน (Impedance) อนาล็อก ให้กลายเป็นความถี่ (Frequency) ที่ไมโครคอนโทรลเลอร์อย่าง Arduino สามารถอ่านและคำนวณได้อย่างไร" แค่เปลี่ยนมุมมอง ปัญหาก็ง่ายขึ้นเยอะ!

หลักการทำงาน (The Principle)
วงจร Franklin Oscillator ประกอบด้วยวงจรเรโซแนนซ์ LC ทำงานร่วมกับตัวขยายสัญญาณแบบกลับเฟส (ใช้ชิป 74HCU04) หลักการของมันฉลาดมากครับ:
- เราจะเอาอุปกรณ์ที่ต้องการวัด (DUT) ไปต่อเพิ่มในวงจร LC
- วงจรจะสร้างความถี่การสั่น (Oscillation frequency) ออกมา
- เมื่อนำความถี่นี้ไปเปรียบเทียบกับความถี่ดั้งเดิมของวงจร เราจะสามารถแก้สมการหาค่าของอุปกรณ์ตัวนั้นได้ทันที!
ความแม่นยำของระบบนี้แทบจะขึ้นอยู่กับสิ่งเดียวเลย คือ ตัวเก็บประจุอ้างอิง (Reference Capacitor) ที่เราเอามาใช้เป็นมาตรฐานในการคาลิเบรต (Calibration)
คลิกเพื่อดูรูปวงจรและสมการการทำงาน (View More)
จำลองการทำงานด้วย LTSpice
ก่อนจะต่อวงจรจริง ผู้เขียนได้จำลองการทำงานในโปรแกรม LTSpice เพื่อยืนยันว่าวงจร Franklin ทำงานได้จริงกับชิป 74HCU04 ใครอยากลองเล่นเอง ทำตามนี้ได้เลยครับ:
- ดาวน์โหลดและนำไฟล์
74hcu04.asy ไปวางในโฟลเดอร์ sym ของ LTspice
- นำไฟล์ข้อมูล
74hc.lib ไปวางในไดเรกทอรีที่เกี่ยวข้อง และตั้งค่าคำสั่ง .lib 74hc.lib ใน SPICE Directive
- เพิ่มแหล่งจ่ายไฟ DC 5V ให้กับ Vcc
- ตั้งค่าเงื่อนไขเริ่มต้น (Initial condition) เป็น
.ic V(n003) = 1V เพื่อกระตุ้นให้เกิดการสั่น (Oscillation)
กระบวนการทำงานของโค้ด (The Sketch Overview)
ระบบการนับความถี่จะแบ่งเป็น 2 ช่วง คือ ช่วงคาลิเบรต (Calibration flow) และ ช่วงวัดค่า (Measuring flow) ลองดู Flow การทำงานจำลองด้านล่างนี้ได้เลยครับ:
คลิกเพื่อดูและคัดลอกโครงสร้างโค้ดการวัดค่า (View More)
/* โครงสร้างการทำงาน (Pseudo-code) สำหรับวัดความถี่ LC Meter
ใช้ร่วมกับบอร์ด Arduino Nano / ATmega328P
*/
void startMeasurement() {
// 1. รอให้ความถี่การสั่นคงที่
waitForStableOscillation();
// 2. นับจำนวนพัลส์ตามเวลา Gate time
countPulses();
// 3. หาค่าเฉลี่ย N ครั้ง จนกว่าความถี่ที่ติดกันจะต่างกันไม่เกิน 0.5%
averageFrequencies();
}
void calibrationFlow() {
// วัดความถี่ตั้งต้น (freq1)
float freq1 = measureFreq();
// ใส่ตัวเก็บประจุอ้างอิง (Cref) เข้าไปในวงจร
insertCref();
// วัดความถี่ครั้งที่ 2 (freq2)
float freq2 = measureFreq();
// คำนวณค่า L และ C ของวงจรตั้งต้น
solveBaseTankParameters(freq1, freq2);
storeParameters();
}
void measuringFlow() {
// นำอุปกรณ์ที่ต้องการวัด (DUT) เข้าสู่วงจร
insertDUT();
// ทำการวัดและคำนวณค่า
float finalValue = measureAndCalculate();
printToScreen(finalValue);
}
อัปเดตล่าสุด: เทียบกับ NanoVNA และการปรับปรุงเวอร์ชันใหม่
ผู้สร้างได้นำ LC Meter DIY ตัวนี้ไปเทียบกับเครื่องมือระดับโปรอย่าง NanoVNA (Vector Network Analyzer) ปรากฏว่า LC Meter ของเรา "อ่านค่าง่ายกว่าและใช้งานสะดวกกว่า" ในงานพันขดลวดทั่วไป! เพราะ NanoVNA จะแสดงผลเป็นกราฟ Smith chart ซึ่งต้องมานั่งตีความอีกที แถมเมื่อวัดขดลวดขนาด 10mH ตัว NanoVNA กลับแสดงค่าเพี้ยนเนื่องจากผลของ Self-resonance ในขณะที่ LC Meter DIY ยังอ่านค่าได้ปกติ
คลิกเพื่อดูรูปภาพการเปรียบเทียบกับ NanoVNA (View More)
การอัปเกรดในเวอร์ชัน V7 และ V8:
ในเวอร์ชันแรกๆ ผู้สร้างใช้ Relay เพื่อทำการคาลิเบรตอัตโนมัติ แต่มันมีปัญหาเรื่องราคาแพงและหาซื้อยาก ในเวอร์ชัน V7 เขาจึงเปลี่ยนมาใช้ สวิตช์ 6 ขา DPDT (Double-Pole Double-Throw) สับสวิตช์ด้วยมือแทน ซึ่งเขาบอกว่า "การคาลิเบรตด้วยมือคือฟีเจอร์ ไม่ใช่บั๊ก!" เพราะเราทำแค่ตอนเปิดเครื่องครั้งเดียว และทำให้เรารู้สถานะของวงจรอย่างโปร่งใสที่สุดครับ
อยากได้อุปกรณ์อิเล็กทรอนิกส์และบอร์ด Arduino ไปลองสร้างโปรเจกต์เองไหม?
คำเตือน: เนื้อหานี้เป็นการสรุปและเรียบเรียงจากบทความต้นฉบับภาษาอังกฤษ ข้อมูลฉบับภาษาไทยอาจมีความคลาดเคลื่อนบางประการจากการตีความหรือย่อเนื้อหา