Kazalo:
- 1. korak: demonstracija
- 2. korak: Uporabljeni viri
- 3. korak: Blokovni diagram
- 4. korak: Shema
- 5. korak: LM386 - Pripenjanje
- Korak 6: AmpOp - Diferencial (odštevalec)
- 7. korak: AmpOp - Inverter Adder
- 8. korak: Maple Mini - Pinage
- 9. korak: Maple Mini - Pripenjanje - a / D Uporablja se pri zajemanju
- 10. korak: Montaža
- 11. korak: Graf z pridobljenimi podatki
- 12. korak: Izračun vrednosti RMS
- Korak: Izvorna koda
- 14. korak: Datoteke
Video: Merjenje AC-napetosti True-RMS: 14 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:05
Danes bomo za branje izmeničnega toka uporabljali STM32 Maple Mini. V našem primeru bomo dobili RMS vrednost električnega omrežja. To je zelo koristno za tiste, ki želijo spremljati električno omrežje za internet stvari. Nato bomo z uporabo računalniške moči Maple Mini ustvarili aplikacijo, uporabili elektronsko vezje, ki lahko omogoči pridobivanje 127Vac signala, ter uporabili izračun korenskega povprečja (RMS) na vzorcih.
1. korak: demonstracija
V današnji sestavi imamo poleg analognega vezja tudi STM32 za vnos 110. Da bi se izognili udarcem, izolirajte upor, ki vstopa za 110.
Vezje je precej občutljivo. Vstopam s 110, vendar ga z delilnikom napetosti zmanjšam 168 -krat in ga vstavim v operacijski ojačevalnik, ki ima več funkcij.
Imamo tudi nekaj izbirnih kondenzatorjev za filtriranje virov. Če je vaš vir dobre kakovosti, vam jih ni treba uporabiti.
Vhod AD se izračuna preko osciloskopa, v katerem vidite sinusoido, ki ni 110 (vendar je dobro oblikovana). Druga stvar je, da napetost v našem električnem omrežju ni 110 (dejansko je 127 voltov). Ker pa smo pod stabilizatorjem, se bo prilagodil na 115V.
Vrednost, prikazana na serijskem monitorju, je tista, ki se izračuna v RMS, to je tista, ki jo identificira merilnik Fluke.
2. korak: Uporabljeni viri
• Skakalci
• javorjev mini
• Protoboard
• Ojačevalnik LM386
• Simetrični vir (+ 5V in -5V)
• 10-milimetrski trimpot (ali potenciometer)
• Štirje kondenzatorji iz 100nF poliestra
• Trije 10k upori
• Štirje 470k upori
• En upor 5k6
• Ena zener dioda 1n4728A
3. korak: Blokovni diagram
4. korak: Shema
To vezje sem razvil na podlagi specifikacij, za katere menim, da so najboljše za to meritev, vendar obstaja več drugih primerov, ki jih lahko najdemo na internetu.
5. korak: LM386 - Pripenjanje
LM386 ima dva ojačevalnika za kondicioniranje ali ojačanje signala.
Korak 6: AmpOp - Diferencial (odštevalec)
7. korak: AmpOp - Inverter Adder
8. korak: Maple Mini - Pinage
Zatiči označeni na:
Rdeča >> 3V3 Tolerantna
Zelena >> 5V tolerantna
9. korak: Maple Mini - Pripenjanje - a / D Uporablja se pri zajemanju
Tukaj poudarjam, da sem pin, ki sem ga uporabil, D11, ki je (v nomenklaturi STMicroelectronics) PA0.
10. korak: Montaža
Za naše vezje boste potrebovali simetričen vir, kakršen smo ustvarili za ta projekt. V nasprotnem primeru boste potrebovali dva vira.
11. korak: Graf z pridobljenimi podatki
12. korak: Izračun vrednosti RMS
Korak: Izvorna koda
Izvorna koda - definicije in konstante
Najprej smo definirali odčitavanje nožic kot D11, pa tudi različne konstante, uporabljene pri izračunih.
#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 pogovorão do AD = 3.3 / 4095.0 const float fatorAD = Vcc / 4095.0; const int amostras = 71429; // rezultati em 1, 027 segundos para cada atualização // const int amostras = 35715; // rezultati em 0, 514 segundos para cada atualização
Izvorna koda - globalne spremenljivke
Zdaj definiramo nekatere globalne spremenljivke.
plovec 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
Izvorna koda - Nastavitev ()
Zaženite serijska vrata pri 1Mbps. Vrata AD smo prilagodili kot vhod in počakali 5 sekund, preden smo začeli zbirati podatke. Čas pripravljenosti ni obvezen.
void setup () {Serial.begin (1000000); // inicia a porta serial em 1Mbps pinMode (leituraTensao, INPUT); // ajusta a porta do AD como entrada delay (5000); // aguarda 5s antes de iniciar a coleta. (neobvezno)}
Source Code - Loop () - Zažene spremenljivke zbiranja podatkov
V zanki imamo spremenljivko za ponovitev. Tu shranimo tudi odčitke AD v 0.0 in znova zaženemo spremenljivko VRMS tudi v 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 variaável Vrms
Izvorna koda - zajame in izvede posamezne izračune za vsak vzorec
Na tej stopnji, če je i manjši od vzorca, začnemo cikel vzorčenja, dokler i ne doseže števila vzorcev. Zaženemo analogRead za branje analognih vrat in izračun vsote kvadratov odčitanih napetosti. Na koncu povečujemo iterator.
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); // izračunava soma dos quadrados das tensões lidas i ++; // prirast o iteradorju}
Izvorna koda - Splošni izračuni vzorcev in identifikacija največjega, najmanjšega in povprečja
Za določitev dejanske vrednosti napetosti uporabimo dejstvo množenja. Zaznamo, ali je vrednost največja ali najnižja, in izračunamo povprečje trenutnih največjih in najnižjih vrednosti.
// 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; } // izračunaj a média dos valores máximo e mínimo atuais Vmed = (Vmax + Vmin) /2,0;
Izvorna koda - možnosti izhoda
Imamo tri možnosti za "risanje" izhodne vrednosti. Imamo izhod, oblikovan v serijski ploter Arduino IDE, kot sta CSV ali Jason.
// formatada za ploter serijski IDE Arduino Serial.print (Vrms, 3); Serial.print (","); Serijski.tisk (Vmax, 3); Serial.print (","); Serijski.tisk (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); /* // formatada za json Serial.print ("{" instante (ms) ":"); Serial.print (millis ()); Serial.print (","); Serial.print ("\" Vrms (V) ":"); Serijski.tisk (Vrms, 3); Serial.print (","); Serial.print ("\" Vmax (V) ":"); Serijski.tisk (Vmax, 3); Serial.print (","); Serial.print ("\" Vmin (V) ":"); Serijski.tisk (Vmin, 3); Serial.print (","); Serial.print ("\" Vmed (V) ":"); Serijski.tisk (Vmed, 3); Serial.println ("}"); * / /* // saída formatada como CSV Serial.print (millis ()); Serial.print (","); Serijski.tisk (Vrms, 3); Serial.print (","); Serijski.tisk (Vmax, 3); Serial.print (","); Serijski.tisk (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); */}
14. korak: Datoteke
Prenesite datoteke:
JAZ NE
Priporočena:
Merjenje hitrosti motorja z uporabo Arduina: 6 korakov
Merjenje hitrosti motorja z uporabo Arduina: Ali je težko izmeriti vrtljaje motorja ??? Mislim, da ne. Tukaj je ena preprosta rešitev. To lahko naredi samo en IR senzor in Arduino v vašem kompletu. V tem prispevku bom predstavil preprosto vadnico, ki pojasnjuje, kako izmeriti število vrtljajev motorja katerega koli motorja z IR senzorjem in A
Časovna meritev (ura za merjenje traku): 5 korakov (s slikami)
Časovna mera (Tape Measure Clock): Za ta projekt smo (Alex Fiel & Anna Lynton) vzeli vsakodnevno merilno orodje in ga spremenili v uro! Prvotni načrt je bil motorizirati obstoječi merilni trak. Pri tem smo se odločili, da bi bilo lažje ustvariti lastno lupino, s katero bi šli
Merjenje temperature: 7 korakov
Merjenje temperature:
Merjenje temperature z uporabo XinaBox -a in termistorja: 8 korakov
Merjenje temperature z uporabo XinaBox -a in termistorja: izmerite temperaturo tekočine z analognim vhodom xChip iz XinaBox -a in sondo s termistorjem
Merjenje bližine razdalje s senzorjem kretenj APDS9960: 6 korakov
Merjenje bližine razdalje s senzorjem kretenj APDS9960: V tej vadnici se bomo naučili meriti razdaljo s senzorji kretenj APDS9960, arduino in Visuino. Oglejte si video