作为电子工程师,我们始终依靠仪表/仪器来测量和分析电路的工作情况。从简单的万用表到复杂的电能质量分析仪或DSO,一切都有其独特的应用。这些仪表中的大多数都很容易获得,可以根据要测量的参数及其精度来购买。但是有时我们可能会遇到需要建造自己的仪表的情况。假设您正在从事太阳能光伏项目,并且想要计算负载的功耗,在这种情况下,我们可以使用简单的微控制器平台(如Arduino)构建自己的功率计。
建造自己的仪表不仅可以降低测试成本,而且还为我们提供了简化测试过程的空间。就像使用Arduino构建的功率表一样,可以轻松地对其进行调整,以在串行监视器上监视结果,并在串行绘图仪上绘制图形,或者添加SD卡以预定的时间间隔自动记录电压,电流和功率值。听起来很有趣吧!?所以我们开始吧…
所需材料
- Arduino纳米
- LM358运算放大器
- 7805稳压器
- 16 * 2 LCD显示屏
- 0.22 ohm 2Watt分流电阻
- 10k微调锅
- 10k,20k,2.2k,1k电阻
- 0.1uF电容器
- 测试负荷
- 穿孔板或面包板
- 焊接套件(可选)
电路原理图
arduino功率计项目的完整电路图如下所示。
为了便于理解,arduino功率计电路分为两个单元。电路的上部是测量单元,电路的下部是计算和显示单元。对于不熟悉这种电路的人,请遵循标签。示例+ 5V是标签,这意味着与标签相连的所有引脚都应视为已连接在一起。通常使用标签使电路图看起来整洁。
该电路被设计为适合在0-24V之间工作的系统中,电流范围为0-1A,请牢记太阳能PV的规格。但是,一旦您了解了电路的工作原理,就可以轻松扩展范围。该电路的基本原理是测量负载两端的电压和流经负载的电流,以计算其消耗的功率。所有测量值将显示在16 * 2字母数字LCD中。
在下面的内容中,我们将电路分成小段,以便我们可以清楚地了解电路如何工作。
测量单位
测量单元由一个分压器组成,以帮助我们测量电压,并使用一个带同相运算放大器的闭合电阻器来帮助我们测量流经电路的电流。上述电路的分压器部分如下所示
这里的输入电压由Vcc表示,如前所述,我们正在为0V至24V的电压范围设计电路。但是像Arduino这样的微控制器无法测量如此高的电压值;它只能测量0-5V的电压。因此,我们必须将0-24V的电压范围映射(转换)为0-5V。通过使用如下所示的分压器电路,可以轻松完成此操作。电阻器10k和2.2k一起形成分压器电路。分压器的输出电压可以使用以下公式计算。用于确定电阻器值的方法相同,如果您要重新设计电路,则可以使用我们的在线计算器来计算电阻器的值。
Vout =(Vin×R2)/(R1 + R2)
映射的0-5V可以从标记为电压的中间部分获得。然后可以将此映射电压馈入Arduino Analog引脚。
接下来,我们必须测量通过负载的电流。众所周知,微控制器只能读取模拟电压,因此我们需要以某种方式将电流值转换为电压。只需在路径中添加一个电阻器(分流电阻器)即可完成,根据欧姆定律,该电阻器上的电压值将与流过它的电流成正比。该电压降的值将非常小,因此我们使用运算放大器对其进行放大。相同的电路如下所示
此处分流电阻器(SR1)的值为0.22欧姆。如前所述,我们正在为0-1A设计电路,因此基于欧姆定律,我们可以计算出该电阻两端的压降,当最大1A电流流经负载时,该压降约为0.2V。对于微控制器而言,此电压非常小,我们在同相放大器模式下使用运算放大器将电压从0.2V提高至更高水平,以供Arduino读取。
上图显示了非反相模式下的运算放大器。该放大器的增益设计为21,因此0.2 * 21 = 4.2V。下面给出了计算运算放大器增益的公式,如果您正在重新设计电路,也可以使用此在线增益计算器来获取电阻器的值。
增益= Vout / Vin = 1 +(Rf / Rin)
在本例中,Rf的值为20k,Rin的值为1k,吉安值为21。然后,将运放的放大电压提供给带有电阻1k和电容0.1uF的RC滤波器。过滤耦合的任何噪声。最终,电压被馈送到Arduino模拟引脚。
保留在测量单元中的最后一部分是稳压器部分。由于我们将提供可变的输入电压,因此我们需要一个稳定的+ 5V电压才能使Arduino和运算放大器工作。该稳压电压将由7805稳压器提供。在输出端增加一个电容器以滤除噪声。
计算和显示单元
在测量单元中,我们设计了将电压和电流参数转换为0-5V的电路,可将其输入到Arduino Analog引脚。现在,在电路的这一部分中,我们将这些电压信号连接到Arduino,还将16×2字母数字显示器连接到Arduino,以便我们可以查看结果。相同的电路如下所示
如您所见,电压引脚连接到模拟引脚A3,电流引脚连接到模拟引脚A4。LCD由7805的+ 5V供电,并连接至Arduino的数字引脚,以4位模式工作。我们还使用了连接到Con引脚的电位计(10k)来改变LCD的对比度。
编程Arduino
现在我们对硬件有了很好的了解,让我们打开Arduino并开始编程。该代码的目的是读取引脚A3和A4上的模拟电压并计算电压,电流和功率值,最后将其显示在LCD屏幕上。在页面末尾给出了执行此操作的完整程序,该程序可用于上述硬件。进一步将代码分为几个小片段并进行了解释。
作为所有程序的开始,请定义我们已使用的引脚。在项目中,A3和A4引脚分别用于测量电压和电流,数字引脚3、4、8、9、10和11用于将LCD与Arduino接口
int Read_Voltage = A3; int Read_Current = A4; const int rs = 3,en = 4,d4 = 8,d5 = 9,d6 = 10,d7 = 11;//提到LCD连接 LiquidCrystal lcd(rs,en,d4,d5,d6,d7)的引脚号;
我们还提供了一个名为液晶的头文件,以将LCD与Arduino接口。然后,在设置功能中,我们初始化LCD显示屏,并以“ Arduino Wattmeter”的形式显示介绍文字,并等待两秒钟,然后再将其清除。相同的代码如下所示。
void setup(){ lcd.begin(16,2); //初始化16 * 2 LCD lcd.print(“ Arduino Wattmeter”); //简介消息行1 lcd.setCursor(0,1); lcd.print(“-Circuitdigest”); // Intro Message line 2 delay(2000); lcd.clear(); }
在主回路功能内部,我们使用模拟读取功能从引脚A3和A4读取电压值。我们知道Arduino ADC从0-1203输出的值,因为它具有10位ADC。然后必须将该值转换为0-5V,可以通过乘以(5/1023)来完成。然后在硬件的前面,我们将0-24V的实际电压值映射到0-5V,将0-1A的电流实际值映射到0-5V。因此,现在我们必须使用乘数将这些值恢复为实际值。这可以通过将其乘以一个乘数来完成。可以通过硬件部分中提供的公式从理论上计算乘数的值,或者如果您有一组已知的电压和电流值,则可以实际进行计算。我遵循了后一种选择,因为它倾向于实时更精确。因此,乘数的值是6.46和0.239。因此,代码如下所示
float Voltage_Value = AnalogRead(Read_Voltage); float Current_Value = AnalogRead(Read_Current); 电压值=电压值*(5.0 / 1023.0)* 6.46; Current_Value =当前值*(5.0 / 1023.0)* 0.239;
如何更精确地测量?
以上计算实际电压和电流值的方法可以正常工作。但是有一个缺点,那就是测量的ADC电压和实际电压之间的关系不是线性的,因此单个乘法器将不会给出非常准确的结果,电流也是如此。
因此,为了提高精度,我们可以使用一组已知的值来绘制一组具有实际值的ADC值与实际值,然后使用该数据绘制图形并使用线性回归方法得出乘子方程。您可以参考我使用类似方法的Arduino dB仪表。
最后,一旦我们计算了通过负载的实际电压和实际电流的值,就可以使用公式(P = V * I)计算功率。然后,我们使用以下代码在LCD显示屏上显示所有三个值。
lcd.setCursor(0,0); lcd.print(“ V =”); lcd.print(Voltage_Value); lcd.print(“”); lcd.print(“ I =”); lcd.print(Current_Value); 浮点Power_Value = Voltage_Value * Current_Value; lcd.setCursor(0,1); lcd.print(“ Power =”); lcd.print(Power_Value);
工作与测试
出于教程的考虑,我使用一块电路板来焊接电路中所示的所有组件。我使用Phoenix螺丝端子连接负载,并使用普通的DC桶式插孔连接电源。Arduino Nano板和LCD安装在Female Bergstik上,以便以后需要时可以重复使用。
准备好硬件后,将Arduino代码上传到Nano板上。调节微调电位器以控制LCD的对比度,直到看到清晰的介绍文字。要测试该板,请将负载连接至螺丝端子连接器,并将源连接至Barrel插孔。为了使该项目正常工作,源电压应高于6V,因为Arduino需要+ 5V才能运行。如果一切正常,您应该在LCD的第一行中看到负载两端的电压值和通过它的电流,并在LCD的第二行中看到计算出的功率,如下所示。
构建对象的有趣之处在于对其进行测试,以检查其能否正常工作。为此,我使用了12V汽车指示器泡作为负载,并使用RPS作为源。由于RPS本身可以测量和显示电流和电压值,因此我们很容易交叉检查电路的准确性和性能。是的,我还使用我的RPS来校准乘数,以便接近准确的值。
可以在本页末尾的视频中找到完整的工作。希望您了解电路和程序并学到了有用的东西。如果您有任何问题要解决,请在下面的评论部分中发布,或在我们的论坛上撰写以获得更多技术帮助。
这个基于Arduino的Wattmeter项目具有许多其他升级,可以添加这些升级以提高自动数据记录,绘制图表,通知过压或过流情况等的性能。