原创 用Python编程语言开发虚拟示波器

2022-9-14 23:54 741 1 1 分类: 测试测量

本文旨在演示用户如何使用ADI ADALM2000和简单的开源编程语言Python开发所需的虚拟实验室仪器。通过Python与ADALM2000相结合,可以开发多种虚拟实验室仪器,如示波器信号发生器、数字万用表等。其中,示波器作为物理电子实验室中常用的基本仪器之一,是个不错的入门选择,将在下文中重点讨论。

什么是示波器?

示波器可用于常见电路和复杂电路的信号分析,是电子工程的重要组成部分。如今的示波器能够与计算机连接,因此在示波器中捕获的信号能够以数字形式存储,供日后分析。



图1.示波器示意图

示波器用于直观呈现模拟或数字波形的电压和时间特性。前面板控件(放大器触发、扫描时间和显示屏)用于调整显示内容,以更好地直观呈现信号。

示波器可展示信号输入在特定时间段内的行为,这对于分析常见电路至关重要。此外,它有助于验证这些电路的功能。这也是示波器成为不可或缺的电子实验设备的主要原因。ADI允许工程师定制自己的示波器来满足需求,从而可以改进特定电子电路的分析。

ADALM2000是什么?

ADALM2000是主动学习模块,具有数字示波器、函数发生器、逻辑分析仪、电压表、频谱和数字总线分析仪,以及两个可编程的电源。对于基础用户或学生,可以将Scopy与ADALM2000连接。对于应用开发人员,可使用libm2k库开发应用接口。对于固件开发人员,还可以选择开发能够直接在ADALM2000上运行的定制软件或HDL。

开始使用

安装Python和PyCharm

Python是功能强大、简单易学的开源编程语言。Python可从Python官方网站下载。如果不确定要使用哪个版本,请选择Python 3.7。

Python可在没有集成开发环境(IDE)的情况下使用,但为了更轻松地下载库和进行调试,可以使用PyCharm。PyCharm是一个IDE,为开发人员提供多个必需的工具,因而是用于Python开发的热门IDE。在JetBrains官方网站下载最新版PyCharm Community。

安装库

Python库包含可用于特定应用的方法或函数。在本文中,将使用libm2k、matplotlib和NumPy。

Libm2k

若要使用Python与ADALM2000交互,需要安装libm2k库。这是C++库,带有可用于Python、C#、MATLAB®和LabVIEW®的绑定,具备以下功能:

○ AnalogIn用于示波器或电压表。我们将重点介绍该功能。

○ AnalogOut用于信号发生器。

○ Digital用于逻辑分析仪或模式发生器。

○ PowerSupply用于恒压发电机

○ DMM用于数字万用表。

安装Libm2k

安装该库的一种方法是按照以下步骤操作:

○ 转到发布页面。

■下载该库的最新可执行版本。示例:Libm2k-0.4.0-Windows-Setup.exe

○ 运行可执行文件。当“设置”窗口提示选择其他任务时,请务必选择安装libm2k Python绑定。



图2.Libm2k安装窗口

○ 安装结束。Libm2k将安装在Python的默认环境中。

Matplotlib

若要创建示波器显示,您需要使用matplotlib库。该库备受欢迎且易于使用,用于在Python中定制和显示可视化内容。有关该库的详细信息,请访问matplotlib网站。

NumPy

简单的示波器仍将需要大量数学计算。NumPy库可以为复杂的计算提供简单的函数。有关该库的详细信息,请访问NumPy网站。

安装Matplotlib和NumPy

若要安装matplotlib和NumPy,请在PyCharm中按照以下步骤操作:

○ 转到“文件”>“设置”>“项目解释器”。

○ 点击“设置”窗口右侧的+图标。

○ 将出现“可用软件包”窗口。在搜索框中,搜索matplotlib和NumPy。

○ 指定要安装的版本(选择最新版本)。

○ 点击安装软件包按钮。



