完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
环境: 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); } 以上的配置在我的程序中读写都能正确显示; 以下为采集回来的数据显示: 以上为串口终端显示的内容
从上面数据可见: 返回来的数据 通道A0 B0 A3 B3都有一个1.8V左右的偏差; 但读回来的自测通道和状态寄存器的值是准确的; Acc的数值就有点偏; ALDO是错的比较离谱了; 各位有谁调试过AD7616的给点提示,这问题纠结几天了,还没解决,在这谢谢各位。 |
|||
相关推荐
9个回答
|
|||
1. 可以把AD7606模拟输入端的调理电路原理图截图看一下吗 ? 在AINx和AINxGND输入引脚前,需要用相同的电阻,以避免额外的偏置电压和增益误差。
2. 两个自检通道AVCC, ALDO在采样率小于250ksps时比较准。这两个通道的传输函数请参考最新AD7616器件手册中的计算公式,公式的VREF = 4.096V. |
|
|
|
jdjfuwegs 发表于 2018-8-13 08:24 StevenX 你好,首先谢谢你的回复; 我 在AINx和AINxGND输入引脚前,是用了相同的电阻,电阻值都是0欧电阻; 我按照你提供的公式计算出来 Vcc 和 LDO 值也不对; 我还有一个疑问 你提到的Vref = 4.096V 是一个固定数值来的吗? |
|
|
|
回复楼上的。 Vref = 4.096V 可以查看datasheet里面有明确说明。 另外,我的其他通道凡是悬空的都是0V,这个和你的不一样。我的AD7616的每个通道正接端子的1,负接端子的2脚,没有和GND连接。 同时我也碰到类似问题。请教各位。。。一同讨论。程序每个人不一样。大概情况如下。 // Init the configuration register ad7616_spi_write_reg( AD7616_REG_CONFIG, AD7616_OS( AD7616_OSR_0 ) | AD7616_SEQEN | AD7616_BURSTEN ); // Init the range register: set +/-5V for all channels : 0xAAu ad7616_spi_write_reg( AD7616_REG_INPUT_RANGE_A1, 0xAAu ); ad7616_spi_write_reg( AD7616_REG_INPUT_RANGE_A2, 0xAAu ); ad7616_spi_write_reg( AD7616_REG_INPUT_RANGE_B1, 0xAAu ); ad7616_spi_write_reg( AD7616_REG_INPUT_RANGE_B2, 0xAAu ); // Init Sequencer ad7616_spi_write_reg( AD7616_REG_SEQUENCER_STACK(0), AD7616_BSEL( SEL_V0 ) | AD7616_ASEL( SEL_V0 ) ); // 1st event, A0, B0 ad7616_spi_write_reg( AD7616_REG_SEQUENCER_STACK(1), AD7616_BSEL( SEL_V1 ) | AD7616_ASEL( SEL_V1 ) ); // 2nd event, A1, B1 ad7616_spi_write_reg( AD7616_REG_SEQUENCER_STACK(2), AD7616_BSEL( SEL_V2 ) | AD7616_ASEL( SEL_V2 ) ); // 3rd event, A2, B2 ad7616_spi_write_reg( AD7616_REG_SEQUENCER_STACK(3), AD7616_BSEL( SEL_V3 ) | AD7616_ASEL( SEL_V3 ) ); // 4th event, A3, B3 ad7616_spi_write_reg( AD7616_REG_SEQUENCER_STACK(4), AD7616_BSEL( SEL_V4 ) | AD7616_ASEL( SEL_V4 ) ); // 5th event, A4, B4 ad7616_spi_write_reg( AD7616_REG_SEQUENCER_STACK(5), AD7616_BSEL( SEL_V5 ) | AD7616_ASEL( SEL_V5 ) ); // 6th event, A5, B5 ad7616_spi_write_reg( AD7616_REG_SEQUENCER_STACK(6), AD7616_BSEL( SEL_V6 ) | AD7616_ASEL( SEL_V6 ) ); // 7th event, A6, B6 ad7616_spi_write_reg( AD7616_REG_SEQUENCER_STACK(7), AD7616_BSEL( SEL_V7 ) | AD7616_ASEL( SEL_V7 ) ); // 8th event, A7, B7 ad7616_spi_write_reg( AD7616_REG_SEQUENCER_STACK(8), AD7616_BSEL( SEL_VCC ) | AD7616_ASEL( SEL_VCC ) ); ad7616_spi_write_reg( AD7616_REG_SEQUENCER_STACK(9), AD7616_BSEL( SEL_ALDO ) | AD7616_ASEL( SEL_ALDO ) ); /* set bit 8 = '1' to end sequencer here */ ad7616_spi_write_reg( AD7616_REG_SEQUENCER_STACK(10), AD7616_BSEL( SEL_SELF ) | AD7616_ASEL( SEL_SELF ) | AD7616_SSREN ); /* return to device to read mode to access conversion results */ ad7616_spi_write_reg( 0x0000u, 0x0000u ); 设置为输入范围正负5V。 然后读出VA VB所有通道 VCC VLDO VSELF。 SEL_SELF 是自测通道。AAAA和5555是没有问题。 SEL_VCC 的值约2.6V左右,按道理是5V。 SEL_ALDO 的值约-1.43V,也不对 (一个时间只接一个通道,其他悬空,我把16个通道换了一整遍。) 悬空的都是1mV,2mv左右。 任意一个通道连接到5V 或者 -5V,得到的值都是4.1V和-4.1V左右......相差约0.9V。 任意一个通道连接到3.3V 或者 -3.3V, 得到的值都是2.7和-2.7V左右......相差约0.6V。 另外我还做了如下试验: 1. 通道配置为正负10V。 测量出来5V还是4.1V。 3.3V还是2.7V 2. 我用另外一个AC220->DC5V的电源输出接到AD7616的输入。 测量出来5V还是4.2V左右 今天又做了一个实验。 我用一个电源供电,另外一个电源的+和- 接到输入的+和-。 用开关电源供5V电,转换结果是4.08V 换另外一个线性电源,转换结果是4.29V。 按照以往的经验,换这个供电最多影响精度,但是不会相差这么大。。。。 信号正和负都是直接连接到输入的正负,相当于是0欧姆的电阻吧。如上图 按道理来讲,datasheet看了好多遍,一些低级的错误应该不会有,要么出不来要么乱来,但是这看起来又很准确, 但是就是差得太远。不同电压相差幅度还不一样。。比较让人头疼。 求助各位!! |
|
|
|
shuijun556 发表于 2018-8-13 08:52 我又来了。。经过了一番折腾发现。 我用一个可调电源作为信号测试。 信号从0V到5V, 测量出来是从0到4.37V。 信号加到5.8V时,测量出来是5V。 整个测量过程还是线性的,就是偏差太大。 另外我实验了2种信号源。请看图。 给开发板供电用的手机充电器,和用线性供电比较并不影响实际效果,会有跳动,但是不在我们目前考虑范围内。。。。 |
|
|
|
楼主都已经解决这个问题了吗
|
|
|
|
|
|
|
|
上电后器件复位一次就好了
|
|
|
|
请问,用AD7616有没有什么主意事项的?我们做了一块用429读取的,上电初始化完了之后,busy信号正常几次,busy信号就一直为高了,不知道什么原因,能指点一下吗?
|
|
|
|
请问楼主解决问题了吗? 我的也有偏移
|
|
|
|
只有小组成员才能发言,加入小组>>
981 浏览 2 评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1378 浏览 2 评论
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1935 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4266 浏览 2 评论
9053 浏览 1 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1502浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1690浏览 2评论
982浏览 2评论
1664浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1379浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 07:46 , Processed in 0.895863 second(s), Total 94, Slave 78 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号