APP下载

基于ARDUINO与MATLAB的简易示波器研制

2015-02-11陆强颜加仁林定能沈欢胜

科技资讯 2014年29期
关键词:跨步电压

陆强++颜加仁++林定能++沈欢胜

摘 要:利用Arduino标准化单片机集成模块和Matlab软件,从硬件和软件两方面论述了一种简易示波器的设计思路,该示波器可以测量直流和交流电压波形。Arduino将数据采集后,通过串口传输到PC机,利用PC机的Matlab程序,将数据进行图形化显示,从而构成示波器。

关键词:Arduino Matlab 跨步电压 电压检测

中图分类号:G642 文献标识码:A 文章编号:1672-3791(2014)10(b)-0009-02

Arduino是一块基于开放源代码的SimpleI/O平台,该平台由硬件和软件两部分组成,这两部分都是开源的。在硬件上,Arduino提供了6个模拟量输入端,相对误差为0.1%左右[1],可以满足一般的测量精度要求。开发语言类似java、C语言,具有开发环境简单、易理理解的特点[2]。

Arduino把单片机编程中很多常用的功能,如延时、数据读写、中断等模块化封装成一个个子程序供程序开发者调用,程序开发者只需着眼于程序的逻辑结构,而不必关心底层函数的具体设计,从而大大降低了程编程的复杂程度[3]。

Matlab是由美国MATHw0RKs公司开发的面向研究和工程设计处理的一套具有强大功能的软件系统。Matlab集数学计算结果可视化和编程于一体,能够方便地进行科学计算和大量工程运算[4]。

该文提出了一种基于Arduino标准化单片机集成模块和Matlab数据处理的简易示波器设计方法,可以用于测量常见的电压波形,成本低廉,使用方便。

1 系统结构

简易示波器从系统结构上分为前部数据采集端和PC机波形显示器两部分构成,两者用串口实现数据交换。

前部数据采集端通过分压电路将电压降低到合适的数值以供Arduino测量;由于Arduino只能测量5V以内的直流电压,对于交流电压,要加一级极性转换电路,将双极性电压转换为单极性电压。完成AD转换后,Arduino将数据通过串口传到PC机,PC机利用Matlab的强大分析处理能力,对收到的数据进行分析、处理和图形显示。系统的结构如图1所示。

2 硬件设计

该文设计的示波器主要用于测量和显示常规直流电压和交流电压,测量的最大电压为50 V,并设置一个压敏电阻来保护电路,以免电压过高时损坏装置。对于电流电压,由于Arduino所用的Atmel Atmega328单片机AD转换速率为13~260 μs,所测量的电流电压频率一般不应高于2 kHz。

2.1 降压电路设计

降压电路采用线性电阻进行分压,并串联一个可调电阻以便微调。降压后通过电压跟随器,使得输入、输出信号的幅值保持不变,且输入阻抗高,输出阻抗低,起到了现场信号与系统的隔离、互不干扰的作用。电路原理如图2所示。

2.2 极性转换电路设计

在模拟量的测量中最常见的莫过于交流电压及交流电流的测量,而单片机内的AD转换器通常是用来测量直流或脉动直流的,因输入脚不允许输入负电平。需要增加一些外围电路方能实现对交流电的测量[5]。

这些外围电路就是极性转换电路,如图3所示。

本电路采用了电压基准芯片AMS1117

-2.5产生一个幅值为2.5 V的基准电压Vout,通过电阻R4加到运算放大器的“+”输入端。

由图3可知:

其中=2.5V。取R1=R4=2.4K,R2=R3=1.2 K,则有=+1.25,即输入信号正向平移了1.25 V。

2.3 模块电路连接

降压模块和极性转换模块可以用万能板焊接,Arduino模块采用标准的成品,各模块的电路连接比较简单,降压电路的端外接需要测试的信号源,降压电路的与极性转换电路输入端相连,极性转换电路的输出端与Arduino模块的模拟输入口A0相连,Arduino模块的USB口与PC机的USB口相连,如图4所示。

3 软件设计

软件设计的思路是,Arduino通过模拟输入口A0采集交直流电压量,并通过内置的USB转串口芯片,将采集后的数据通过串口传输到PC机,PC机进行简单数据处理后,调用画图工具显示波形。

3.1 数据采集程序

数据采集直接调用模拟量读取函数analogRead,如下所示。

Vinput=analogRead(0);//读取电压量,数值从0到1023。

为了提高抗干扰性,得到更加稳定的读数,可以多次读取数据并计算平均值。

3.2 串口通信程序

