Indholdsfortegnelse:
- Trin 1: Demonstration
- Trin 2: Brugte ressourcer
- Trin 3: Blokdiagram
- Trin 4: Skema
- Trin 5: LM386 - Fastgørelse
- Trin 6: AmpOp - Differential (subtraktor)
- Trin 7: AmpOp - Inverter Adder
- Trin 8: Maple Mini - Pinage
- Trin 9: Maple Mini - Pinning - a / D Anvendes til optagelse
- Trin 10: Montering
- Trin 11: Graf med de opnåede data
- Trin 12: Beregning af RMS -værdien
- Trin 13: Kildekode
- Trin 14: Filer
Video: Måling af True-RMS AC-spænding: 14 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
I dag vil vi bruge STM32 Maple Mini til at foretage en AC -aflæsning. I vores eksempel får vi RMS -værdien af elnettet. Dette er meget nyttigt for dem, der ønsker at overvåge det elektriske netværk til tingenes internet. Vi vil derefter oprette en applikation ved hjælp af Maple Mini's beregningseffekt, anvende et elektronisk kredsløb, der er i stand til at tillade optagelse af et 127Vac -signal, samt anvende root mean square (RMS) -beregningen på prøverne.
Trin 1: Demonstration
I vores samling i dag har vi STM32 ud over vores analoge kredsløb til at foretage input på 110. For at undgå stød skal du isolere modstanden, der kommer ind med 110.
Kredsløbet er ret følsomt. Jeg kommer ind med 110, men jeg reducerer det 168 gange ved hjælp af spændingsdeleren og sætter det i operationsforstærkeren, som har flere funktioner.
Vi har også nogle valgfri kondensatorer til kildefiltrering. Hvis din kilde er af god kvalitet, behøver du ikke bruge dem.
AD -input beregnes gennem oscilloskopet, hvor du ser en sinusformet, som ikke er 110 (men den er godt dannet). En anden ting er, at spændingen i vores elektriske netværk ikke er 110 (det er faktisk 127 volt). Men da vi gennemgår en stabilisator, justeres den til 115V.
Den værdi, der vises på den serielle skærm, er, hvad der beregnes i RMS, det vil sige den, der identificeres af Fluke -måleren.
Trin 2: Brugte ressourcer
• Jumpere
• En Maple Mini
• Protoboard
• En LM386 forstærker
• En symmetrisk kilde (+ 5V og -5V)
• En 10k multi-turn trimpot (eller potentiometer)
• Fire kondensatorer af 100nF polyester
• Tre 10k modstande
• Fire 470k modstande
• Én 5k6 modstand
• Én 1n4728A zener -diode
Trin 3: Blokdiagram
Trin 4: Skema
Dette er et kredsløb, jeg udviklede baseret på de specifikationer, jeg mener er de bedste til denne måling, men der er flere andre eksempler, der kan findes på internettet.
Trin 5: LM386 - Fastgørelse
LM386 har to forstærkere til konditionering eller signalforstærkning.
Trin 6: AmpOp - Differential (subtraktor)
Trin 7: AmpOp - Inverter Adder
Trin 8: Maple Mini - Pinage
Stifter mærket på:
Rød >> 3V3 Tolerant
Grøn >> 5V Tolerant
Trin 9: Maple Mini - Pinning - a / D Anvendes til optagelse
Jeg understreger her, at den pin, jeg brugte, er D11, der (i STMicroelectronics nomenklatur) er PA0.
Trin 10: Montering
Til vores kredsløb skal du bruge en symmetrisk kilde, som den vi skabte til dette projekt. Ellers skal du bruge to kilder.
Trin 11: Graf med de opnåede data
Trin 12: Beregning af RMS -værdien
Trin 13: Kildekode
Kildekode - Definitioner og konstanter
Først definerede vi pinlæsning som D11, samt de forskellige konstanter, der blev brugt i beregningerne.
#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
Nu definerer vi nogle 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 - Opsætning ()
Start den serielle port ved 1 Mbps. Vi justerede AD -porten som input og ventede 5 sekunder, før vi begyndte at indsamle data. Standbytid er valgfri.
ugyldig opsætning () {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. (valgfrit)}
Kildekode - Loop () - Starter dataindsamlingsvariablerne
I Loop har vi variablen til iteration. Her gemmer vi også aflæsningerne af AD i 0.0 og genstarter variablen VRMS 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 udfører de individuelle beregninger for hver prøve
På dette trin, hvis i er mindre end prøven, starter vi en prøveudtagningscyklus, indtil jeg når antallet af prøver. Vi kører analogRead for at læse den analoge port og beregne summen af kvadraterne af læsespændingerne. Endelig øger vi iteratoren.
while (i <amostras) {// inicia um ciclo de amostragem até que i alcance o número de amostras leitura = analogRead (leituraTensao); // læs en 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 af prøverne og identifikation af maksimum, minimum og gennemsnit
Vi anvender multiplikationsfakta for at bestemme spændingernes faktiske værdi. Vi registrerer, om værdien er maksimum eller minimum, og vi beregner gennemsnittet af de nuværende maksimum- og minimumværdier.
// 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 - Outputmuligheder
Vi har tre muligheder for at "plotte" outputværdien. Vi har output formateret til Arduino IDE seriel 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 ("}"); * / /* // også formateret som 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); */}
Trin 14: Filer
Download filerne:
INO
Anbefalede:
Måling af motorhastighed ved hjælp af Arduino: 6 trin
Måling af motorhastighed ved hjælp af Arduino: Er det svært at måle omdrejninger pr. Motor ??? Det tror jeg ikke. Her er en simpel løsning. Kun en IR -sensor og Arduino i dit kit kan gøre det. I dette indlæg vil jeg give en simpel tutorial, der forklarer, hvordan man måler omdrejningstal for enhver motor ved hjælp af IR -sensor og A
Måling af temperaturen: 7 trin
Måling af temperaturen: هو قياس درجه الحراره باستخدام الكاميرا االحراريه
Måling af acceleration ved hjælp af ADXL345 og Particle Photon: 4 trin
Måling af acceleration ved hjælp af ADXL345 og Particle Photon: ADXL345 er et lille, tyndt, ultralavt, 3-akset accelerometer med høj opløsning (13-bit) måling på op til ± 16 g. Digitale outputdata er formateret som 16-bit tokomplement og er tilgængelige via I2 C digital interface. Det måler
Måling af temperatur ved hjælp af AD7416ARZ og Raspberry Pi: 4 trin
Måling af temperatur ved hjælp af AD7416ARZ og Raspberry Pi: AD7416ARZ er en 10-bit temperatursensor med fire enkeltkanals analoge til digitale omformere og en indbygget temperatursensor indbygget i den. Temperaturføleren på delene kan tilgås via multiplexerkanaler. Denne temperatur med høj nøjagtighed
4 trin til måling af batteriets interne modstand: 4 trin
4 trin til måling af batteriets interne modstand: Her er de 4 enkle trin, der kan hjælpe dig med at måle batterens indre modstand