Sisukord:

True-RMS vahelduvpinge mõõtmine: 14 sammu
True-RMS vahelduvpinge mõõtmine: 14 sammu

Video: True-RMS vahelduvpinge mõõtmine: 14 sammu

Video: True-RMS vahelduvpinge mõõtmine: 14 sammu
Video: Жаль, что я не купил мультиметр Kaiweets HT118E раньше. 2024, Juuli
Anonim
Image
Image
Demonstratsioon
Demonstratsioon

Täna kasutame vahelduvvoolu lugemiseks STM32 Maple Mini. Meie näites saame elektrivõrgu RMS väärtuse. See on väga kasulik neile, kes soovivad jälgida asjade interneti elektrivõrku. Seejärel loome rakenduse, kasutades Maple Mini arvutusvõimsust, rakendame elektroonilist vooluahelat, mis võimaldab hankida 127 Vac signaali, ning rakendame proovidele ka ruutkeskmise (RMS) arvutuse.

1. samm: demonstratsioon

Täna koosolekul on meil lisaks analoogskeemile sisendiks 110 ka STM32. Löökide vältimiseks eraldage sisenev takisti 110 võrra.

Ahel on üsna tundlik. Ma saan 110 -ga, kuid vähendan seda pingejaguri abil 168 korda ja panen selle operatsioonivõimendisse, millel on mitu funktsiooni.

Meil on ka mõned valikulised kondensaatorid allikate filtreerimiseks. Kui teie allikas on kvaliteetne, ei pea te neid kasutama.

AD sisend arvutatakse ostsilloskoobi kaudu, milles näete sinusoidi, mis ei ole 110 (kuid see on hästi vormitud). Teine asi on see, et meie elektrivõrgu pinge ei ole 110 (see on tegelikult 127 volti). Kuid stabilisaatorit kohandades reguleerib see 115 V.

Seeriamonitoril kuvatav väärtus on see, mis arvutatakse RMS -is, see tähendab Fluke Meter'i poolt määratud väärtus.

2. samm: kasutatud ressursid

Kasutatud ressursid
Kasutatud ressursid

• Džemprid

• Vaher Mini

• Protoboard

• LM386 võimendi

• Sümmeetriline allikas (+ 5V ja -5V)

• 10k mitme pöördega trimpot (või potentsiomeeter)

• Neli kondensaatorit 100nF polüestrist

• Kolm 10k takistit

• Neli 470k takistit

• Üks 5k6 takisti

• Üks 1n4728A zeneri diood

Samm: plokkskeem

Plokiskeem
Plokiskeem

4. samm: skeem

Skeem
Skeem

See on vooluahel, mille töötasin välja spetsifikatsioonide põhjal, mis minu arvates on selle mõõtmise jaoks parimad, kuid Internetis on veel mitmeid näiteid.

5. samm: LM386 - kinnitamine

LM386 - Kinnitamine
LM386 - Kinnitamine

LM386 -l on kaks võimendit konditsioneerimiseks või signaali võimendamiseks.

6. samm: AmpOp - diferentsiaal (lahutaja)

AmpOp - diferentsiaal (lahutaja)
AmpOp - diferentsiaal (lahutaja)

7. samm: AmpOp - muunduri lisaja

AmpOp - muunduri lisaja
AmpOp - muunduri lisaja

8. samm: Maple Mini - Pinage

Vaher Mini - nöörimine
Vaher Mini - nöörimine

Nööpnõelad on märgitud:

Punane >> 3V3 salliv

Roheline >> 5V tolerantne

9. samm: Maple Mini - kinnitus - a / D, mida kasutatakse jäädvustamisel

Maple Mini - Pinning - a / D Kasutatakse jäädvustamisel
Maple Mini - Pinning - a / D Kasutatakse jäädvustamisel

Rõhutan siinkohal, et minu kasutatav tihvt on D11, mis (STMicroelectronics nomenklatuuris) on PA0.

