Sisällysluettelo:

True-RMS-AC-jännitteen mittaus: 14 vaihetta
True-RMS-AC-jännitteen mittaus: 14 vaihetta

Video: True-RMS-AC-jännitteen mittaus: 14 vaihetta

Video: True-RMS-AC-jännitteen mittaus: 14 vaihetta
Video: Why True-RMS multimeter? 2024, Heinäkuu
Anonim
Image
Image
Esittely
Esittely

Tänään käytämme STM32 Maple Miniä AC -lukeman tekemiseen. Esimerkissämme saamme sähköverkon RMS -arvon. Tämä on erittäin hyödyllistä niille, jotka haluavat seurata esineiden internetin sähköverkkoa. Luomme sitten sovelluksen Maple Minin laskentatehoa käyttäen, käytämme elektronista piiriä, joka kykenee antamaan 127 VAC -signaalin, sekä sovellamme näytteisiin keskimääräisen neliön (RMS) laskentaa.

Vaihe 1: Esittely

Kokoonpanossamme tänään on analogisen piirimme lisäksi STM32, jonka tulo on 110. Vältä iskuja, eristä 110: llä saapuva vastus.

Piiri on melko herkkä. Saan 110, mutta pienennän sitä 168 kertaa käyttämällä jännitteenjakajaa ja laitan sen operaatiovahvistimeen, jolla on useita toimintoja.

Meillä on myös joitakin valinnaisia kondensaattoreita lähdesuodatukseen. Jos lähteesi on hyvälaatuista, sinun ei tarvitse käyttää niitä.

AD -tulo lasketaan oskilloskoopin kautta, jossa näet sinimuotoisen, joka ei ole 110 (mutta se on hyvin muodostettu). Toinen asia on, että sähköverkon jännite ei ole 110 (se on itse asiassa 127 volttia). Mutta kun käymme vakaajaa, se sopeutuu 115 V.

Sarjamonitorissa näkyvä arvo on sama kuin RMS, eli Fluke -mittarin tunnistama arvo.

Vaihe 2: Käytetyt resurssit

Käytetyt resurssit
Käytetyt resurssit

• Neulepuserot

• Vaahtera Mini

• Protoboard

• LM386 -vahvistin

• Symmetrinen lähde (+ 5V ja -5V)

• 10k monikierroksinen trimpot (tai potentiometri)

• Neljä kondensaattoria 100nF polyesteriä

• Kolme 10k vastusta

• Neljä 470k vastusta

• Yksi 5k6 -vastus

• Yksi 1n4728A zener -diodi

Vaihe 3: Lohkokaavio

Lohkokaavio
Lohkokaavio

Vaihe 4: Kaavio

Kaavio
Kaavio

Tämä on piiri, jonka olen kehittänyt tietojen perusteella, jotka mielestäni ovat parhaita tätä mittausta varten, mutta Internetissä on useita muita esimerkkejä.

Vaihe 5: LM386 - Kiinnitys

LM386 - Kiinnitys
LM386 - Kiinnitys

LM386: ssa on kaksi vahvistinta ilmastointi- tai signaalivahvistusta varten.

Vaihe 6: AmpOp - differentiaali (vähennyslasku)

AmpOp - differentiaali (vähennyslasku)
AmpOp - differentiaali (vähennyslasku)

Vaihe 7: AmpOp - invertterin lisäys

AmpOp - invertterin lisäys
AmpOp - invertterin lisäys

Vaihe 8: Maple Mini - Pinage

Vaahtera Mini - Pinage
Vaahtera Mini - Pinage

Nastat merkitty:

Punainen >> 3V3 suvaitsevainen

Vihreä >> 5V suvaitsevainen

Vaihe 9: Vaahtera Mini - Kiinnitys - a / D Käytetään sieppauksessa

Maple Mini - Kiinnitys - a / D Käytetään sieppauksessa
Maple Mini - Kiinnitys - a / D Käytetään sieppauksessa

Korostan tässä, että käyttämäni tappi on D11, joka (STMicroelectronics -nimikkeistössä) on PA0.

Vaihe 10: Kokoonpano

Kokoonpano
Kokoonpano

Piirillemme tarvitset symmetrisen lähteen, kuten tämän projektin. Muuten tarvitset kaksi lähdettä.

Vaihe 11: Kaavio saatujen tietojen kanssa

Kaavio saatujen tietojen kanssa
Kaavio saatujen tietojen kanssa

Vaihe 12: RMS -arvon laskeminen

RMS -arvon laskeminen
RMS -arvon laskeminen

Vaihe 13: Lähdekoodi

Lähdekoodi - Määritelmät ja vakiot

Aluksi määritimme nastan lukeman D11: ksi sekä laskelmissa käytetyt eri vakiot.

#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ähdekoodi - Globaalimuuttujat

Nyt määritellään joitain globaaleja muuttujia.

kelluva 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ähdekoodi - asennus ()

Käynnistä sarjaportti nopeudella 1 Mbps. Säätimme AD -portin tuloksi ja odotimme 5 sekuntia ennen kuin aloitimme tietojen keräämisen. Valmiusaika on valinnainen.

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

Lähdekoodi - Loop () - Käynnistää tiedonkeruumuuttujat

Silmukassa on iteraation muuttuja. Täällä tallennamme myös AD: n lukemat arvoon 0.0 ja käynnistämme muuttujan VRMS myös 0.0: ssa.

tyhjä silmukka () {int i = 0; // variável para iteração float leitura = 0.0; // armazena kuin leituras do AD Vrms = 0.0; // reinicia a variável Vrms

Lähdekoodi - Kaappaa ja suorittaa yksittäiset laskelmat jokaiselle näytteelle

Jos tässä vaiheessa i on pienempi kuin näyte, aloitamme näytteenottosyklin, kunnes saavutan näytteiden määrän. Suoritamme analogReadin lukemaan analogisen portin ja laskemaan lukujännitteiden neliöiden summan. Lopuksi lisäämme iteraattoria.

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 ++; // lisäys iteradoriin}

Lähdekoodi - Näytteiden yleiset laskelmat ja maksimin, minimin ja keskiarvon tunnistaminen

Käytämme kertolaskua faktojen määrittämiseksi. Tunnistamme, onko arvo maksimi vai minimi, ja laskemme nykyisten enimmäis- ja minimiarvojen keskiarvon.

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

Meillä on kolme vaihtoehtoa lähtöarvon "piirtämiseen". Meillä on tulostus, joka on muotoiltu Arduino IDE -sarjan plotterille, kuten CSV tai Jason.

// salattu formaatti plotterin sarja IDE Arduino Serial.print (Vrms, 3); Serial.print (","); Sarjanjälki (Vmax, 3); Serial.print (","); Sarjanjälki (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); /* // saada formatada como json Serial.print ("{" instante (ms) ":"); Sarjajälki (millis ()); Serial.print (","); Serial.print ("\" Vrms (V) ":"); Sarjanjälki (Vrms, 3); Serial.print (","); Serial.print ("\" Vmax (V) ":"); Sarjanjälki (Vmax, 3); Serial.print (","); Serial.print ("\" Vmin (V) ":"); Sarjanjälki (Vmin, 3); Serial.print (","); Serial.print ("\" Vmed (V) ":"); Sarjanjälki (Vmed, 3); Serial.println ("}"); * / /* // CSA Serial.print (millis ()); Serial.print (","); Sarjanjälki (Vrms, 3); Serial.print (","); Sarjanjälki (Vmax, 3); Serial.print (","); Sarjanjälki (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); */}

Vaihe 14: Tiedostot

Lataa tiedostot:

PDF

INO

Suositeltava: