2016-04-24 15 views
0

こんにちは電力監視

これは小規模の学校プロジェクトであり、高電圧付近での安全性を知るためにACシステムに必要なコースを用意しました。私はマイクロコントローラで少し経験がありますが、ADCを使ったことはありません。

Arduino Unoのアナログピンから読み込むときに問題があります。アナログピンが混在しているように思えますが、これはゴーストと呼ばれています。私はこの問題に対するいくつかの答えをインターネットで検索してきましたが、提案された解決策は私のためには機能しませんでした。私はダミー測定を行い、測定間の時間遅延を小さくしようとしましたが、電力監視のタイミングが重要です。 20msで最低20回の読み取りが必要です

コードをテストするために、2つの関数発生器を使用しました。これは可能なの?ノイズを除去するために最低でも抵抗を、おそらくコンデンサには最低限の抵抗がありますか?

電圧/電流を0V~5Vに変換するときに回路に何かがありますが、このゴースト効果を防ぐにはどうすればよいですか? 私は、電圧のための電圧変換器と、電流のためのホール効果センサを使用しています。両方の回路にオフセットが必要です。

これは測定を行うコードです。

void measure(char pin_volt, char pin_curr, int *volt_rms, int *curr_rms, float *theta){ 
    int i; 
    long squared_v, squared_c, sum_squared_v = 0, sum_squared_c = 0, inst_v, inst_c, mean_squared_v, mean_squared_c; 
    unsigned long time_v, time_c; 
    for(i = 0; i < samples; i++){ 
    inst_v = analogRead(pin_volt) - volt_offset; 
    if(inst_v > -volt_varying && inst_v < volt_varying) { 
     time_v = micros(); 
    } 
    inst_c = analogRead(pin_curr) - curr_offset; 
    if(inst_c >= -curr_varying && inst_c <= curr_varying) { 
     time_c = micros(); 
    } 
    squared_v = inst_v * inst_v; 
    squared_c = inst_c * inst_c; 
    sum_squared_v += squared_v; 
    sum_squared_c += squared_c; 
    delayMicroseconds(80); 
    } 
    mean_squared_v = sum_squared_v/samples; 
    mean_squared_c = sum_squared_c/samples; 
    *volt_rms = sqrt(mean_squared_v); 
    *curr_rms = sqrt(mean_squared_c); 
    *theta = calculate_phase_difference(time_v,time_c); 
} 

答えて

0

コンデンサを追加すると問題が軽減されます。 次の操作を実行してください。

電流や張力が回路上にないため、arduinoは0の値を測定する必要があります。

値を読み取り、最大値と最小値をシリアルモニタに出力するスケッチを実行します。値が期待通りにゼロにならないことがわかります。これらの値は干渉です。 これらの値を下げる可能性があるが威力を発揮しないコンデンサを試してみてください。