图3.在PyCharm中安装库包

硬件设置

在开始编码前,我们先设置硬件组件。需要使用以下硬件组件:

○ 信号源(或信号发生器,如适用)

○ ADALM2000

○ 探头和限幅器

如果信号发生器可用,请按照图4中显示的配置,使用探头和/或限幅器将ADALM2000设备连接到通道1和通道2。



图4.使用信号发生器和ADALM2000的实际设置

表1.引脚配置



对于其他可用的信号源,也可以遵循相同配置。最后,通过USB端口将ADALM2000设备连接到PC。

简单的虚拟示波器

在这一部分将逐个代码块介绍程序,还将讨论代码的作用,并说明以这些方式编写代码的原因。随后的部分中将演示修改基础代码,以添加更多功能,从而满足开发人员用例要求。

首先,导入将用于开发虚拟示波器的三个库(libm2k、matplotlib和NumPy)。



统一资源标识符(URI)是连接到PC的每个ADALM2000的唯一标识符。该代码块确保ADALM2000连接到PC。如果没有ADALM2000设备插入PC,代码将自动退出。



通过检测到的URI连接到ADALM2000。“uri[0]”是在连接了多个设备的情况下检测到的第一个ADALM2000设备的URI。



对ADC和DAC运行校准。这是确保获得准确测量的重要步骤。



设置采样速率和时长。可用采样速率有1 kHz、10 kHz、100 kHz、1 MHz、10 MHz和100 MHz。采样速率是在1秒内获得样本的次数,时长是获得这些样本的持续采样时间。例如,如果将采样速率设为1000,时长设为3,那么每秒将获得1000个样本,并持续采样3秒。因此,共有3000个样本。



启用并将通道1设置为示波器的模拟输入。



Linspace用于创建等间距的样本阵列,并可使用该NumPy函数创建时间x轴数据阵列。该函数的第一和第二个参数分别表示阵列的起始和结束值。最后一个参数是希望在起始和结束值范围内生成的样本数。

在该示例中,起始值是0,结束值是设置的时长,也就是3。对于样本数,将duration与sample_rate相乘,即可获得所需的总样本数,也就是3000个样本。这3000个样本将

均匀放置在0和3之间。该数组将存储在time_x中。

data_y存储我们使用ADALM2000设备收集的波形样本。通道1的样本存储在data_y[0]中,通道2的样本存储在data_y[1]中。为了显示精确的波形频率,必须使用与time_x相同的样本数量。



创建将处理的图形。plt.subplots函数将返回图形对象(存储在g中)和轴对象(存储在ax中),这些对象将用于自定义整个图形。

这里可以添加网格线,作为波形的参考坐标。添加轴标签和y限制,以添加有关图形的更多细节。



显示图形。



在代码末尾销毁上下文。



运行代码,将会看到类似图5的图形。



图5.单通道正弦波输出;一个信号发生器输出:10 Hz,2 V p-p

双通道虚拟示波器

在这一部分,将使用上一部分中的代码,并添加更多代码块,以创建双通道虚拟示波器。

若要添加另一个通道,请复制ocsi.enableChannel和ocsi.setRange行代码,并将第一个参数从



在创建图形时,为通道2添加另一个图形。通道2的数据在data_y[1]阵列中。也可以自定义两个图形的颜色,以便轻松区分二者。在该示例中,通道1使用浅珊瑚色,通道2使用钢蓝色。



运行代码,应该会得到类似图6的结果。



图6.双通道正弦波输出。通道1信号发生器输出:10 Hz,2 V p-p;通道2信号发生器输出:5 Hz,3 V p-p。

虚拟示波器的其他功能

在这一部分,将为虚拟示波器添加其他功能,以提升交互性。Matplotlib提供我们可以使用的多个小部件。在该示例中,将使用文本标签和滑块小部件,并将继续使用上一部分中的代码。

为matplotlib滑块添加另一次导入。



