สารบัญ:

การวัดความถี่ของแหล่งจ่ายไฟและแรงดันไฟฟ้าโดยใช้ Arduino: 6 ขั้นตอน
การวัดความถี่ของแหล่งจ่ายไฟและแรงดันไฟฟ้าโดยใช้ Arduino: 6 ขั้นตอน

วีดีโอ: การวัดความถี่ของแหล่งจ่ายไฟและแรงดันไฟฟ้าโดยใช้ Arduino: 6 ขั้นตอน

วีดีโอ: การวัดความถี่ของแหล่งจ่ายไฟและแรงดันไฟฟ้าโดยใช้ Arduino: 6 ขั้นตอน
วีดีโอ: สัญญาณ pwm คืออะไร ? 2024, พฤศจิกายน
Anonim
การวัดความถี่และแรงดันไฟฟ้าของแหล่งจ่ายไฟโดยใช้ Arduino
การวัดความถี่และแรงดันไฟฟ้าของแหล่งจ่ายไฟโดยใช้ Arduino

บทนำ:

เป้าหมายของโครงการนี้คือการวัดความถี่และแรงดันไฟฟ้าของแหล่งจ่ายซึ่งอยู่ระหว่าง 220 ถึง 240 โวลต์และ 50 เฮิร์ตในอินเดีย ฉันใช้ Arduino เพื่อจับสัญญาณและคำนวณความถี่และแรงดันไฟฟ้า คุณสามารถใช้ไมโครคอนโทรลเลอร์หรือบอร์ดอื่นๆ ที่คุณมีได้ วงจรนี้ต้องการส่วนประกอบจำนวนหนึ่งและค่อนข้างแม่นยำสำหรับวัตถุประสงค์ในทางปฏิบัติทั้งหมด

ขั้นตอนที่ 1: ส่วนประกอบที่จำเป็น

  • Arduino Uno
  • ไอซี LM358
  • สเต็ปดาวน์หม้อแปลง (220V ถึง 12V)
  • ตัวเก็บประจุ:

    • 0.1uF
    • 2 x 1uF
  • ตัวต้านทาน:

    • 3 x 1kOhm
    • 2 x 100kOhm
    • 1.5kOhm
    • 3.3kOhm
    • 6.8kOhm
  • 3 x 1N4148 ไดโอด
  • Bread Board และ Jumper wire (อุปกรณ์เสริม)

ขั้นตอนที่ 2: แผนผังไดอะแกรม

แผนภาพ
แผนภาพ
แผนภาพ
แผนภาพ

ในวงจรข้างต้น หม้อแปลงหลักเชื่อมต่อกับแหล่งจ่ายไฟหลัก และหลักเชื่อมต่อกับวงจรการวัดของเรา

ขั้นตอนที่ 3: ทำความเข้าใจวงจร

ทำความเข้าใจวงจร
ทำความเข้าใจวงจร
ทำความเข้าใจวงจร
ทำความเข้าใจวงจร
ทำความเข้าใจวงจร
ทำความเข้าใจวงจร

ตามลักษณะการทำงาน วงจรนี้สามารถแบ่งออกเป็นสี่ส่วน:

A: วงจร Zero Crossing Detector

วงจรนี้สร้างพัลส์สี่เหลี่ยม 5V เมื่อใดก็ตามที่คลื่นไซน์เปลี่ยนจากบวกเป็นลบ ตัวต้านทาน R1 รวมกับ D1 และ D2 จะจำกัดการแกว่งของแรงดันไฟฟ้าขาเข้าที่จุดเชื่อมต่อไดโอดเป็น -0.6V ถึง +5.6V (สมมติว่าแรงดันไปข้างหน้าของไดโอดเท่ากับ 0.6V) นอกจากนี้ คุณสามารถเพิ่มช่วงแรงดันไฟขาเข้าของวงจรได้โดยการเพิ่มค่า R1

ตัวต้านทาน R2 และ R3 จะสร้างตัวแบ่งแรงดันไฟฟ้าเพื่อจำกัดการแกว่งของแรงดันลบเป็น -0.24Volts เนื่องจากแรงดันไฟโหมดทั่วไปอินพุตของ LM358 ถูกจำกัดไว้ที่ -0.3Volts

ตัวต้านทาน R4, R5, ตัวเก็บประจุ C1 และ op-amp (ที่นี่ใช้เป็นตัวเปรียบเทียบ) สร้างวงจร Schmitt Trigger โดยที่ตัวต้านทาน R4 และ R5 ตั้งค่าฮิสเทรีซิสที่อินพุต +49.5mV เหนือพื้นดิน เอาต์พุตของ Schmitt Trigger จะถูกป้อนไปยัง Arduino PIN2 สำหรับการประมวลผลเพิ่มเติม

B: การแยกและแรงดันลดขั้น

ตามชื่อที่แนะนำ ส่วนนี้จะแยกและลดแรงดันไฟฟ้าลงเหลือประมาณ 12Vrms แรงดันไฟฟ้าแบบสเต็ปดาวน์จะถูกป้อนเข้าสู่วงจรเครื่องมือวัดเพิ่มเติม

C: วงจรตรวจจับพีค

วงจรนี้กำหนดแรงดันสูงสุดสูงสุดของสัญญาณอินพุต ตัวแบ่งตัวต้านทาน R6 และ R7 ลดแรงดันอินพุตลง 0.23 (12Vrms ลดลงเหลือ 2.76Vrms) ไดโอด D3 ดำเนินการเฉพาะครึ่งรอบบวกของสัญญาณ แรงดันไฟฟ้าข้าม C2 เพิ่มขึ้นจนถึงค่าสูงสุดของสัญญาณที่แก้ไขแล้ว ซึ่งป้อนไปยังขาอะนาล็อก A0 ของ Arduino เพื่อคำนวณแรงดันไฟฟ้าเพิ่มเติม

นอกจากนี้ คุณอาจแทนที่วงจรนี้ด้วยวงจรตรวจจับพีคที่มีความแม่นยำดังที่กล่าวไว้ที่นี่ แต่สำหรับจุดประสงค์ในการสาธิตของฉัน วงจรข้างต้นก็เพียงพอแล้ว

D: Arduino

ในส่วนนี้ Arduino จะจับพัลส์สี่เหลี่ยมที่สร้างโดยวงจร Schmitt Trigger และอ่านแรงดันแอนะล็อกจากวงจรตรวจจับพีค ข้อมูลจะได้รับการประมวลผลเพิ่มเติมเพื่อกำหนดช่วงเวลา (ดังนั้นความถี่) ของพัลส์สี่เหลี่ยม (ซึ่งเท่ากับบุคคลที่จ่ายไฟ ac) และแรงดันไฟฟ้าของแหล่งจ่าย

ขั้นตอนที่ 4: การคำนวณความถี่และแรงดัน

การคำนวณความถี่:

ด้วยความช่วยเหลือของ Arduino เราสามารถวัดช่วงเวลา T ของสัญญาณได้ พัลส์คลื่นสี่เหลี่ยมจากเครื่องตรวจจับการข้ามศูนย์จะถูกส่งไปยังพิน 2 จากนั้นเราสามารถวัดช่วงเวลาของแต่ละพัลส์ได้ เราสามารถใช้ตัวจับเวลาภายในของ Arduino (โดยเฉพาะ Timer1) เพื่อคำนวณช่วงเวลาระหว่างขอบที่เพิ่มขึ้นสองอันของพัลส์สี่เหลี่ยมโดยใช้การขัดจังหวะ ตัวจับเวลาเพิ่มขึ้น 1 ต่อรอบนาฬิกา (ไม่มีตัวปรับล่วงหน้า = 1) และค่าจะถูกเก็บไว้ในรีจิสเตอร์ TCNT1 ดังนั้นนาฬิกา 16Mhz จะเพิ่มตัวนับทีละ 16 ทุกไมโครวินาที ในทำนองเดียวกันสำหรับ prescaler = 8 ตัวจับเวลาจะเพิ่มขึ้น 2 ทุกไมโครวินาที ดังนั้นช่วงเวลาระหว่างสองขอบที่เพิ่มขึ้น

T = (ค่า TCNT1) / เวลาที่ใช้สำหรับการนับแต่ละครั้ง

โดยที่เวลาที่ใช้สำหรับการนับแต่ละครั้ง = prescaler / (ความเร็วสัญญาณนาฬิกา Arduino (16MHz)

ดังนั้น ความถี่ f = 1/T = (ความเร็วสัญญาณนาฬิกา Arduino (16MHz) / (ค่า Prescaler * TCNT!

ดังนั้นความเร็วของตัวจับเวลา (Hz) จึงถูกกำหนดโดย = (ความเร็วสัญญาณนาฬิกา Arduino (16MHz)) / prescaler

และความถี่ของสัญญาณถูกกำหนดโดย = (ความเร็วสัญญาณนาฬิกา Arduino

ตามลำดับ เราสามารถคำนวณความถี่ f จากความสัมพันธ์ f = 1/T

การคำนวณแรงดันไฟฟ้า:

ADC ออนบอร์ดของ Arduino มีความละเอียด 10 บิต (ค่าที่เป็นไปได้ = 2^10 = 1024) ส่งคืนค่าในช่วง 0-1023 ในการคำนวณแรงดันแอนะล็อกที่สอดคล้องกัน V เราต้องใช้ความสัมพันธ์ต่อไปนี้

V = (การอ่าน ADC) * 5/1023

ในการคำนวณแรงดันไฟจ่าย Vs (rms) เราต้องคำนึงถึงอัตราส่วนของหม้อแปลง, ตัวแบ่งตัวต้านทาน R6R7 และวงจรตัวตรวจจับจุดสูงสุด เราสามารถรวบรวมปัจจัย/อัตราส่วนต่างๆ ได้ดังนี้

อัตราส่วนหม้อแปลง = 12/230 = 0.052

ตัวแบ่งตัวต้านทาน = R7/(R6 + R7) = 0.23

ที่วงจรตรวจจับพีค = 1.414

Vs(rms) = V/(1.414*0.052*0.23) = (การอ่าน ADC) * 0.289

ควรสังเกตว่าค่านี้อยู่ไกลจากค่าจริง สาเหตุหลักมาจากข้อผิดพลาดในอัตราส่วนหม้อแปลงจริงและแรงดันตกไปข้างหน้าของไดโอด วิธีหนึ่งในการหลีกเลี่ยงสิ่งนี้คือการกำหนดปัจจัยหลังจากประกอบวงจร นั่นคือโดยการวัดแรงดันไฟจ่ายและแรงดันข้ามตัวเก็บประจุ C2 แยกกันด้วยมัลติมิเตอร์ แล้วคำนวณ Vs(rms) ดังนี้

Vs(rms) = ((แรงดันจ่าย * 5)/(แรงดันข้าม C2 *1023))*(การอ่าน ADC)

ในกรณีของฉัน Vs(rms) = 0.33*(การอ่าน ADC)

ขั้นตอนที่ 5: รหัส Arduino

#define volt_in A0 // แรงดันอนาล็อกอ่านพิน

ระเหย uint16_t t_period; uint16_t ADC_value = 0; โฟลตโวลต์, ความถี่; เป็นโมฆะ isr () { t_period = TCNT1; //เก็บค่า TCNT1 ใน t_period TCNT1 = 0; // รีเซ็ต Timer1 ADC_value = analogRead (volt_in); // อ่านแรงดันอนาล็อก } float get_freq () { uint16_t timer = t_period; if(timer==0) คืนค่า 0; // เพื่อหลีกเลี่ยงการหารด้วยศูนย์ ให้คืนค่า 160000000.0/(8UL*timer); // กำหนดความถี่โดย f = clk_freq/(prescaler*timeperiod)} การตั้งค่าเป็นโมฆะ () { TCCR1A = 0; TCCR1B = บิต (CS11); // ตั้งค่าพรีสเกลเลอร์เป็น 8 TCNT1 = 0; // รีเซ็ตค่า Timer1 TIMSK1 = บิต (TOIE1); // เปิดใช้งาน Timer1 โอเวอร์โฟลว์อินเตอร์รัปต์ EIFR |= บิต (INTF0); // ล้างแฟล็กขัดจังหวะ INT0 Serial.begin (9600); } วงเป็นโมฆะ () { AttachInterrupt (0, isr, RISING); // เปิดใช้งานการหน่วงเวลาการขัดจังหวะภายนอก (INT0) (1000); แยกอินเตอร์รัปต์(0); ความถี่ = get_freq(); โวลต์ = ADC_value*0.33; สายบัฟ; buf += สตริง (ความถี่, 3); บัฟ += F("Hz\t"); บัฟ += สตริง (โวลต์); บัฟ += F("โวลต์"); Serial.println(buf); }

ขั้นตอนที่ 6: บทสรุป

บทสรุป
บทสรุป
บทสรุป
บทสรุป

คุณสามารถประกอบวงจรในเขียงหั่นขนมและปรับแต่งรหัสและเพิ่มการ์ด SD เพื่อจัดเก็บข้อมูลซึ่งสามารถวิเคราะห์ได้ในภายหลัง ตัวอย่างหนึ่งคือ คุณสามารถวิเคราะห์แรงดันและความถี่ในชั่วโมงเร่งด่วนได้

วงจรที่ฉันประกอบในเขียงหั่นขนมใช้ LM324 (quad opamp) แทน LM358 (dual opamp) เนื่องจากฉันไม่มี IC นั้นในขณะนั้นและการล็อคทั่วประเทศเนื่องจากการระบาดของ COVID-19 ทำให้ฉันหา IC ใหม่ได้ยาก. อย่างไรก็ตามจะไม่ส่งผลกระทบต่อการทำงานของวงจร

รู้สึกอิสระที่จะแสดงความคิดเห็นด้านล่างสำหรับข้อเสนอแนะและข้อสงสัยใด ๆ

แนะนำ: