想让小车知道有没有卡住、想给设备加个过流保护,测电流往往是第一件要做的事。ACS712是个很便宜的霍尔电流传感器模块,它不用靠得很近就能感应流经导线的电流大小,把电流转成电压再送给Arduino模拟口就能读。这篇把它的原理、接线和量程选择一次讲清楚。
ACS712是怎么把电流变成电压的
ACS712内部有个霍尔效应传感器,靠近芯片的地方有一条导电通路。电流从1、2脚进,3、4脚出,流过时会产生磁场,磁场越强,霍尔片感应出的电压越大。模块把这份电压放大后从OUT脚输出,外部再做个比例换算就能得到电流。它不带隔离,所以测量时得老老实实把模块串联进被测电路里。

模块一共就三根线:VCC接5V(最高能到8V)、GND接地、OUT是输出接模拟脚A0。测量的时候,把待测电流的回路从模块的螺纹端子串进去,就像串电流表一样;别拿它去测已经和别的负载并到一起的电路,那样读出来全是零。
ACS712怎么接线到Arduino
连接非常简单,VCC接Arduino的5V,GND接GND,OUT接到A0模拟输入。接好之后先用串口监视器看一眼,没电流时OUT应该是2.5V左右(也就是5V的一半),这个值就是零点,后面算电流要拿它当基准。

5A、20A、30A怎么选
ACS712按量程分三档,决定灵敏度:5A版是185mV/A,20A版是100mV/A,30A版是66mV/A。选的时候宁可留余量也别用太小量程去测大电流,实测超过量程读数会失真甚至损坏。比如测个遥控小车的电机堵转,选5A版最合适,读数也最细。
测不准的两个坑
第一个坑是零点漂移,Arduino的5V不一定真是5.0V,可能偏到5.12V,那没电流时OUT也不一定是2.5V。最稳妥的办法是上电后先读一次空载值当offset,在代码里减掉,读数就准了。第二个坑是采样抖动,电机电流本来就在跳,建议多次采样取平均,显示才稳定。把这三件事做对,一个靠谱的电流监测就立起来了。


量程别选小了,我就是拿小量程去测大电机堵转,读数直接飞
零点漂移那个坑太真实,先读一次空载当offset就稳了
测电流得串联进回路,我一开始并到线上读数全是零