原创 用Arduino读取ACS712电流传感器的输出

2022-7-27 08:34 3052 9 9 分类: 测试测量 文集: 方案

电流传感器(Current Sensor)用途广泛,如电源、过流保护、马达控制等。本项目将通过Arduino开发板,演示如何用ACS712传感器模组进行电压读数。项目BOM如下:
AA电池       2
红色LED       1 
ACS712传感器模块    1 
电阻器            1  
Arduino开发板      1
引线        若干


ACS712电流传感器


ACS712是来自Allegro的线性电流传感器,内置精确低偏置的线性霍尔传感器电路,能输出与检测的交流或直流电流成比例的电压。ACS712具有低噪声,响应时间快(对应步进输入电流,输出上升时间为5μs),50千赫带宽,总输出误差最大为4%,高输出灵敏度(66~185mV/A),使用方便、性价比高、 绝缘电压高等特点,主要应用于电动机控制、载荷检测和管理、开关式电源和过电流故障保护等。

 


ACS712主要由靠近芯片表面的铜制的电流通路和精确的低偏置线性霍尔传感器电路等组成。被测电流流经的通路(引脚1和2,3和4之间的电路)的内电阻通常是1.2mΩ,具有较低的功耗。被测电流通路与传感器引脚(引脚5~8)的绝缘电压>2.1kVRMS,几乎是绝缘的。流经铜制电流通路的电流所产生的磁场,能够被片内的霍尔IC感应并将其转化为成比例的电压。通过将磁性信号尽量靠近霍尔传感器来实现器件精确度的最优化。 精确的成比例的输出电压由稳定斩波型低偏置BiCMOS 霍尔集成电路提供,该集成电路在出厂时已进行了精确的编程。 稳定斩波技术是一种新技术,它给片内的霍尔元器件和放大器提供最小的偏置电压,该技术几乎可以消除芯片由于温度所产生的输出漂移。

ACS712内含一个电阻RF(INT)和一个缓冲放大器,用户可以通过FITER引脚(第6脚)外接一个容CF与RF(INT)组成一个简单的外接RC低通滤波器,由于内部缓冲放大器能消除因芯片内部电阻和接口负载分压所造成的输出衰减,所以外接的RC低通滤波器不会影响信号的衰减,且可进一步降低输出噪音并改善低电流精确度。此外,ACS712的响应时间比一般的器件缩短了两倍以上,非常适合保护及高速应用。

ACS712采用小型SOIC8封装,单电源5V供电。引脚1和2、3和4均内置有保险,为待测电流的两个输入端,当检测直流电流时,1和2、3和4分别为待测电流的输入端和输出端。ACS712电流传感器芯片配备基本外围电路,就构成ACS712电流传感器模块,本项目使用的就是这个模组。

ACS712模块含有一个将输入电流转化为磁场的霍尔效应传感器,输入电流越大,磁场越强。当输入端没有电流时,OUT引脚的输出电压值为VCC一半。

ACS712模块只有三个引脚:VCC引脚可接收高达8V的输入电压,推荐值为5V;OUT引脚产生一个与输入端子的电流成正比的电压。其中,待测量电流插入螺纹端口。与连接电流表一样,电流传感器必须串联在电流中。


电路连接及代码


用传感器将电流转换为电压,有多种方法,ACS712也有三种版本,例如ACS712ELCTR-05B-T,标称电压为-5~5A,灵敏度为185mV/A。

ACS712和各种Arduino开发板的连接都很简单,VCC连接于Arduino开发板的5V引脚,GND与GND连接,OUT引脚连接于A0引脚。

 

 

首先,要从 (File > Examples > Basics) 上传AnalogReadSerial sketch 文件到Arduino。如果没有电流,使用的是10bit ADC时串口监视器的显示值为一半(512 -2.5V)。如下将来自传感器的电压值转换为电流读数,串口显示电流读数:

#define SAMPLES 10

float average_current;

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

void loop() {
 for(int i=0;i   // read the input on analog pin 0:
   int sensorValue = analogRead(A0);
   //convert to voltage
   float volt = sensorValue * 5;
   volt = volt / 1023;
   //convert to current
   float current = volt / 185;
   //convert to Amps
   current = current / 1000;
   average_current += current;
   delay(1); //1 millisecond delay for stability
 }
 average_current = average_current / SAMPLES;
 // print out the current to serial monitor
 Serial.print("Current: ");
 Serial.println(average_current);
 delay(100); //just a small delay
}


代码中SAMPLES取值为10。SAMPLES值越大,输出越清晰,但有可能降低Arduino的运行。

作者: 硬之城Allchips, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3975615.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条