Matlab 6.X或之后的版本提供了对串口对象的支持,可以很方便地访问外设,通过建立串口对象,能实现数据的读写、存储、事件回调等功能。

Matlab仪器控制工具箱可实现硬件端口的采集。其采集原理是:先建立虚拟设备对象,再设置设备对象的属性,最后通过设备对象实现对硬件的操作[6]。

(1)Arduino端的数据上传。

在void setup()函数里设置波特率,如Serial.begin (9600),即将串口比特率设置为9600。并利用Serial.read()读取特定的数据作为握手信号,待两端握手正确后再进行数据传输。

握手成功后,在void loop()函数中利用函数Serial.println(Voutput)不断地将转换好的数据发送到PC机。

(2)PC机端的数据接收

Matlab可以用查询和中断两种方式接收数据,这两种方式各具特点,这里选用查询方式,将接收到的数据汇总到一个标准数组dataOut中,填满后立即绘图,然后清0并重新填入数据,周而复始。PC机端的数据传输有以下几个步骤。endprint

①用g=serial('COMx')创建设备对象。

②用set()设置设备对象属性,如波特率、终止符、输入和输出缓冲区大小等。

③用fopen()实现设备对象与硬件设备连接。

④用fread()、fwrite()等实现硬件设备数据的读写。

⑤用fclose()和delete()、clear()关闭和删除设备对象。

3.3 波形显示程序

利用PC机的Matlab强大的数据处理和图形显示功能进行波形显示,在标准数组dataOut填满后,调用plot函数来完成数据的可视化处理,如下所示。

plot(x,dataOut);

x是时间标量,与dataOut数组的采集时刻对应,可以根据数据采集的间隔,在PC端用linspace()函数生产。这里要注意的是,由于在输入时人为添加了1.25 V的直流偏置,并在AD转换时将其放大了1023/5倍,因此在调用plot函数前应将接收到的数据减去1.25 V直流偏置的影响,并借助于标准数字万用表,算出电压输入量和输出量之间的系数,对输出进行倍率校准。

图5是利用该示波器显示的RC电路放电的波形,前面波动处是开关合闸时的干扰电平。

由图5可见,电容充满电后为5 V,并从50 s开始放电(在50s时断开电源开关),经过约170 s后电压变为1 V,由,求得て=105 s。

本电路用的电阻为R=1M,电容C=100 mf,理论上て=RC=100 s。

可见实际值与理论值仍有一定的差距,这个差距主要是Arduino采集数据时,设定每隔5 ms进行一次AD转换(使用函数delay(5)进行5 ms延时),但是这个延时并没有考虑AD转换的时间,数据上传的时间,以及Arduino执行其他指令所用的时间,从而导致总的时间有些许误差。

4 结语

该文利用Arduino标准化单片机集成模块和Matlab数据处理软件,设计了一个简易示波器,可以用于测量常见的交流和直流电压波形。在实际使用过程中,虽然该装置在时间量度方面仍有一些误差,但是能够真实反映波形情况,而且成本低廉,使用方便。

如果对时间标量的精度要求严格,可以在arduino采集数据时,同时记录当时的时标,并通过串口与所采集的数据一起上传给PC,但是会大大增加传输的数据量。还可以采取一个折中的方法,每采集一定个数的数量时记录并传输一个时标,比如100个或1000个。

另外,由于Matlab具有强大的数据处理能力,读者还可以加入数据滤波处理、保存、截波、数据分析等功能,同时采用Matlab的GUI可视化设计界面,可以设计出一套更加友好的界面,实现对数据的处理和系统的控制,从而大大增加示波器的实用性。

参考文献

[1] 陈倩诒.单片机片内A/D转换器应用于交流量的测量[J].电子技术,2003(10):21-23.

[2] 蔡睿妍.Arduino的原理及应用[J].电气设计工程,2012(16):155-156.

[3] 纪欣然.基于arduino开发环境的智能寻光小车设计[J].现代电子技术,2012(15):161-163.

[4] 梁湘.基于MATLAB的数据实时采集与处理的实现[J].科技信息,2008(9):44-45.

[5] 陈再清.用单片机如何实现交流量的A/D转换[J].电子世界,2003(11):29-30.

[6] 刘秀.用Matlab实现硬件端口采集的方法[J].兵工自动化,2003(3):58-60.endprint

猜你喜欢

跨步电压
利用斜井接地体降低输电杆塔周围触电风险研究
异性导电媒质对直流接地极跨步电压分布的影响
10kV配电网单相接地跨步电压有限元仿真
库尔勒原油站35kV变电所接地现状分析与防跨步电压触电对策
发电站大型接地网跨步电压的测量及降低方法