STM32
直播中

算一挂

9年用户 899经验值
私信 关注
[问答]

调用ad7193芯片单次采样函数前后,读取其配置寄存器值不正确是什么原因?

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

执行完单次采样后,读配置寄存器值,增益位是正确的。
在单次采样函数调用前,读配置寄存器值,数就不正确了。


  • while(1)
  •         {
  •                 if(flag_1ms == 1)
  •                 {
  •                         flag_1ms = 0;

  •                         value_temp2 = AD7193_GetRegisterValue(AD7193_REG_CONF, 3, 1);
  •                         value_temp3 = AD7193_GetRegisterValue(AD7193_REG_CONF, 3, 0);

  •                         value_temp1 = Pt100Measure(1);

  •                         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啊

回帖(1)

听我讲

2024-5-10 16:51:39
根据您提供的信息,我将尝试分析可能的原因并提供解决方案。以下是分析的步骤:

1. 确认AD7193芯片的配置寄存器值是否正确设置:首先,请确保您在设置AD7193芯片的配置寄存器时,正确设置了增益值。这可以通过查阅芯片的数据手册来完成。

2. 检查STM32与AD7193之间的通信:请确保STM32与AD7193之间的通信正常。这包括SPI通信协议的配置,如时钟速率、数据位宽、CPOL和CPHA等。如果通信存在问题,可能导致读取的配置寄存器值不正确。

3. 检查STM32的读取和写入操作:请确保STM32在读取和写入AD7193的配置寄存器时,操作正确。这包括正确发送命令、地址和数据,以及正确接收数据。

4. 检查主循环中的定时:您提到在主循环中每1秒调用一次单次采样函数。请确保STM32的定时器或其他定时机制能够准确控制这个时间间隔。如果时间间隔不准确,可能导致读取的配置寄存器值不正确。

5. 检查单次采样函数的实现:请检查单次采样函数的实现,确保在执行单次采样操作时,正确地设置了AD7193的配置寄存器,并正确地读取了采样数据。

6. 检查增益位的设置和读取:您提到在单次采样函数调用前后,增益位的值不一致。请检查在设置和读取增益位时,是否遵循了正确的操作顺序和时序。

解决方案:

1. 仔细检查AD7193的配置寄存器设置,确保增益值正确设置。

2. 检查STM32与AD7193之间的通信设置,确保通信正常。

3. 检查STM32的读取和写入操作,确保操作正确。

4. 检查主循环中的定时机制,确保时间间隔准确。

5. 检查单次采样函数的实现,确保正确设置和读取AD7193的配置寄存器。

6. 检查增益位的设置和读取操作,确保遵循正确的操作顺序和时序。

通过以上步骤,您应该能够找到导致配置寄存器值不正确的原因,并采取相应的解决措施。
举报

更多回帖

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