変化する電圧をArduinoに読み込む


8

使用Arduinoのナノ及び変流器(CT)を、私は120 V 60Hzの線に流れる電流を検出しようとしています。

回路

CTは0-1 Vその仕様に従って出力します。この出力はバイアスされていますAREF/2= 2.5V。

ここに画像の説明を入力してください

analogRead 価値観

x軸はADCサンプルのインデックス番号を表し、y軸はADC値(0〜1024)を表します。サンプリングレートは約9 kHzです。ピーク間差は約1026サンプルです。

ここに画像の説明を入力してください

この波形はCTに期待するものですか?値が連続的に変化するのではなく、値が平坦な領域があるのはなぜですか?

さらに、プロットの曲線部分を見ると、Arduinoが512上下の値を512交互に読み取っているのはなぜですか?なお、上記の値を読み出し、512以下、値、512その値以上の、512など。

analogReadセットアップにかかった時間は110マイクロ秒と測定され、波形のピーク間に1026個のサンプルがあります。つまり、60 Hzのラインを検出しているので60のピークが予想されますが、1秒間に約9のピークが存在することになります。これから何を作りますか?コンデンサーC1が回路にありますが、これと関係がありますか?

これらのanalogRead値は、RMS電圧を計算するために使用するのに適していますか?これの最終的な目標は、ワイヤを流れるRMS電流を決定した後で電力使用量を計算することです。

プロットの値を取得するために使用されるスケッチ

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

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

analogReadバンプ領域の実際のデータポイント

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

analogRead値のプロット

analogReadの値は、シリアル経由で送信される前にバッファに保存されるようになりました。現在、55のADCデータポイントが1期間を構成しています。analogRead時間が110 µsであることを考えると、各サイクルは6.05 msかかり、165 Hzの周波数を与えます!何が悪いのでしょうか?

ここに画像の説明を入力してください

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);
        }
    }
}

コードを投稿できますか?これはまったく正しくありません。「100msが経過すると仮定する」と言うとき、なぜそれを想定するのですか?
サイバーギボンズ2014年

@Cyber​​gibbonsプロットの値を生成するために使用されるコードを投稿しました。申し訳ありませんが、にかかった時間を測定したところ、analogRead()110マイクロ秒でした。質問を更新しました。
Nyxynyx 2014年

主電源に使用している負荷はどのくらいですか。白熱電球のようにかなり安定したものが理想的です。負荷が変動する可能性のあるラップトップスイッチモード電源のような複雑なものがある場合、複雑な結果が予想される場合があります。
Salix alba

1
ループの大部分の時間は、9600bpsでシリアルを送信するのに費やされます。シフトするのは960文字/秒のみです。つまり、各読み取りには4ミリ秒かかります。
サイバーギボンズ2014年

@Salixalba負荷は、スイッチング電源を備えたデスクトップコンピュータです。ヒーターなど別の負荷を測定してみます。
Nyxynyx 2014年

回答:


5

測定に関しては、ループ内のSerial.println()の最初のセットは完全に無視します。このタイミングは信頼できません。

バッファーにキャプチャした2番目のデータセットは正しいように見えますが、周波数推定/タイミングが間違っている可能性があります。ループの繰り返しごとにデジタル出力を反転させます。マルチメータでその周波数を測定でき、ADCサンプルレートはその値の2倍になります。

非常に一般的な電流波形であるPCまたはラップトップの電源の場合。

効果的な力率補正がなければ、以下に示す現在の信号は非常に典型的です(ソース:http : //www.nlvocables.com/blog/?p=300

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

RMS値を計算する必要があり、信号をフィルタリングするのが賢明です。

これは、Arduino Yunベースの電力モニターをクラウドサポート/ TembooおよびGoogleドライブで構築およびコーディングする方法について書いた指示書です。それはあなたの助けになるはずです。


ありがとうございました!使用したCTは-1Vから1Vを出力します。10ビットADCを利用するには、オペアンプを使用してSCT出力を2.5倍に増幅しますか?または、AREFを2Vに設定し、CT信号に1Vのバイアスをかける
Nyxynyx

いいえ、増幅やArefの変更は行いませんでした。
akellyirl 2014年

どうすればこのグラフプロットを取得できますか?どのソフトウェアを使用していますか?
Zgrknr 2014

0

抵抗負荷を測定している場合、選択した負担抵抗が間違っていると思います。ebay(SCT-013-xxx)には、負荷抵抗を備えたバージョンと備えていないバージョンがある安価なCTがいくつかあります。ただし、データシートを読む必要があります。SCT-013-000では、100Aの負荷で1Vを出力するために20Rの抵抗が必要です。この抵抗が間違っていると、より大きな電流を測定すると、波形が大きく歪む可能性があります(提供したものと同様)。負担抵抗値が低いほど歪みが大きくなりますが、CTの場合はそうではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.