如何使用Linduino从LTC2508-32实现高速数据采集

描述

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)。

adc

图1.LTC2508 框图

滤波后的输出仅在 SYNC 脉冲后每转换一次 DF 次数更新一次。MCLK引脚上的每个上升沿都会启动一个新的转换。因此,滤波后的输出在 MCLK 脉冲的 DF 数之后在 I/O 寄存器中可用。请参考下面的流程图,或在 LTC2508-32 产品手册中阅读更多相关信息。数字滤波器可通过引脚绑定 SEL0 和 SEL1 轻松配置为四种不同的下采样因子。

adc

演示板的详细信息

本节旨在解释板载 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,这将在下面的部分中解释。

adc

图3.整个系统的接线图

与“运动鞋港口”的通信

adc

运动鞋端口输出引脚的位敲击是通过发送 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脚本绘制。

adc

图5.LTC2508 DRDY# 连接至 INT1 (数字引脚 3)

图6是示波器照片,显示了DRDY引脚上脉冲后SDOA线路上的数据。DRDY引脚在MCLK上的DF脉冲数之后触发。

adc

图6.示波器照片显示DRDY脉冲后SDOA的数据。

当MCLK为100 kHz且DF = 256时,可实现的数据速率为390.635 Hz,如下面的示波器所示。

adc

图7.连续的DRDY脉冲和数据跟随SDOA线路。

如何设置TeraTerm:

使用此链接安装 Tera 术语。

打开 Tera 术语。

如果“新建连接”选项卡尚未打开,请转到“文件 à 新连接”。

adc

图8.在 Tera Term 上设置新连接。

确保Linduino USB已插入。

选择串行连接和正确的串行端口。

adc

图9.设置串行COM端口。

去 设置 à 串行端口.

adc

图 10.打开串行端口。

设置波特率。

adc

图 11.设置 COM 端口的参数。

将数据记录设置为文件 à 选择正确的文件。

adc

图 12.将数据记录设置为文件。

保持 Tera Term 打开以查看其他驱动程序写出的数据。

数据记录文件现在应包含零件捕获的所有数据。

现在数据已记录到 data.txt 中,请确保文件开头没有不完整或垃圾数据。这可能是由于在读取过程中开始的数据记录。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分