Innholdsfortegnelse:
- Trinn 1: Demonstrasjon
- Trinn 2: Ressurser brukt
- Trinn 3: Blokkdiagram
- Trinn 4: Oppsett
- Trinn 5: LM386 - Festing
- Trinn 6: AmpOp - Differensial (subtraktor)
- Trinn 7: AmpOp - Inverter Adder
- Trinn 8: Maple Mini - Pinage
- Trinn 9: Maple Mini - Pinning - a / D Brukes til fange
- Trinn 10: Montering
- Trinn 11: Graf med innhentede data
- Trinn 12: Beregning av RMS -verdien
- Trinn 13: Kildekode
- Trinn 14: Filer
Video: Måling av True-RMS AC-spenning: 14 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
I dag skal vi bruke STM32 Maple Mini til å lese AC. I vårt eksempel får vi RMS -verdien til strømnettet. Dette er veldig nyttig for de som ønsker å overvåke det elektriske nettverket for tingenes internett. Vi vil deretter opprette en applikasjon ved hjelp av beregningskraften til Maple Mini, bruke en elektronisk krets som er i stand til å tillate innhenting av et 127Vac -signal, samt anvende root mean square (RMS) -beregningen på prøvene.
Trinn 1: Demonstrasjon
I vår samling i dag har vi STM32, i tillegg til vår analoge krets for å gjøre inngangen til 110. For å unngå støt, isoler motstanden som kommer inn med 110.
Kretsen er ganske følsom. Jeg kommer inn med 110, men jeg reduserer det 168 ganger ved å bruke spenningsdeleren og legger den inn i operasjonsforsterkeren, som har flere funksjoner.
Vi har også noen valgfrie kondensatorer for kildefiltrering. Hvis kilden din er av god kvalitet, trenger du ikke bruke dem.
AD -inngangen beregnes gjennom oscilloskopet, der du ser en sinusformet, som ikke er 110 (men den er godt formet). En annen ting er at spenningen i det elektriske nettverket vårt ikke er 110 (det er faktisk 127 volt). Men ettersom vi gjennomgår en stabilisator, vil den justere seg til 115V.
Verdien som vises på den serielle skjermen er det som er beregnet i RMS, det vil si den som er identifisert av Fluke Meter.
Trinn 2: Ressurser brukt
• Gensere
• En Maple Mini
• Protoboard
• En LM386 forsterker
• En symmetrisk kilde (+ 5V og -5V)
• En 10k multi-turn trimpot (eller potensiometer)
• Fire kondensatorer av 100nF polyester
• Tre 10k motstander
• Fire 470k motstander
• En 5k6 motstand
• En 1n4728A zenerdiode
Trinn 3: Blokkdiagram
Trinn 4: Oppsett
Dette er en krets jeg utviklet basert på spesifikasjonene som jeg tror er de beste for denne målingen, men det er flere andre eksempler som finnes på internett.
Trinn 5: LM386 - Festing
LM386 har to forsterkere for kondisjonering eller signalforsterkning.
Trinn 6: AmpOp - Differensial (subtraktor)
Trinn 7: AmpOp - Inverter Adder
Trinn 8: Maple Mini - Pinage
Pinner merket på:
Rød >> 3V3 Tolerant
Grønn >> 5V Tolerant
Trinn 9: Maple Mini - Pinning - a / D Brukes til fange
Jeg understreker her at pinnen jeg brukte er D11 som (i nomenklaturen til STMicroelectronics) er PA0.
Trinn 10: Montering
For kretsen vår trenger du en symmetrisk kilde, som den vi opprettet for dette prosjektet. Ellers trenger du to kilder.
Trinn 11: Graf med innhentede data
Trinn 12: Beregning av RMS -verdien
Trinn 13: Kildekode
Kildekode - Definisjoner og konstanter
Først definerte vi pinnavlesningen som D11, i tillegg til de forskjellige konstantene som ble brukt i beregningene.
#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
Kildekode - Globale variabler
Nå definerer vi noen globale variabler.
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
Kildekode - Oppsett ()
Start serieporten med 1 Mbps. Vi justerte AD -porten som input og ventet 5 sekunder før vi begynte å samle inn data. Standbytid er valgfritt.
ugyldig oppsett () {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. (valgfritt)}
Kildekode - sløyfe () - Starter datainnsamlingsvariablene
I Loop har vi variabelen for iterasjon. Her lagrer vi også avlesningene av AD i 0.0 og starter variabelen VRMS på nytt også i 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
Kildekode - Fanger og utfører de individuelle beregningene for hver prøve
På dette stadiet, hvis i er mindre enn prøven, starter vi en prøvetakingssyklus til jeg når antall prøver. Vi kjører analogRead for å lese den analoge porten og beregne summen av kvadratene til avlesningsspenningene. Til slutt øker vi iteratoren.
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 ++; // incrementa o iterador}
Kildekode - Generelle beregninger av prøvene og identifisering av maksimum, minimum og gjennomsnitt
Vi bruker multiplikasjonsfakta for å bestemme den faktiske verdien av spenningene. Vi oppdager om verdien er maksimum eller minimum, og vi beregner gjennomsnittet av gjeldende maksimums- og minimumsverdier.
// 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; } // calcula a média dos valores máximo e mínimo atuais Vmed = (Vmax + Vmin) /2.0;
Kildekode - Utmatingsalternativer
Vi har tre alternativer for å "plotte" utgangsverdien. Vi har output formatert til Arduino IDE seriell plotter, som CSV eller Jason.
// saída formatada for 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 ("}"); * / /* // saída formatada como 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); */}
Trinn 14: Filer
Last ned filene:
INO
Anbefalt:
Måling av motorhastighet ved bruk av Arduino: 6 trinn
Måling av motorhastighet ved bruk av Arduino: Er det vanskelig å måle turtall på motor ??? Jeg tror ikke det. Her er en enkel løsning. Bare en IR -sensor og Arduino i settet ditt kan gjøre det. I dette innlegget vil jeg gi en enkel opplæring som forklarer hvordan du måler turtall for enhver motor ved hjelp av IR -sensor og A
Måling av temperaturen: 7 trinn
Måling av temperaturen: هو قياس درجه الحراره باستخدام الكاميرا االحراريه
Sensorisk maling: 5 trinn
Sensorial Painting: Sensorial Painting er en proyecto diseñado para que alguien no vidente pueda pintar eller dibujar dentro de bordes que uno pueda delimitar. En este caso utilizaremos un Kultrun de la cultura y pueblo mapuche. SP te avisará mediante sonidos de un Trompe
Måling av akselerasjon ved bruk av ADXL345 og Particle Photon: 4 trinn
Måling av akselerasjon ved bruk av ADXL345 og Particle Photon: ADXL345 er et lite, tynt, ultralavt, 3-akset akselerometer med høy oppløsning (13-bit) måling på opptil ± 16 g. Digitale utdata er formatert som 16-biters tokomplement og er tilgjengelig via I2 C digitalt grensesnitt. Den måler
Måling av temperatur ved bruk av AD7416ARZ og Raspberry Pi: 4 trinn
Måling av temperatur ved bruk av AD7416ARZ og Raspberry Pi: AD7416ARZ er en 10-bits temperatursensor med fire enkeltkanals analoge til digitale omformere og en innebygd temperatursensor som er integrert i den. Temperaturføleren på delene kan nås via multiplexerkanaler. Denne høye nøyaktigheten