ADI 技术
直播中

张楠

7年用户 135经验值
私信 关注
[问答]

调用ad7193单次采样函数前后,读取的配置寄存器值不一样

对ad7193芯片设置完后,主循环里每个1秒调用一次单次采样函数。结果发现读取的数偏小,芯片内部对采样的ad值按8倍增益放大,STM32读取值后再除8再转换成电压值或电阻值。后发现,内部配置寄存器对应增益放大的值不对。执行完单次采样后,读配置寄存器值,增益位是正确的。在单次采样函数调用前,读配置寄存器值,数就不正确了。


while(1)    {        if(flag_1ms == 1)        {            flag_1ms = 0;            AD7193_RangeSetup(1, AD7193_CONF_GAIN_8);            value_temp2 = AD7193_GetRegisterValue(AD7193_REG_CONF, 3, 1);                    value_temp1 = Pt100Measure(1);            value_temp3 = AD7193_GetRegisterValue(AD7193_REG_CONF, 3, 0);            value_temp4 = AD7193_GetRegisterValue(AD7193_REG_CONF, 3, 1);                    usart1_send(0xDD);            usart1_send(value_temp1 >> 16);            usart1_send(value_temp1 >> 8);            usart1_send(value_temp1);            usart1_send(value_temp2 >> 16);            usart1_send(value_temp2 >> 8);            usart1_send(value_temp2);            usart1_send(value_temp3 >> 16);            usart1_send(value_temp3 >> 8);            usart1_send(value_temp3);            usart1_send(value_temp4 >> 16);            usart1_send(value_temp4 >> 8);            usart1_send(value_temp4);        }    }

串口接收过来的数据是,第一次是:DD 00 00 77 10 01 1A 10 01 1A 10 01 1B 以后就一直是:                           DD 00 00 3B 10 01 1A 10 01 1A 10 01 1B  配置寄存器是10 01 1A或10 01 1B,其末三位对应的是增益倍数。B(1011)对应的是放大8倍,A(1010)对应的是保留字。


--------------------------------------------------------------------------------------------------


感觉很奇怪:既然执行完单次采样后,读配置寄存器值,其最后是B,那么这个循环接收后,下一个循环开始的时候,也应该是B啊。


将增益倍数改成128后,读取的值是:DD 00 01 F6 10 01 1E 10 01 1F 10 01 1F
仍然是单次采样前读取的配置寄存器值,比采样后读取的值小,差最后一位。而后边的数据才是正确的。


----------------------------------------------------------------------------------------------------


有改变增益倍数试了几次。
增益位128和64时,调用单次采样函数前,读取的配置寄存器对应的增益倍数是64,调用函数后,读取的增益倍数是128;
[size=14.399999618530273px]增益位32和16时,调用单次采样函数前,读取的配置寄存器对应的增益倍数是16,调用函数后,读取的增益倍数是32;
[size=14.399999618530273px]

[size=14.399999618530273px]---------------------------------------------------------------------------------------------------------
[size=14.399999618530273px]

[size=14.399999618530273px]更正一下,AD7193_RangeSetup(1, AD7193_CONF_GAIN_8);

回帖(6)

张楠

2019-2-22 13:30:29

 
想着再放大一点,不过不好操作了。
 
---------------------------------------------------------------------------------------------------------------------------------------------------------
 
额,才发现,其实可以放大的。
 
首:

 
尾:
举报

张楠

2019-2-22 13:38:46
额,发现以上波形,是在while循环先执行一次设置8倍增益操作后的波形。
不过配置增益函数里,也是先调用了一次读取配置寄存器数。
 
我把while循环里的配置8倍增益这句屏蔽掉,while循环前还保留着一个。
以下是全波形和首尾波形。
全:

 
首:

 
尾:

 
以上所有图,为sclk和miso波形图。
读取配置寄存器,是用到了40个sckl下降沿。现在一想,可能没截全,屏上可能差几个才到40个。
举报

张楠

2019-2-22 13:51:24
引用: 世啊木啊 发表于 2019-2-22 18:50
额,发现以上波形,是在while循环先执行一次设置8倍增益操作后的波形。
不过配置增益函数里,也是先调用了一次读取配置寄存器数。
 

说错了,ad7193应该是上升沿采样。
 
首一:

首二:

 
尾一:

尾二:
举报

张楠

2019-2-22 14:00:59
引用: 世啊木啊 发表于 2019-2-22 19:03
说错了,ad7193应该是上升沿采样。
 
首一:

其实是读的配置寄存器时,因为配置寄存器是3个字节的,加上1个字节的命令字。SPI_CLK只需要32个时钟周期。
 
比较了下首尾两次读取配置寄存器是SPI_MISO的波形,是一致的。只不过末尾最后的SCL上升沿时,对应的SPI_MISO也正好是个上升跳变,估计是我SPI读写函数写的不好,应该加个延时。
 
这样看来的话,首尾读去配置寄存器的值,应该都是10011A,可能因为SPI读写函数的问题,读取最后一位那里出了错。
但是,我配置的是8倍增益,对应的应该是10011B才对。最后一位如果是A的话,对应的是“保留”的意思...
 
-----------------------------------------------------------------------------------------------------
 
想了想,既然我读取函数这里有问题,那么也有可能是因为写入函数也有问题,所以造成了这种现象。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分