将时间和数据阵列转换为NumPy阵列。在下一个代码块进行的计算中,将使用这些阵列。



获取所有波形数据后,提取这些波形的特性将不在话下。在以下代码块中,从获取的两个通道的数据中提取了Vpp、Vave和Vrms。要计算Vpp,将data_y numpy阵列中找到的最大值和最小值的绝对值相加。要计算Vave,只需用Vpp除以pi。要计算Vrms,用Vpp除以2乘以√2。



该代码块与前面部分类似。唯一的区别是,为图形使用NumPy阵列,而不是使用原始阵列。同时还根据图形创建了波形对象。稍后将使用这些对象。



为了在图形中显示计算的Vpp、Vave和Vrms,将利用matplotlib库中的文本标签小部件。创建字符串标签label_ch1和label_ch2,然后连接这两个字符串,以创建最终标签n_label。找元器件现货上唯样商城通过使用plt.text创建文本标签。第一和第二个参数(0.2, 3)是文本的x和y位置。第三个参数是要显示的字符串。第四和第五个参数分别是文本和框的样式。



接下来,创建偏移滑块。该滑块用于调整波形的参考电平。将主图形向左调整,为滑块留出空间。plt.axes定义滑块的尺寸、位置和表面颜色。Slider函数用于为偏移滑块创建具有特定特性的对象。



创建update_offset函数,并将其注册到offset_slider对象。每次更改滑块的值时,该函数都会向波形添加偏移量。



运行代码,将会看到类似图7的图形。



图7.带偏移滑块的默认双通道正弦波输出

尝试使用滑块调整偏移量。将会看到波形实时上下移动。



图8.调整偏移量滑块(向左滑动),用于调整两个通道输出的偏移量

总结

本文解释了拥有虚拟电子实验室的重要性和便利性。文中还演示了如何使用ADALM2000和Python开发虚拟示波器。讨论了软件要求和硬件设置,并提供了3个示例供参考。

关于ADI公司

ADI是全球领先的高性能模拟技术公司,致力于解决最艰巨的工程设计挑战。凭借杰出的检测、测量、电源、连接和解译技术,搭建连接现实世界和数字世界的智能化桥梁,从而帮助客户重新认识周围的世界。详情请浏览ADI官网analog.com/cn

关于作者

Arnie Mae Baes于2019年12月加入ADI公司,担任固件工程师。在进入公司的第一年,她重点负责GUI和固件开发。2020年12月,她加入消费电子软件工程部门,现在重点负责固件测试开发。她毕业于菲律宾八打雁国立大学,获电子工程学士学位。联系方式:arniemae.baes@analog.com。

Christian Jason Garcia是ADI公司的一名固件验证工程师,工作地点在菲律宾垂亚斯将军城。他拥有圣托马斯大学电子和通信工程学士学位,于2018年11月加入ADI公司。他在电动交通部门专门负责SmartMesh网络的软件测试和系统验证。联系方式:christian.garcia@analog.com。

作者:ADI软件系统工程师Christian Jason Garcia & Arnie Mae Baes


文章评论0条评论)

登录后参与讨论
相关推荐阅读
qwerty1394 2022-09-25 22:23
IGBT安全工作区(SOA)知多少
作为电力电子研发工程师,最不想见到的画面之一一定有下面这样的图片,完了,BBQ了……​编辑切换为居中添加图片注释,不超过 140 字(可选)图1.IGBT单管和模块的典型失效图片失效器件送到原厂做FA...
qwerty1394 2022-09-25 22:06
那些与波形发生相关的重要DAC规格!
今天我们就来分析下这些与波形发生相关的重要 DAC 规格。建立时间假设 DAC 由真实的宽带低阻抗信号源(参考电压和接地引脚)驱动,那么它会迅速建立。因此,乘法 DAC 的压摆率和建立时间主要由运算放...
我要评论
0
1
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /4 下一条