2016-04-24 55 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值。

运行草图,读取值并将最大值和最小值输出到串行监视器;你会发现值不会像预期的那样为零,而是干扰。 尝试找到一个可以降低这些数值但不会引起异常的电容。