สารบัญ:

การวัดแรงดันไฟ AC True-RMS: 14 ขั้นตอน
การวัดแรงดันไฟ AC True-RMS: 14 ขั้นตอน

วีดีโอ: การวัดแรงดันไฟ AC True-RMS: 14 ขั้นตอน

วีดีโอ: การวัดแรงดันไฟ AC True-RMS: 14 ขั้นตอน
วีดีโอ: มัลติมิเตอร์แบบ True RMS คืออะไร...? ดีจริงไหม...ทำไมถึงแพงกว่า...!! 2024, กรกฎาคม
Anonim
Image
Image
สาธิต
สาธิต

วันนี้ เราจะใช้ STM32 Maple Mini ในการอ่านค่า AC ในตัวอย่างของเรา เราจะได้ค่า RMS ของโครงข่ายไฟฟ้า สิ่งนี้มีประโยชน์มากสำหรับผู้ที่ต้องการตรวจสอบเครือข่ายไฟฟ้าสำหรับ Internet of Things จากนั้นเราจะสร้างแอปพลิเคชันโดยใช้กำลังในการคำนวณของ Maple Mini ใช้วงจรอิเล็กทรอนิกส์ที่ยอมให้รับสัญญาณ 127Vac ได้ และใช้การคำนวณหาค่าเฉลี่ยรูต (RMS) กับตัวอย่าง

ขั้นตอนที่ 1: การสาธิต

ในการประกอบของเราวันนี้ เรามี STM32 นอกเหนือจากวงจรแอนะล็อกของเราเพื่อให้อินพุตเป็น 110 เพื่อหลีกเลี่ยงแรงกระแทก ให้แยกตัวต้านทานที่ป้อน 110

วงจรค่อนข้างไว ฉันกำลังเข้าสู่ 110 แต่ฉันลดมันลง 168 เท่าโดยใช้ตัวแบ่งแรงดันไฟฟ้าและใส่ลงในแอมพลิฟายเออร์สำหรับการดำเนินงานซึ่งมีฟังก์ชั่นหลายอย่าง

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

อินพุต AD คำนวณผ่านออสซิลโลสโคป ซึ่งคุณจะเห็นไซนัสอยด์ ซึ่งไม่ใช่ 110 (แต่มีรูปร่างที่ดี) อีกอย่างคือแรงดันไฟฟ้าในเครือข่ายไฟฟ้าของเราไม่ใช่ 110 (จริงๆ แล้วคือ 127 โวลต์) แต่ในขณะที่เรากำลังทำสเตบิไลเซอร์ มันจะปรับเป็น 115V

ค่าที่แสดงบนจอภาพอนุกรมคือสิ่งที่คำนวณใน RMS นั่นคือค่าที่ Fluke Meter ระบุ

ขั้นตอนที่ 2: ทรัพยากรที่ใช้

ทรัพยากรที่ใช้
ทรัพยากรที่ใช้

• จัมเปอร์

• เมเปิ้ล มินิ

• โปรโตบอร์ด

• เครื่องขยายเสียง LM386

• แหล่งสัญญาณแบบสมมาตร (+ 5V และ -5V)

• ทริมพอตแบบหมุนหลายรอบ 10k (หรือโพเทนชิออมิเตอร์)

• ตัวเก็บประจุสี่ตัวโพลีเอสเตอร์ 100nF

• ตัวต้านทาน 10k สามตัว

• ตัวต้านทาน 470k สี่ตัว

• ตัวต้านทาน 5k6 หนึ่งตัว

• ซีเนอร์ไดโอด 1n4728A หนึ่งตัว

ขั้นตอนที่ 3: บล็อกไดอะแกรม

บล็อกไดอะแกรม
บล็อกไดอะแกรม

ขั้นตอนที่ 4: โครงการ

โครงการ
โครงการ

นี่คือวงจรที่ฉันพัฒนาขึ้นโดยอิงตามข้อกำหนดที่ฉันเชื่อว่าดีที่สุดสำหรับการวัดนี้ แต่มีตัวอย่างอื่นๆ อีกหลายตัวอย่างที่สามารถพบได้บนอินเทอร์เน็ต

ขั้นตอนที่ 5: LM386 - การตรึง

