2016-04-24 60 views
0

你好電源監控與Arduino的烏諾

我目前工作的一個項目,在這裏我想衡量一個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); 
} 

回答

0

添加電容器可以降低問題。 儘量做到以下幾點:

電路沒有電流或張力,所以arduino應該測量0值。

運行草圖,讀取值並將最大值和最小值輸出到串行監視器;你會發現值不會像預期的那樣爲零,而是干擾。 嘗試找到一個可以降低這些數值但不會引起異常的電容。