Table des matières:

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 : 6 étapes

Vidéo: Mesure de la fréquence et de la tension d'alimentation à l'aide d'Arduino : 6 étapes

Vidéo: Mesure de la fréquence et de la tension d'alimentation à l'aide d'Arduino : 6 étapes
Vidéo: capteur de tension zmpt 101B & La domotique à 2 euros avec arduino 2024, Novembre
Anonim
Mesure de la fréquence et de la tension d'alimentation à l'aide d'Arduino
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 à 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 microcontrôleur ou carte que vous possédez. Le circuit nécessite une poignée de composants et est assez précis à toutes fins pratiques.

Étape 1: Composants requis

  • Arduino Uno
  • CI LM358
  • Transformateur abaisseur (220V à 12V)
  • Condensateurs:

    • 0.1uF
    • 2 x 1uF
  • Résistances:

    • 3 x 1kOhm
    • 2 x 100kOhm
    • 1.5kOhm
    • 3.3kOhm
    • 6.8kOhm
  • 3 diodes 1N4148
  • Planche à pain et fil de cavalier (facultatif)

Étape 2: Diagramme schématique

Diagramme schématique
Diagramme schématique
Diagramme schématique
Diagramme schématique

Dans le circuit ci-dessus, le primaire du transformateur est connecté au réseau d'alimentation et le primaire est connecté à notre circuit de mesure

Étape 3: Comprendre le circuit

Comprendre le circuit
Comprendre le circuit
Comprendre le circuit
Comprendre le circuit
Comprendre le circuit
Comprendre le circuit

Selon la fonctionnalité, ce circuit peut être divisé en quatre parties:

A: Le circuit du détecteur de passage à zéro

Ce circuit génère une impulsion carrée de 5 V chaque fois que l'onde sinusoïdale passe du positif au négatif. La résistance R1 combinée avec D1 et D2 limite l'oscillation de la tension d'entrée à la jonction de la diode à -0,6 V à +5,6 V (en supposant que la tension directe de la diode soit de 0,6 V). De plus, vous pouvez augmenter la plage de tension d'entrée du circuit en augmentant la valeur de R1.

Les résistances R2 et R3 forment un diviseur de tension pour limiter l'oscillation de tension négative à -0,24 volts car la tension de mode commun d'entrée du LM358 est limitée à -0,3 volts.

La résistance R4, R5, le condensateur C1 et l'amplificateur opérationnel (ici utilisé comme comparateur) forment le circuit de déclenchement de Schmitt où les résistances R4 et R5 définissent l'hystérésis à l'entrée +49,5 mV au-dessus du sol. La sortie du Schmitt Trigger est transmise à l'Arduino PIN2 pour un traitement ultérieur.

B: Isolement et abaissement de tension

Comme son nom l'indique, cette partie isole et abaisse la tension à environ 12 Vrms. La tension abaissée est en outre fournie au circuit d'instrumentation.

C: Circuit de détection de crête

Ce circuit détermine la tension de crête maximale du signal d'entrée. Les diviseurs de résistance R6 et R7 réduisent la tension d'entrée d'un facteur de 0,23 (12Vrms est réduit à 2,76Vrms). La diode D3 ne conduit que l'alternance positive du signal. La tension aux bornes de C2 augmente jusqu'à la valeur de crête du signal redressé, qui est transmis à la broche analogique Arduino A0 pour calculer davantage la tension.

De plus, vous pouvez remplacer ce circuit par un circuit détecteur de crête de précision comme ceux mentionnés ici. Mais pour mes fins de démonstration, le circuit ci-dessus sera suffisant.

D: Arduino