LM386 - การปักหมุด
LM386 - การปักหมุด

LM386 มีแอมพลิฟายเออร์สองตัวสำหรับการปรับสภาพหรือการขยายสัญญาณ

ขั้นตอนที่ 6: AmpOp - ดิฟเฟอเรนเชียล (ตัวลบ)

AmpOp - ดิฟเฟอเรนเชียล (ตัวลบ)
AmpOp - ดิฟเฟอเรนเชียล (ตัวลบ)

ขั้นตอนที่ 7: AmpOp - อินเวอร์เตอร์ Adder

AmpOp - อินเวอร์เตอร์ Adder
AmpOp - อินเวอร์เตอร์ Adder

ขั้นตอนที่ 8: Maple Mini - Pinage

Maple Mini - Pinage
Maple Mini - Pinage

หมุดที่ทำเครื่องหมายไว้:

สีแดง >> ความทนทาน 3V3

สีเขียว >> 5V Tolerant

ขั้นตอนที่ 9: Maple Mini - การตรึง - a / D ที่ใช้ในการจับภาพ

Maple Mini - การปักหมุด - a / D ใช้ในการจับภาพ
Maple Mini - การปักหมุด - a / D ใช้ในการจับภาพ

ฉันเน้นที่นี่ว่าพินที่ฉันใช้คือ D11 ที่ (ในระบบการตั้งชื่อของ STMicroelectronics) คือ PA0

ขั้นตอนที่ 10: การประกอบ

การประกอบ
การประกอบ

สำหรับวงจรของเรา คุณจะต้องมีแหล่งสัญญาณแบบสมมาตร เช่นเดียวกับที่เราสร้างขึ้นสำหรับโครงการนี้ มิฉะนั้น คุณจะต้องใช้สองแหล่ง

ขั้นตอนที่ 11: สร้างกราฟด้วยข้อมูลที่ได้รับ

กราฟพร้อมข้อมูลที่ได้รับ
กราฟพร้อมข้อมูลที่ได้รับ

ขั้นตอนที่ 12: การคำนวณค่า RMS

การคำนวณค่า RMS
การคำนวณค่า RMS

ขั้นตอนที่ 13: รหัสที่มา

ซอร์สโค้ด - คำจำกัดความและค่าคงที่

ในตอนแรก เรากำหนดการอ่านพินเป็น D11 รวมถึงค่าคงที่ต่างๆ ที่ใช้ในการคำนวณ

#define leituraTensao D11 //AD CH0 no pino PA0 //valor teórico divisor de tensão = 168.85714285714285714286 const float fatorDivisor = 168.40166345742404792461; //valor teórico do ganho de amplificação = 1.0 const float fatorAmplificador = 1.0; //ความกล้าหาญใช้ na multiplicação da leitura const float fatorMultiplicacao = fatorDivisor * fatorAmplificador; // Valor teórico da Tensão de alimentação Vcc = 3.3V const float Vcc = 3.3; //valor teórico ทำ offset do amplificador = Vcc / 2.0; const float offSet = 1.66; //fator teórico da conversão do AD = 3.3 / 4095.0 const float fatorAD = Vcc / 4095.0; const int amostras = 71429; //resulta em 1, 027 segundos para cada atualização //const int amostras = 35715; //resulta em 0, 514 segundos สำหรับ cada atualização

ซอร์สโค้ด - ตัวแปรโกลบอล

ตอนนี้ เรากำหนดตัวแปรส่วนกลางบางตัว

float Vrms = 0.0; //armazena หรือ ความกล้าหาญ rms da tensãofloat Vmax = 0.0; //armazena หรือ valor máximo detectado float Vmin = 1,0000.0; //armazena หรือ valor mínimo detectado float Vmed = 0.0; //armazena o valor médio entre Vmáx e Vmín

ซอร์สโค้ด - การตั้งค่า ()

เริ่มพอร์ตอนุกรมที่ 1Mbps เราปรับพอร์ต AD เป็นอินพุตและรอ 5 วินาทีก่อนที่จะเริ่มรวบรวมข้อมูล เวลาสแตนด์บายเป็นตัวเลือก

การตั้งค่าเป็นโมฆะ () { Serial.begin (1000000); //inicia พอร์ตอนุกรม em 1Mbps pinMode (leituraTensao, INPUT); //ajusta a porta do AD como entrada ล่าช้า (5000); //aguarda 5s antes de iniciar a coleta. (ไม่บังคับ) }

Source Code - Loop () - เริ่มการรวบรวมข้อมูลตัวแปร

ในลูป เรามีตัวแปรสำหรับการวนซ้ำ ที่นี่ เรายังเก็บการอ่าน AD ใน 0.0 และรีสตาร์ทตัวแปร VRMS ด้วย 0.0

วงเป็นโมฆะ () { int i = 0; //ตัวแปรพารา iteração float leitura = 0.0; //armazena เป็น leituras ทำ AD Vrms = 0.0; //reinicia a variável Vrms

ซอร์สโค้ด - จับและดำเนินการคำนวณแต่ละรายการสำหรับแต่ละตัวอย่าง

ในขั้นตอนนี้ หาก i น้อยกว่ากลุ่มตัวอย่าง เราจะเริ่มรอบการสุ่มตัวอย่างจนกว่า i จะถึงจำนวนตัวอย่าง เราเรียกใช้ analogRead เพื่ออ่านพอร์ตแอนะล็อกและคำนวณผลรวมของกำลังสองของแรงดันไฟฟ้าที่อ่านได้ สุดท้าย เราเพิ่มตัววนซ้ำ

ในขณะที่ (ฉัน < amostras) (//inicia um ciclo de amostragem até que i alcance o número de amostras leitura = analogRead (leituraTensao); // lê a porta analógica //Serial.println(leitura); //Descomente se quiser ver o sinal bruto do AD Vrms = Vrms + pow(((leitura * fatorAD) - offSet), 2.0); //คำนวณ a soma dos quadrados das tensões lidas i++; //incrementa o iterador }

ซอร์สโค้ด - การคำนวณทั่วไปของกลุ่มตัวอย่างและการระบุค่าสูงสุด ต่ำสุด และค่าเฉลี่ย

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

//Aplicando fator de multiplicação para determinar o valor real das tensões Vrms = (sqrt(Vrms / amostras)) * fatorMultiplicacao; //detecta se é um valor é máximo ถ้า (Vrms > Vmax) { Vmax = Vrms; } //detecta se é um valor mínimo ถ้า (Vrms < Vmin) { Vmin = Vrms; } //คำนวณจากสื่อ dos valores máximo e mínimo atuais Vmed = (Vmax + Vmin) / 2.0;

ซอร์สโค้ด - ตัวเลือกเอาต์พุต

เรามีสามตัวเลือกสำหรับ "การพล็อต" ค่าเอาต์พุต เราได้ฟอร์แมตเอาต์พุตเป็นพล็อตเตอร์อนุกรม Arduino IDE เช่น CSV หรือ Jason

// รูปแบบสำหรับพล็อตเตอร์อนุกรม IDE Arduino Serial.print (Vrms, 3); Serial.print(", "); Serial.print(Vmax, 3); Serial.print(", "); Serial.print(Vmin, 3); Serial.print(", "); Serial.println(Vmed, 3); /* //saída formatada como json Serial.print("{"instante(ms)\":"); Serial.print(มิลลิวินาที()); Serial.print(", "); Serial.print("\"Vrms(V)\":"); Serial.print(Vrms, 3); Serial.print(", "); Serial.print("\"Vmax(V)\":"); Serial.print(Vmax, 3); Serial.print(", "); Serial.print("\"Vmin(V)\":"); Serial.print(Vmin, 3); Serial.print(", "); Serial.print("\"Vmed(V)\":"); Serial.print(Vmed, 3); Serial.println("}"); */ /* //saída formatada como CSV Serial.print(millis()); Serial.print(", "); Serial.print(Vrms, 3); Serial.print(", "); Serial.print(Vmax, 3); Serial.print(", "); Serial.print(Vmin, 3); Serial.print(", "); Serial.println(Vmed, 3); */ }

ขั้นตอนที่ 14: ไฟล์

ดาวน์โหลดไฟล์:

ไฟล์ PDF

ฉันไม่

แนะนำ: