【问题标题】:Power monitoring on a three phase system with Arduino Uno使用 Arduino Uno 对三相系统进行电源监控
【发布时间】:2016-04-24 11:46:32
【问题描述】:

你好

我目前正在做一个项目,我想用 Arduino Uno 测量三相系统中的电压和电流。

这是一个小型学校项目,我已经完成了交流系统的必要课程,以了解高电压周围的安全性。我对微控制器也有一点经验,但我从未使用过 ADC。

从 Arduino Uno 的模拟引脚读取时出现问题。似乎模拟引脚混合在一起,我认为这被称为重影。我一直在互联网上搜索这个问题的一些答案,但建议的解决方案对我不起作用。我尝试进行虚拟测量,并在测量之间设置一个小的时间延迟,但因为它与电源监控有关,所以时间很关键。我需要至少 20 个读数,需要在 20 毫秒内完成

为了测试代码,我使用了两个函数生成器。这甚至可能或允许吗?是否最好在两者之间至少有一个电阻,或者一个电容器来消除噪音?

在将电压/电流转换为 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); 
}

【问题讨论】:

    标签: arduino


    【解决方案1】:

    添加电容器可以降低问题。 尝试执行以下操作:

    电路上没有电流或张力,因此 arduino 应测量 0 值。

    运行一个读取值并将最大值和最小值打印到串行监视器的草图;您会看到值不会像预期的那样为零,这些是干扰。 尝试找到可以降低这些值但不要夸大其词的电容器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多