主题中讨论的其他器件: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);
返回值;
}