你好
我目前正在开展一个项目,我想用Arduino Uno测量三相系统中的电压和电流。
这是一个小型的学校项目,我已经在交流系统上有必要的课程来了解更高电压附近的安全性。我对微控制器也有一点经验,但我从未使用过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 :(得分:0)
添加电容可以降低问题。 尝试执行以下操作:
电路上没有电流或张力,因此arduino应测量0值。
运行一个草图,读取值并将最大值和最小值打印到串行监视器;你会看到值不会像预期的那样为零,那些是干扰。 试着找一个可以降低这些值的电容但不要放电。