Агуулгын хүснэгт:

True-RMS AC хүчдэлийг хэмжих: 14 алхам
True-RMS AC хүчдэлийг хэмжих: 14 алхам

Видео: True-RMS AC хүчдэлийг хэмжих: 14 алхам

Видео: True-RMS AC хүчдэлийг хэмжих: 14 алхам
Видео: Цифровой мультиметр ANENG SZ02 9000 с автоматическим диапазоном истинных среднеквадратичных значений 2024, Долдугаар сарын
Anonim
Image
Image
Жагсаал
Жагсаал

Өнөөдөр бид STM32 Maple Mini -ийг ашиглан AC унших ажлыг хийх болно. Бидний жишээн дээр бид цахилгаан сүлжээний RMS утгыг авах болно. Энэ нь юмсын интернэтийн цахилгаан сүлжээнд хяналт тавих хүсэлтэй хүмүүст маш хэрэгтэй юм. Дараа нь бид Maple Mini -ийн тооцоолох хүчийг ашиглан програм үүсгэж, 127Vac дохио авах боломжтой электрон хэлхээг ашиглаж, дээж дээр дундаж дундаж квадрат (RMS) тооцоог хийнэ.

Алхам 1: Жагсаал

Өнөөдрийн бидний чуулганд бид 110 -ийн оролтыг хийх аналог хэлхээнээс гадна STM32 -тэй байна. Цочролоос зайлсхийхийн тулд 110 -ээр орж байгаа эсэргүүцэгчийг тусгаарлана.

Хэлхээ нь нэлээд мэдрэмтгий байдаг. Би 110 -тэй байна, гэхдээ хүчдэл хуваагч ашиглан үүнийг 168 дахин багасгаж, хэд хэдэн функцтэй үйлдлийн өсгөгч рүү оруулав.

Бидэнд эх үүсвэрийг шүүх нэмэлт конденсаторууд байдаг. Хэрэв таны эх сурвалж сайн чанартай бол тэдгээрийг ашиглах шаардлагагүй болно.

AD -ийн оролтыг осциллографоор тооцоолж, синусоидыг харж болно, энэ нь 110 биш (гэхдээ энэ нь сайн хэлбэртэй). Өөр нэг зүйл бол манай цахилгаан сүлжээний хүчдэл 110 биш (үнэндээ 127 вольт) юм. Гэхдээ бид тогтворжуулагч хийлгэж байгаа тул 115V -д тохируулна.

Цуваа монитор дээр харуулсан утга нь RMS -ээр тооцогддог, өөрөөр хэлбэл Fluke Meter -ийн тодорхойлсон утга юм.

Алхам 2: Ашигласан нөөц

Ашигласан нөөц
Ашигласан нөөц

• Үсрэгчид

• Maple Mini

• Protoboard

• LM386 өсгөгч

• Тэгш хэмтэй эх үүсвэр (+ 5V ба -5V)

• 10к олон эргэлт бүхий тримпот (эсвэл потенциометр)

• 100nF полиэфиртэй дөрвөн конденсатор

• Гурван 10к эсэргүүцэл

• 470k хэмжээтэй 4 эсэргүүцэл

• Нэг 5k6 эсэргүүцэл

• Нэг 1n4728A zener диод

Алхам 3: Блок диаграм

Блок диаграм
Блок диаграм

Алхам 4: Схем

Схем
Схем

Энэ бол миний хэмжлийн хувьд хамгийн тохиромжтой гэж үзсэн техникийн үзүүлэлтүүд дээр үндэслэн боловсруулсан хэлхээ юм, гэхдээ интернетээс өөр хэд хэдэн жишээг олж болно.

Алхам 5: LM386 - бэхлэх

LM386 - бэхлэх
LM386 - бэхлэх

LM386 нь агааржуулагч эсвэл дохио өсгөх хоёр өсгөгчтэй.

Алхам 6: AmpOp - Дифференциал (хасагч)

AmpOp - Дифференциал (хасагч)
AmpOp - Дифференциал (хасагч)

Алхам 7: AmpOp - Inverter Adder

AmpOp - Inverter Adder
AmpOp - Inverter Adder

Алхам 8: Maple Mini - Pinage

Maple Mini - Pinage
Maple Mini - Pinage

Тэмдэглэсэн тэмдэг:

Улаан >> 3V3 тэсвэртэй

Ногоон >> 5V тэсвэртэй

Алхам 9: Maple Mini - бэхэлгээ - a / D зураг авахад ашигладаг

Maple Mini - Pinning - a / D Capturing -д ашиглагддаг
Maple Mini - Pinning - a / D Capturing -д ашиглагддаг

Би энд ашигласан зүү бол 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; // Эрх мэдэл, үржүүлгийн үр дүн нь олон тооны файлууд юм. // Valor teórico da Tensão de alimentação Vcc = 3.3V const float Vcc = 3.3; // valor teórico do offset do amplificador = Vcc /2.0; const float offSet = 1.66; // AD = 3.3 / 4095.0 const float fatorAD = Vcc / 4095.0; const int amostras = 71429; // үр дүн нь 1, 027 гэсэн утгатай байна // const int amostras = 35715; // үр дүн 0, 514 гэсэн утгатай

