Table des matières:
- Étape 1: Démonstration
- Étape 2: Ressources utilisées
- Étape 3: Schéma fonctionnel
- Étape 4: schéma
- Étape 5: LM386 - Épinglage
- Étape 6: AmpOp - Différentiel (soustracteur)
- Étape 7: AmpOp - Inverter Adder
- Étape 8: Érable Mini - Pinage
- Étape 9: Maple Mini - Épinglage - a/D utilisé dans la capture
- Étape 10: Assemblage
- Étape 11: Graphique avec les données obtenues
- Étape 12: Calcul de la valeur RMS
- Étape 13: Code source
- Étape 14: Fichiers
Vidéo: Mesure de la tension CA True-RMS : 14 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
Aujourd'hui, nous utiliserons le STM32 Maple Mini pour effectuer une lecture AC. Dans notre exemple, nous obtiendrons la valeur RMS du réseau électrique. Ceci est très utile pour ceux qui souhaitent surveiller le réseau électrique pour l'Internet des objets. Nous allons ensuite créer une application utilisant la puissance de calcul du Maple Mini, appliquer un circuit électronique capable de permettre l'acquisition d'un signal 127Vac, ainsi qu'appliquer le calcul de la moyenne quadratique (RMS) sur les échantillons.
Étape 1: Démonstration
Dans notre montage aujourd'hui, nous avons le STM32, en plus de notre circuit analogique pour faire l'entrée de 110. Pour éviter les chocs, isolez la résistance qui entre par 110.
Le circuit est assez sensible. J'arrive avec 110, mais je le réduis 168 fois à l'aide du diviseur de tension et le mets dans l'amplificateur opérationnel, qui a plusieurs fonctions.
Nous avons également des condensateurs en option pour le filtrage de la source. Si votre source est de bonne qualité, vous n'avez pas besoin de les utiliser.
L'entrée AD est calculée grâce à l'oscilloscope, dans lequel vous voyez une sinusoïde, qui n'est pas 110 (mais elle est bien formée). Une autre chose est que la tension dans notre réseau électrique n'est pas de 110 (elle est en fait de 127 volts). Mais comme nous subissons un stabilisateur, il va s'ajuster à 115V.
La valeur affichée sur le moniteur série est celle qui est calculée en RMS, c'est-à-dire celle identifiée par le Fluke Meter.
Étape 2: Ressources utilisées
• Cavaliers
• Un mini à l'érable
• Protoboard
• Un amplificateur LM386
• Une source symétrique (+ 5V et -5V)
• Un trimpot multi-tours 10k (ou potentiomètre)
• Quatre condensateurs en polyester 100nF
• Trois résistances de 10k
• Quatre résistances de 470k
• Une résistance 5k6
• Une diode Zener 1n4728A
Étape 3: Schéma fonctionnel
Étape 4: schéma
Il s'agit d'un circuit que j'ai développé sur la base des spécifications que je pense être les meilleures pour cette mesure, mais il existe plusieurs autres exemples que l'on peut trouver sur Internet.
Étape 5: LM386 - Épinglage
Le LM386 dispose de deux amplificateurs pour le conditionnement ou l'amplification du signal.
Étape 6: AmpOp - Différentiel (soustracteur)
Étape 7: AmpOp - Inverter Adder
Étape 8: Érable Mini - Pinage
Broches marquées sur:
Rouge >> Tolérance 3V3
Vert >> Tolérance 5V
Étape 9: Maple Mini - Épinglage - a/D utilisé dans la capture
Je souligne ici que le pin que j'ai utilisé est le D11 qui (dans la nomenclature de la STMicroelectronics) est le PA0.
Étape 10: Assemblage
Pour notre circuit, vous aurez besoin d'une source symétrique, comme celle que nous avons créée pour ce projet. Sinon, vous aurez besoin de deux sources.
Étape 11: Graphique avec les données obtenues
Étape 12: Calcul de la valeur RMS
Étape 13: Code source
Code source - Définitions et constantes
Au début, nous avons défini la lecture de la broche comme D11, ainsi que les différentes constantes utilisées dans les calculs.
#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 fatorMultiplicao = 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
Code source - Variables globales
Maintenant, nous définissons quelques variables globales.
flottant Vrms = 0,0; //armazena o valor rms da tensãofloat Vmax = 0.0; //armazena ou valeur maximale détectée float Vmin = 10000.0; //armazena o valor minimo detectado float Vmed = 0.0; //armazena o valor medio entre Vmáx e Vmín
Code source - Configuration ()
Démarrez le port série à 1Mbps. Nous avons ajusté le port AD en entrée et attendu 5 secondes avant de commencer à collecter des données. Le temps d'attente est facultatif.
void setup() { Serial.begin(1000000); // initie un port série avec 1 Mbps pinMode (leituraTensao, INPUT); //justa a porta do AD como entrada delay (5000); //aguarda 5s antes de iniciar a coleta. (optionnel) }
Code source - Loop () - Démarre les variables de collecte de données
Dans la boucle, nous avons la variable pour l'itération. Ici, nous stockons également les lectures de AD en 0.0 et redémarrons la variable VRMS également en 0.0.
boucle vide() { int i = 0; //variable pour iteração float leitura = 0.0; //armazena comme leituras font AD Vrms = 0.0; //reinicia a variável Vrms
Code source - Capture et exécute les calculs individuels pour chaque échantillon
A ce stade, si i est plus petit que l'échantillon, nous commençons un cycle d'échantillonnage jusqu'à ce que i atteigne le nombre d'échantillons. Nous exécutons analogRead pour lire le port analogique et calculons la somme des carrés des tensions de lecture. Enfin, nous incrémentons l'itérateur.
while (i < amostras) { //inicia um ciclo de amostragem até que i alcance on 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); //calcule un soma dos quadrados das tensões lidas i++; //incrémenter l'itération }
Code source - Calculs généraux des échantillons et identification du maximum, du minimum et de la moyenne
Nous appliquons le fait de multiplication pour déterminer la valeur réelle des tensions. Nous détectons si la valeur est maximale ou minimale, et nous calculons la moyenne des valeurs maximales et minimales actuelles.
//Aplicando fator de multiplicação para determinar o valor real das tensões Vrms = (sqrt(Vrms / amostras)) * fatorMultiplicao; //détecte sa valeur et sa valeur maximale si (Vrms > Vmax) { Vmax = Vrms; } //détecte sa valeur minimale si (Vrms < Vmin) { Vmin = Vrms; } //calcula a média dos valores máximo e mínimo atuais Vmed = (Vmax + Vmin) / 2.0;
Code source - Options de sortie
Nous avons trois options pour "tracer" la valeur de sortie. Nous avons une sortie formatée sur le traceur série Arduino IDE, comme CSV ou Jason.
//saída formatada pour traceur série 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); */ }
Étape 14: Fichiers
Téléchargez les fichiers:
INO
Conseillé:
Mesure de la fréquence et de la tension d'alimentation à l'aide d'Arduino : 6 étapes
Mesure de la fréquence et de la tension d'alimentation à l'aide d'Arduino : Introduction : L'objectif de ce projet est de mesurer la fréquence et la tension d'alimentation, qui se situent entre 220 et 240 volts et 50 Hz ici en Inde. J'ai utilisé un Arduino pour capturer le signal et calculer la fréquence et la tension, vous pouvez utiliser n'importe quel autre microcont
Moniteur de tension pour batteries haute tension : 3 étapes (avec photos)
Moniteur de tension pour batteries haute tension : Dans ce guide, je vais vous expliquer comment j'ai construit mon moniteur de tension de batterie pour mon longboard électrique. Montez-le comme vous le souhaitez et connectez seulement deux fils à votre batterie (Gnd et Vcc). Ce guide suppose que la tension de votre batterie dépasse 30 volts, w
Mesure de tension continue à l'aide d'Arduino : 5 étapes
Mesure de la tension continue à l'aide d'Arduino : dans ce projet, je vais vous montrer comment mesurer la tension continue jusqu'à 50 v à l'aide d'arduino et l'affichage sur la partie du module d'affichage OLED nécessite un affichage arduino UNOoledRésistance de 10 k ohms
Mesure de tension à l'aide d'Arduino : 5 étapes
Mesure de tension à l'aide d'Arduino : La mesure de la tension est assez facile à l'aide de n'importe quel microcontrôleur par rapport à la mesure du courant. La mesure des tensions devient nécessaire si vous travaillez avec des batteries ou si vous souhaitez créer votre propre alimentation électrique réglable. Bien que cette méthode s'applique
Mesure de la tension continue avec Arduino et Node-RED : 8 étapes (avec photos)
Mesure de la tension continue avec Arduino et Node-RED : il existe de nombreux tutoriels Mesure de la tension continue avec Arduino, dans ce cas, j'ai trouvé un tutoriel que je considère comme la meilleure méthode fonctionnelle pour mesurer le courant continu sans nécessiter de valeurs d'entrée de résistance, ne nécessite qu'une certaine résistance et un multimètre