linux 虚拟示波器,DIY示波器!网页浏览器查看波形,BeagleBone® Black还能这么用

859b6eeec8ea

本项目DIY一款实时以太网数字存储示波器(DSO),连接外部1GHz采样头实现等效时间采样功能。各硬件协同运作,可实时跟踪输入信号,提供捕获的重复高频信号。该DSO具有特性:8位、250MS/s、100MHz带宽、双通道、外部触发、无需安装软件(仅需要Web浏览器)、软件控制面板和WiFi连接能力。

859b6eeec8ea

859b6eeec8ea

实时示波器

1.模拟前端和ADC

输入电路的输入阻抗为1MΩ、10pF和具有过压保护。基于Web的GUI(图形用户界面)支持DC/AC选择、DC偏移调整、增益/衰减(垂直分割)、触发源选择等。一个8位单片模数转换器(ADC)以250MS/s采样率将模拟信号转换为LVDS(低压差分信号)数字输出。在ADC驱动器和ADC之间实现七阶Butterworth抗混叠滤波器(eventh-order Butterworth anti-aliasing filter),旨在消除不必要的杂散带外信号(spurious out-of-band signals)。

859b6eeec8ea

859b6eeec8ea

859b6eeec8ea

2、FPGA

本设计使用Spartan-6 FPGA,该FPGA提供低风险、低成本和低功耗之间的最佳平衡,适用于成本敏感型应用。该FPGA具有大量Block RAM作为数据缓冲区或FIFO(先进先出),存储ADC采集的数据,具有许多IO(LVDS IO),从而可以并行处理ADC LVDS输出,并与PRU(可编程实时单元)快速并行通信。FPGA突出特性是并行性,这意味着与BeagleBone® Black通信、ADC接口以及向PRU传输数据可同时执行,这个独特性确保系统的高性能和鲁棒性。

859b6eeec8ea

3、BeagleBone® Black和PRU

BeagleBone® Black是一个信用卡大小的低功耗开源硬件,也是具有社区支持的面向开发人员和业余爱好者的开发平台,可在Linux上运行,在10秒内启动。与其他类似硬件不同,BeagleBone® Black可以很好地访问大多数PRU,或微控制器引脚,这些是硬件扩展所需的。可编程实时单元和工业通信子系统(PRU-ICSS,嵌入在Beaglebone® Black处理器中)包括:双32位RISC内核(可编程实时单元或PRU)、共享存储器和指令存储器。它们既可以独立运行,也可以相互协作,还可以与设备级主机CPU协作,从而可以与FPGA建立自定义和独立的通信链接。

859b6eeec8ea

859b6eeec8ea

4、基于Web的软件

GUI通过以下方式嵌入到动态网页(用HTML和JavaScript编程)中:Node.js软件库。Node.js不仅最大程度提高吞吐量和效率,还避免开发困难和复杂性。基于Web的GUI在不同操作系统和设备上支持不同Web浏览器,无需额外插件和麻烦的软件安装。借助基于Web的GUI,用户可以完全控制模拟前端。大多数控制功能都可以通过鼠标(或使用智能手机的手写笔)拖放操作来访问,甚至可以通过网页对FPGA进行编程。

859b6eeec8ea

(1)FPGA数据传输到PRU

通常,PRU和FPGA不能有效相互通信,两者甚至在设计中使用不同开发语言:FPGA用VHDL编程,PRU用C语言和汇编器。因此,处理两者接口可能是一个挑战。首先,FPGA没有用于与PRU或微控制器通信的逻辑模块。因此,必须从头开始设计合适的逻辑模块。其次,PRU和FPGA之间的通信是异步的。因此,需要特别注意将PRU重新同步到FPGA时钟域。最后,接口和PRU总线都存在瓶颈问题。在PRU和FPGA之间传输信息通常需要PRU总线的周期,并且会占用PIO资源,影响传输。

如果需要外部RAM,也要注意避免外部RAM出现瓶颈。在本设计中,通过自定义并行通信链接保证正确的数据传输:基于8位并行数据总线、使能、时钟和暂停/启动信号线。PRU用汇编代码编程,并在共享RAM存储器的帮助下将数据传递到CPU(CPU和PRU都可以访问8KB数据RAM0、8KB数据RAM1和12KB共享RAM)。PRU交替使用两个8KB数据缓冲区RAM0和RAM1,存储来自FPGA的数据。要启用PRU,应首先配置Linux设备树(DT)。设备树(DT,Device Tree)和设备树覆盖图(Device Tree Overlay)是描述系统硬件的一种方式,描述可用引脚、如何复用特定引脚以及使用哪种驱动器。较新的BeagleBone® Black随DT一起发布,现在使用的是3.8 Linux内核。

