搜索
bottom↓
回复: 8

关于AD7616采集后读回来数据不准(有偏移)的问题,求解决

[复制链接]

出0入0汤圆

发表于 2017-6-7 12:20:58 | 显示全部楼层 |阅读模式
本帖最后由 linux-0405209 于 2017-6-7 12:31 编辑

(若发的板块不对,请告知修改)

环境: STM32F407   SPI3   AD7616

程序配置如下:
// AD7616 Reg addr
#define AD7616_CONFIG_REG   0x02
#define AD7616_CHANLE_REG   0x03
#define AD7616_PUINA1_REG   0x04
#define AD7616_PUINA2_REG   0x05
#define AD7616_PUINB1_REG   0x06
#define AD7616_PUINB2_REG   0x07
#define AD7616_STATUS_REG   0x08
#define AD7616_STACKx_REG(n)    (0x20+n*0x01)


u16 parame[32] = {
       0x88, 0x99, 0xBB, 0x00, 0x133, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};


// Init the range register, which has the register address = 0x04, 0x05, 0x06, 0x07
// set +/-10V for all channels
chanle = 0x00FF; //range:±10V
for(chanle = 0; chanle < 4; chanle++){
       writeAD7616(AD7616_PUINA1_REG+chanle, chanle); //write ad7616 reg
       dd1 = readAD7616(AD7616_PUINA1_REG+chanle); //read ad7616 reg, return 16bit data
       while(dd1 != chanle){
            writeAD7616(AD7616_PUINA1_REG+chanle, chanle);
            dd1 = readAD7616(AD7616_PUINA1_REG+chanle);
       }
}


// Init Sequencer
// Set the sequencer as Vcc->ALDO->self testing->0->3
for(chanle = 0; chanle < 32; chanle++){
       writeAD7616(AD7616_STACKx_REG(chanle), parame[chanle]);
       dd1 = readAD7616(AD7616_STACKx_REG(chanle));
       while(dd1 != parame[chanle]){
            writeAD7616(AD7616_STACKx_REG(chanle), parame[chanle]);
            dd1 = readAD7616(AD7616_STACKx_REG(chanle));
       }
}


// Init the configuration register, which has the register address = 0x02
// bit 7 - self error dection, '1' error, '0' no error
// bit 6 - set '1' to active the burst mode, set '0' to disable
// bit 5 - set '1' to active the auto sequencer, set '0' to disable
// bit 4~2 - "000" no OS; "001" OS by 2, "010" OS by 4, ... "111" OS by 128
// bit 1 - set '1' to output the status word after conversion data, set '0' to disable
// bit 0 - set '1' to output the CRC word after conversion/status data, set '0' to disable     
chanle = 0x007E;
writeAD7616(AD7616_CONFIG_REG, chanle);
dd1 = readAD7616(AD7616_CONFIG_REG);
while(dd1 != chanle){
       writeAD7616(AD7616_CONFIG_REG, chanle);
       dd1 = readAD7616(AD7616_CONFIG_REG);
}

以上的配置在我的程序中读写都能正确显示;

以下为采集回来的数据显示:


以上为串口终端显示的内容

> chanle[00]: 3944 ----> 4.473877        // 此处为Acc数据  Acc万用表量得为4.92V               
> chanle[01]: 3D9B ----> 4.812927        // 此处为Acc数据               
> chanle[02]: CC0C ----> -4.058838        // 此处为ALDO数据        ALDO应该为1.8V,在手册上写着       
> chanle[03]: CA79 ----> -4.181824        // 此处为ALDO数据       
> chanle[04]: AAAA ----> -6.666870        // 此处为自测通道A数据        在手册上写着固定返回AAAA       
> chanle[05]: 5555 ----> 6.666565        // 此处为自测通道B数据        在手册上写着固定返回5555
> chanle[06]: 1D5D ----> 2.294006        // 此处为自测通道A0数据        次通道接入一个直流4.1V左右       
> chanle[07]: E8CD ----> -1.812439        // 此处为自测通道B0数据        没接入       
> chanle[08]: E8C7 ----> -1.814270        // 此处为自测通道A3数据        没接入       
> chanle[09]: E8CC ----> -1.812744        // 此处为自测通道B3数据        没接入       
> chanle[10]: 3327 ----> 3.996277        // 此处为状态寄存器的数据       
从上面数据可见:
返回来的数据 通道A0 B0 A3 B3都有一个1.8V左右的偏差;
但读回来的自测通道和状态寄存器的值是准确的;
Acc的数值就有点偏;
ALDO是错的比较离谱了;

各位有谁调试过AD7616的给点提示,这问题纠结几天了,还没解决,在这谢谢各位。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2017-6-14 15:42:20 | 显示全部楼层
1. 可以把AD7606模拟输入端的调理电路原理图截图看一下吗 ? 在AINx和AINxGND输入引脚前,需要用相同的电阻,以避免额外的偏置电压和增益误差。
2. 两个自检通道AVCC, ALDO在采样率小于250ksps时比较准。这两个通道的传输函数请参考最新AD7616器件手册中的计算公式,公式的VREF = 4.096V.

https://ezchina.analog.com/message/47274

出0入0汤圆

 楼主| 发表于 2017-6-20 16:24:21 | 显示全部楼层
程科 发表于 2017-6-14 15:42
1. 可以把AD7606模拟输入端的调理电路原理图截图看一下吗 ? 在AINx和AINxGND输入引脚前,需要用相同的电阻 ...

谢谢你的回复,上面链接的帖子也是我发的...
现在问题还没解决...

出0入0汤圆

发表于 2017-12-3 10:27:22 | 显示全部楼层
linux-0405209 发表于 2017-6-20 16:24
谢谢你的回复,上面链接的帖子也是我发的...
现在问题还没解决...

楼主,请问 问题解决了吗,我准备用这个芯片

出0入0汤圆

 楼主| 发表于 2017-12-18 15:57:37 | 显示全部楼层
粤H广宁 发表于 2017-12-3 10:27
楼主,请问 问题解决了吗,我准备用这个芯片

还没,现在忙其他项目,不知道你是否出现我的那个问题?
如果出现了,请问你解决了没?解决方法是什么呢?

出0入0汤圆

发表于 2017-12-23 15:55:36 | 显示全部楼层
linux-0405209 发表于 2017-12-18 15:57
还没,现在忙其他项目,不知道你是否出现我的那个问题?
如果出现了,请问你解决了没?解决方法是什么呢 ...

你好!我现在 暂时还是7606 没改7616

出0入0汤圆

发表于 2018-5-22 15:41:21 | 显示全部楼层
你好,请教个AD7616 SPI通信的问题,图中的CONVST跳变沿 在读写寄存器时需要么

出0入0汤圆

发表于 2018-5-23 01:06:34 | 显示全部楼层
AD7616对时序要求很严格,建议你把MCU的电路理一下。我们使用FPGA和AD7616通讯没有问题

出0入0汤圆

发表于 2018-7-10 15:26:14 来自手机 | 显示全部楼层
7616比较难调。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 23:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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