首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Arduino Uno的三相系统功率监测

基于Arduino Uno的三相系统功率监测
EN

Stack Overflow用户
提问于 2016-04-24 11:46:32
回答 1查看 634关注 0票数 0

Hello

我目前正在工作的一个项目,在那里我想测量的电压和电流在一个三相系统与Arduino Uno。

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

当我从Arduino Uno的模拟引脚上阅读时,我遇到了问题。似乎模拟引脚是混合的,我相信这就是所谓的鬼影。我一直在网上搜索这个问题的一些答案,但建议的解决方案对我无效。我试着做一个虚拟的测量,并且在测量之间造成一个小的时间延迟,但是因为它是关于功率监测的,所以定时是非常重要的。我需要至少20个读数,需要在20毫秒内完成。

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

在电路中,当电压/电流转换为0V-5V时,可以做些什么来防止这种幽灵效应吗?我使用电压互感器和霍尔效应传感器作为电流传感器.这两种电路都需要偏移。

--这是进行测量的代码.

代码语言:javascript
复制
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); 
}
EN

回答 1

Stack Overflow用户

发布于 2016-06-22 17:22:02

增加电容器可以降低这个问题。试着做以下工作:

电路上没有电流或张力,所以arduino应该测量0值。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36822665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档