こんにちは電力監視
。
これは小規模の学校プロジェクトであり、高電圧付近での安全性を知るために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);
}