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.

[参考译文] ADS127L18EVM-PDK:通过 SPI 配置 ADS127L18时出现问题

Guru**** 2383950 points
Other Parts Discussed in Thread: ADS127L18
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1478299/ads127l18evm-pdk-an-issue-in-ads127l18-configuration-via-spi

器件型号:ADS127L18EVM-PDK
主题中讨论的其他器件:ADS127L18

工具与软件:

我们正在将 ADS127L18与 STM32H7微控制器进行评估集成、当通过 SPI 寄存器配置 ADS127L18时、没有正确的采样率。

没有注意到的任何提示都是惠康。

更详细的说明如下:

——

我们的测试系统包括:

- ADS127L18evm 板
- STM32H743nucloeo 板
-实验室电源
-信号发生器
-将单端交流信号转换为对称信号的电路。
-一个或两个 PC。
-一些跳线和 SMA 电缆

分三个阶段完成测试。

1§仅利用德州仪器(TI)自己的微控制器板和 PC 软件 ADS127L18evm 来验证信号路径、振幅和质量。
提取 PCM 数据进行进一步分析(质量符合预期)。
工作正常、PC 软件中存在一些错误、如果笔记本电脑进入睡眠状态、则总是需要重新启动+ USB 断开/重新连接

2§验证 ADC 数据接收(STM32术语中的 SAI 总线)
使用上述相同的微控制器板和德州 PC 软件配置和控制 ADS127L18evm。
SAI (FSYNC、DCLK、D0、即单一数据线路)通过 ADS127L18板上的引脚接头并行连接。
在对 STM32H7固件进行一些调整后、接收开始工作-但最多只有2s 块(512Ksps)
由德州微控制器板的限制一次驱动

3§通过 STM32H7进行配置和控制
-两组配置:
- 512Ksps 单通道, 32位数据帧,包括状态字节
- 64Ksps 双通道32位数据帧,包括状态字节
-通过 SPI 配置和控制(即在初始启动后不接触 GPIO 线路)
-模式线设置为1、带有上拉设置
-在 STM32H7启动时短暂延迟后,XRESET 从0设置为1
-使用 ADS127L18evm 板上的跳线将 START 线路连接到 LOW
- SPI 连接:SCLK、MISO、MOSI 和 XCS
- XCS 低在每次操作(单次写入等),高次服务
-相对较低的 SPI CLK 1MHz、SPI 模式1

-由于控制寄存器中的开始/停止位按预期工作、SPI 写入似乎有效
- 32位数据帧与请求的状态字节(不是默认值).

-写入 ADS127L18的初始化和 SAI 接收用一个来自以太网的命令初始化
- ADS127L18通过 SPI 初始化,见本文本底部。

预期结果是使采样以请求的采样率和来自 SAI 的 ADC 数据流开始、
STM32H7固件会收集样本并发送到 UDP/IP 数据包、然后发送到以太网

在第2阶段、从 SAI 到 UDP 数据包的数据流按预期运行。

在第3阶段、我们只看到了256 SPS 的恒定采样率、而不是请求的512 Ksps。
更改通道0 OSR 设置不会影响采样率、也不会影响预期。

DCLK 被请求为16MHz、但 FSYNC 仅为256Hz。 ADC 数据被视为每4ms 的短脉冲。

在 D0中看到的 ADC 数据似乎正常、状态字节为8、预期值是多少、采样范围是合理的、
只是采样率太慢。

已根据德州 PC 软件在第1阶段或第2阶段显示的寄存器值验证 SPI 配置寄存器写入、
一些小差异、这些位的含义已验证且不应产生影响。


//在控制寄存器中设置复位位
ratError ratSpiReset()

//数据表中的表8-8
ratError RetVal = ratSpiWriteAdds127Reg (control、0b01011000);
if (retVal == RAT_ERROR_NONE){
osDelay (300);
// ADS127在复位时设置一些状态位
//使用调试器验证它们
uint8_t status = 0;
retVal = ratSpiStatus (&status);
}
返回值;
}

//在控制寄存器中设置起始位
ratError ratSpiStart()

Return ratSpiWriteAds127Reg (control、0b10);
}


//初始化 ADS127
ratError ratSpiInit (uint16_t sampleRate)

ratError RetVal = ratSpiReset ();

retVal |= ratSpiWriteAdds127Reg (GEN_CFG1、0);//默认值
retVal |= ratSpiWriteAdds127Reg (GEN_CFG2、0b00000110);// fclk 32.768Hz 而不是内部25.6MHz
retVal |= ratSpiWriteAds127Reg (GEN_CFG3、0b10000000);// SAI 中的全输出压摆率、注释掉默认的较慢斜率
retVal |= ratSpiWriteAds127Reg (DP_CFG1、0b01000000);//启用数据端口状态字节、一个数据通道

// DP_CFG2取决于模式
// CLK_CFG 取决于模式
// GPIO 寄存器为默认值(低电平禁用输出)
// CHn_CFG1默认值(正常极性、正常范围、缓冲器禁用
// CH0_CFG2和 CHN1_CFG2取决于模式

retVal |= ratSpiWriteAdds127Reg (CH2_CFG2、0b00100000);//断电
retVal |= ratSpiWriteAdds127Reg (CH3_CFG2、0b00100000);//断电
retVal |= ratSpiWriteAdds127Reg (CH4_CFG2、0b00100000);//断电
retVal |= ratSpiWriteAdds127Reg (CH5_CFG2、0b00100000);//断电
retVal |= ratSpiWriteAdds127Reg (CH6_CFG2、0b00100000);//断电
retVal |= ratSpiWriteAdds127Reg (CH7_CFG2、0b00100000);//断电

//默认值下的 chn 偏移和增益0偏移1.0增益

开关(采样率){
案例512:// 512Ksps、单通道
retVal |= ratSpiWriteAdds127Reg (DP_CFG2、0b00100000);// DCLK 为32.768/2
retVal |= ratSpiWriteAdds127Reg (CLK_CFG、0b00001001);//外部时钟、2分频
retVal |= ratSpiWriteAdds127Reg (CH0_CFG2、0b00000000);// OSR32
retVal |= ratSpiWriteAdds127Reg (CH1_CFG2、0b00100001);//断电、仅使用 CHN0
休息;
案例64:// 64Kbps、两个通道
retVal |= ratSpiWriteAdds127Reg (DP_CFG2、0b01100000);// DCLK 为32.768/8
retVal |= ratSpiWriteAdds127Reg (CLK_CFG、0b00001100);//外部时钟、8分频
retVal |= ratSpiWriteAds127Reg (CH0_CFG2、0b00000000);// OSR32 -但我们应该使用更高的 OSR 和更小的时钟分频器?
retVal |= ratSpiWriteAdds127Reg (CH1_CFG2、0b00000000);// OSR32 -与上一个注释相同
休息;
默认值:
retVal |= RAT_ERROR_ARG;
}

if (retVal == RAT_ERROR_NONE){
ratSpiStart();
}

osDelay (300);
返回值;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Markku、您好

    1. 如前所述、MODE 引脚需要针对 SPI 模式拉高。  请确认您是使用3k Ω 或低阻值电阻将 MODE 引脚上拉至1.8V。  EVM 板有一个100k Ω 的上拉电阻、但该值太高、无法检测到正确的 SPI 模式。  如果您将 MODE 引脚短接至 IOVDD=1.8V、则这没有问题。

    2. 为了支持512ksps、CLK_DIV 应设置为默认值1、而不是2。  除了 CLK_DIV 设置之外、调制器始终具有2分频。  使用 CLK_DIV 默认值1时、会得到输出数据速率 f-data=f-CLK/(2*OSR)。  如果 f-CLK=OSR=32 32.768MHz、并且默认值 OSR=32、则生成的数据速率将为 f-data=32.768M/(2*32)=512Ksps。  当使用 OSR=32时、使用 CLK_DIV 除以2将得到256ksps 的数据速率。

     ADS127L18不支持在1个数据通道上进行512ksps 配置。  即使您的通道1至7处于断电状态、ADC 仍会尝试从这些通道发送数据(复位后默认为0)。  由于您已将 DLCK_DIV 值设置为2分频、因此数据时钟现在为16.384MHz、在512ksps 时每个数据通道仅支持1个通道。  (16384000/512000=32b、即24b 数据的数据包大小加上8b 状态) 将 DP_CFG1设置为0b01110000、16.384MHz 时、应支持512ksps。

    此致、
    Keith Nicholas
    精密 ADC 应用