Other Parts Discussed in Thread: ADS131M08EVM
您好,
I´m在我的应用中使用带有MCU STM32的ADS131M08EVM。 SPI通信已正确进行,
n´t由于通道校准不足,读数不精确。
我想知道,我必须使用哪个方程来计算通道的偏移量?
CHN_CFG的哪个设置用于计算偏移量?
在下图中,可以知道软件计算的偏移量?

此致
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Other Parts Discussed in Thread: ADS131M08EVM
您好,
I´m在我的应用中使用带有MCU STM32的ADS131M08EVM。 SPI通信已正确进行,
n´t由于通道校准不足,读数不精确。
我想知道,我必须使用哪个方程来计算通道的偏移量?
CHN_CFG的哪个设置用于计算偏移量?
在下图中,可以知道软件计算的偏移量?

此致
您好Rafael:
测量偏移, "我想知道,我必须使用哪个方程来计算通道的偏移?"和"在下图中,可以知道软件计算的偏移?"
首先,我们需要确保设备处于输出偏移的配置中。 由于您在通道0上,我建议将MUX0[1:0]=0b01更改为内部短接输入。 您还可以在没有连接输入的情况下覆盖JP1的引脚1-2和5-6,以便从外部接地输入,但这是一个可选步骤。 这将确保ADC检测到的来自PGA的输出是PGA的偏移。 更多信息可在以下网址找到: https://training.ti.com/ti-precision-labs-op-amps-vos-and-ib-specifications
假设您已经为这张图片执行了此操作,我可以说您的偏移量相当于平均值或1928.18 代码。 方程式应为AVERAGE = sum_of_Codes/n_samples。 这是因为偏移是直流,如果我们将所有数据都计算出平均值,我们可以提出这样的论点:“直线,水平线”可以代表偏移,即直流信号。 如果您不知道公式,请告诉我,但是,我假设您可以将代码转换为电压,并查看数据表以确保它在输入参考偏移误差(+/-32uV)的范围内。
改进偏移测量并开发您自己的:
不过,我有一些意见。 您的图是一小幅波浪,如果您在频谱分析选项卡上进行转换,我确信您会看到其他一些频率内容。 您的数据速率为32kSPS。 您不需要~32kHz BW来测量直流信号,我会增加您的OSR,因此我们缩小BW和SPS ,以消除影响测量的更高频率噪声(即平均值)。 另外,你在这里采集了4096个样本,如果你采集更多的样本,你的平均值就会更准确。
现在,对于一个真正的系统,我看到了为校准而采集的超大样本数据,我只看到 了5个样本来确定偏移量。 有些人不能为校准切换OSR,有些人可以。 这完全取决于您的实际使用案例以及您想要的精确度。 如果您获得了非常准确的信道值,您可以将实际偏移值与您实际开发的任何方法进行比较。
"CHN_CFG的哪个设置用于计算偏移量?" 和直流块
我已经谈到过MUX,阶段不相关,因此DCBLKn_DIS就不存在了。 理论上,DCBLK是数字领域中的高通滤波器,可以消除偏移,您无需进行校准,请单击下图以了解更多详细信息:

权衡是信号的延迟,沉降和衰减。 表8-4.显示了高通滤波器的角频率和许多其他有用的参数,具体取决于DCBLOCK值。 有些用户选择启用过滤器,有些用户则在过程或MCU上启用偏移校准,因为这种权衡是不值得的。
希望这会有所帮助。
最佳,
-Cole
您好,非常感谢您提供有关校准过程的信息,这非常有帮助。 我对数据的大小和响应框架的索引存有疑虑,因为我将在调整步骤之前回答几个问题。
为´m我的SPI通信正常,我将列出ADS主寄存器的读数值,您可以在下面看到我的代码的日志消息。
使用Uart4进行调试!
时钟寄存器默认值= FFFF
设置时钟寄存器。
时钟寄存器= FF02
读取芯片ID寄存器= 2801
模式寄存器= 0510
状态寄存器= 05FF
在数据表的“Item SPI.SPI 1.8 8.5 通信字”中,您可以看到:
"命令,响应,CRC和寄存器始终包含16位的实际数据。 这些单词始终是最重要的位(MSB)对齐,因此最不重要的位(LSB)是零填充的,以容纳24或32位的单词大小。"
响应帧的格式如下:
|回复| Ch0Data | Ch1Data | Ch2Data | Ch3Data | Ch4Data | Ch5Data | Ch6Data | Ch7Data |
为了更好地理解响应数据帧格式,我进行了以下配置:
模式= 0x0610 - WLENGTH[1:0]= 10b "32 bits: LSB zero padding"(32位:LSB零填充)
然后我声明了我的接收缓冲区如下所示:
UINT8_t adsRawBuffer[34];(响应=2字节+(8通道*4字节))。
但是在一读之后,我不得不将缓冲区的大小增加到36,并且使用LSB零填充作为指南,我得出了以下结果:
06FF-0000-FFEC9F00-FFC64700-FFF24500-FFCF5900-0020E700-000DD000-000A7900-FFFAD900</s>6.47万 2.45万590000207900
响应帧的前16位是否正确?
帧上接下来的16位"0000"是什么?
我是否可以假定通道0的值从adsRawBuffer[4]开始,并在adsRawBuffer[7]结束,包括零填充?
对于模式= 0x0510 - WLENGTH[1:0]= 01B "24位(默认)"
我声明我的接收缓冲区如下所示:
UINT8_t adsRawBuffer[28];(响应=4字节+(8通道*3字节))。
我的读数是:
05FF-00FF-F0BFFF-C16AFF-F3E1FF-C9.54万-277F00-0E7900-0B57FF-F93D77</s>7900
现在考虑16位"00FF"的未知值作为帧的一部分。
我可以假定通道0的值从adsRawBuffer[4]开始,到adsRawBuffer[6]结束吗?
通道0的内容是否由adsRawBuffer[4]= MSB,adsRawBuffer[5]= Middle和adsRawBuffer[6] LSB组织?
我还可以假定通道1的值从adsRawBuffer[7]开始,到adsRawBuffer[9]结束吗?
此致
您好Rafael:
我很难遵循逻辑,但我假设您最感兴趣的是SPI帧格式,因为您已更改为不同的格式(32位零填充和24位),您获得了一个您没想到的值。
通常,每个"单词"都是24或32位,图片显示有9个单词(或CRC有10个单词)。 这9个词代表:
Frame = | Response | Ch0Data | Ch1Data | Ch2Data | Ch3Data | Ch4Data | Ch5Data | Ch6Data | Ch7Data |
因此,mode = 0x0610,或选择的帧长度为32,应为帧= 4字节响应+(8通道* 4字节)

对于其他模式设置,32位将变为24位(或3字节)。 收集完该帧后, 您将对该帧进行后期处理,方法是在每个通道数据之后切断最后一个字节(剩余3个字节),并切断响应的最后2个字节。
总之,您似乎没有格式化或考虑足够的位来获取整个框架。 我会重新计算您的缓冲区大小,然后重试。
此外 ,我们还有ADS131M0x系列示例代码。 以下是有关链接的常见问题解答: https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/81.1864万/faq-ads131m04-ads131m04-example-code
最佳,
-Cole