已回答假定已回答

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

Any 在 2016-3-17 詢問的問題
最後回覆由Shirvin於2017-2-22提供

对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;

增益位32和16时,调用单次采样函数前,读取的配置寄存器对应的增益倍数是16,调用函数后,读取的增益倍数是32;


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


更正一下,AD7193_RangeSetup(1, AD7193_CONF_GAIN_8);

結果