(2)Node.js的C++插件

插件是动态链接的共享objects。他们可以为C和C++库提供粘合。V8 JavaScript是C++库,用于与JavaScript交互:创建对象、调用函数等。大部分记录在v8.h头文件(Node源树中的deps/v8/include/v8.h)中,该文件也可以在线获得。在此步骤中,实现名为addon.cpp的C++插件,以将C++中的功能映射到Node.js。

(3)使用Socket.IO库的Web服务器

Socket.IO用于实现不同浏览器和移动设备中的实时应用,从而模糊不同传输机制之间的差异。它是JavaScript中100%的实时免维护代码,包含两个部分:在浏览器中运行的客户端软件库和用于node.js的服务器端软件库。这两个组件都具有几乎相同的API。像node.js一样,是事件驱动的。通过将用于socket.io的JavaScript嵌入到网页中(以HTML编写),用户/客户端只需打开网页即可初始化socket。初始化后,用户可以完全控制前端示波器。为了减轻网络服务器的负担,只有网页上的Canvas 2会定期使用来自前端的新传入数据,进行定期更新。

859b6eeec8ea

(4)通过BeagleBone® Black编程FPGA

既然是基于浏览器的设计,可使用拖放进行编程。只需将编程文件从桌面拖到浏览器中的beagle中即可,没有菜单或CLI。对像Spartan-6 lx9这样的小型FPGA进行编程仅需几秒钟。FPGA具有JTAG接口,BeagleBone® Black运行某些软件可以获取编程文件(*.xsvf),通过连接到目标设备JTAG接口的I/O引脚发送该文件。Web界面使用Node.js。

859b6eeec8ea

等效时间采样

采样系统的一般需求源自放大器的增益带宽限制。实时示波器的带宽限制为100MHz,使用外部采样头的目的是解决这些限制,并处理高频重复信号的能力。下图显示采样头包括两部分:上方的触发电路和下方的S/H(采样和保持)电路。

859b6eeec8ea

(1)触发电路

输入信号不均等地分为两部分。一小部分功率进入触发电路,由第一个比较器产生一个单触发脉冲。触发脉冲使电容器放电,启动锯齿波或快速线性斜坡。调整第二个DAC,可以精确设置触发脉冲和第二个比较器的输出脉冲之间的时间延迟。第二个脉冲称为延迟触发脉冲,经过整形,形成打开和关闭采样门(sampling gate)的采样脉冲。尤其是第一个采样门的采样脉冲非常关键。在固定的额外延迟后,延迟的触发脉冲将重新整形,以驱动第二个采样门,对于采样门而言,脉冲的重要性并不高。

859b6eeec8ea

(2)采样脉冲

为了打开或关闭第一个采样门,超短脉冲和宽带脉冲是必不可少的。产生超宽带脉冲的基本原理是电荷存储和通过输入触发信号进行放电。将固态组件用作锐化脉冲,比如雪崩晶体管、阶跃恢复二极管(SRD)、隧道二极管。本设计要求脉冲满足以下规格:8V、50Ω阻抗匹配、200ps脉冲宽度以及高达数MHz重复率。

859b6eeec8ea

859b6eeec8ea

859b6eeec8ea

(3)采样并保持

本设计中采用顺序采样方法。由第二DAC设置的触发电平逐渐增加,从而形成缓慢的斜坡。对于第二个比较器的每个触发点,进行多个采样,使反馈环路进入新的稳定状态。一旦环路输出电压稳定,ADC输出值便适合进一步处理。一个这样的采集所需的样本数量取决于环路参数上的前馈增益和反馈衰减。每单位等效时间获取的样本数取决于输入信号的重复率和系统的保持时间。

以精确的重复频率,在很短的时间间隔内打开一个开关测量信号电压。此开关称为采样门。有很多采样门电路(单二极管、双二极管、平衡和不平衡、CMOS等),速度和精度足以满足设计目的。本设计采用二极管桥作为采样门。平衡结构意味着,当采样脉冲和偏置电压完全对称时,差分采样脉冲将被抵消。在这种情况下,在输入和输出端将没有采样脉冲,并且采样门的泄漏(leakage)可以大大减少。对称性还抑制两个采样脉冲中出现的共模噪声。这样,SNR采样门的信噪比也得到增强。

859b6eeec8ea

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值