电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>基于Arduino Zero/MKR的示波器

基于Arduino Zero/MKR的示波器

2022-12-15 | zip | 0.03 MB | 次下载 | 免费

资料介绍

描述

大多数基于 Arduino Zero/MKR 的示波器是:

  • 使用计算机的声卡
  • 使用 USB 端口,但受 Bulk USB 传输协议的限制,即。在每毫秒 27 字节的传输请求 (USB 2.0) 之后每毫秒 64 字节

Arduino Zero/MKR 具有一个 350kSps 12 位 ADC考虑到它,这是很棒的规格然而,释放这种能力是另一回事。托管在 Arduino Zero/MKR 中的 SAMD21G18 提供 USB2.0 全速。

因此,访问 350kSps ADC 需要示波器解决方案来捕获这些样本,通过 USB2.0 线路传输它们并以 60Hz 的速率将它们投射到屏幕上,即在 16ms 的时间范围内。此外,为了允许准确定时采样,ADC 读数需要伴随时间测量。

该项目继续寻求破解这一挑战!

下图列出了该应用程序的主要功能:

pYYBAGOYLKSAHXCAAAJBs6JXHr8575.jpg
 

数字挑战:

每帧 60hz 或 16ms vs ADC:350kSps

=> 每 16 毫秒 5600 个样本,

1 个样本 = 开销字节(至少完整性)+ 12/16/8 位样本 + 12/16/8 位时间戳 = 3 到 6 个字节

=> 5600 x 3 到 6 字节每 16 毫秒 = 16 800 到 33 600 字节每 16 毫秒

USB2.0 全速提供:

  • 在 USB 批量传输中:每毫秒 64 字节 ~ 每 16 毫秒 1024 字节 --> 很少!!
  • 在 USB 同步传输中:1023bytes per ms ~ 16 368bytes per 16ms --> OK

以上(错误地)假设 USB 传输可以与 ADC 捕获并行发生。

=> 跨行实现多线程是可能的,因为有必要尽可能接近我们的目标。

openGL 要求:

  • 将 ADC 读数和时间戳数据转换为 {-1;1} 数据。我们想在另一个线程中的 CPU(判断为最快)上执行此操作。
  • 屏幕的建设。由 OpenGL 在 GPU 上完成

上述示例(假设读数准确)显示:

我们以 270kSps 采样(当我们采样时,请记住 Arduino 板上的 USB 传输也需要处理器时间)。

通过 USB 线收集和发送 1023 字节数据的时间大约需要 6.7 毫秒:这里的 1023 字节数据等于:1023 x 8 / (12 + 12 + 7) = 264 个样本重复 4 次以获得 1024 个样本(理论上它会只需 4 毫秒)。

这些数据在 15ms+.35ms+1.6ms ~2.1ms 内进行转换、构建和绘制。

openGL 的总帧速率为 9.2 毫秒(让程序尽可能快地运行)。因此,我们可以尝试将样本读数增加到 2048,而不会牺牲太多的屏幕刷新率。

正如我们上面所写的,我们需要实现多个线程以尽可能地允许并行处理。

该应用程序具有 3 个线程:

1) C#图形用户界面

(从其他线程中分离出来,让相对较慢的 UI 至少尽可能地干扰主任务,即捕获 USB 并在屏幕上投影)

2) C++ DLL OpenGL。用于包装 OpenGL 窗口的本机 C DLL。好处是代码易于移植到其他平台/ UI。OpenGL 是开源的,并且是目前最快的之一。

3) C++ DLL USB。用于包装 winUSB 驱动程序的本机 C DLL。选择的原因是 winUSB.sys USB 驱动程序安装在每台 Windows 计算机上,它支持同步数据传输。同步数据传输用于流数据。它为速度留下了数据完整性检查。通过这种方式,您可以每毫秒传输 1023 字节。

poYBAGOYLKiAY4lwAAC1MGQyeDs283.jpg
Wireshark 捕获同步数据传输
 

通过实施多线程方案,屏幕可以在另一个线程从 USB 线捕获新数据时构建,同时用户将鼠标悬停在用户界面上。

安装应用程序:

该应用程序不是那么用户友好的使用:

1) Arduino 板(或任何其他 ADC/USB 捕获设备)需要实现同步 USB 数据传输。默认情况下,ArduinoCore 不支持此功能。在本项目提供的草图中,我提供了 Arduino 代码,以使用等时 USB 接口扩展 ArduinoCore(同时不会失去仍然使用Serial.print功能的可能性)。该扩展可在常规 Arduino IDE 中使用(因此无需更改 ArduinoCore 本身)。

2) WinUSB.inf驱动文件需要在测试模式下运行Windows安装。这是因为没有驾驶证。

3) 目前我在 Github 上留下了未编译的 YetAnotherUSB 示波器软件。这是为了邀请用户进入代码并自行调整、编译和构建。

未来的改进:

YetAnotherUSB 示波器软件是在 VS 2019 上使用最新的 .NET 框架开发的,并在 64 位上进行了测试。换句话说,该应用程序相对未经测试且开发不足,无法在多个平台(32 位或 linux)上运行。

此外,多线程还没有变得超级健壮。(在极端情况下可能会出现无限循环,例如在读取时拔下 USB 等)

仍然缺少一些功能,即。FFT 分析、触发和记忆能力。

我希望这对您有所启发,并且您可以使用/借用代码进行自己的(进一步)开发。

继续制作!


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费