我目前工作的一個項目,在這裏我想衡量一個Arduino Uno在3相系統的電壓和電流。
這是一個小型學校項目,我已經在AC系統上學習了關於更高電壓安全的必要課程。我對微控制器也有一點點經驗,但我從未使用過ADC。
從Arduino Uno的模擬引腳讀取時出現問題。這似乎是模擬引腳混合,我認爲這稱爲重影。我一直在尋找互聯網尋找這個問題的一些答案,但提出的解決方案並不適合我。我試圖做一個虛擬測量,並且在測量之間做一個小的時間延遲,但是因爲它關於功率監視時間是至關重要的。我需要至少20個讀數需要在20ms內完成
要測試代碼,我使用了兩個函數發生器。這甚至可能或允許?最好是至少有一個電阻之間,也許一個電容來消除噪音?
在將電壓/電流轉換爲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);
}