在制造或调试任何电气系统时,测量电压和电流总是有帮助的。在这个项目中,我们将使用PIC16F877A单片机和电流传感器ACS712-5A制作自己的数字电流表。该项目可以测量0-30A范围内的交流和直流电流,精度为0.3A。只需稍加修改,您就可以使用该电路测量高达30A的电流。因此,让我们开始吧!!!
所需材料:
- PIC16F877A
- 7805稳压器
- ACS712电流传感器
- 16 * 2 LCD显示屏
- 接线盒和负载(仅供测试)
- 连接线
- 电容器类
- 面包板。
- 电源– 12V
ACS712电流传感器的工作原理:
在开始构建项目之前,对我们来说,了解ACS712电流传感器的工作非常重要,因为它是项目的关键组件。由于噪声以及不适当的隔离问题等,因此测量电流(尤其是交流电流)始终是一项艰巨的任务。但是,借助由Allegro设计的ACS712模块,事情变得非常容易。
该模块根据霍尔效应原理工作,该原理是由埃德温·霍尔博士发现的。根据他的原理,当将载流导体置于磁场中时,会在垂直于电流和磁场方向的边缘上产生电压。让我们不要太深入地了解这个概念,而是简单地说,我们使用霍尔传感器来测量载流导体周围的磁场。该测量将以毫伏为单位,我们称之为霍尔电压。测得的霍尔电压与流过导体的电流成正比。
使用ACS712电流传感器的主要优点是可以同时测量交流和直流电流,并且还可以在负载(交流/直流负载)与测量单元(微控制器部分)之间提供隔离。如图所示,模块上有三个引脚,分别是Vcc,Vout和Ground。
2针接线端子是载流线应穿过的地方。该模块在+ 5V电压下工作,因此Vcc应该由5V电压供电,并且地线应连接到系统的地线。Vout引脚的失调电压为2500mV,这意味着当没有电流流过电线时,输出电压将为2500mV;当电流为正时,电压将大于2500mV;当电流为负时,电压将小于2500mV。
我们将使用PIC微控制器的ADC模块读取模块的输出电压(Vout),当没有电流流过电线时,该输出电压将为512(2500mV)。当电流沿负方向流动时,该值将减小;当电流沿正方向流动时,该值将增大。下表将帮助您了解输出电压和ADC值如何根据流经电线的电流而变化。
这些值是根据ACS712数据表中给出的信息计算得出的。您还可以使用以下公式计算它们:
Vout电压(mV)=(ADC值/ 1023)* 5000通过导线的电流(A)=(Vout(mv)-2500)/ 185
现在,我们知道了ACS712传感器的工作原理以及对它的期望。让我们继续看电路图。
电路原理图:
下图显示了该数字电流表项目的完整电路图 。
完整的数字电流表电路在+ 5V上工作,该电压由7805稳压器调节。我们使用了16X2 LCD来显示电流值。电流传感器(Vout)的输出引脚连接到PIC的第7引脚,即AN4,以读取模拟电压。
下表还显示了PIC的引脚连接
序号 |
针号 |
引脚名称 |
连接到 |
1个 |
21 |
RD2 |
LCD的RS |
2 |
22 |
RD3 |
LCD的E |
3 |
27 |
RD4 |
LCD D4 |
4 |
28 |
RD5 |
LCD D5 |
5 |
29 |
RD6 |
LCD D6 |
6 |
30 |
RD7 |
LCD D7 |
7 |
7 |
AN4 |
当前塞斯诺Vout |
您可以在面包板上构建该数字电流表电路,也可以使用穿孔板。如果您一直在关注PIC教程,那么您也可以重用我们用于学习PIC微控制器的硬件。在这里,我们使用了 为通过PIC微控制器进行LED闪烁而构建的相同的性能 板,如下所示:
注: 构建该电路板不是强制性的,您可以简单地按照电路图并在面包板上构建电路,并使用任何转储器工具包将程序转储到PIC单片机中。
模拟:
这种电流计电路 也可以使用变形之前,实际上您的硬件进行模拟。分配本教程末尾给出的代码的十六进制文件,然后单击“播放”按钮。您应该能够注意到液晶显示屏上的电流。我已将灯泡用作交流负载,可以通过单击灯泡来改变流过它的电流来改变灯泡的内部电阻。
如上图所示,电流表显示流过灯泡的实际电流约为3.52 A,而LCD显示的电流约为3.6A。但是在实际情况下,我们可能会得到0.2A的误差。LCD上还会显示ADC值和电压(mV),以供您理解。
编程PIC单片机:
如前所述,完整的代码可以在本文结尾处找到。该代码通过注释行进行自我说明,仅涉及将LCD与PIC微控制器接口以及在PIC微控制器中使用ADC模块的概念,我们在以前的学习PIC微控制器的教程中已经介绍了这一概念。
从传感器读取的值将不准确,因为电流是交变的,并且还会受到噪声的影响。因此,我们读取ADC值20次并取平均值,以得到合适的电流值,如下代码所示。
我们使用了与上述相同的公式来计算电压和电流值。
for(int i = 0; i <20; i ++)//读取值20次{adc = 0; adc = ADC_Read(4); //读取ADC电压= adc * 4.8828; //如果(Voltage> = 2500)计算电压//如果电流为正Amps + =((Voltage-2500)/18.5); 否则if(Voltage <= 2500)//如果电流为负Amps + =((2500-Voltage)/18.5); }安培/ = 20;//平均读取20次的值
由于该项目还可以读取交流电流,因此电流也将为负和正。也就是说输出电压的值将高于和低于2500mV。因此,如下所示,我们更改了负电流和正电流的公式,以免得到负值。
if(Voltage> = 2500)//如果电流为正Amps + =((Voltage-2500)/18.5); 否则if(Voltage <= 2500)//如果电流为负Amps + =((2500-Voltage)/18.5);
使用30A电流传感器:
如果您需要测量大于5A的电流,则可以简单地购买ACS712-30A模块并以相同的方式进行连接,并通过用0.66替换18.5来更改下面的代码行,如下所示:
if(Voltage> = 2500)//如果电流为正Amps + =((Voltage-2500)/0.66); 否则if(Voltage <= 2500)//如果电流为负Amps + =((2500-Voltage)/0.66);
如果要测量低电流,请使用AVR单片机检查100mA电流表。
加工:
对PIC单片机进行编程并准备好硬件后,即可使用。只需给负载和PIC微控制器加电,您就应该能够看到流过LCD屏幕上显示的电线的电流。
注意: 如果您使用的是ASC7125A模块,请确保您的负载消耗的电流不超过5A,并使用更高规格的电线作为载流导体。
以下视频显示了基于PIC单片机的电流表项目的完整工作。希望您能使该项目正常工作并喜欢上它。如果您有任何疑问,可以将其写在下面的评论部分或发布在我们的论坛上。