Эх код - Дэлхийн хувьсагчид

Одоо бид дэлхийн зарим хувьсагчдыг тодорхойлж байна.

float Vrms = 0.0; // armazena o valor rms da tensãofloat Vmax = 0.0; // armazena o valor máximo detectado float Vmin = 10000.0; // armazena o valor mínimo detectado float Vmed = 0.0; // armazena o valor médio entre Vmáx e Vmín

Эх код - Тохиргоо ()

Цуваа портыг 1Mbps дээр эхлүүлнэ үү. Бид AD портыг оролт болгон тохируулж өгөгдөл цуглуулж эхлэхээс өмнө 5 секунд хүлээв. Зогсоох хугацаа нь заавал биш юм.

void setup () {Serial.begin (1000000); // 1Mbps pinMode (leituraTensao, INPUT) цуврал портууд; // МЭ комо оруулах хугацаа хойшлуулах (5000); // aguarda 5s antes de iniciar coleta. (сонголтоор)}

Эх код - Loop () - Өгөгдөл цуглуулах хувьсагчдыг эхлүүлнэ

Loop дээр бид давталтын хувьсагчтай байна. Энд бид AD -ийн уншилтыг 0.0 -д хадгалж, хувьсах VRMS -ийг 0.0 -д дахин эхлүүлнэ.

void loop () {int i = 0; // variável para iteração float leitura = 0.0; // armazena нь leituras шиг AD Vrms = 0.0; // reinicia a variável Vrms

Эх код - Дээж тус бүрийн бие даасан тооцоог хийж гүйцэтгэнэ

Энэ үе шатанд хэрэв би дээжээс жижиг бол бид дээжийн тоонд хүрэх хүртэл дээж авах мөчлөгийг эхлүүлнэ. Бид аналог портыг уншиж, уншсан хүчдэлийн квадратуудын нийлбэрийг тооцоолохын тулд analogRead програмыг ажиллуулдаг. Эцэст нь бид давталтыг нэмэгдүүлдэг.

while (i <amostras) {// inicia um ciclo de amostragem até que i alcance o número de amostras leitura = analogRead (leituraTensao); // a porta analógica //Serial.println(leitura); // AD Vrms = Vrms + pow (((leitura * fatorAD) - offSet), 2.0); // тооцоолох нь soma dos quadrados das tensões lidas i ++; // нэмэгдсэн эсвэл нэмэгдсэн}

Эх код - Дээжийн ерөнхий тооцоо, хамгийн их, хамгийн бага, дунджийг тодорхойлох

Хүчдэлийн бодит утгыг тодорхойлохын тулд бид үржүүлэх баримтыг ашигладаг. Бид утга нь хамгийн их эсвэл хамгийн бага эсэхийг илрүүлж, одоогийн хамгийн их ба хамгийн бага утгуудын дундажийг тооцдог.

// Aplicando fator de multiplicação para determinar o valor real das tensões Vrms = (sqrt (Vrms /amostras)) * fatorMultiplicacao; // detecta se é um valor é máximo if (Vrms> Vmax) {Vmax = Vrms; } // detecta se é um valor mínimo if (Vrms <Vmin) {Vmin = Vrms; } // тооцоолол a média dos valores máximo e mínimo atuais Vmed = (Vmax + Vmin) /2.0;

Эх код - Гаралтын сонголтууд

Бидэнд гаралтын утгыг "зурах" гурван сонголт байна. Бид CSV эсвэл Жейсон гэх мэт Arduino IDE цуваа плоттерт форматласан гаралтыг гаргалаа.

// цуврал IDE Arduino Serial.print (Vrms, 3); Serial.print (","); Цуваа.хэвлэх (Vmax, 3); Serial.print (","); Цуваа.хэвлэх (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); /* // форматыг como json Serial.print ("{" шуурхай (ms) ":"); Цуваа.хэвлэх (millis ()); Serial.print (","); Serial.print ("\" Vrms (V) ":"); Цуваа.хэвлэх (Vrms, 3); Serial.print (","); Serial.print ("\" Vmax (V) ":"); Цуваа.хэвлэх (Vmax, 3); Serial.print (","); Serial.print ("\" Vmin (V) ":"); Цуваа.хэвлэх (Vmin, 3); Serial.print (","); Serial.print ("\" Vmed (V) ":"); Цуваа.хэвлэх (Vmed, 3); Serial.println ("}"); * / /* // CSV Serial.print форматыг үзэх (millis ()); Serial.print (","); Цуваа.хэвлэх (Vrms, 3); Serial.print (","); Цуваа.хэвлэх (Vmax, 3); Serial.print (","); Цуваа.хэвлэх (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); */}

Алхам 14: Файлууд

Файлуудыг татаж авах:

PDF

INO

Зөвлөмж болгож буй: