Lecture d'une tension variable dans Arduino

8

En utilisant un Arduino Nano et un transformateur de courant (CT), j'essaie de détecter le courant qui traverse une ligne 120 V 60 Hz.

Circuit

Sorties CT 0-1 Vselon ses spécifications. Cette sortie est polarisée AREF/2= 2,5 V.

Entrez la description de l'image ici

analogRead Valeurs

L'axe x représente le numéro d'index de l'échantillon ADC, tandis que l'axe y représente la valeur ADC (0-1024). La fréquence d'échantillonnage est d'environ 9 kHz. La différence de crête à crête est d'environ 1026 échantillons.

Entrez la description de l'image ici

Cette forme d'onde correspond-elle à ce que vous attendez d'un CT? Pourquoi y a-t-il des régions où les valeurs sont plates, plutôt que de varier continuellement?

De plus, si nous regardons la partie courbe de l'intrigue, pourquoi Arduino lit- 512il 512alternativement les valeurs au - dessus et en dessous ? Il lit une valeur au 512- dessus , puis une valeur en dessous 512, puis une valeur au 512- dessus et ainsi de suite.

Le temps pris pour un a analogReadété mesuré à 110 microsecondes pour ma configuration et il y a 1026 échantillons entre les pics de forme d'onde. Cela signifie qu'il y aura environ 9 pics en 1 seconde, bien que je m'attende à 60 pics car nous détectons une ligne à 60 Hz. Que pensez-vous de cela? Il y a un condensateur, C1dans le circuit, cela aurait-il quelque chose à voir avec ça?

Ces valeurs analogRead peuvent-elles être utilisées pour calculer la tension RMS, et donc le courant RMS traversant le fil à détecter? L'objectif final de ceci est de calculer la consommation d'énergie après avoir déterminé le courant RMS traversant le fil.

Esquisse utilisée pour obtenir les valeurs du tracé

void setup() {
    Serial.begin(9600);
}

void loop() {
   double sensorValue = analogRead(1);
   Serial.println(sensorValue)
}

analogReadPoints de données réels dans les régions de relief

487
534
487
535
488
537
484
536
487
538
486
536
484
540
484
539
485
540
483
540
484
541
481
539
481
540
484
540
480
543
484
539
481
540
484
541
486
542
485
538
485
538
488
535
489
534
491
530
491
529
493
531
492
526
498
526
499
524
499
520
503
518
502
518
507

Tracé des valeurs analogRead

Les valeurs analogRead sont maintenant stockées dans un tampon avant d'être transmises sur Serial. Il y a maintenant 55 points de données ADC constituant 1 période. Étant donné que le temps de lecture analogique est de 110 µs, chaque cycle prend 6,05 ms, ce qui nous donne une fréquence de 165 Hz! Qu'est-ce qui a mal tourné?

Entrez la description de l'image ici

void loop() {
    double sensorValue = analogRead(1);
    char buf[32];

    dtostrf(sensorValue, 8, 2, buf);
    value = buf;

    if (stop == 0) {
        if (i < 10000) {
            message += ',';
            message += value;
            i++;
        }
        else {
            stop = 1;
            Serial.println(message);
        }
    }
}
Nyxynyx
la source
Pouvez-vous envoyer votre code? Cela ne semble pas du tout correct. Quand vous dites "en supposant que 100 ms passent", pourquoi supposons-nous cela?
Cybergibbons
@Cybergibbons Publié le code utilisé pour générer des valeurs pour le tracé. Désolé, je viens de mesurer le temps pris pour un analogRead()et je l'ai trouvé à 110 microsecondes. Mis à jour la question.
Nyxynyx
Quelle est la charge que vous utilisez pour le secteur. Idéalement, vous voulez quelque chose d'assez stable comme une ampoule à incandescence. Si vous avez quelque chose de complexe comme une alimentation à découpage pour ordinateur portable qui peut avoir une charge variable, vous pouvez vous attendre à un résultat complexe.
Salix alba
1
La majeure partie du temps dans la boucle sera consacrée à l'envoi de séries à 9600 bps. Vous ne décalerez que 960 car / s, c'est-à-dire que chaque lecture prend 4 ms.
Cybergibbons
@Salixalba La charge est un ordinateur de bureau avec une alimentation à découpage. Je vais essayer de mesurer une charge différente, comme un radiateur.
Nyxynyx

Réponses:

5

Concernant vos mesures, j'ignorerais complètement le premier ensemble avec Serial.println () dans la boucle. Je suppose que le moment où cela se produira ne sera pas fiable.

Votre deuxième ensemble de données que vous avez capturé dans un tampon semble correct, mais votre estimation / synchronisation de fréquence peut être incorrecte. Je voudrais inverser une sortie numérique à chaque itération de boucle. Vous pouvez mesurer la fréquence de cela avec un multimètre et votre taux d'échantillonnage ADC serait le double de cette valeur.

Pour une alimentation PC ou ordinateur portable, c'est une forme d'onde de courant assez courante.

Sans correction efficace du facteur de puissance, le signal actuel illustré ci-dessous serait assez typique (source: http://www.nlvocables.com/blog/?p=300 )

http://www.nlvocables.com/blog/?p=300

Vous devrez calculer les valeurs RMS et il serait sage de filtrer le signal.

Voici un instructable que j'ai écrit sur la façon de construire et de coder un moniteur d'électricité basé sur Arduino Yun avec Cloud Support / Temboo et Google Drive. Cela devrait vous être utile.

akellyirl
la source
Je vous remercie! Le TC que vous avez utilisé produit des sorties de -1 V à 1 V. Pour utiliser l'ADC 10 bits, allez-vous amplifier la sortie SCT de 2,5 à l'aide d'un opamp? Ou réglez votre AREF sur 2V et polarisez votre signal CT de 1V
Nyxynyx
Non je ne l'ai pas amplifié ni changé l'Aref.
akellyirl
Comment pourriez-vous obtenir ce graphique? Avec quel logiciel?
Zgrknr
0

si vous mesurez une charge résistive, je dirais que la résistance de charge que vous avez choisie est erronée, il existe des TC bon marché sur ebay (SCT-013-xxx) qui ont des versions avec et sans les résistances de charge, celles-ci fonctionnent bien pour leur prix mais vous devez lire la fiche technique. le SCT-013-000 nécessite une résistance 20R pour sortir 1 V avec une charge de 100 A. Si cette résistance est incorrecte, vous pouvez obtenir une forme d'onde très déformée lorsque vous mesurez des courants plus élevés (similaires à ceux que vous avez fournis), vous vous attendez à ce plus la valeur de la résistance de charge est déformée, mais ce n'est pas le cas avec les TC.

Ian
la source