基于Arduino构建的4通道实时示波器

发布者:平凡的梦想最新更新时间:2023-03-08 来源: elecfans关键字:Arduino  4通道  实时示波器 手机看文章 扫描二维码
随时随地手机看文章

示波器是任何电子工程师或制造商的工作台上最重要的工具之一。它主要用于查看波形并确定施加在其输入端的信号的电压电平、频率、噪声和其他参数,这些参数可能会随时间变化。嵌入式软件开发人员还使用它进行代码调试,技术人员使用它在维修期间对电子设备进行故障排除。这些原因使示波器成为任何工程师的必备工具。唯一的问题是它们可能非常昂贵,以最低精度执行最基本功能的示波器可能高达 45 至 100 美元,而更先进和更高效的示波器的成本超过 150 美元。今天,我将演示如何使用Arduino和一款软件,该软件将使用我最喜欢的编程语言Python开发,以构建低成本的4通道Arduino示波器,该示波器能够执行部署一些廉价示波器的任务,例如显示波形和确定信号的电压电平。


工作原理

这个项目有两个部分;

数据转换器

绘图仪

示波器通常涉及施加到其输入通道的模拟信号的视觉表示。为此,我们需要首先将信号从模拟转换为数字,然后绘制数据。对于转换,我们将利用Arduino使用的atmega328p微控制器上的ADC(模数转换器)将信号输入的模拟数据转换为数字信号。转换后,每次的值通过UART从Arduino发送到PC,在那里,将使用python开发的绘图仪软件将通过绘制每个数据与时间的关系将传入的数据流转换为波形。


必需组件

生成此项目需要以下组件;

Arduino Uno(可以使用任何其他板)

面包板

10k 电阻器 (1)

LDR (1)

跳线

所需软件

Arduino IDE

Python 库:Pyserial、Matplotlib、Drawnow

图表

Arduino示波器的原理图很简单。我们需要做的就是将要检查的信号连接到Arduino的指定模拟引脚。但是,我们将在简单的分压器设置中使用LDR来生成要检查的信号,以便生成的波形将根据LDR周围的光强度描述电压电平。

按照下面的原理图连接组件;

poYBAGNqIH-AMaOkAAC2FqL_6us425.png

连接后,设置应如下图所示。

poYBAGNqIIKAIGAVAAC7wTNAn7w775.jpg

完成所有连接后,我们可以继续编写代码。

ArduinoOsclloscopeCode

我们将为这两个部分中的每一个编写代码。对于前面提到的绘图仪,我们将编写一个python脚本,通过UART和Plots接受来自Arduino的数据,而对于转换器,我们将编写一个Arduino草图,该草图从ADC接收数据并将其转换为发送到绘图仪的电压电平。

Python(绘图仪)脚本

由于 python 代码更复杂,我们将从它开始。

我们将使用几个库,包括;drawnow,Matplotlib和Pyserial使用前面提到的python脚本。Pyserial 允许我们创建一个可以通过串行端口进行通信的 python 脚本,Matplotlib 使我们能够从通过串行端口接收的数据生成绘图,drawnow 为我们提供了一种实时更新绘图的方法。

有几种方法可以在您的 PC 上安装这些软件包,最简单的是通过pip。Pip 可以通过命令行安装在 Windows 或 Linux 机器上。PIP 与 python3 打包在一起,所以我建议您安装 python3 并选中有关将 python 添加到路径的框。如果您在安装 pip 时遇到问题,请查看 Python 官方网站以获取提示。

安装 pip 后,我们现在可以安装所需的其他库。

打开Windows用户的命令提示符,Linux用户的终端,然后输入以下内容;

pip install pyserial

完成此操作后,请使用以下命令安装 matplotlib;

pip install matplotlib

Drawnow 有时与 matplotlib 一起安装,但可以肯定的是,运行;

pip install drawnow

安装完成后,我们现在可以编写 python 脚本了。

我们首先导入代码所需的所有库;

import time import matplotlib.pyplot as plt from drawnow import *

import pyserial

接下来,我们创建并初始化将在代码期间使用的变量。数组 val 将用于存储从串行端口接收的数据,cnt 将用于计数。每 50 个数据计数后,位置 0 处的数据将被删除。这样做是为了保持示波器上显示的数据。

val = [ ] cnt = 0

接下来,我们创建串行端口对象,Arduino 将通过该对象与我们的 python 脚本进行通信。确保下面指定的 COM 端口与 Arduino 板与 IDE 通信的 COM 端口相同。上面使用的115200波特率用于确保与Arduino的高速通信。为防止错误,还必须启用 Arduino 串行端口才能与此波特率通信。

port = serial.Serial('COM4', 115200, timeout=0.5)

接下来,我们使用;

plt.ion()

我们需要创建一个函数来从收到的数据生成绘图,创建我们期望的上限和最小限制,在这种情况下,基于 Arduino's ADC 的分辨率为 1023。我们还设置了标题,标记了每个轴并添加了图例,以便于识别情节。

#create the figure function def makeFig(): plt.ylim(-1023,1023) plt.title('Osciloscope') plt.grid(True) plt.ylabel('ADC outputs') plt.plot(val, 'ro-', label='Channel 0') plt.legend(loc='lower right')

完成此操作后,我们现在准备编写主循环,该循环在可用时从串行端口获取数据并绘制它。为了与Arduino同步,python脚本将握手数据发送到Arduino,以指示其准备读取数据。当Arduino收到握手数据时,它会回复来自ADC的数据。没有这种握手,我们将无法实时绘制数据。

while (True):

port.write(b's') #handshake with Arduino

if (port.inWaiting()):# if the arduino replies

value = port.readline()# read the reply

print(value)#print so we can monitor it

number = int(value) #convert received data to integer

print('Channel 0: {0}'.format(number))

# Sleep for half a second.

time.sleep(0.01)

val.append(int(number))

drawnow(makeFig)#update plot to reflect new data input

plt.pause(.000001)

cnt = cnt+1

if(cnt>50):

val.pop(0)#keep the plot fresh by deleting the data at position 0

Arduino 代码

第二个代码是Arduino草图,用于从ADC获取表示信号的数据,然后等待从绘图仪软件接收握手信号。一旦收到握手信号,它就会通过UART将采集的数据发送到绘图仪软件。

我们首先声明将应用信号的Arduino模拟引脚的引脚。

int sensorpin = A0;

接下来,我们初始化并开始波特率为 115200 的串行通信

void setup() {

// initialize serial communication at 115200 bits per second to match that of the python script:

Serial.begin(115200);

}

最后,voidloop() 函数处理数据的读取,并通过串行将数据发送到绘图仪。

void loop() {

// read the input on analog pin 0:

float sensorValue = analogRead(sensorpin);

byte data = Serial.read();

if (data == 's')

{

Serial.println(sensorValue);

delay(10); // delay in between reads for stability

}

}

完整的 Arduino 示波器代码在下面以及本文末尾给出,如下所示。

int sensorpin = A0;

void setup() {

// initialize serial communication at 115200 bits per second to match that of the python script:

Serial.begin(115200);

}

void loop() {

// read the input on analog pin 0:########################################################

float sensorValue = analogRead(sensorpin);

byte data = Serial.read();

if (data == 's')

{

Serial.println(sensorValue);

delay(10); // delay in between reads for stability

}

}

Arduino 示波器的实际应用

将代码上传到Arduino设置并运行python脚本。您应该看到数据开始通过python命令行流入,并且绘图随光强度而变化,如下图所示。

pYYBAGNqIIOAHPoeAAB5Hz-4b70766.png

Python Code:





import time

import matplotlib.pyplot as plt

from drawnow import *

import serial

val = [ ]

cnt = 0

#create the serial port object

port = serial.Serial('COM4', 115200, timeout=0.5)

plt.ion()


#create the figure function

def makeFig():

plt.ylim(-1023,1023)

plt.title('Osciloscope')

plt.grid(True)

plt.ylabel('data')

plt.plot(val, 'ro-', label='Channel 0')

plt.legend(loc='lower right')


while (True):

port.write(b's') #handshake with Arduino

if (port.inWaiting()):# if the arduino replies

value = port.readline()# read the reply

print(value)#print so we can monitor it

number = int(value) #convert received data to integer

print('Channel 0: {0}'.format(number))

# Sleep for half a second.

time.sleep(0.01)

val.append(int(number))

drawnow(makeFig)#update plot to reflect new data input

plt.pause(.000001)

cnt = cnt+1

if(cnt>50):

val.pop(0)#keep the plot fresh by deleting the data at position 0





Arduino Code:


int sensorpin = A0;

void setup() {

// initialize serial communication at 115200 bits per second to match that of the python script:

Serial.begin(115200);

}

void loop() {

// read the input on analog pin 0:########################################################

float sensorValue = analogRead(sensorpin);

byte data = Serial.read();

if (data == 's')

{

Serial.println(sensorValue);

delay(10); // delay in between reads for stability

}

}


关键字:Arduino  4通道  实时示波器 引用地址:基于Arduino构建的4通道实时示波器

上一篇:挑选示波器时要注意的几个重要参数
下一篇:信号发生器的介绍-主要功能和作用

推荐阅读最新更新时间:2024-11-11 09:45

