数字数据采集卡
设计用于更高数据速率的数据采集卡。
引言
数据采集卡从外部系统采集数据。采集卡可以采集模拟或数字数据。模拟卡将模拟数据转换为数字数据,以便计算机能够理解。数字数据采集卡以数字格式采集数据,然后以计算机可理解的格式将数据传输到计算机。
数字数据采集卡是一种适配器,它将特定外部系统的数据转换为计算机可以读取的格式。在本文中,我将解释一种通用的数字原始格式,然后解释数据采集卡的设计,接着是数据格式的类型,最后是数据采集软件。
数字数据格式
最常见的数字系统输出数据和一个同步时钟。数据位要么在时钟的上升沿存在,要么在时钟的下降沿存在。时钟决定了数据速率。如果时钟是900 KHz,那么数据速率是900Kbps。
让我们考虑以下比特流
10001010101000010
在这个比特流中,有17个比特,每个比特代表1或0。读取这个比特流时,无法确定数据字节在哪里,或者哪个位置是数据字节的第一个比特。它可能存在于第一个位置,也可能存在于第2个或第6个位置。为了找到那个字节的位置,我们在数据中搜索一个称为帧同步(Frame Sync)或更简单的说起始字(starting word)的字节流。找到帧字之后,我们就知道了帧中字节的第一个比特的位置。这个寻找第一个帧字节位置的过程称为帧同步。
什么是帧?帧是数据比特的集合。有时,您可能听说过数据包(packet)。基于数据包和基于帧的通信非常相似。与基于帧的通信相比,基于数据包的通信更复杂、更灵活,因为数据包提供了更多的数据检查和错误检测选项。
在继续之前,让我们看看帧的样子。例如,让我们考虑一个帧块
111111011111001000000001100010010000001101000101
111111011111001010010000100010000100101000010010
111111011111001001111000000101010010100101000100
这是以下十六进制值的二进制表示
FD F2 01 89 03 45
FD F2 90 88 4a 12
FD F2 78 15 29 44
这里 FD F2
是帧同步,其他4个字节是数据字节。如果您在任何字节的中间开始采集数据,就无法读取正确的数据流。例如
11111101 1111001000000001100010010000001101000101
这里您的系统从上面高亮显示的瞬间开始读取数据。正如您所看到的,您读取的第一个8位或字节不是您需要的正确比特,因为这里第一个8位或1个字节包含来自2个不同字节的部分信息。为了解决这个问题,我们首先找到帧同步,然后读取数据字节。这个过程称为帧同步。
帧同步
帧同步可以通过向数据中发送一个已知字来完成。接收系统在数据流中检查帧同步,当它找到帧同步时,接收系统就会正确地组织传入的数据。
根据我的经验,我见过一个数据采集卡,它既采集数据,又进行帧同步,然后将数据发送到PC端口。在该卡中,帧同步在卡的微控制器上完成。在这种方法中,数据速率受限于微控制器的速度和其他因素(如PC接口技术)的能力。
普通的微控制器无法实现大于1Mbps的数据传输速率。因此,在这种设计中,微控制器成为设计的瓶颈。这是使用板载微控制器进行帧同步的一个缺点。使用板载帧同步的另一个缺点是,如果帧同步发生变化,就需要修改板载帧同步逻辑。此外,卡可以处理的数据速率将是固定的,我们无法在不改变卡设计或微控制器代码的情况下更改数据速率。为了解决这些问题,我设计了一款数字数据采集卡和数字数据采集软件。
数字数据采集卡设计
为了解决板载帧同步的问题,我将帧同步的逻辑从卡转移到了PC软件。在卡级别,我只接收数据和时钟,并将它们写入PC接口。PC软件接收数据并在其中找到帧,然后处理所有帧。帧同步在PC软件内部完成。在帧同步之后,它搜索帧并从原始数据中解码帧。对于PC接口,我使用了FTDI USB模块。这个USB模块接收并行8位数据,并将该数据写入PC USB端口。
让我们看一下数字数据采集卡设计框图
如上图所示,我使用了1/8分频器向USB模块发送写选通信号,并使用串行转并行转换器将并行数据写入FTDI USB模块。
此设计使我能够以不同的数据速率采集数据。唯一的限制因素是USB模块,它可以传输大约8Mbps的数据。因此,使用此设计,我可以采集从1kbps到8Mbps的数据。
此外,数据速率限制取决于接口而不是卡设计,因此我可以实现FTDI USB模块支持的最高速度,即8Mbps。较新的模块支持更高的数据速率,您可以简单地开始使用较新的模块,而无需更改卡的太多设计。我使用了FTDI UM245R开发模块。它是一个并行转USB模块,并利用FIFO通信。因此,PC应用程序更容易处理数据。
此设计的另一个好处是它是可配置的,这意味着如果数据速率、帧格式、帧大小或帧同步发生任何变化,此卡的*设计*将不会改变。我们可以通过PC软件更改这些参数或选项。
此外,如果电流要求低于500mA,我们可以从USB的总线电源驱动电路。由于我们不使用任何微控制器或其他需要更多电源的IC,我们可以从USB总线电源驱动我们的电路,因此无需额外的外部电源,并且卡设计变得非常便携。
卡的电路图
下面是电路的原理图。我使用了光耦合器将外部系统与我们的采集卡隔离,而其他功能与框图描述中的功能相同。
这是文本。
PC软件
PC应用程序可以通过两种方式访问设备;一种是使用VCP驱动程序,另一种是使用D2XX驱动程序。在VCP中,我们将USB配置为虚拟串行端口。在虚拟串行端口模式下,数据速率为220Kbytes/sec,而在D2XX驱动程序模式下,数据速率为1Mbytes/sec。
我们使用.NET和C#来处理USB数据。在虚拟串行端口模式下,设备就像一个串行端口一样工作,我们使用.NET框架的SerialPort
类来访问数据。如果我们想使用D2XX驱动程序,FTDI提供了一个包装器来访问USB端口。
软件设计中的一个主要挑战是在数据字节中找到帧同步。由于帧同步可以从字节内的任何比特位置开始;我们必须重新排列所有数据,将帧同步的起始比特放在字节的起始比特位置。这种定向对于实时显示和数据处理是必要的。PC软件的描述将在另一篇文章中讨论。
结论
在本文中,我讨论了数字数据采集卡的设计及其与其他设计的优势。我在我的许多项目中都使用了这张卡,而且它工作得非常好。