打印

单片机ADC检测电压怎样校准(电压标定)

[复制链接]
10445|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
abc痕迹|  楼主 | 2022-2-16 21:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问下,各位老大,单片机用ADC去检测电压,由于精度问题,怎样做电压校准。比如,检测一个锂电池的电压满电是12V电量4个LED,11.75V点亮3个LED,11.35V点亮2个LED,10.65V点亮1个LED,9.6V判断为低电压自动关断。检测精度为+/-0.01V。怎样去校准这几个电压点,以51单片机为例。
谢谢!!!

使用特权

评论回复
沙发
jjjyufan| | 2022-2-17 08:46 | 只看该作者
用颗431 做颗参考电压 进AD
根据你的MCU AD口最高输入电压,
比如 ref 2.5V 计算等于外部采样15V
然后你采样口 根据参考电压 计算当前采到的电压,

使用特权

评论回复
板凳
Latin_newday| | 2022-2-17 11:36 | 只看该作者
如果仅仅只有这4个点的话,可以直接连个精准的DC source校准,将这4个电压接入,然后读AD,存入EEPROM,实际使用读出校准值与当前AD判断比较就可以了。
否则的话,就同理分段取几个点校准,然后按照线性计算了。

使用特权

评论回复
地板
lrhsx33| | 2022-2-17 14:15 | 只看该作者
一般单片机做不到+/-0.01V
误差主要来自参考电压,电阻分压。

使用特权

评论回复
5
bbc960| | 2022-2-17 14:39 | 只看该作者

单片机ADC检测电压怎样校准(电压标定)

0.01V步进,12V电压,也就是1200份,需要11位的AD理想情况才能达到,普通单片机AD也就12位,所以很难达到,即使上各种较准都没有用,除非用带E的低速AD,16位或24位AD的单片机,要做到0.01V步进,可以用运放把电压平移下来,反正实际需要测量的是9.6-12V,也就是用运放把电压变成0(9)-3(12)V,

使用特权

评论回复
6
fengfengic| | 2022-2-17 18:53 | 只看该作者
哪款单片机,单片机自己AD不稳的话,校准也不好用。

使用特权

评论回复
7
fengfengic| | 2022-2-17 18:54 | 只看该作者
温漂也是需要考虑的因素。

使用特权

评论回复
8
abc痕迹|  楼主 | 2022-2-17 19:14 | 只看该作者
Latin_newday 发表于 2022-2-17 11:36
如果仅仅只有这4个点的话,可以直接连个精准的DC source校准,将这4个电压接入,然后读AD,存入EEPROM,实 ...

好像是你说的这种方法,我看公司的软件工程师好像是这样的,首次下载好软件后,用精准的稳压源,调好电压点,触发一下轻触按键就校准好一个电压点了,再调到其他电压点,再按一下轻触按键。不过部知道怎样写代码!

使用特权

评论回复
9
abc痕迹|  楼主 | 2022-2-17 19:15 | 只看该作者
fengfengic 发表于 2022-2-17 18:53
哪款单片机,单片机自己AD不稳的话,校准也不好用。

只校准几个电压点。

使用特权

评论回复
10
rankey| | 2022-2-17 19:43 | 只看该作者
外接精准输入11.75V ,11.35V ,10.65V ,9.6V.  用单片机的ADC功能读取这4档电压下的AD值,通过去头去尾,冒泡排序,取中间值的算法。得到这4档电压对应的AD值,
    这些稳定的AD值,通过Uart打印出来,也可以通过显示屏输出。反正需要人眼看到并想办法保存这些数据。   
     这AD值存入EEPROM或直接在Code区做表,以备查询。
     这些工作技巧,需要有一定的敲代码的功力才能完成。其实也不难,会者不难

使用特权

评论回复
11
abc痕迹|  楼主 | 2022-2-17 21:15 | 只看该作者
rankey 发表于 2022-2-17 19:43
外接精准输入11.75V ,11.35V ,10.65V ,9.6V.  用单片机的ADC功能读取这4档电压下的AD值,通过去头去尾, ...

对的,就是用这种方法。但是没学过不会,哪里可以找类似的代码看看就好了。

使用特权

评论回复
12
linxi6414| | 2022-2-17 21:58 | 只看该作者
分段进行线性拟合,常用的方法是最小二乘法。

使用特权

评论回复
13
ayb_ice| | 2022-2-28 09:32 | 只看该作者

单片机ADC检测电压怎样校准(电压标定)

ADC都是很线性的,取两个点就可以了,两点拉一条直线,输入一个零点和一个合适的参考点,都保存起来,然后做下面的处理
假设
实际测量两个测量点
ADC_CAL_0 = 10,        //0点
ADC_CAL_1 = 900,        //1点
理论两个点是
ADC_STD_0 = 0,        //0点
ADC_STD_1 = 1000,        //1点

现在实测一个ADC是800,经过以下转换
x = 800;
y = (x-ADC_CAL_0)*(ADC_STD_1 /ADC_CAL_1 );
这只是说明原理
实际就是类似于以前运放的调零与增益调整,

使用特权

评论回复
14
伏尔加的鱼| | 2022-3-6 10:19 | 只看该作者

单片机ADC检测电压怎样校准(电压标定)

ADC的分辨率是多少  如果内置ADC分辨率不足就用过采样提高分辨率  一般ADC线性度还可以就两点标定   若是要求高就分段多点标定

使用特权

评论回复
15
yonghuixi| | 2022-3-6 22:03 | 只看该作者
测几个点,电压和ad值对应起来,用matlab做个拟合,搞出个公式来,直接用就行了

使用特权

评论回复
16
艾伦183| | 2022-5-31 17:59 | 只看该作者

单片机ADC检测电压怎样校准(电压标定)

这里有一个参考非常详细,你看可参考以下https://blog.csdn.net/ZCShouCSDN/article/details/85158025?locationNum=3&fps=1

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

44

帖子

0

粉丝