STM32 F1 TIM8 4通道同时PWM出波 4通道同时PWM输出
void TIM8_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_I
[单片机]
e络盟、Microchip联合推出兼容Arduino的树莓派扩展卡
日前,Microchip开发出一款可兼容Arduino的树莓派扩展卡chipKIT Pi。 这款扩展卡可以使树莓派直接支持Arduino的应用开发。“chipKIT Pi简化了基于Arduino的树莓派应用程序的开发。”Microchip工具开发副总裁Derek Carlson表示。 chipKIT Pi售价为28美元。
[嵌入式]
e络盟、Microchip联合推出兼容<font color='red'>Arduino</font>的树莓派扩展卡
示波器交叉实时采样 评测示波器采样率与采样保真度的关系
5G一致性测试由 3GPP 无线接入网(RAN)工作委员会定义,用于确保设备和基站具备最低性能水平。 通过5G一致性测试是设备公司在将产品推向市场之前必须克服的最大 5G 挑战之一。 5G NR 可以在频率范围 1(FR1:410 MHz 至 7.125 GHz)和频率范围 2 (FR2:24.25 至 52.6 GHz)内工作。FR2 极大增加了测试的复杂性。测试用例的数量正急剧增长。同时,标准也在不断演进。一致性测试的具体要求和测试方法,目前定义的进度还不到 50%。 使用以下四个技巧来加速 5G 一致性测试: 1. 充分利用 3GPP RAN2 和 RAN4 文档的最低要求 5G NR 文档已经发布在 3GPP 网站
[测试测量]
<font color='red'>示波器</font>交叉<font color='red'>实时</font>采样 评测<font color='red'>示波器</font>采样率与采样保真度的关系
混合信号数字示波器支持实时眼图测量和抖动分析
普源示波器MSO8000系列是基于RIGOL自主知识产权的ASIC芯片和UltraVisionII技术平台的中高端混合信号数字示波器。示波器模拟通道带宽高达2GHz,集7种仪器于一身,具有500Mpts超大存储深度、良好的波形显示效果、优异的波形捕获率和强大的数据分析功能,多项指标均达业界一流水平,并且支持实时眼图测量和抖动分析,是业内最具性价比优势的2GHz混合信号数字示波器。 主要特色: 模拟通道带宽:600 MHz、1 GHz和2 GHz(单通道和半通道模式) 4个模拟通道,1个EXT通道,标配16个数字通道(需选购探头) 实时采样率最高达10 GSa/s 最高存储深度达500 Mpts(标配) 波形捕获率高于600,0
[测试测量]
Intel联合Arduino 迎接开放硬件
    自Arduino带起开放硬体潮流之后,其影响力逐渐扩大,就连科技大厂也开始重视这股潮流并加入其中,例如英特尔。英特尔执行长Brian Krzanich近期在罗马的Maker Fair中宣布,将PC业务扩展到开放硬体社群中,除了与Arduino公司达成一项合作协议,也同时发表Intel Galileo开发板。 附图 : 英特尔执行长Brian Krzanich Intel Galileo是新系列Arduino相容开发板(development boards)中首款采用英特尔架构的产品,合了英特尔技术的效能,以及Arduino软体开发环境的简易性,能执行开放原始码的Linux作业系统以及Arduino软体函式库,让用户能轻易
[手机便携]
泰克入门级TBS1000示波器系列新增4通道机型
中国 北京,2013年9月13日 – 全球示波器市场的领导厂商---泰克公司日前宣布,对其TBS1000示波器系列进行扩充,新增60 MHz、100 MHz和150 MHz带宽的三种4通道机型。泰克公司设计生产的TBS1000示波器附带5年保修,可在研发、教育、服务及制造应用中提供长期的可靠电子测试功能。 4通道TBS1000示波器支持全套最常用测量类型和分析功能,价格范围为厂家建议零售价人民币8250元(4通道60 MHz机型)至人民币14900元(4通道150 MHz机型)。这些仪器提供优异的性能和精度,采样率可达1 GS/s, DC增益精度为2% (可低至2 mV/div)。 TBS1000系列(TBS代表T
[测试测量]
恩智浦推出4通道双极化模拟波束赋形器,有效提高5G毫米波可靠性
全新4通道双极化模拟波束赋形器MMW9012K和MMW9014K可提高5G毫米波的波束控制精度,从而提升系统可靠性 中国上海——2022年6月17日——恩智浦半导体(NXP Semiconductors N.V.,)宣布为5G产品系列新增 4通道双极化模拟波束赋形器MMW9012K和MMW9014K ,以及一个天线系统开发套件。这两款模拟波束赋形器都采用恩智浦的硅锗(SiGe)技术,支持双极化,能够提升5G毫米波解决方案的可靠性,提高集成度,缩小5G基站的尺寸并减少成本,同时降低功耗。而天线开发系统则让OEM厂家能够轻松迅速完成面板设计,更快地打造5G天线系统。 产品重要性 5G毫米波解决方案通常部署在人口密集的城市地
[网络通信]
如何使用Arduino制作触控电容式钢琴
  本教程对于电子制造商来说将非常令人兴奋,因为我们将使用 Arduino Nano 设计我们自己的触控电容式钢琴。我们将在我们的钢琴上加入录音和回放功能。到目前为止,我们已经使用 Arduino 制作了一些钢琴项目,但这个项目完全不同,因为我们将使用电容式触摸键作为我们的钢琴键。因此,在学习如何打造有趣的钢琴演奏的同时,我们还将探索如何在 PCB 上设计电容式触摸键,因为您可以尝试让我们的按键看起来像真正的钢琴键。由于其制造商PCBWay ,PCB 看起来和工作起来都像钢琴,我们还将探索我们如何设计和制造此板,但在此之前,让我们探索电容式触摸传感器及其工作原理。   电容式触摸传感器如何工作?   我们知道,为了形成一个具有
[嵌入式]
如何使用<font color='red'>Arduino</font>制作触控电容式钢琴
小广播
最新测试测量文章
换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved