Sommario:
- Passaggio 1: dimostrazione
- Passaggio 2: risorse utilizzate
- Passaggio 3: diagramma a blocchi
- Passaggio 4: schema
- Passaggio 5: LM386 - Appuntamento
- Passaggio 6: AmpOp - Differenziale (sottrattore)
- Passaggio 7: AmpOp - Sommatore inverter
- Passaggio 8: Maple Mini - Pinage
- Passaggio 9: Maple Mini - Pinning - a / D utilizzato nella cattura
- Passaggio 10: assemblaggio
- Passaggio 11: grafico con i dati ottenuti
- Passaggio 12: calcolo del valore RMS
- Passaggio 13: codice sorgente
- Passaggio 14: file
Video: Misurazione della tensione CA a vero valore efficace: 14 passi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
Oggi useremo l'STM32 Maple Mini per fare una lettura AC. Nel nostro esempio, otterremo il valore RMS della rete elettrica. Questo è molto utile per chi vuole monitorare la rete elettrica per l'Internet of Things. Creeremo quindi un'applicazione utilizzando la potenza di calcolo del Maple Mini, applicheremo un circuito elettronico in grado di consentire l'acquisizione di un segnale a 127Vac, nonché applicheremo il calcolo della radice quadrata media (RMS) sui campioni.
Passaggio 1: dimostrazione
Nel nostro assemblaggio di oggi abbiamo l'STM32, oltre al nostro circuito analogico per fare l'ingresso di 110. Per evitare scosse, isolare per 110 la resistenza che sta entrando.
Il circuito è abbastanza sensibile. Sto entrando con 110, ma lo riduco di 168 volte usando il partitore di tensione e lo metto nell'amplificatore operazionale, che ha diverse funzioni.
Abbiamo anche alcuni condensatori opzionali per il filtraggio della sorgente. Se la tua fonte è di buona qualità, non è necessario usarli.
L'ingresso AD viene calcolato tramite l'oscilloscopio, nel quale si vede una sinusoide, che non è 110 (ma è ben formata). Un'altra cosa è che la tensione nella nostra rete elettrica non è 110 (in realtà è 127 volt). Ma poiché stiamo subendo uno stabilizzatore, si adatterà a 115V.
Il valore visualizzato sul monitor seriale è quello calcolato in RMS, cioè quello identificato dal Fluke Meter.
Passaggio 2: risorse utilizzate
• Maglioni
• Un mini acero
• Scheda prototipi
• Un amplificatore LM386
• Una sorgente simmetrica (+ 5V e -5V)
• Un trimpot multigiro da 10k (o potenziometro)
• Quattro condensatori in poliestere 100nF
• Tre resistori da 10k
• Quattro resistori da 470k
• Un resistore da 5k6
• Un diodo zener 1n4728A
Passaggio 3: diagramma a blocchi
Passaggio 4: schema
Questo è un circuito che ho sviluppato in base alle specifiche che ritengo siano le migliori per questa misurazione, ma ci sono molti altri esempi che possono essere trovati su Internet.
Passaggio 5: LM386 - Appuntamento
L'LM386 dispone di due amplificatori per il condizionamento o l'amplificazione del segnale.
Passaggio 6: AmpOp - Differenziale (sottrattore)
Passaggio 7: AmpOp - Sommatore inverter
Passaggio 8: Maple Mini - Pinage
Perni contrassegnati su:
Rosso >> 3V3 Tollerante
Verde >> Tollerante 5V
Passaggio 9: Maple Mini - Pinning - a / D utilizzato nella cattura
Sottolineo qui che il pin che ho usato è il D11 che (nella nomenclatura della STMicroelectronics) è il PA0.
Passaggio 10: assemblaggio
Per il nostro circuito, avrai bisogno di una sorgente simmetrica, come quella che abbiamo creato per questo progetto. Altrimenti, avrai bisogno di due fonti.
Passaggio 11: grafico con i dati ottenuti
Passaggio 12: calcolo del valore RMS
Passaggio 13: codice sorgente
Codice sorgente - Definizioni e costanti
Inizialmente, abbiamo definito la lettura del pin come D11, così come le varie costanti utilizzate nei calcoli.
#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; //Valore utilizzato per moltiplicare la dimensione const float fatorMultiplicacao = fatorDivisor * fatorAmplificador; //Valore teorico della tensione di alimentazione 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; //risultato em 0, 514 secondi per cada atualização
Codice sorgente - Variabili globali
Ora, definiamo alcune variabili globali.
float Vrms = 0.0; //armazena o valor rms da tensãofloat Vmax = 0.0; //armazena o valore massimo rilevato float Vmin = 10000.0; //armazena o valore minimo rilevato float Vmed = 0.0; //armazena o valor médio entre Vmáx e Vmín
Codice sorgente - Configurazione ()
Avvia la porta seriale a 1Mbps. Abbiamo regolato la porta AD come input e abbiamo aspettato 5 secondi prima di iniziare a raccogliere dati. Il tempo di standby è facoltativo.
void setup() { Serial.begin(1000000); //inicia una porta seriale em 1Mbps pinMode(leituraTensao, INPUT); //ajusta a porta do AD como entrada delay(5000); //aguarda 5s antes de iniciar a coleta. (opzionale) }
Codice sorgente - Loop () - Avvia le variabili di raccolta dati
Nel Loop abbiamo la variabile per l'iterazione. Qui memorizziamo anche le letture di AD in 0.0 e riavviamo la variabile VRMS anche in 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
Codice sorgente: acquisisce ed esegue i singoli calcoli per ogni campione
A questo punto, se i è minore del campione, iniziamo un ciclo di campionamento fino a quando i raggiunge il numero di campioni. Eseguiamo analogRead per leggere la porta analogica e calcolare la somma dei quadrati delle tensioni lette. Infine, incrementiamo l'iteratore.
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 iteratore }
Codice sorgente - Calcoli generali dei campioni e identificazione di massimo, minimo e media
Applichiamo il fatto di moltiplicazione per determinare il valore effettivo delle tensioni. Rileviamo se il valore è massimo o minimo e calcoliamo la media dei valori massimo e minimo correnti.
//Aplicando fattore di moltiplicazione per determinar o valore reale das tensões Vrms = (sqrt(Vrms / amostras)) * fatorMultiplicacao; //detecta se é um valor é máximo if (Vrms > Vmax) { Vmax = Vrms; } //rileva 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;
Codice sorgente - Opzioni di output
Abbiamo tre opzioni per "tracciare" il valore di output. Abbiamo l'output formattato sul plotter seriale Arduino IDE, come CSV o Jason.
//saída formatada per 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 come 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 come 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); */ }
Passaggio 14: file
Scarica i file:
IO NO
Consigliato:
Misurazione della frequenza e della tensione dell'alimentatore con Arduino: 6 passaggi
Misurazione della frequenza e della tensione di alimentazione con Arduino: Introduzione: l'obiettivo di questo progetto è misurare la frequenza e la tensione di alimentazione, che qui in India sono comprese tra 220 e 240 Volt e 50 Hz. Ho usato un Arduino per catturare il segnale e calcolare frequenza e tensione, puoi usare qualsiasi altro microcont
Convertitore di tensione buck in modalità interruttore di riduzione della tensione CC - CC (LM2576/LM2596): 4 passaggi
Convertitore di tensione buck in modalità interruttore di riduzione della tensione CC - CC (LM2576/LM2596): Realizzare un convertitore buck altamente efficiente è un lavoro difficile e anche gli ingegneri esperti richiedono più progetti per arrivare a quello giusto. Un convertitore buck (convertitore step-down) è un convertitore di alimentazione CC-CC, che riduce la tensione (mentre aumenta
Misurazione della tensione CC con Arduino: 5 passaggi
Misurazione della tensione CC utilizzando Arduino: in questo progetto ti mostrerò come misurare la tensione CC fino a 50 V utilizzando arduino e il display sul modulo display OLED richiede arduino UNOoled display resistore da 10 k ohm cavo jumper resistore da 1 k ohm
Misurazione della tensione con Arduino: 5 passaggi
Misurazione della tensione utilizzando Arduino: la misurazione della tensione è abbastanza semplice utilizzando qualsiasi microcontrollore rispetto alla misurazione della corrente. La misurazione delle tensioni diventa necessaria se si lavora con le batterie o se si desidera creare il proprio alimentatore regolabile. Anche se questo metodo si applica
Misurazione della tensione CC con Arduino e Node-RED: 8 passaggi (con immagini)
Misurazione della tensione CC con Arduino e Node-RED: ci sono molti tutorial sulla misurazione della tensione CC con Arduino, in questo caso ho trovato un tutorial che considero il miglior metodo funzionale per misurare la CC senza richiedere valori di resistenza in ingresso, richiede solo una certa resistenza e un multimetro