完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用二片AD7683[size=10.5000pt]独立进行温度的测量,VDD供电由5V的LDO提供,参考电压由一片ADR02共同提供。IN-接地,IN+分别接测量电压。被测量电压理论上的范围是0到5V. [size=10.5000pt]测试时使用的恒定的电阻代替实际的ntc电阻,一个通道的电压是0.454V左右,另一个通道的电压是2.5V左右。 [size=10.5000pt]测量的结果大小是没有问题的,可以读出大致准确的电压值。 [size=10.5000pt]输出的数据精度是有问题的,表现出数据的位宽随被测电压的大小而自动变化。 [size=10.5000pt]具体过程是这样: [size=10.5000pt]用电阻0接ADC芯片0,电阻1接ADC芯片1。 0通道的电压是0.454左右,1通道的电压是2.5v左右 [size=10.5000pt]程序读出的数据0通道非常稳定,采样值在5956,5955,5954之间来回波动,分辨率可以达到1LSB,是有意义的16位数据。通道1的数据不够稳定,采样值在在32719,32655,32783之间来回波动,而且总是这几个数。这3个数相差正好是64==2^5,看起来就像ADC芯片变成了11位的AD。 [size=10.5000pt]拔掉电阻,把电阻0接到ADC芯片1,电阻1接到ADC芯片0,交换了二个通道的电压, ADC0去检测2.5V,ADC1去检测0.45V. [size=10.5000pt]同样的程序读出的数据结果也反了过来,ADC0的数据以64LSB的间隔波动,而ADC1的数据以1LSB的间隔波动。 [size=10.5000pt]至于在什么电压下数据的分辨率开始变化,以及会出现多大程度的变化,还没有进一步测试。 [size=10.5000pt]总体说来就是测量低电压比测量高电压输出数据的分辨率更高。 [size=10.5000pt] [size=10.5000pt] [size=10.5000pt]下面是ADC读数的驱动代码。 [size=10.0000pt]u16 [size=10.0000pt]ADC_ReadWord[size=10.0000pt]([size=10.0000pt]u8[size=10.0000pt] ch) [size=10.0000pt]{ [size=10.0000pt]u8[size=10.0000pt] clk_cnt,bit_cnt; [size=10.0000pt]u16[size=10.0000pt] dout_word=0; [size=10.0000pt]ADC_SpiRstAll(); [size=10.0000pt]ADC_CS(ch,CS_L); [size=10.0000pt]//拉低对应的片选线,开始一次转换 [size=10.0000pt]ADC_SpiDly(ADC_SPI_DLY); [size=10.0000pt]for[size=10.0000pt](clk_cnt=0;clk_cnt<5;clk_cnt++) [size=10.0000pt]{ [size=10.0000pt]ADC_CLK_H; [size=10.0000pt]ADC_SpiDly(ADC_SPI_DLY); [size=10.0000pt]ADC_CLK_L; [size=10.0000pt]ADC_SpiDly(ADC_SPI_DLY); [size=10.0000pt]} [size=10.0000pt]for[size=10.0000pt](bit_cnt=0;bit_cnt<16;bit_cnt++) [size=10.0000pt]//读取16bit的转换值 [size=10.0000pt]{ [size=10.0000pt]u8[size=10.0000pt] lvl = 0; [size=10.0000pt]ADC_CLK_H; [size=10.0000pt]ADC_SpiDly(ADC_SPI_DLY); [size=10.0000pt]ADC_CLK_L; [size=10.0000pt]ADC_SpiDly(ADC_SPI_DLY); [size=10.0000pt]//DOUT电平在下降沿读取 [size=10.0000pt]dout_word = dout_word << 1; [size=10.0000pt]//MSB在前 [size=10.0000pt]lvl = ADC_ReadBit(ch); [size=10.0000pt]if[size=10.0000pt](1 == lvl) [size=10.0000pt]{ [size=10.0000pt]dout_word |= 0x0001; [size=10.0000pt]} [size=10.0000pt]else [size=10.0000pt]if[size=10.0000pt](0 == lvl) [size=10.0000pt]{ [size=10.0000pt]dout_word &= 0xFFFE; [size=10.0000pt]} [size=10.0000pt]} [size=10.0000pt]ADC_SpiDly(ADC_SPI_DLY); [size=10.0000pt]ADC_CS(ch,CS_H); [size=10.0000pt]//拉对应高片选线,停止本次转换 [size=10.0000pt]return[size=10.0000pt](dout_word); [size=10.0000pt]} [size=10.0000pt]您能否帮忙看下是否是驱动代码的时序做错了。如果驱动没有问题的话,那是不是这个芯片需要一些额外的配置或者辅助的器件? |
|
相关推荐
3个回答
|
|
自己顶下,求前辈们指点
|
|
|
|
原来真有这样的隐藏属性,既然是设计成这样的,那就没办法了,也不知道是不是为了低功耗的方案, 看来只能换一种芯片了
|
|
|
|
请确认一下,您的每片 AD7683的REF引脚都有自己的10uF的储能电容吗?
|
|
|
|
只有小组成员才能发言,加入小组>>
975 浏览 2 评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1372 浏览 2 评论
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1933 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4263 浏览 2 评论
9053 浏览 1 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1492浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1689浏览 2评论
976浏览 2评论
1662浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1372浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 16:10 , Processed in 0.908794 second(s), Total 52, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号