将变化的电压读取到Arduino


8

我正在使用Arduino Nano电流互感器(CT),试图感应流过120 V 60 Hz线路的电流。

电路图

CT 0-1 V根据其规格输出。该输出偏置AREF/2= 2.5V。

在此处输入图片说明

analogRead 价值观

x轴表示ADC样本的索引号,而y轴表示ADC值(0-1024)。采样率约为9 kHz。峰间差异约为1026个样本。

在此处输入图片说明

您希望CT产生该波形吗?为什么有些区域的值是平坦的,而不是连续变化的?

此外,如果我们看一下曲线的曲线部分,为什么Arduino 交替读取上方512和下方的值512?它读取一个高于的值512,然后是低于的值512,然后是高于的值512,依此类推。

analogRead在我的设置中,测量所需的时间为110微秒,并且波形峰值之间有1026个样本。这意味着在1秒钟内将有大约9个峰值,尽管由于我们正在感测60 Hz线路,所以我预计会有60个峰值。你从中得到什么?电路中有一个电容器,C1这有什么关系吗?

这些AnalogRead值是否适合用于计算RMS电压,从而计算出流经电线的RMS电流?这样做的最终目的是在确定流过电线的RMS电流之后计算功率使用量。

用于获取绘图值的草图

void setup() {
    Serial.begin(9600);
}

void loop() {
   double sensorValue = analogRead(1);
   Serial.println(sensorValue)
}

analogRead凹凸区域中的实际数据点

487
534
487
535
488
537
484
536
487
538
486
536
484
540
484
539
485
540
483
540
484
541
481
539
481
540
484
540
480
543
484
539
481
540
484
541
486
542
485
538
485
538
488
535
489
534
491
530
491
529
493
531
492
526
498
526
499
524
499
520
503
518
502
518
507

模拟读数值图

现在,analogRead值在通过串行传输之前已存储在缓冲区中。现在有55个ADC数据点组成1个周期。考虑到模拟读取时间为110 µs,每个周期需要6.05 ms,因此我们的频率为165 Hz!可能出了什么问题?

在此处输入图片说明

void loop() {
    double sensorValue = analogRead(1);
    char buf[32];

    dtostrf(sensorValue, 8, 2, buf);
    value = buf;

    if (stop == 0) {
        if (i < 10000) {
            message += ',';
            message += value;
            i++;
        }
        else {
            stop = 1;
            Serial.println(message);
        }
    }
}

您可以发布代码吗?这看起来根本不对。当您说“假设经过100毫秒”时,为什么要假设呢?
Cyber​​gibbons 2014年

@Cyber​​gibbons发布用于生成图值的代码。抱歉,我刚刚测量了花费的时间analogRead(),发现它是110微秒。更新了问题。
Nyxynyx

您用于电源的负载是多少?理想情况下,您需要像白炽灯泡那样相当稳定的东西。如果您有复杂的东西,例如笔记本电脑的开关模式电源,其负载可能会变化,那么您可能会期望得到复杂的结果。
Salix alba 2014年

1
循环中的大部分时间将花费在发送9600bps的串行数据上。您将仅移位960 char / s,即每个读数需要4毫秒。
Cyber​​gibbons 2014年

@Salixalba负载是具有开关电源的台式计算机。我将尝试测量其他负载,例如加热器。
Nyxynyx

Answers:


5

关于您的测量,我将完全忽略循环中带有Seri​​al.println()的第一组数据。我认为这样做的时机不可靠。

您在缓冲区中捕获的第二组数据看起来正确,但是您的频率估算/时序可能不正确。我会在每次循环迭代时反转数字输出。您可以使用万用表测量频率,而ADC采样率将是该值的两倍。

对于PC或笔记本电脑电源,这是很常见的电流波形。

没有有效的功率因数校正,下面显示的电流信号将非常典型(来源:http : //www.nlvocables.com/blog/?p=300

http://www.nlvocables.com/blog/?p=300

您将需要计算RMS值,对信号进行滤波将是明智的。

这是我写的关于如何使用Cloud Support / Temboo和Google Drive构建和编码基于Arduino Yun的电力监控器的说明。它应该对您有所帮助。


谢谢!您使用的CT输出-1V至1V。要使用10位ADC,您会使用运算放大器将SCT输出放大2.5吗?或将您的AREF设置为2V,并以1V偏置CT信号
Nyxynyx 2014年

不,我没有放大或更改Aref。
akellyirl 2014年

你怎么能得到这个图?用什么软件?
Zgrknr 2014年

0

如果您正在测量阻性负载,我会说您选择的负载电阻器是错误的,在ebay上有一些便宜的CT(SCT-013-xxx),带有和不带有负载电阻的版本,这些价格合适但您必须阅读数据表。SCT-013-000需要20R电阻才能在100A负载下输出1V,如果此电阻不正确,则在测量较高电流(类似于您提供的电流)时,您会得到严重失真的波形,您可能会希望信号负载电阻值越低,失真越大,但CT情况并非如此。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.