找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3181|回复: 16
收起左侧

使用单片机ACS712芯片测电流AD值一直跳变?

[复制链接]
ID:887186 发表于 2022-6-30 19:29 | 显示全部楼层 |阅读模式
有一个负载需要监控电流
精度需要精确到0.1MA-0.01MA的程度
使用ACS712试一试,感觉是没问题的
至少在用万用表测的时候没有问题
然后使用STC8 AD采集
发现AD值一直在波动,波动幅度还很大
并了一个104电容效果不大
软件上技术欠佳,也不知道该怎么滤波比较好。
电流实际情况在0.16ma的时候
测出来的数据反而是在0.00 0.03 0.12 0.20这四个数之间跳来跳去
电路图和单片机代码如下
32CC33A6B52BCCAE4755A1A340F18838.png

单片机源程序如下:
  1. #include<STC8.H>
  2. #include "LCDINT.h"
  3. #include "LCD.h"
  4. #include "PIC.h"
  5. #include "intrins.h"
  6.         float t;
  7.   float p;
  8.   float u;



  9. #define ADCTIM  (*(unsigned char volatile xdata *)0xfea8)

  10. int main(void)
  11. {
  12.     P0M0 = 0x00;
  13.     P0M1 = 0x00;
  14.     P2M0 = 0x00;
  15.     P2M1 = 0x00;
  16.     P3M0 = 0x00;
  17.     P3M1 = 0x00;
  18.     P1M0 = 0x00;                                //设置P1.0为ADC口
  19.     P1M1 = 0x01;
  20.                 ADCCFG = 0x0f;                              //设置ADC时钟为系统时钟/2/16
  21.     P_SW2 |= 0x80;
  22.     ADCTIM = 0x3f;                              //设置ADC内部时序
  23.     P_SW2 &= 0x7f;
  24.           ADC_CONTR = 0x80;                           //使能ADC模块
  25.         LCD_Init();//LCD初始化
  26.         LCD_Fill(0,0,LCD_W,LCD_H,BLACK);
  27.         while(1)
  28.         {
  29.         ADC_CONTR |= 0x40;                      //启动AD转换
  30.         _nop_();
  31.         _nop_();
  32.         while (!(ADC_CONTR & 0x20));            //查询ADC完成标志
  33.         ADC_CONTR &= ~0x20;                     //清完成标志
  34.         t = ADC_RES;                           //读取ADC结果
  35.         p=t/256*3300;
  36.                  if(p<=2475)
  37.                  {p=2475;}

  38.        u=(p-2475)/185;
  39.         _nop_();
  40.         _nop_();
  41.                 LCD_ShowChinese(60,70,"电子",WHITE ,BLACK,32,0);
  42.                 LCD_ShowString(32,100,"cccc",RED,BLACK,16,0);
  43.           LCD_ShowIntNum(120,100,p,4,RED,BLACK,16);
  44.                 LCD_ShowFloatNum1(90,130,u,4,RED,BLACK,16);
  45.                 LCD_ShowPicture(40,120,40,40,gImage_1);
  46.                         }
  47.                 }

复制代码



回复

使用道具 举报

ID:883242 发表于 2022-6-30 21:13 | 显示全部楼层
去掉ACS712
两个电阻分压得到你想要的电压,并联104电容到这个电压上
把这个电压连接到单片机
观察是否还有跳变。

单片机本身是个大规模数字电路,是模拟信号的强干扰源,内部集成的ADC有跳变是正常的,能稳定才奇怪了。
回复

使用道具 举报

ID:401564 发表于 2022-6-30 23:17 | 显示全部楼层
这个IC内部的取样电阻是1.2 mΩ
你用来测量0.01mA的电流,你计算过这个电流在在1.2 mΩ 上能有多少压降吗?
5A的时候,这个芯片的输出电压是185mV,那0.1mA的时候,输出会是多少呢?
我感觉你单片机ADC结果跳动的数据只是外部的一点干扰而已,跟电流一点关系都没有
你可以试一下测量一个300mA或者1A的电流,验证一下程序
回复

使用道具 举报

ID:883242 发表于 2022-6-30 23:24 | 显示全部楼层
Y_G_G 发表于 2022-6-30 23:17
这个IC内部的取样电阻是1.2 mΩ
你用来测量0.01mA的电流,你计算过这个电流在在1.2 mΩ 上能有多少压降吗? ...

说话要严禁,霍尔传感器哪来的取样电阻,只要是导线就有电阻,1.2 mΩ只是导线电阻而已。
回复

使用道具 举报

ID:401564 发表于 2022-6-30 23:30 | 显示全部楼层
Hephaestus 发表于 2022-6-30 23:24
说话要严禁,霍尔传感器哪来的取样电阻,只要是导线就有电阻,1.2 mΩ只是导线电阻而已。

好的,你是对的
回复

使用道具 举报

ID:401564 发表于 2022-6-30 23:37 | 显示全部楼层
因为我不会英文,所以,以为这个是内置取样电阻的采样芯片
但这原理是一样的
你看数据手册就可以计算出0.1mA能输出的电压有多少了
可以认为,acs712基本没有电压输出,单片机的ADC结果不过是ADC误差和基点一定干扰的结果而已,跟电流一点关系都没有
这个是acs712量程对应的输出电压
你参考一下
51hei截图20220630233354.png

