我的目标是从示波器开始制造基于Pi的仪器。所以我读了答案
似乎可以以非常低的采样率读取模拟输入,但是我想知道是否可以达到每秒百万个采样的速率。如果有可能,连续数据采集可能会很困难,因此我可以不用它。皮会为此配备不足吗?我想先观察连接到Pi的显示器上的波形,然后再观察我的移动设备上的波形(而Pi将无线数据传输给它们)。
我在片上系统上的经验告诉我,这些系统在连续的I / O上可能很容易饱和。Pi也是如此吗?
我的目标是从示波器开始制造基于Pi的仪器。所以我读了答案
似乎可以以非常低的采样率读取模拟输入,但是我想知道是否可以达到每秒百万个采样的速率。如果有可能,连续数据采集可能会很困难,因此我可以不用它。皮会为此配备不足吗?我想先观察连接到Pi的显示器上的波形,然后再观察我的移动设备上的波形(而Pi将无线数据传输给它们)。
我在片上系统上的经验告诉我,这些系统在连续的I / O上可能很容易饱和。Pi也是如此吗?
Answers:
让我们对示波器有一个大致的了解:
首先,我们有模拟前端。在这里,我们为探头提供了阻抗匹配网络(但探头也必须具有电容匹配部分),衰减部分(非常重要,因此我们不会使ADC过载或让高压进入),触发并连接至模数转换器。我不会过多地谈论这一点,因为我不太喜欢模拟东西,但是最重要的是:在这一部分,Pi无法做任何事情。
接下来,我们有模数转换器部分。每个通道至少需要一个ADC。更多可以用于更高的采样率。在传统范围内,ADC连接到ASIC或FPGA器件。之所以使用它们,是因为传统计算机的实时性不足以处理ADC提供的数据,实时性还不够(并且不能将实时性与快速性混淆!)。然后将该数据存储到某种RAM中。有些设备将使用静态RAM,而另一些设备将使用动态RAM。通常,SRAM方法是更传统的方法,并且在大型制造商中也可以看到,而DRAM的使用似乎是在较便宜的中国设计单位中看到的较新方法。
RAM的数量及其速度将决定可以存储多少样本。几乎总是ADC是8位ADC,因此对于一个兆采样,我们将需要8 b乘以100000 = 8 Mb或1 MB RAM。对于一个MSa / s,我们需要可以这种速度工作的RAM。今天,这应该相对容易实现。FPGA通常直接驱动RAM,并负责在其中存储数据。它的工作原理是在仍然有空房间的情况下填充示例内存,然后在空间满时将其覆盖。当每个通道有多个ADC时,FPGA将对其进行设置,使其首先开始采样,然后在下一个时钟秒开始,依此类推。当他们完成采样后,第一个ADC的采样将首先被写入存储器,然后是第二个ADC的采样。这将使ADC看起来比实际采样速度快。
本节的下一点是样本应在时间上等距。这是在示波器中使用PC的主要问题,也是FPGA和ASIC占主导地位的原因。如果某些样本迟到或早,则屏幕上显示的图像将不正确。
在这一部分中,我们看到了Pi的第一种可能的用法。如果采样率足够低,我们也许可以直接从Pi驱动ADC,并将其结果存储在Pi的RAM中。我们能走多快取决于ADC与Pi的连接方式以及Pi进行I / O的方式。据我了解,Pi的I ^ 2C端口的最高速度为150 MHz(在GNU / Linux中实现这一目标的难易程度是另一个问题),而最高的标准速度为5 MHz,而SPI的最高速度为Pi是250 MHz。我不确定SPI的最高标准速度是多少,但是我希望它最大可以在100 MHz范围内。
因此,从理论上讲,我们在Pi上具有足够的速度来在低MSa / s范围内运行ADC。我感觉RAM速度在这里不会成为问题,但是我没有任何数据可以备份。如果真是这样,那么我们将比通常的范围有一个很大的好处:将有大量的捕获内存可用。例如,如果我们将32 MiB的RAM专用于程序用于样本存储,而我们有两个通道,那么每个通道将有16 MiB的空间,或者每个通道多于134 Mb或134 megasamples。即使到了今天,许多示波器也无法做到这一点。
缺点是我们需要对操作系统进行大量修改才能在此处获得准确的采样。我没有使用实时Linux的经验,所以我不知道这会多么容易。
无论如何,让我们继续下一步。因此,我们有一个填充RAM的采样系统。下一部分是触发器。触发器与屏幕刷新率密切相关。它基本上所做的是找到一个有趣的样本并将其保存在内存中。示波器触发时,它将在触发后继续采样,直到它填满了内存,然后将其发送并进行处理并显示在屏幕上。在处理数据时,采样系统(如果经常冻结)并等待数据显示。这就是为什么低端示波器具有较低的刷新率,而高端示波器将具有特殊的高刷新率显示,并且花费更少的时间等待数据被显示。
在本节中,通常会有另一个ASIC或FPGA对样本进行信号处理,如果示波器支持,则可以进行任何协议解码,并实际驱动显示器本身。
从我可以看到的那部分来看,Pi确实可以发光。它可以驱动漂亮的1920x1080显示屏(示波器通常在800x600像素以下),并且可以很好地进行协议解码。我能看到的唯一问题是速度以及处理过程如何影响延迟时间。如果我们选择较低的刷新率,则可以得到一个非常好的逻辑分析仪。
最后,介绍一下USB示波器以及USB对于这种类型的项目通常来说是不好的原因:传统的USB示波器进行输入和采样,并将采样数据发送到PC上以进行主机应用程序的处理。基本上,Pi也可以完成类似的操作。通常,PC应用程序的设计不当,并且充满错误。下一个不好的部分是USB本身。它被宣传为快速总线,在“高速”模式下可以达到480 Mb / s。事实是,找到能够支持如此高速度的USB控制器极为罕见(平均速度据我所见约为250 Mb / s),并且它作为协议并不十分适合任何实际应用。时间申请。首先,它在集线器上的所有设备之间共享(并且Pi仅具有一个USB端口,以太网+ USB集线器连接到该端口),具有相对较高的开销(与SPI相比)和较高的延迟(请记住,每个采样以1 MSa / s的速度仅持续1 µs,因此我们必须在板上保留内存,因为我们无法实时发送采样通过USB)。最终,使用USB将使数据采集成为另外一个USB示波器的一部分,这就是我们失去使用Pi的任何好处:传统台式计算机更常见,更快速,更容易获得并且具有更好的USB功能。
编辑 我读过Gert van Loo的最新文章,据他介绍,Pi的I ^ 2C的实际速率为400 kHz,而SPI的实际速率为20 MHz。
我们发现Raspberry Pi是运行此类项目所需软件的绝佳平台。问题是首先将信号放入RPi,并在运行O / S和应用软件的同一CPU上执行高速无抖动实时信号捕获。我们的解决方案是BitScope Raspberry Pi示波器,该示波器将BitScope(用于高速混合信号波形捕获)与运行所有必需软件的Raspberry Pi配对。
注意:这更像是一个“大声思考”的文本,而不是真正的答案
不久前,这个想法也浮现在我的脑海,我仍然喜欢这个总体想法!
据我所知,高端示波器是15年来(甚至更长),只是带有大量专用高速I / O的计算机(PC)。我认为,当将类似的I / O设计/连接到RPi时,结果可能会令人惊讶。
恕我直言,做到这一点的一种好方法是让RPi仅仅存储和显示收集的数据(例如通过USB端口接收),并让一些专用硬件进行高速测量。然后,RPi还可以基于用户输入或类似内容控制此高速测量单元。
在RPi的第一个版本中,USB端口存在/存在一些问题,最近我没有搜索这些问题是否已经解决。我还听到有谣言说RPi的新2.0版本应该没有这些问题,但是我也没有检查过这个谣言。
我认为由于没有I / O端口数量以及整个OS都在上面运行(这限制了实时选项),没有任何外部(专用)硬件的结果是有限的。除非您打算编写自己的操作系统?
同样,为此目的使用例如I2C芯片将没有足够的速度来完成真正出色的工作。SPI已经提供了更多的带宽(从我的头顶到最高100Mhz),但是我会选择USB,如果需要压缩,或者在发送数据之前使用一些好的编码方案,以获得更大的带宽。
因此,我认为这是有可能的,但是需要添加到RPi的硬件会比RPi本身贵得多。
最后但并非最不重要的一点(在我停止对此主题做白日梦之前),如果在互联网上进行搜索会导致某些人已经在忙于此,我不会感到惊讶。
答案是肯定的。
它足够强大!但仅适用于某些频率-由于存在限制,已经指出。
所以!->您必须问自己要测量什么?
振荡器的价格范围很广,从简单的低频(价格为5美元),到其他振荡器可以处理的50Ghz +,价格与一所小房子一样多!75,000USD-100,000USD!
我认为Raspberry足以测量亚千兆级的频率,例如433MHz无线信号,低速CPU总线通信,TTS / UART,I2C调试-确实不多。而且更高的频率将不会真正准确,因为Raspberry在设计上无法运行实时OS。因此,您将需要从操作系统(或如上所述的外部实时设备-开始,那有什么意义呢?)
但是,如果您真的想测量信号,则可以购买与Raspberry规格相当的价格合理且价格合理的设备。但是已经设计好,功能齐全,在设计上确实很成熟,并证明在业余爱好者环境中很方便。
此处无需重新发明轮子。例如,单价低于100美元的DSO Nano。
DSO Nano Quad Channel价格低于200美元
然后,Raspberry或类似设备无法做什么!
而且花了一笔小钱...
您可以将我们的TiePie工程 Handyscope HS5示波器/任意波形发生器之一连接到USB端口。可下载为Raspberry Pi编译以同时使用一个或多个示波器的库。仪器使用自己的定时和存储器,因此不会造成性能损失。所以是的,Pi足够强大,可用于示波器项目。
示波器的主要规格:2通道,14位,500 MS / s,250 MHz带宽,20 MS / s 14位连续无间隙流,每个通道32 MS内存,1 ppm时基精度。
任意波形发生器的关键规格:1 µHz至30 MHz波形,240 MS / s,14位,64 MS存储器,-12至12 V输出(24 Vpp),1 ppm时基精度。
最好的机会是尝试sigrok及其前端libsigrok是否可以在Pi上编译,然后购买一些兼容的示波器硬件。这样,您可以每秒捕获多达24兆样本的信号。有了足够的知识,您就可以以任何需要的方式自定义软件,包括无线传输到移动设备。
如果您不介意局限于音频,我会使用便宜的MCP3202 12位双通道A / D转换器通过spidev在pi上进行获取,并使用pydatascope显示通过TCP套接字在以太网上传递的数据。Pydatascope还可以充当频谱分析仪!
我对pydatascope开源代码进行了相对琐碎的更改,使其具有双通道,主要是因为它很简单,并不是我真正需要它。
如果您有任何疑问,请发布后续消息或直接邮寄给我,我们将很乐意为您提供帮助。