Բովանդակություն:

True-RMS AC լարման չափում `14 քայլ
True-RMS AC լարման չափում `14 քայլ

Video: True-RMS AC լարման չափում `14 քայլ

Video: True-RMS AC լարման չափում `14 քայլ
Video: Car Jump Starters (ոսիլոսկոպի փորձարկում) - BASEUS 1000A vs 800A JUMP STARTER (USB-C / MICRO USB) 2024, Նոյեմբեր
Anonim
Image
Image
Ցույց
Ցույց

Այսօր մենք կօգտագործենք STM32 Maple Mini ՝ AC ընթերցում կատարելու համար: Մեր օրինակում մենք կստանանք էլեկտրական ցանցի RMS արժեքը: Սա շատ օգտակար է նրանց համար, ովքեր ցանկանում են վերահսկել իրերի ինտերնետի էլեկտրական ցանցը: Այնուհետև մենք կստեղծենք ծրագիր ՝ օգտագործելով Maple Mini- ի հաշվարկային հզորությունը, կկիրառենք էլեկտրոնային միացում, որը կարող է թույլ տալ ձեռք բերել 127Vac ազդանշան, ինչպես նաև կիրառել արմատների միջին քառակուսի (RMS) հաշվարկ նմուշների վրա:

Քայլ 1: rationուցադրություն

Այսօրվա մեր հավաքում մենք ունենք STM32, ի լրումն մեր անալոգային սխեմայի, որը մուտքագրում է 110 -ը: shնցումներից խուսափելու համար մեկուսացրեք դիմադրությունը, որը մտնում է 110 -ով:

Շղթան բավականին զգայուն է: Ես մտնում եմ 110 -ի հետ, բայց այն նվազեցնում եմ 168 անգամ ՝ օգտագործելով լարման բաժանարարը և դնում այն գործառնական ուժեղացուցիչի մեջ, որն ունի մի քանի գործառույթ:

Մենք ունենք նաև որոշ կոնդենսատորներ աղբյուրի զտման համար: Եթե ձեր աղբյուրը լավ որակի է, ապա դրանք օգտագործելու կարիք չկա:

AD- ի մուտքը հաշվարկվում է oscilloscope- ի միջոցով, որի մեջ տեսնում եք sinusoid, որը 110 չէ (բայց լավ է ձևավորված): Մեկ այլ բան այն է, որ մեր էլեկտրական ցանցի լարումը 110 չէ (դա իրականում 127 վոլտ է): Բայց քանի որ մենք անցնում ենք կայունացուցիչի, այն կհարմարվի 115 Վ -ի վրա:

Սերիական մոնիտորի վրա ցուցադրվող արժեքը այն է, ինչ հաշվարկվում է RMS- ով, այսինքն `Fluke Meter- ով որոշվածը:

Քայլ 2: Օգտագործված ռեսուրսներ

Օգտագործված ռեսուրսներ
Օգտագործված ռեսուրսներ

• Թռչկոտողներ

• A Maple Mini

• Protoboard

• LM386 ուժեղացուցիչ

• Սիմետրիկ աղբյուր (+ 5V և -5V)

• 10k բազմակողմանի տրիպոտ (կամ պոտենցիոմետր)

• 100nF պոլիեսթեր չորս կոնդենսատոր

• Երեք 10k դիմադրիչ

• 470k չորս դիմադրիչ

• Մեկ 5k6 դիմադրություն

• Մեկ 1n4728A զեներային դիոդ

Քայլ 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 Օգտագործվում է նկարահանման ժամանակ
Maple Mini - Pinning - 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; // Valor usado 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 do 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 para cada atualização

Աղբյուրի կոդ - Գլոբալ փոփոխականներ

Այժմ մենք սահմանում ենք որոշ գլոբալ փոփոխականներ:

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

Աղբյուրի կոդ - Կարգավորում ()

Սկսեք սերիական նավահանգիստը 1 Մբիթ / վ արագությամբ: Մենք ճշգրտեցինք AD պորտը որպես մուտք և սպասեցինք 5 վայրկյան ՝ նախքան տվյալների հավաքումը սկսելը: Սպասման ժամանակը պարտադիր չէ:

void setup () {Serial.begin (1000000); // inicia a porta serial em 1Mbps pinMode (leituraTensao, INPUT); // ajusta a porta do AD como entrada հետաձգում (5000); // aguarda 5s antes de iniciar a coleta. (ըստ ցանկության)}

Աղբյուրի կոդ - Loop () - Սկսում է տվյալների հավաքման փոփոխականները

Loop- ում մենք ունենք փոփոխման կրկնություն: Այստեղ մենք նաև պահում ենք AD- ի ընթերցումները 0.0 -ում և վերագործարկում ենք փոփոխական VRMS- ը նույնպես 0.0 -ում:

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

Աղբյուրի ծածկագիր - Գրառում և կատարում է յուրաքանչյուր նմուշի անհատական հաշվարկները

Այս փուլում, եթե i- ն ավելի փոքր է, քան նմուշը, մենք սկսում ենք նմուշառման ցիկլը, մինչև որ հասնեմ նմուշների թվին: Մենք գործարկում ենք analogRead ՝ կարդալու անալոգային նավահանգիստը և հաշվարկելու ընթերցված լարման քառակուսիների գումարը: Ի վերջո, մենք ավելացնում ենք կրկնողը:

while (i <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); // calcula a soma dos quadrados das tensões lidas i ++; // ավելացում o իտերադոր}

Աղբյուրի կոդ - Նմուշների ընդհանուր հաշվարկներ և առավելագույնի, նվազագույնի և միջինի նույնականացում

Մենք կիրառում ենք բազմապատկման փաստը `որոշելու լարման իրական արժեքը: Մենք որոշում ենք, թե արդյոք արժեքը առավելագույնն է, թե նվազագույնը, և մենք հաշվարկում ենք ընթացիկ առավելագույն և նվազագույն արժեքների միջինը:

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

Աղբյուրի կոդ - ելքային ընտրանքներ

Մենք ունենք ելքի արժեքը «գծագրելու» երեք տարբերակ: Մենք ունենք ելք ՝ ձևաչափված Arduino IDE սերիական գծագրիչի համար, ինչպես CSV- ն կամ Jason- ը:

// saída formatada para plotter serial 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 (millis ()); 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 ("}"); * / /* // ձևաչափի ձևավորում 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

ԻՆՈ

Խորհուրդ ենք տալիս: