完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
工程师您好:
我是用的你们公司的AD7192,AINCOM口输入2.5V,AIN2输入电压,REF输入5V,双极性输入。我输入的电压为0到5V(每0.5v取一个值),但是根据公式计算得到的误差大概有0.1V到0.01V不等的误差,这个不知道是什么原因?(我的模式寄存器配置为0X002040,模式寄存器为OX0C2880),并且这个ad的失调寄存器与满量程寄存器中的数值怎配合数据寄存器使用呢?谢谢 谢谢。 |
|
相关推荐
26个回答
|
|
hu_wflllll12 发表于 2018-9-11 21:16 1.使能多通道后,不论是continuous conversion mode还是single conversion mode,每个通道转换的结果会依次输出。这个要注意 2.你在读取AD7192的转换结果的时候有没有等待conversion的DOUT/RDY拉低(ADC转换完成标志)?如果没有转换完成就读取转换结果,这个时候结果还没更新,就会读到一样的数值。 3.如果等待了这个转换标志,那你能否把你读取转换结果的程序贴一下(尽量详细一些)。 |
|
|
|
wyywerw2 发表于 2018-9-11 21:22 您好,我读取数据寄存器的配置是根据官方的配置的,我贴到下面,您看一下,太感谢了 uint32_t AD7192_Reg_Read(uint8_t i) { uint8_t WriteBuf = 0; uint8_t ReadBuf[4] = {0}; uint32_t DataBuffer=0; AD_CS_LOW(); WriteBuf = WEN|RW_R|(i<<3)|CREAD_DIS; aaa = SPI_AD7192_SendByte(WriteBuf); switch(i) { //8位寄存器 case REG_ID : case REG_COM_STA : case REG_GPOCON : ReadBuf[0] = SPI_AD7192_SendByte(dummy); DataBuffer = ReadBuf[0]; break; //24位寄存器 case REG_MODE : case REG_CONF : case REG_OFFSET : case REG_FS : ReadBuf[0] = SPI_AD7192_SendByte(dummy); DataBuffer = ReadBuf[0]; ReadBuf[1] = SPI_AD7192_SendByte(dummy); DataBuffer = (DataBuffer<<8) + ReadBuf[1]; ReadBuf[2] = SPI_AD7192_SendByte(dummy); DataBuffer = (DataBuffer<<8) + ReadBuf[2]; break; /读取数据寄存器 case REG_DATA : if (AD7192Registers[REG_MODE] & DAT_STA_EN) { ReadBuf[0] = SPI_AD7192_SendByte(dummy); DataBuffer = ReadBuf[0]; ReadBuf[1] = SPI_AD7192_SendByte(dummy); DataBuffer = (DataBuffer<<8) + ReadBuf[1]; ReadBuf[2] = SPI_AD7192_SendByte(dummy); DataBuffer = (DataBuffer<<8) + ReadBuf[2]; ReadBuf[3] = SPI_AD7192_SendByte(dummy); DataBuffer = (DataBuffer<<8) + ReadBuf[3]; break; } else { ReadBuf[0] = SPI_AD7192_SendByte(dummy); DataBuffer = ReadBuf[0]; ReadBuf[1] = SPI_AD7192_SendByte(dummy); DataBuffer = (DataBuffer<<8) + ReadBuf[1]; ReadBuf[2] = SPI_AD7192_SendByte(dummy); DataBuffer = (DataBuffer<<8) + ReadBuf[2]; break; } } AD_CS_HIGH(); return DataBuffer; } |
|
|
|
wyywerw2 发表于 2018-9-11 21:22 您好,我再贴一下读取数据寄存器的程序,它这个必须要加一个延时吗?我也看了芯片手册,上面说多通道切换的时候会有 一个建立时间,我使能的我看到是有0.936Ms的时间,每秒采集1076个通道,采样率是4.8MHZ这个有点对应不上啊(这个采样率和对应的采集通道数)... for(i=0;i<=50;i++) { W = AD7192_Reg_Read(REG_COM_STA); a=AD7192_Reg_Read(REG_COM_STA); b=a&0x0f; if( b==0x04) P=AD7192_Reg_Read(REG_DATA); else if( b==0x05) Q=AD7192_Reg_Read(REG_DATA); else if( b==0x06) R=AD7192_Reg_Read(REG_DATA); else if(b==0x07) S=AD7192_Reg_Read(REG_DATA); |
|
|
|
wyywerw2 发表于 2018-9-11 21:22 补充一下,我使能的是零延迟模式,也就是说它的输出周期始终等于滤波器的建立时间。这样的话一来不需要延迟,二来通道切换后直接就有新数据了,也就不用有ADC转换完成标志了吧? |
|
|
|
hu_wflllll12 发表于 2018-9-11 22:03 1.定义的时候会设置滤波器的输出周期。比如输出周期是1ms,1ms周期内的数据都没有更新,需要等待1ms后数据才会更新。所以是需要ADC转换完成标志。 2.根据下图说明选择一种等待ADC转换完成标志的方式。 3.参考AD7192的datasheet。 |
|
|
|
wyywerw2 发表于 2018-9-11 22:21 您好,我现在设置的是状态寄存器高位为0时读取寄存器,高位为1时不读取,读出来是一个数了,没有重复4次,但是我设置的采样率2400,输入一个正弦,然后用MATLAB的FFT看频谱特性,结果分析出来它的采样率才能达到600,也就是说如果那4次重复的数如果不一样的话才对,我现在相当于读取了4次中的一次。麻烦您了,这个问题是什么了,我贴出来串口读取的程序。 [size=10.5000pt]while(1) [size=10.5000pt]{ [size=10.5000pt] W = AD7192_Reg_Read(REG_COM_STA); [size=10.5000pt] a=AD7192_Reg_Read(REG_COM_STA); [size=10.5000pt] c=a&0xf0; [size=10.5000pt] if( c<0x10) [size=10.5000pt]{ [size=10.5000pt] if( a==0x05) [size=10.5000pt] while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET); [size=10.5000pt] USART_SendData( USART2, FrameStart); [size=10.5000pt] while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET); [size=10.5000pt] Buf[0] = AD7192_Reg_Read(REG_DATA); [size=10.5000pt] USART_SendData( USART2, Buf[2]); [size=10.5000pt] while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET); [size=10.5000pt]Buf[1] = AD7192_Reg_Read(REG_DATA)>>8; [size=10.5000pt] USART_SendData( USART2, Buf[1]); [size=10.5000pt] while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET); [size=10.5000pt] Buf[2] =AD7192_Reg_Read(REG_DATA)>>16; [size=10.5000pt] USART_SendData( USART2, Buf[0] ); [size=10.5000pt] while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET); |
|
|
|
wyywerw2 发表于 2018-9-11 22:21 您好,问题解决的差不多了,但是我输入是0到5V的采集回来的应该是000000到FFFFFF啊,但是为何才是300000到FExxxx附近,相当于不是满量程啊?我拿输入跟AINCOM短接后为何输出的数还是会变化?变化范围不是很大,它应该是一个不变的数吧? |
|
|
|
只有小组成员才能发言,加入小组>>
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1320 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
3934 浏览 2 评论
8604 浏览 1 评论
2921 浏览 1 评论
6724 浏览 2 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
722浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1045浏览 2评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
3935浏览 2评论
973浏览 2评论
756浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-27 10:28 , Processed in 0.564966 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号