回复

使用道具 举报

ID:887186 发表于 2022-7-1 09:39 | 显示全部楼层
Hephaestus 发表于 2022-6-30 21:13
去掉ACS712
两个电阻分压得到你想要的电压,并联104电容到这个电压上
把这个电压连接到单片机

你好,我试过了。如果用稳压源直接输入2.5V,他只会变化0.01V这样子。
但是用芯片的OUTPUT,就会波动的厉害
回复

使用道具 举报

ID:887186 发表于 2022-7-1 09:41 | 显示全部楼层
Y_G_G 发表于 2022-6-30 23:37
因为我不会英文,所以,以为这个是内置取样电阻的采样芯片
但这原理是一样的
你看数据手册就可以计算出0.1m ...

您的意思是,OUTPUT输出是没问题的,主要还是因为AD受到外部干扰了所以才跳动吗?
回复

使用道具 举报

ID:401564 发表于 2022-7-1 18:56 | 显示全部楼层
一夜暴富 发表于 2022-7-1 09:41
您的意思是,OUTPUT输出是没问题的,主要还是因为AD受到外部干扰了所以才跳动吗?

我的意思是ACS712不能检测到那么高精度的电流(OUTPUT输出是有问题的!!!!!!!!!)
单片机不能用ACS712检测到0.1mA的电流
你的单片机ADC出来的值只是ADC误差和干扰而已,跟电流压根就没有关系
你的理解,跟我说的,压根就是相反的!

如果是正负5A量程ACS712,那么,1A的输出电压就是185mV
0.1mA的输出就是185/10000=0.0185mV=18.5uV
你去看一下单片机的分辨率,你觉得还能测量到这么小的电流吗?
我不知道你"感觉没有问题"的依据是什么
回复

使用道具 举报

ID:329625 发表于 2022-7-1 19:26 | 显示全部楼层
硬件过程中的那一部分布线可能也会影响
回复

使用道具 举报

ID:213173 发表于 2022-7-1 20:21 | 显示全部楼层
STC8系列单片机的ADC最高12位,理论上只能检出最小1mV电压(但实际是做不到的)。ACS712流过0.1mA电流只能输出0.0185mV电压,远小于单片机ADC分辨率。根据手册,ACS712零电流输出电压=1/2VCC。楼主“测出来的数是在0.00 0.03 0.12 0.20这四个数之间跳来跳去”说明硬件选择和软件编写都存在问题。 无标题.jpg

ACS712.pdf (642.19 KB, 下载次数: 10)
回复

使用道具 举报

ID:887186 发表于 2022-7-4 19:00 | 显示全部楼层
Y_G_G 发表于 2022-7-1 18:56
我的意思是ACS712不能检测到那么高精度的电流(OUTPUT输出是有问题的!!!!!!!!!)
单片机不能用ACS712检测 ...

sorry!大哥,我说错了,是10ma的精度,不是0.1ma,怪我说错了。
10ma我试了下,精度还勉强可以接受,加了RC滤波后跳变也比较稳定
回复

使用道具 举报

ID:887186 发表于 2022-7-4 19:00 | 显示全部楼层
17337161031 发表于 2022-7-1 19:26
硬件过程中的那一部分布线可能也会影响

一般AD采集布线有什么原则需要遵循吗,大佬能否细说一下
回复

使用道具 举报

ID:887186 发表于 2022-7-4 19:01 | 显示全部楼层
wulin 发表于 2022-7-1 20:21
STC8系列单片机的ADC最高12位,理论上只能检出最小1mV电压(但实际是做不到的)。ACS712流过0.1mA电流只能 ...

感谢,那天是我口胡说错了。非常抱歉
让大佬费心查看资料了
其实我想说的是10ma左右的误差都是可以接受的
我看了下,大概有50ma左右的误差
还勉强可以靠软件中值中衡一下
回复

使用道具 举报

ID:883242 发表于 2022-7-4 19:26 | 显示全部楼层
一夜暴富 发表于 2022-7-4 19:01
感谢,那天是我口胡说错了。非常抱歉
让大佬费心查看资料了
其实我想说的是10ma左右的误差都是可以接受 ...

你要精度那么高还不如直接上采样电阻,如果需要隔离,那就单片机处理完毕后用串口光耦把数据传出来。
回复

使用道具 举报

ID:887186 发表于 2022-7-4 19:51 | 显示全部楼层
Hephaestus 发表于 2022-7-4 19:26
你要精度那么高还不如直接上采样电阻,如果需要隔离,那就单片机处理完毕后用串口光耦把数据传出来。

隔离用串口光耦可以详细说一下吗,有点不是很理解,感谢!
回复

使用道具 举报

ID:883242 发表于 2022-7-4 19:59 | 显示全部楼层
一夜暴富 发表于 2022-7-4 19:51
隔离用串口光耦可以详细说一下吗,有点不是很理解,感谢!

51hei图片20220704195834.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表