LTC®2508-32 是一款具有集成式可配置数字平均滤波器的快速、32 位 SAR ADC。演示板DC2222A-B具有与DC890以及Linduino通信的连接器。演示手册介绍了如何将主板连接到 DC890 并运行 PScope。它还解释了如何使用Linduino(或DC590B板)运行QuikEval并以非常慢的数据速率读取数据。
本博客旨在展示如何使用 Linduino 从 LTC2508-32 实现高速数据采集。Linduino上的QuikEval连接器没有足够的GPIO线来控制滤波器的下采样因子(DF)选择引脚(SEL1,SEL0)。因此,板载 FPGA 在收到初始配置数据后控制 SEL 线路。I/O 扩展器(我们的工程师称之为“运动鞋端口”)用于通过 SPI 将配置信息发送到板载 FPGA,进而设置 SEL 线路。如果这令人困惑,请继续阅读,它将开始有意义。
Linduino 的速度不够快,无法以全采样速度从 LTC2508 捕获数据。但是,使用高度优化的代码,避免使用中断超时并将SPI时钟调整到4 MHz,可以实现合理的采样速度。这在本博客的最后一部分进行了解释。
零件的详细信息
LTC2508-32 具有两个数字串行接口,一个用于滤波输出数据,另一个用于无延迟输出数据。Linduino上的QuikEval连接器连接到滤波输出串行接口(SDOA)。
图1.LTC2508 框图
滤波后的输出仅在 SYNC 脉冲后每转换一次 DF 次数更新一次。MCLK引脚上的每个上升沿都会启动一个新的转换。因此,滤波后的输出在 MCLK 脉冲的 DF 数之后在 I/O 寄存器中可用。请参考下面的流程图,或在 LTC2508-32 产品手册中阅读更多相关信息。数字滤波器可通过引脚绑定 SEL0 和 SEL1 轻松配置为四种不同的下采样因子。
演示板的详细信息
本节旨在解释板载 FPGA 如何根据发送给它的配置数据设置 SEL 引脚。FPGA 等待通过 SPI 发送的 16 位序列配置数据。要发送到FPGA的16位配置数据是:
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
1 | 0 | 0 | 0 | 0 | SEL0 | SEL1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
位 15:选择串行接口。1 = SDOA,0 = SDOB
位 10:SEL0
位 9:SEL1
其余位由 LTC25XX 系列中的其他器件使用。
SEL1 | SEL0 | 东风 |
0 | 0 | 256 |
0 | 1 | 1024 |
1 | 0 | 4096 |
1 | 1 | 16384 |
FPGA的SPI线连接到运动鞋端口(CS_IN、SDI_IN和SCK_IN)的P5、P6和P7,如下图所示。这些引脚被位撞击以创建到FPGA的SPI端口。运动鞋端口的P0-P7的位敲击是通过传输I完成的2C 数据从 Linduino 到 Sneaker Port,这将在下面的部分中解释。
图3.整个系统的接线图
与“运动鞋港口”的通信
运动鞋端口输出引脚的位敲击是通过发送 I 来完成的2C 数据。要说我2C 到运动鞋端口,第一个字节是 I2芯片的C地址,第二个字节是P0-P7的数据。FPGA 的 SPI 引脚为 CS = P7、SDI = P6 和 SCK = P5。每个 P0-P7 引脚的状态转换为唯一的 I2C 字节。
SPI 状态 | 小七 | 小六 | 小五 | 小四 | 小三 | 小二 | 小一 | P0 | 我2C 字节 |
CS 低、SDI 低、SCK 低 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
CS 低、SDI 低、SCK 高 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0×20 |
CS 低、SDI 高、SCK 低 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0×40 |
CS 低、SDI 高、SCK 高 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0×60 |
注意:
为了在SDI线上传输0,我们需要将数据线保持低电平,并使SCK线变为低电平、高电平和低电平。这是通过传输 0×00、0×20 和 0×00 来实现的。
注意:
为了在SDI线上传输1,我们需要将数据线保持高电平,并使SCK线变为低电平、高电平和低电平。这是通过传输 0×40、0×60 和 0×40 来实现的。
注意:
如果用户想使用自己的电路板连接到DC2222A,则需要将QuikEval连接器的引脚2驱动到VCCIO,以便DC2222A的FPGA知道已连接控制器并侦听其命令。
林杜伊诺代码:
LTC2508 与 SPI 通信,这些信号通过 QuikEval 连接器单独访问,以从器件中读取数据。你可以在这里找到林杜伊诺代码。
Linduino代码可以分为三个独立的部分:
a) 功能:无效sneaker_port_init()
该函数将配置数据写入FPGA,然后发送SYNC脉冲。
P3 = 0 拉WRIN_CS低
i2c_write_byte(SNEAKER_PORT_ADDRESS、CS_LOW);
for(i = 0; i < 48; ++i)
{
发送配置数据
i2c_write_byte(SNEAKER_PORT_ADDRESS,i2c_data[i]);
}
P3 = 1 拉高WRIN_CS
i2c_write_byte(SNEAKER_PORT_ADDRESS、CS_HIGH);
b) 功能:空隙send_pulses(uint8_t引脚,uint16_t num_of_pulses)
此功能将 DF 个脉冲发送到连接到 LTC2508 MCLK 的 CS 引脚。
c) 功能:uint32_t LTC2508_read_data(uint8_t QUIKEVAL_CS、uint16_t *DF)
使用 QuikEval 连接器上的连接通过常规 SPI 从 LTC2508-32 读取数据。
优化项目
如前所述,Linduino的速度不够快,无法从LTC2508进行高速数据采集。但是,通过以下步骤,我们可以有一个合理的读出数据的速度。这个修改后的Linduino代码可以在以下位置找到:
LTSketchbook部件号200025002508DC2222_interrupt_driven_read
MCLK 由外部时钟源驱动,以避免切换 CS 引脚时出现延迟。
DRDY 已连接到 INT1。当数据就绪(DRDY)引脚变为低电平时,即当数据在转换后准备就绪时,将触发中断;此时,它被宣读出来。
在 Linduino 代码中,数据在中断服务例程中连续捕获,并作为十六进制值打印到串行控制台。以后可以将数据转换为电压。
连续打印的数据使用TeraTerm记录到文件中。以下各节将介绍设置 Tera 术语。
数据被读出,转换为电压并使用Python脚本绘制。
图5.LTC2508 DRDY# 连接至 INT1 (数字引脚 3)
图6是示波器照片,显示了DRDY引脚上脉冲后SDOA线路上的数据。DRDY引脚在MCLK上的DF脉冲数之后触发。
图6.示波器照片显示DRDY脉冲后SDOA的数据。
当MCLK为100 kHz且DF = 256时,可实现的数据速率为390.635 Hz,如下面的示波器所示。
图7.连续的DRDY脉冲和数据跟随SDOA线路。
如何设置TeraTerm:
使用此链接安装 Tera 术语。
打开 Tera 术语。
如果“新建连接”选项卡尚未打开,请转到“文件 à 新连接”。
图8.在 Tera Term 上设置新连接。
确保Linduino USB已插入。
选择串行连接和正确的串行端口。
图9.设置串行COM端口。
去 设置 à 串行端口.
图 10.打开串行端口。
设置波特率。
图 11.设置 COM 端口的参数。
将数据记录设置为文件 à 选择正确的文件。
图 12.将数据记录设置为文件。
保持 Tera Term 打开以查看其他驱动程序写出的数据。
数据记录文件现在应包含零件捕获的所有数据。
现在数据已记录到 data.txt 中,请确保文件开头没有不完整或垃圾数据。这可能是由于在读取过程中开始的数据记录。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !