打印
[技术讨论]

4-20mA输出校准问题

[复制链接]
1894|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
siliconnect|  楼主 | 2023-6-17 14:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的12位 spi DAC 芯片, 接LM358A做的4-20mA多通道输出

DAC Vref用的4.096V的 外部参考源电源


但DAC输出8个通道  总会有点偏差,已于手工校准最低,最高位
比如通道1   814对应4mA  4037对应20mA
比如通道2   808对应4mA  4032对应20mA
比如通道3   805对应4mA  4024对应20mA

那这种不同的CH1(814~4037) CH2(808~4032) CH3( 805~4024)
怎么统一转换DAC要求的0-4095的范围?

直接输出不进行比例算法修正好像不行,因为CH1  CH2 CH3 数值范围宽度不一样。

导致一个温度比如23.5°C的 计算后得到DAC值给DAC芯片输出的电流,实际显示表可能24.3°C

使用特权

评论回复
沙发
zchong| | 2023-6-17 15:18 | 只看该作者
如果线性度没有问题,不就是求y=kx+b的k和b吗?已知直线上的2点坐标,k和b就能求出来了。没太明白你的问题在哪里?

使用特权

评论回复
板凳
siliconnect|  楼主 | 2023-6-17 17:18 | 只看该作者
本帖最后由 siliconnect 于 2023-6-17 17:26 编辑

理论 819~4095 对应4~20mA  格子3276个

实际通道1校准得到 814~4037 对应4~20mA  格子只有3223
实际通道2校准得到 808~4032 对应4~20mA  格子只有3224
实际通道3校准得到 805~4024 对应4~20mA  格子只有3219

举例  通道1测得温度值123.5f
设定dac_Tmin=-40.0f
设定dac_Tmax=200.0f
校准时,4mA=814 dac值   20mA=4037 dac值


dac_16_reg_fval  = 814 +  (4037-814)* (((123.5f- dac_Tmin) / (dac_Tmax - dac_Tmin)));
dac_16_reg_fval  = (dac_16_reg_fval + 0.5); //凑整型时四舍五入
dac_16_temp_ival1 = (uint16_t)dac_16_reg_fval; //浮点强制转成一个整型

dac_12bit_setPortectData(0, dac_16_temp_ival1);     //通道0, 输入理囵值式 (2047/4095)*20mA  = 10mA

这样肯定存在一个 总范围不一致的问题  与DAC芯片输入4095 对应不上,导致全部通道都会输出值偏大
直接y=kx+b 试了下 不符合

使用特权

评论回复
地板
gxs64| | 2023-6-17 17:31 | 只看该作者
分段呀,每段进行y=kx+b

使用特权

评论回复
5
siliconnect|  楼主 | 2023-6-17 18:06 | 只看该作者
本帖最后由 siliconnect 于 2023-6-17 18:08 编辑

凑了个数值 0.99256f;  手工凑慢慢看各段显示温度都几乎正常

dac_16_reg_fval * 0.99256f; 这个系数后,倒是正常了现在要解决,这个0.99256f 系列通过什么可以算出来

base_offset1=(float)((float)(4037-814)/(float)(4095- 819));  
这个算出来 0.98不对, 和0.99256f 差很多

使用特权

评论回复
6
zchong| | 2023-6-17 18:53 | 只看该作者
siliconnect 发表于 2023-6-17 17:18
理论 819~4095 对应4~20mA  格子3276个

实际通道1校准得到 814~4037 对应4~20mA  格子只有3223

按照你的描述应该是整个DA输出到电流的转换线性度不够,那就多测一些点,然后再去拟合这条直线

使用特权

评论回复
7
田舍郎| | 2023-6-17 21:27 | 只看该作者
参考电压都不一定准确

使用特权

评论回复
8
lvyunhua| | 2023-6-17 22:02 | 只看该作者
不知道楼主问题解决了吗 ?  是电源不稳定还是DAC输出线性度不好呢

使用特权

评论回复
9
zlf1208| | 2023-6-18 10:07 | 只看该作者
siliconnect 发表于 2023-6-17 18:06
凑了个数值 0.99256f;  手工凑慢慢看各段显示温度都几乎正常

dac_16_reg_fval * 0.99256f; 这个系数后,倒 ...

1. Vref的稳定如何?是否满足实际的需求?
2. 凑一个公式肯定是不对的,器件的离散性无法克服的。
3. 你现在得到的结果是软件给出的,硬件是否达到设计要求?这是需要重点关注的,产生这样的结果肯定是有硬件方面的原因的,包括器件选型,电路结构和PCB布线。

使用特权

评论回复
10
GlenX| | 2023-6-18 11:00 | 只看该作者
个人经验,部分358热稳定性不好,用在4-20输出的恒流源有点勉强,需要注意。
另外,进行内部数字标定会影响输出精度,所以最好采用双精度输出计算+硬件量程矫正,这样软件仅矫正零点,对精度影响最小。

使用特权

评论回复
11
siliconnect|  楼主 | 2023-6-18 13:01 | 只看该作者
本帖最后由 siliconnect 于 2023-6-18 13:48 编辑
田舍郎 发表于 2023-6-17 21:27
参考电压都不一定准确

ADR3540
4.096V  用fluke 789测是4.096v 准的

使用特权

评论回复
12
siliconnect|  楼主 | 2023-6-18 13:03 | 只看该作者
本帖最后由 siliconnect 于 2023-6-18 13:57 编辑
zlf1208 发表于 2023-6-18 10:07
1. Vref的稳定如何?是否满足实际的需求?
2. 凑一个公式肯定是不对的,器件的离散性无法克服的。
3. 你 ...

ADR3540
4.096V  用fluke 789测是4.096v 准的

CMB128S085    12位DAC 输出8个通道
vrefA直接接了VrefB  一颗Ref=4.096V

使用特权

评论回复
13
siliconnect|  楼主 | 2023-6-18 13:10 | 只看该作者
lvyunhua 发表于 2023-6-17 22:02
不知道楼主问题解决了吗 ?  是电源不稳定还是DAC输出线性度不好呢

未解决
这两天周六周日在想办法解决,
和DAC芯片应该没关系,还是自己算法问题
PCB布局也肯定有问题,但这应该通过校准算法都能修正
现在凑了个数据,0.99256* dac_val后,每个通道都完全满足测量精度
而且试了SMT的30片板子,全部测量值满足。 今天下午又贴了200片,周一再试试看
未解决的就是这个0.99256 应该通过什么算法 方法来自动得到,而不是像我这样手工去凑了个巧

使用特权

评论回复
14
oufuqiang| | 2023-6-18 23:19 | 只看该作者
在芯片DAC输出那里飞线,看看是外部通道问题还是DAC输出通道的问题。要不然怎么搞,先确定问题的范围。

比如,将一路线性较好的DAC输出信号飞到其他路,看看结果变了没,变了就说明外部电路的问题,没变就说明DAC的其他通道输出不一致了。

使用特权

评论回复
15
xzy568| | 2023-6-19 09:03 | 只看该作者
4-20mA不需要非常准的,有个0.5%就够了,如果要准确,让客户用485或者用Hart协议

使用特权

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

本版积分规则

27

主题

89

帖子

0

粉丝