Samm: kokkupanek

Kokkupanek
Kokkupanek

Meie vooluringi jaoks vajate sümmeetrilist allikat, nagu see, mille me selle projekti jaoks lõime. Vastasel juhul vajate kahte allikat.

Samm 11: Graafik saadud andmetega

Graafik saadud andmetega
Graafik saadud andmetega

12. samm: RMS -väärtuse arvutamine

RMS väärtuse arvutamine
RMS väärtuse arvutamine

Samm 13: lähtekood

Lähtekood - definitsioonid ja konstandid

Alguses määratlesime tihvtide lugemise D11 -na, samuti arvutustes kasutatud erinevate konstanditega.

#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

Lähtekood - globaalsed muutujad

Nüüd määratleme mõned globaalsed muutujad.

ujuk 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

Lähtekood - seadistamine ()

Käivitage jadaport kiirusega 1 Mbps. Reguleerisime AD -porti sisendiks ja ootasime 5 sekundit, enne kui hakkasime andmeid koguma. Ooteaeg on valikuline.

void setup () {Serial.begin (1000000); // initsialiseeri portaali em 1Mbps pinMode (leituraTensao, INPUT); // ajusta a porta do AD como entrada delay (5000); // aguarda 5s antes de iniciar a coleta. (valikuline)}

Lähtekood - tsükkel () - käivitab andmete kogumise muutujad

Loopis on meil iteratsiooni muutuja. Siin salvestame ka AD näidud 0.0 -sse ja taaskäivitame muutuja VRMS ka 0.0 -s.

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

Lähtekood - kogub ja täidab iga proovi jaoks individuaalsed arvutused

Selles etapis, kui i on proovist väiksem, alustame proovivõtutsüklit, kuni i jõuab proovide arvuni. Käivitame analogRead, et lugeda analoogpordi ja arvutada lugemispingete ruutude summa. Lõpuks suurendame iteraatorit.

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 ++; // iteradori suurendamine}

Lähtekood - proovide üldised arvutused ja maksimaalse, minimaalse ja keskmise määramine

Pingete tegeliku väärtuse määramiseks rakendame korrutamise fakti. Me tuvastame, kas väärtus on maksimaalne või minimaalne, ja arvutame praeguste maksimum- ja miinimumväärtuste keskmise.

// Aplicando fator de multiplicação para determinar o valor real das tensões Vrms = (sqrt (Vrms /amostras)) * fatorMultiplicacao; // detekteerib se é um valor é máximo if (Vrms> Vmax) {Vmax = Vrms; } // tuvastada se é 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;

Lähtekood - väljundvalikud

Väljundväärtuse "joonistamiseks" on meil kolm võimalust. Meil on väljund vormindatud Arduino IDE jadaplotterile, näiteks CSV või Jason.

// saidad formatada para plotter seeria IDE Arduino Serial.print (Vrms, 3); Serial.print (","); Seeriatrükk (Vmax, 3); Serial.print (","); Seeriatrükk (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); /* // saidavorming como json Serial.print ("{" instante (ms) ":"); Seeriaprint (millis ()); Serial.print (","); Serial.print ("\" Vrms (V) ":"); Seeriatrükk (Vrms, 3); Serial.print (","); Serial.print ("\" Vmax (V) ":"); Seeriatrükk (Vmax, 3); Serial.print (","); Serial.print ("\" Vmin (V) ":"); Seeriatrükk (Vmin, 3); Serial.print (","); Serial.print ("\" Vmed (V) ":"); Seeriatrükk (Vmed, 3); Serial.println ("}"); * / /* // saidi formaat CSO Serial.print (millis ()); Serial.print (","); Seeriatrükk (Vrms, 3); Serial.print (","); Seeriatrükk (Vmax, 3); Serial.print (","); Seeriatrükk (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); */}

14. samm: failid

Laadige failid alla:

PDF

INO

Soovitan: