สารบัญ:
- ขั้นตอนที่ 1: ส่วนประกอบที่จำเป็น
- ขั้นตอนที่ 2: แผนผังไดอะแกรม
- ขั้นตอนที่ 3: ทำความเข้าใจวงจร
- ขั้นตอนที่ 4: การคำนวณความถี่และแรงดัน
- ขั้นตอนที่ 5: รหัส Arduino
- ขั้นตอนที่ 6: บทสรุป
วีดีโอ: การวัดความถี่ของแหล่งจ่ายไฟและแรงดันไฟฟ้าโดยใช้ Arduino: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
บทนำ:
เป้าหมายของโครงการนี้คือการวัดความถี่และแรงดันไฟฟ้าของแหล่งจ่ายซึ่งอยู่ระหว่าง 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 ใหม่ได้ยาก. อย่างไรก็ตามจะไม่ส่งผลกระทบต่อการทำงานของวงจร
รู้สึกอิสระที่จะแสดงความคิดเห็นด้านล่างสำหรับข้อเสนอแนะและข้อสงสัยใด ๆ
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
Arduino ที่ถูกที่สุด -- Arduino ที่เล็กที่สุด -- Arduino Pro Mini -- การเขียนโปรแกรม -- Arduino Neno: 6 ขั้นตอน (พร้อมรูปภาพ)
Arduino ที่ถูกที่สุด || Arduino ที่เล็กที่สุด || Arduino Pro Mini || การเขียนโปรแกรม || Arduino Neno:…………………………… โปรดสมัครสมาชิกช่อง YouTube ของฉันสำหรับวิดีโอเพิ่มเติม……. โปรเจ็กต์นี้เกี่ยวกับวิธีเชื่อมต่อ Arduino ที่เล็กที่สุดและถูกที่สุดเท่าที่เคยมีมา Arduino ที่เล็กที่สุดและถูกที่สุดคือ arduino pro mini คล้ายกับ Arduino