Dans cette partie, l'Arduino capture les impulsions carrées générées par le circuit Schmitt Trigger et lit la tension analogique du circuit détecteur de crête. Les données sont ensuite traitées pour déterminer la période de temps (donc la fréquence) de l'impulsion carrée (qui est égale au temps d'alimentation ca personne) et la tension de l'alimentation.

Étape 4: Calcul de la fréquence et de la tension

Calcul de la fréquence:

Avec l'aide d'Arduino, nous pouvons mesurer la période de temps T du signal. Les impulsions carrées du détecteur de passage par zéro sont transmises à la broche 2, à partir de là, nous pouvons mesurer la période de temps de chaque impulsion. Nous pouvons utiliser la minuterie interne d'Arduino (en particulier Timer1) pour calculer la période de temps entre deux fronts montants de l'impulsion carrée à l'aide d'interruptions. Le temporisateur incrémente de 1 par cycle d'horloge (sans prescaler = 1) et la valeur est stockée dans le registre TCNT1. Ainsi, l'horloge 16Mhz incrémente le compteur de 16 toutes les microsecondes. De même pour prescaler = 8, la minuterie est incrémentée de 2 toutes les microsecondes. D'où l'intervalle de temps entre deux fronts montants

T = (valeur TCNT1) / temps pris pour chaque comptage

Où, temps pris pour chaque compte = prescaler / (vitesse d'horloge Arduino (16MHz)

Par conséquent, la fréquence f = 1/T = (vitesse d'horloge Arduino (16MHz) / (valeur Prescaler * TCNT!)

Par conséquent, la vitesse de la minuterie (Hz) est donnée par = (vitesse d'horloge Arduino (16MHz)) / prescaler

et la fréquence du signal est donnée par = (vitesse d'horloge Arduino

Corrélativement, nous pouvons calculer la fréquence f à partir de la relation f = 1/T.

Calcul de la tension:

L'ADC intégré d'Arduino a une résolution de 10 bits (valeurs possibles = 2^10 = 1024), renvoyant des valeurs comprises entre 0 et 1023. Pour calculer la tension analogique correspondante V, nous devons utiliser la relation suivante

V = (lecture ADC) * 5/1023

Pour calculer la tension d'alimentation Vs(rms), nous devons prendre en compte le rapport du transformateur, le diviseur de résistance R6R7 et le circuit détecteur de crête. Nous pouvons simplement mettre ensemble les différents facteurs/ratio comme:

Rapport du transformateur = 12/230 = 0,052

Diviseur de résistance = R7/(R6 + R7) = 0,23

Au circuit de détection de crête = 1,414

Vs(rms) = V/(1.414*0.052*0.23) = (lecture ADC) * 0.289

Il convient de noter que cette valeur est loin de la valeur réelle, principalement en raison d'une erreur dans le rapport réel du transformateur et de la chute de tension directe de la diode. Une façon de contourner cela est de déterminer le facteur après avoir assemblé le circuit. C'est-à-dire en mesurant la tension d'alimentation et la tension aux bornes du condensateur C2 séparément avec un multimètre, puis en calculant Vs(rms) comme suit:

Vs(rms) = ((Tension d'alimentation * 5)/(Tension aux bornes de C2 *1023))*(Lecture ADC)

dans mon cas, Vs (rms) = 0,33 * (lecture ADC)

Étape 5: Code Arduino

#define volt_in A0 // broche de lecture de tension analogique

volatile uint16_t t_period; uint16_t ADC_value = 0; volt flottant, fréq; void isr() { t_period = TCNT1; //stocker la valeur TCNT1 dans t_period TCNT1 = 0; //réinitialiser Timer1 ADC_value = analogRead(volt_in); //lire la tension analogique } float get_freq() { uint16_t timer = t_period; if(timer==0) renvoie 0; // pour éviter la division par zéro else return 16000000.0/(8UL*timer); // la fréquence est donnée par f = clk_freq/(prescaler*timeperiod)} void setup() { TCCR1A = 0; TCCR1B = bit(CS11); //définir le pré-échelonneur sur 8 TCNT1 = 0; //réinitialiser la valeur Timer1 TIMSK1 = bit(TOIE1); //activer l'interruption de débordement Timer1 EIFR |= bit(INTF0); // efface l'indicateur d'interruption INT0 Serial.begin(9600); } boucle vide() { attachInterrupt(0, isr, RISING); //activer le délai d'interruption externe (INT0) (1000); détacherInterruption(0); freq = get_freq(); volt = valeur_ADC*0.33; Buff de cordes; buf += String(freq, 3); buf += F("Hz\t"); buf += Chaîne(volt); buf += F("Volts"); Serial.println(buf); }

Étape 6: Conclusion

Conclusion
Conclusion
Conclusion
Conclusion

Vous pouvez assembler le circuit dans une maquette, modifier le code et ajouter une carte SD pour stocker les données, qui pourront ensuite être analysées. Par exemple, vous pouvez analyser la tension et la fréquence aux heures de pointe.

Le circuit que j'ai assemblé dans la maquette utilisait LM324 (quad opamp) au lieu de LM358 (double opamp) car je n'avais pas ce circuit intégré à ce moment-là et le verrouillage national en raison de la pandémie de COVID-19 m'a rendu difficile l'obtention d'un nouveau circuit intégré.. Néanmoins, cela n'affecterait pas le fonctionnement du circuit.

N'hésitez pas à commenter ci-dessous pour toutes suggestions et questions.

Conseillé: