MATLAB串口示波器
使用MATLAB进行串口调试的两种方法
使用MATLAB进行串口调试的两种方法在MATLAB中进行串口调试有多种方法,可以使用MATLAB自带的Instrument Control Toolbox,或使用第三方函数库进行串口通信。
1. 使用MATLAB自带的Instrument Control Toolbox进行串口调试Instrument Control Toolbox是MATLAB中用于连接和控制仪器的工具箱。
它提供了一组函数,可以通过串口与仪器进行通信。
第一步是创建串口对象。
使用MATLAB的serial函数可以创建一个串口对象,并设置串口的参数。
例如,以下代码创建一个串口对象并设置波特率为9600,数据位为8位,停止位为1位,校验位为无:```matlabs = serial('COM1');set(s, 'BaudRate', 9600);set(s, 'DataBits', 8);set(s, 'StopBits', 1);set(s, 'Parity', 'none');```第二步是打开串口。
使用MATLAB的fopen函数可以打开串口并进行通信:```matlabfopen(s);```第三步是发送和接收数据。
可以使用MATLAB的fwrite函数向串口发送数据,使用fread函数从串口接收数据。
以下代码发送一个字节的数据,并接收一个字节的数据:```matlabfwrite(s, uint8('A'));receivedData = fread(s, 1);```最后一步是关闭串口。
使用MATLAB的fclose函数可以关闭已经打开的串口:```matlabfclose(s);```2.使用第三方函数库进行串口通信```matlabimport java.io.*;import ng.*;import gnu.io.*;```创建和配置串口对象的步骤与使用Instrument Control Toolbox类似:```matlabport = 'COM1';baudRate = 9600;dataBits = 8;stopBits = 1;parity = 'none';s = serial(port, baudRate, dataBits, stopBits, parity);```打开串口和发送/接收数据的步骤也与使用Instrument Control Toolbox类似:```matlabfopen(s);fwrite(s, uint8('A'));receivedData = fread(s, 1);```关闭串口的步骤也是一样的:```matlabfclose(s);```这些是使用MATLAB进行串口调试的两种常见方法。
用51单片机和MATLAB制作一个低频示波器
maswell_xiao@
用 STC12C5A60S2 和 MATLAB 制作一个低频示波器
Version 1.0 你曾经是否纠结过在没有示波器的地方纠结着无法检测电路的波形?本文介绍一个基 于 MATLAB 和 STC12C5A60S2 的低频示波器制作方案。 需要的设备很简单。 一个 STC 单片机最小系统板、 一根串口线、 一个 MATLAB 软件即可。
桂电二院科协出品, 版权所有, 转载不究。 //////////////////////////////////////////////////////////////////////
maswell_xiao@
//声明 ADC 的特殊功能寄存器。 sfr ADC_CONTR = 0xBC; //ADC 控制寄存器 /*SFR name Address bit B7 B6 B5 B4 B3 B2 B1 B0 ADC_CONTR BCH name ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0*/ sfr ADC_RES = 0xBD; //ADC 高八位结果寄存器 sfr ADC_LOW2 = 0xBE; //ADC 低两位结果寄存器 sfr P1ASF = 0x9D; //P1 第二功能设置寄存器 //声明 ADC 的特殊功能寄存器。 ////////////////////////////////////////////////////////////////////// void InitUart(); void SendADCResult(uchar dat); void Delay(uint n); void InitADC(); void main() { InitUart(); InitADC(); IE = 0xa0; // 打开总中断和 ADC 转换完成中断 while (1); } void Delay(uint a) { uint i,j; for(i=0;i<a;i++) for(j=0;j<110;j++); } void SendADCResult(uchar dat) { while(!TI); //等待前面的数据发送完成 TI=0; SBUF=dat; } void InitUart() { SCON = 0x5a; //8 位数据,五奇偶校验 TMOD = 0x20; //使用 8 位重载 TH1 = TL1 = -(Frequency_Oscillator/12/32/Baud_Rate); //计算出波特率 TR1 = 1; } void InitADC( ) {
Matlab与数字示波器的通信
Matlab与数字示波器的通信摘要: Windows环境下Matlab与TDS系列数字示波器的通信过程,给出了相关的通信程序,并在Matlab中对示波器读取的波形数据进行了频域处理。
从而表明它们之间的通信在数字信号处理方面具有重要的实际意义。
关键词: Matlab 串行通信示波器数字信号处理Tektronix公司的TDS系列数字实时示波器在国内已经得到广泛的应用,与其配套的扩展模块TDS2CM和TDS2MM模块具有与外部设备双向通讯的能力,可直接与打印机、微机连接,使波形的存储和打印等工作变得十分方便,其中TDS2MM还具有FFT功能,可以对波形进行实时的频谱分析。
同机配送的Wavestar软件提供了PC机与示波器双向通讯的功能,具有良好的用户界面,但其数据处理功能却是很少,仅能对波形的幅值、频率、周期、上升和下降时间等进行测量,并且大多数用户出于价格考虑而配置TDS2CM模块,它不具备TDS2MM模块的频谱分析功能,这就限制了示波器的进一步开发利用。
Mathworks公司的著名数值计算软件Matlab具有强大的数值计算功能,它的Instrument Control Toolbox提供了强大的外设控制功能,可以对GPIB、RS-232、VXI、Centronics端口进行控制。
用Matlab与TDS2CM模块配合可以实现示波器与微机之间的数据通讯,利用Matlab强大的数值处理、矩阵运算功能可对示波器记录的波形数据进行分析和处理。
1 通信原理Matlab中的Instrument Control Toolbox包括两大部件:M文件函数和接口驱动适配器。
这两部件提供了Matlab与外设的通讯功能,其与串行通讯端口的通讯原理。
由图1可见,Matlab的两大部件提供了一条外设与Matlab之间的交互通道,使用户与外设之间进行信息获取和传送。
同许多高级语言一样,Matlab通过调用M文件函数来创建设备对象,得到设备的文件句柄,而设备驱动程序作为操作系统中直接控制硬件的模块,是链接操作系统内核与系统外部设备I/O操作的关键模块。
MATLAB_simulink中的示波器scope设置介绍
一、打印输出(Print)将系统仿真结果的输出信号打印出来。
二、视图自动缩放(Autoscale)点击此按钮可以自动调整显示范围以匹配系统仿真输出信号的动态范围。
三、X轴缩放、Y轴缩放以及视图整体缩放可以分别对X坐标轴、Y坐标轴或同时对X、Y坐标轴的信号显示进行缩放,以满足用户对信号做局部观察的需要。
使用时,单击缩放按钮后选择需要观察的信号范围即可。
若需要缩小视图,单击鼠标右键,选择弹出菜单的Zoom out 即可。
四、保存和恢复坐标轴设置使用Scope模块观察输出信号时,用户可以保存坐标轴设置。
这样,当信号的视图发生改变后,单击恢复坐标轴设置可以恢复以前保存的坐标轴设置。
五、Scope参数设置点击Scope模块工具栏的参数设置按钮(Parameters),可以打开Scope模块的参数设置界面,见图9.2(a)。
Scope模块的参数设置包含两个选项卡:General 和Data History。
1、 General选项卡通常参数设置界面首先显示General选项卡的内容。
在General选项卡中可以进行下列设置:(1)坐标系数目(Number of axes)在一个Scope模块中可以使用多个坐标系窗口同时输出多个信号。
同时可使用的坐标系数目由此处设置。
默认设置下,Scope模块仅显示一个坐标系窗口。
(2)悬浮Scope开关(floating scope)用来将Scope模块切换为悬浮Scope模块。
悬浮Scope模块将在9.1.2中介绍。
(3)显示时间范围(Time range)用来设置信号的显示时间范围。
需要注意的是信号显示的时间范围和系统仿真的时间范围可以不同。
坐标系所显示的时间范围并非为绝对时间,而是指相对时间范围,坐标系左下角的时间偏移(Time offset)规定时间的起始时刻。
(4)坐标系标签(Tick labels)确定Scope模块中各坐标系是否带有坐标系标签。
此选项提供3种选择:全部坐标系都使用坐标系标签(all)、最下方坐标系使用标签(bottom axis only)以及都不使用标签(none)。
MATLAB_simulink中的示波器scope设置介绍
MATLAB_simulink中的示波器scope设置介绍示波器是一种测量仪器,用于显示和记录不同信号的电压随时间的变化情况。
在MATLAB Simulink中,示波器模块允许用户通过添加和配置Scope块来可视化模型中的信号。
以下是Scope模块的设置介绍。
1.打开示波器:在Simulink模型中找到要显示波形的信号的输出端口。
右键单击输出端口,并选择“Add to Scope”选项。
这将在模型中添加一个Scope块,并连接到所选信号的输出端口。
2.设置示波器参数:打开Scope模块的参数对话框,可以通过右键单击模块并选择“Properties”选项或双击模块来打开。
在参数对话框中,可以设置以下参数:- Number of Inputs:设置Scope模块接收的信号数量。
可以选择单个信号或多个信号。
- Number of Outputs:设置Scope模块显示的信号数量。
可以选择单个信号或多个信号。
- Sampling mode:设置示波器的采样模式。
可以选择Auto,Discrete,或Sample-based。
Auto模式下,示波器将根据模型的解算器设置自动选择采样模式。
- Time Span:设置示波器显示的时间跨度。
可以选择自动或手动模式。
在手动模式下,可以手动设置时间间隔。
- Buffer Length:设置示波器的缓冲区长度。
可以设置为无限或指定的固定长度。
- Voltages:设置示波器的电压范围和单位。
可以选择自动或手动模式。
在手动模式下,可以手动设置电压范围和单位。
- Triggers:设置示波器的触发条件。
可以选择自动触发或手动触发。
3.自定义示波器样式:Scope模块允许用户自定义波形的样式和外观。
可以通过选择“Display”选项卡来访问自定义设置。
以下是一些可自定义的设置:- Colors:设置示波器波形的颜色。
- Styles:设置示波器波形的线条样式(如实线、虚线、点划线等)。
力科示波器Matlab使用指南
自定义示波器系列之一自定义示波器系列之一使用指南力科示波器MATLAB使用指南——力科示波器——美国力科公司 万力劢基于X-Stream技术的力科示波器既是一个高速信号采集平台,也是一个功能强大的信号处理平台。
示波器软件本身提供了丰富的测量和运算功能,能够满足常见的信号处理应用。
此外,力科示波器还能借助MATLAB及其丰富的函数、工具箱做更复杂、更个性化的实时信号处理。
使用MATLAB实时处理力科示波器采集的数据,可以采取以下三种方式:遥控((Remote Control)方式1.遥控MATLAB在计算机上运行,通过计算机的GPIB、以太网Ethernet或者串口RS232来控制示波器、读取采集的数据,如图1:图 1 遥控方式在这种联机方式下,MATLAB对力科示波器的控制方式又可分为1)装有MATLAB的计算机作为控制器,通过SCPI程控命令(Standard Commands for Programmable Instruments,即IEEE488.2标准)来控制示波器。
这和NI公司的Labview, LabWindows/CVI程控仪器的方式是类似的。
MathWorks公司提供了MATLAB工具箱Instrument Control Toolbox,可以方便地实现SCPI方式的程控。
详情请参考该工具箱的帮助文件以及/LeCroy。
力科示波器支持的SCPI程控指令请参考LeCroy X-Stream Oscilloscopes Remote Control Manual。
2)力科示波器软件提供了基于COM(Component Object Model)技术的自动化接口(Automation interface)。
外部程序通过这种接口可以读取示波器属性、控制示波器和采集数据。
这种方式下,力科示波器作为COM Automation server, MATLAB程序作为COM Client。
这种示波器软件与MATLAB程序分别在不同平台上运行的方式,导致两者交互数据的效率受限于GPIB/ENET/RS232接口的数据吞吐率。
Matlab软件在数字示波器实验中的应用
Matlab软件在数字示波器实验中的应用Matlab软件在数字示波器实验中的应用数字示波器是现代电子测量技术中的重要工具,广泛应用于电子电路测试、信号分析等领域。
而Matlab作为一种功能强大的数学建模与计算软件,提供了丰富的工具箱和编程环境,为数字示波器实验的设计、模拟和数据分析提供了便利。
本文将探讨Matlab软件在数字示波器实验中的应用,包括虚拟示波器设计、信号生成与采集、波形分析等方面。
一、虚拟示波器设计Matlab软件提供了强大的绘图和可视化工具,可以实现虚拟示波器的设计和模拟。
通过Matlab的GUI设计工具,我们可以快速开发一个用户界面友好的虚拟示波器。
用户可以通过鼠标操作控制参数,观察信号波形,并在示波器上添加测量工具,如时间测量、频率测量等。
同时,我们还可以根据需要选择不同的波形显示方式,如点阵显示、矢量显示等。
通过虚拟示波器的设计,可以方便地进行数字示波器的功能验证和调试。
二、信号生成与采集在数字示波器实验中,通常需要产生不同类型的电信号并进行采集。
Matlab软件提供了丰富的信号生成函数和工具箱,可以方便地生成各种信号,如正弦波、方波、锯齿波等。
通过Matlab的编程接口,我们可以控制示波器的输出通道,实现精确的信号生成。
同时,Matlab还支持外部设备接口,如数据采集卡、传感器等,可以实时采集现实世界中的信号。
通过信号生成与采集功能的应用,我们可以进行数字示波器的性能测试和实际信号处理。
三、波形分析数字示波器的主要功能之一就是对信号波形进行分析。
Matlab 软件提供了多种波形分析工具和函数,可以实现对信号的频域分析、时域分析、参数提取等。
通过Matlab的频谱分析工具,我们可以得到信号的功率谱密度、频率响应等信息,从而对信号的频谱特性进行研究。
此外,Matlab还提供了响应滤波器设计、自相关函数计算等功能,可以更详细地分析信号的时域特性。
通过波形分析功能的应用,我们可以更深入地了解信号的特征和变化规律。
将串口接收的数据绘制成波形图(使用matlab或VisualScope)
将串⼝接收的数据绘制成波形图(使⽤matlab或VisualScope)⼀、串⼝通信配置结合stm32固件库(或其它类型单⽚机)中usart相关的函数,配置好串⼝通信的寄存器,确定(数据位、停⽌位、波特率等等),本⽂主要介绍两种⽅法将采集到的串⼝数据绘制成波形图。
⼆、所需软件Visual ScopeMatlab效果图:Visual Scope读取串⼝数据得到连续波形图Matlab读取串⼝数据得到连续波形图三、具体步骤1. 利⽤Visual Scope绘制波形在keil中加⼊ Visual_Scope.c如下,使其符合Visual Scope软件的通信协议#include"visual_scope.h"uint16_t OutData[4]={0};//存放待输出的四组数据unsigned short CRC_CHECK(unsigned char*Buf,unsigned char CRC_CNT){unsigned short CRC_Temp;//16bitunsigned char i,j;CRC_Temp =0xffff;for(i =0;i < CRC_CNT;i++){CRC_Temp ^= Buf[i];for(j =0;j <8;j++){if(CRC_Temp &0x01)CRC_Temp =(CRC_Temp>>1)^0xa001;elseCRC_Temp = CRC_Temp >>1;}}return CRC_Temp;}void OutPut_Data(){int temp[4]={0};unsigned int temp1[4]={0};unsigned char databuf[10]={0};//The buf of 4 outputdata(low 8 bit + high 8 bit) + 2 check bit(low+high) unsigned char i;unsigned short CRC16 =0;//check data,depending on the outputdatafor(i =0;i <4;i++){{temp[i]=(int)OutData[i];temp1[i]=(unsigned int)temp[i];}for(i =0;i <4;i++){databuf[i*2]=(unsigned char)(temp1[i]%256);databuf[i*2+1]=(unsigned char)(temp1[i]/256);}CRC16 =CRC_CHECK(databuf,8);//get check codedatabuf[8]= CRC16%256;databuf[9]= CRC16/256;for(i =0;i <10;i++)Usart_SendByte(DEBUG_USARTx, databuf[i]);//use usart to send data to upper monitor}void display()//⽰波,将要发送的数据放到数组后,调⽤该函数发送数据{#if 1OutData[0]=50;OutData[1]=1000;OutData[2]=0;OutPut_Data();#endif#if 0OutData[0]=0;OutData[1]=0;OutData[2]=0;OutPut_Data();#endif}在VisualScope⾥设置好参数后,有如下结果:优点: ⽤VisualScope⽰波能⽐较直观地反映数据的变化情况缺点: 仅取数值的整数部分绘制波形,⽆法进⼀步对波形进⾏分析(虽然有保存为matlab分析的⽂件选项,但好像没有办法在matlab中使⽤)2. 利⽤Matlab绘制波形为了能够对读取到的数据波形进⾏分析(如频谱分析),可直接使⽤matlab与stm32进⾏串⼝通信,使⽤时与Visual Scope类似,同样需要在matlab中先配置好串⼝通信的相关参数,使PC能够与stm32通信。
matlab示波器的用法
在MATLAB中使用示波器,首先需要创建一个示波器对象,然后通过发送命令来控制示波器的行为。
以下是示波器的基本使用方法:
1.连接示波器:MATLAB可以通过GPIB、RS232、USB、Ethernet等接口控制示
波器。
例如,利用LAN以太网口控制示波器,可以利用visa命令创建对象。
2.询问示波器IDN:利用query发送SCPI命令询问示波器的产品信息,可以得
到示波器的厂家、型号、序列号、固件版本等。
3.设置示波器出厂设置:利用fprintf发送SCPI命令*RST对示波器进行出厂设
置。
4.设置示波器参数:利用fprintf发送SCPI命令设置示波器的参数,包括运行模
式、水平刻度、采样率、垂直刻度、垂直位置、触发电平、触发类型等。
5.读取测量结果:先用fprintf发送SCPI命令设置测量项和参数,然后用query
读取测量结果。
例如,以下代码以测量信号的周期为例。
6.读取通道波形数据:先利用fprintf发curve?命令,利用binblockread读取数
据,然后利用query获取相关的垂直刻度信息,最后转换成电压数据。
7.读取水平时基数据:先发query发相关命令,然后计算出示波器的水平刻度
数据。
8.画通道波形图:利用plot把示波器采集的波形数据画图。
9.断开仪器连接:利用fclose断开与示波器通信连接。
MATLAB串口示波器设计源码
function varargout=serial_communication(varargin)gui_Singleton=1;gui_State=struct('gui_Name',mfilename,...'gui_Singleton',gui_Singleton,...'gui_OpeningFcn',@serial_communication_OpeningFcn,...'gui_OutputFcn',@serial_communication_OutputFcn,...'gui_LayoutFcn',[],...'gui_Callback',[]);if nargin&&ischar(varargin{1})gui_State.gui_Callback=str2func(varargin{1});endif nargout[varargout{1:nargout}]=gui_mainfcn(gui_State,varargin{:});elsegui_mainfcn(gui_State,varargin{:});endfunction serial_communication_OpeningFcn(hObject,eventdata,handles, varargin)handles.output=hObject;javaFrame=get(hObject,'JavaFrame');javaFrame.setFigureIcon(javax.swing.ImageIcon('icon.jpg'));guidata(hObject,handles);function varargout=serial_communication_OutputFcn(hObject,eventdata, handles)varargout{1}=handles.output;function com_Callback(hObject,eventdata,handles)function com_CreateFcn(hObject,eventdata,handles)if ispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction rate_Callback(hObject,eventdata,handles)function rate_CreateFcn(hObject,eventdata,handles)if ispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction jiaoyan_Callback(hObject,eventdata,handles)function jiaoyan_CreateFcn(hObject,eventdata,handles)if ispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction data_bits_Callback(hObject,eventdata,handles)function data_bits_CreateFcn(hObject,eventdata,handles)if ispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction stop_bits_Callback(hObject,eventdata,handles)function stop_bits_CreateFcn(hObject,eventdata,handles)if ispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction start_serial_Callback(hObject,eventdata,handles)global scomif get(hObject,'value')com_n=sprintf('com%d',get(,'value'));rates=[30060012002400480096001920038400430005600057600115200];baud_rate=rates(get(handles.rate,'value'));switch get(handles.jiaoyan,'value')case1jiaoyan='none';case2jiaoyan='odd';case3jiaoyan='even';enddata_bits=5+get(handles.data_bits,'value');stop_bits=get(handles.stop_bits,'value');scom=serial(com_n);set(scom,'BaudRate',baud_rate,'Parity',jiaoyan,'DataBits',...data_bits,'StopBits',stop_bits,'BytesAvailableFcnCount',100,...'BytesAvailableFcnMode','byte','BytesAvailableFcn',{@bytes,handles},...'TimerPeriod',0.1,'timerfcn',{@bytes,handles})tryfopen(scom);catchmsgbox('´®¿Ú²»¿É»ñµÃ£¡');set(hObject,'value',0)returnendset(handles.xianshi,'string','')set(handles.activex1,'value',1)elset=timerfind;trystop(t);delete(t);clear tendscoms=instrfind;stopasync(scom);fclose(scoms);delete(scoms);set(handles.period_send,'value',0)set(handles.activex1,'value',0)endfunction bytes(obj,eventdata,handles)n=get(obj,'BytesAvailable');if na=fread(obj,n,'uchar');if~get(handles.stop_disp,'value')if~get(handles.hex_disp,'value')c=char(a');set(handles.xianshi,'string',c)%[get(handles.xianshi,'string') cset(handles.rec,'string',num2str(str2num(get(handles.rec,'string'))+len gth(str2num(c))))elsec=str2num(dec2hex(a'))';set(handles.xianshi,'string',[get(handles.xianshi,'string') num2str(c)''])set(handles.rec,'string',num2str(str2num(get(handles.rec,'string'))+len gth(c)))endendendfunction qingkong_Callback(hObject,eventdata,handles)set(handles.xianshi,'string','')function stop_disp_Callback(hObject,eventdata,handles)function radiobutton1_Callback(hObject,eventdata,handles)function radiobutton2_Callback(hObject,eventdata,handles)function togglebutton4_Callback(hObject,eventdata,handles)function hex_disp_Callback(hObject,eventdata,handles)function manual_send_Callback(hObject,eventdata,handles)global scomif~get(handles.hex_send,'value')str=get(handles.sends,'string');val=double(str);set(handles.trans,'string',num2str(str2num(get(handles.trans,'string')) +length(str2num(str))))elseval=hex2dec(get(handles.sends,'string'));set(handles.trans,'string',num2str(str2num(get(handles.trans,'string')) +length(val)))endif~isempty(val)trystr=get(scom,'TransferStatus');catchreturnendwhile1if~(strcmp(str,'write')||strcmp(str,'read&write')) fwrite(scom,val,'uint8','async');breakendendendfunction clear_send_Callback(hObject,eventdata,handles)set(handles.sends,'string','')function checkbox2_Callback(hObject,eventdata,handles) function period_send_Callback(hObject,eventdata,handles)if get(hObject,'value')t1=0.001*str2num(get(handles.period1,'string'));t=timer('BusyMode','queue','ExecutionMode','fixedrate',...'Period',t1,'TimerFcn',{@manual_send_Callback,handles});start(t);elset=timerfind;stop(t);delete(t);clear tendfunction period1_Callback(hObject,eventdata,handles)function period1_CreateFcn(hObject,eventdata,handles)if ispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction clear_count_Callback(hObject,eventdata,handles)set([handles.rec,handles.trans],'string','0')function copy_data_Callback(hObject,eventdata,handles)if get(hObject,'value')set(handles.xianshi,'enable','on')elseset(handles.xianshi,'enable','inactive')endfunction xianshi_Callback(hObject,eventdata,handles)%hObject handle to xianshi(see GCBO)%eventdata reserved-to be defined in a future version of MATLAB%handles structure with handles and user data(see GUIDATA)%Hints:get(hObject,'String')returns contents of xianshi as text%str2double(get(hObject,'String'))returns contents of xianshi as a double。
matlab中的scope操作
在MATLAB中,Scope是一个用于显示数据波形的图形窗口,类似于示波器。
它通常用于Simulink 仿真中,以直观地显示随时间变化的数据。
以下是使用MATLAB 中的Scope 的一些基本操作:1. 打开Scope:-在Simulink 中,双击Scope 块或者在模型中添加Scope 块后,Scope 窗口会自动弹出。
-如果你已经添加了Scope 块但未显示窗口,可以通过右键点击Scope 块并选择“Open Scope”来打开。
2. 调整视图:-双击Scope 窗口可以将其全屏显示,以便更好地查看波形。
-在Scope 工具栏中,有放大(Zoom In)和缩小(Zoom Out)按钮,可以调整波形的视图范围。
-使用“自动缩放”(Auto Zoom)按钮可以重置视图到原始大小。
3. 数据操作:-在Scope 窗口中点击并拖动鼠标可以选择波形的一部分,方便查看特定的数据点。
-右键点击Scope 窗口可以弹出菜单,选择“复制”(Copy)可以将波形图像复制到剪贴板。
4. 参数设置:-Scope 窗口的参数设置可以通过右键点击Scope 块并选择“参数”(Parameters)来访问。
-在参数设置对话框中,可以设置通道数、是否写入工作空间、数据显示格式等。
5. 导出数据:- Scope 允许将数据显示为图像或者导出为数据。
-可以通过“文件”(File)菜单中的选项来保存波形图像或者导出数据到文件。
6. 使用控制菜单:-在Scope 窗口的顶部菜单栏中,可以选择“查看”(View)来隐藏或显示网格、坐标轴标签等。
-“编辑”(Edit)菜单可以用来复制图形或者调整图形的属性。
7. 定制Scope:-Scope 窗口可以通过添加图例、标签和自定义颜色来定制,以更好地显示特定的波形数据。
8. 关闭Scope:-在完成波形查看后,可以通过关闭Scope 窗口或者右键菜单中的“关闭”(Close)选项来关闭Scope。
基于单片机和MATLAB混合编程的简易示波器的设计与实现
器, 它能把肉眼看不见 的电信号变换成看得见 的图像 , 于人们研究各种电现象的变化过程。 便 传统示波器利用狭 窄的、 由高速 电子组成的 电 子束 , 打在 涂有 荧 光物 质 的屏 面上 , 就可产 生 细
小 的光 点 。在 被 测 信 号 的作 用 下 , 子束 就 好 电 像 一 支 笔 的笔 尖 , 以在 屏 面 上 描绘 出被 测 信 可 号 的 瞬 时 值 的 变 化 曲线 J 。虽 然 我 们 能 利 用
L 34组成 的 电 压 跟 随器 , 行 阻 抗 变 化 , M2 进 使 本模 块输 出电 阻变小 。本模 块 的实 际作用类 似 于 传统 示 波 器 的探 头 , 虑 到探 头 对 测 量 的影 考 响( 例如 输 入 电压 范 围 、 载 效 应 、 抗 匹 配 、 负 阻 电容 符合 等 ) 本模 块可 通 过调 节 R , l的 大小 来 调节 本模 块 的适 用 工作 范 围 。例 如 当 R1= 7 2 k 时 , 模块 的适 用工 作 范 围输 入信 号为 一1 Q 本 5 V~+l 5V之间 , 带宽 为 0~6MH 。 z ( ) 片机 采集 模块 2单
图 3 单 片机采集模块硬件电路图
图 2 分 压及 阻抗 变换 模块
在 本模 块 中 , 由于输入 的信 号 峰峰值 未知 , 有 可 能超 出 单 片 机 内 A 要 求 的 输 入 电 压 范 D 围, 因此 首先 将 输 入信 号 进 行 分 压 。R , 2和 lR
是 返 回
于海洋 , 杨 卫 , 鲜 浩 , 刘 俊
( 中北 大学电子测试技术 国防重点 实验 室 , 山西太 原 0 0 5 ) 30 1
摘要: 针对 当前 常用示波器不能实时显示 某些 波形 的特定特 征值 , 绍 了一 种充分运用 单片机 和 介
matlab串口实时波形显示
作者:GG功能:实现matalb与PC外设通讯本例:串口232与外设单片机51通讯。
实时监控51数据并且实时图形显示时间:2011—9—16简介:实现该功能使用M脚本文件和函数文件。
第一个文件连接串口和打开串口,设置了串口的一些参数和触发事件。
连接串口COM5。
有关该方面的知识请自行百度I/O文字流。
第二个文件是时间回调函数,相当于其他语言中例如C语言的中断函数第三文件是关闭串口和清除列连接。
并且清除中间TXT中介文件内容下面是源文件第一个:clear alls=serial('COM5'); %打开串口s.BytesA vailableFcnMode='byte'; %设置事件触发为接受触发s.InputBufferSize=5000; %设置接受缓冲区大小为5000个字节s. BytesA vailableFcnCount=10; %每次接受到50个数据时候触发事件s.BaudRate=19200; % 设置通讯波特率s.BytesA vailableFcn=@my_callback; %指向触发事件函数fopen(s); %打开串口第二个function my_callback(obj,event)out=fread(obj,10,'uint8'); %串口处读出50个数据fid=fopen('G1.txt','a+'); %打开文件并且追加fprintf(fid,'%3d ',out);fclose(fid);speed=textread('G1.txt','%u');plot(speed);disp('save ok!');end第三个fclose(s); %关闭串口delete(s); %删除串口变量clear all;fid=fopen('G1.txt','w'); %清除中间文件txta=[];fprintf(fid,'%s',a);fclose(fid);clear all; %清除所有变量。
MATLAB串口操作教程
The pins and signals associated with the 9-pin connector are described in the following table. Refer to the RS-232 standard for a description of the signals and pin assignments used for a 25-pin connector.
Signal States Signals can be in either an active state or an inactive state. An active state corresponds to the binary value 1, while an inactive state corresponds to the binary value 0. An active signal state is often
Serial Port Pin and Signal Assignments
Pin
Label
Signal Name
1
CD
Carrier Detect
Signal Type Control
2
RD
Received Data
Data
3
TD
Transmitted Data
Data
4
DTR
Data Terminal Ready
gets?name??port??type?ans?serialcom1??com1??serial?创建对象的同时配置对象的属性你可以在创建对象的时候配置对象的属性serial将会接受你的属性名称和属性值就像你在设置函数里面配置属性一样例如你可以分配属性名和属性值
[最新]matlab-simulink示波器图形保留
1、我们使用Matlab绘制出数据的各种图形需要保存的时候,不少同学是直接用屏幕截图的办法来做的,但这样出来的图并不清晰,不便于后续应用和处理,并且往往不符合发表论文的要求,很多论文是要求用 .eps 格式的图片的。
实际上,我们可以有下面两种更好的处理方法:(1)在论文里插入图片在Matlab的Figure窗口,点击菜单栏的Edit,选择Copy Figure,然后转到你的文档界面,把光标放到需要插入图片的位置,然后Ctrl+C,你就可以得到比较清晰的图片了。
需要注意的是,这时候的图片有相当一部分空白区域,你可以用word图片工具栏的‘裁剪’功能把图片空白区域消除掉。
另外,如果需要对图片的大小进行拉伸,最好不要直接用鼠标拖拉,这样容易导致图中的点线分布变形,可以右键点击图片,选择‘设置图片格式’,在‘大小’标签的‘缩放’栏里,设置图片的大小。
(2)直接保存Figure为了便于后续处理和应用,建议大家形成一个良好习惯,即把绘制所得的Figure窗口直接保存为.fig文件,以后你就可以多次打开它,对图像进行修改处理,例如加注标签(label)等,也可以打开.fig文件把所显示的图像转存为其它格式的文件,例如.eps、.jpg等。
2、在做Simulink仿真时,使用的Scope波形显示模块实际上也是一种Figure窗口,不过Matlab把Scope的菜单栏隐藏起来,只提供了几个有限的参数设置。
如果需要对Scope中的图加上坐标、更改界面背景色等,没有菜单栏就基本上无从下手了。
可以在打开你的mdl文件之后,在Matlab的命令行输入以下指令来恢复显示Scope的Figure菜单栏:>> set(0,'ShowHiddenHandles','on');>> set(gcf,'menubar','figure');这样Scope窗口就如下所示:然后点击菜单栏的Edit ,可以选择Copy Figure 来保持波形图,也可以选择Figure Properties 来调整Scope 的各种图形属性,包括添加xlabel、ylabel、title,更改背景颜色,调整波形曲线的线型、粗细等等:P.S.:除了上面说的那两行指令外,在网上还找到一段相似的程序,不过我使用时Matlab 提示第4行代码出现Error,不知是何原因,也贴在这里大家分析下吧,呵呵。
MATLAB中用plot命令画出示波器的图形总结
MATLAB中用plot命令画出示波器的图形总结这两天碰到一个问题是关于用MATLAB命令把示波器图形画出,经过努力总算得到解决。
看到网上有的同行问怎么改示波器的背景,把示波器波形复制到Word中,我有两种方法,第一种是我一个同学告诉我的,通过命令对示波器进行操作。
具体如下shh = get(0,'ShowHiddenHandles');set(0,'ShowHiddenHandles','On')set(gcf,'menubar','figure')set(gcf,'CloseRequestFcn','closereq')set(gcf,'DefaultLineClipping','Off')set(0,'ShowHiddenHandles',shh)输入以上命令可以直接对示波器进行修改,包括背景和曲线颜色第二种方法我以前总结过,现在详细说明一下>> set(0,'ShowHiddenHandles','On')>> set(gcf,'menubar','figure')用MATLAB命令将simulink示波器的图形画出第一步,将你的示波器的输出曲线以矩阵形式映射到MATLAB的工作空间内。
如图1所示,双击示波器后选择parameters目录下的Data history,将Save data to workspace 勾上,Format选择Array,Variable name即你输入至工作空间的矩阵名称,这里我取名aa。
在这之后运行一次仿真,那么你就可以在MATLAB的工作空间里看到你示波器输出曲线的矩阵aa。
如图2所示。
第二步,用plot函数画出曲线双击曲线矩阵aa,将可以看到详细情况,我这里的aa矩阵是一个1034行,3列的矩阵,观察这个矩阵即可以发现,这个矩阵的第一列是仿真时间,而由于我仿真时示波器内输出的是两条曲线,所以第二列和第三列即分别代表了这2条曲线。
使用MATLAB进行串口调试的两种方法
使用MATLAB进行串口调试的两种方法方法1:在command window界面下输入tmtool,打开Test & Measurement Tool窗口,在Hardware→Serial下面找到已连接的串口设备(单片机开发板通过USB转串口,对应COM2),在communicate选项卡中对串口进行设置即可。
需要注意的是,程序功能是上位机发送16bit字符串,单片机通过串口接收并回显给上位机,这16bit的字符串是不包含字符串结束标志\n的,因此在sending data下面的data format下拉菜单中,要选择%s而不是%s\n。
为了使接收字符串的时间变短,可以在configure选项卡中将timeout选项设置为1.0。
方法2:直接在command window环境下用matlab提供的函数对串口进行操作,仍然以COM2为例。
在command window环境下依次输入以下代码:
s=serial('COM2') %将串口2赋给s
s.status%查看串口2的状态
fopen(s)%打开串口2
s.status
fprintf(s,'987654321abcdef')%给串口2的发送缓存写入数据987654321abcdef fscanf(s)%从串口2的接收缓存读数据
fclose(s)%关闭串口2
s.status
delete(s)
clear s
每一个语句的执行情况如下图所示:
其中需要注意的是fprintf()函数默认采用%s\n格式,因此在这里只能输入15个字符,系统会在15bit字符串的末尾自动添加字符串结束标志\n,该标志不能在数码管上显示。
Matlab与数字示波器的通信
Matlab与数字示波器的通信摘要: Windows环境下Matlab与TDS系列数字示波器的通信过程,给出了相关的通信程序,并在Matlab中对示波器读取的波形数据进行了频域处理。
从而表明它们之间的通信在数字信号处理方面具有重要的实际意义。
关键词: Matlab 串行通信示波器数字信号处理Tektronix公司的TDS系列数字实时示波器在国内已经得到广泛的应用,与其配套的扩展模块TDS2CM和TDS2MM模块具有与外部设备双向通讯的能力,可直接与打印机、微机连接,使波形的存储和打印等工作变得十分方便,其中TDS2MM还具有FFT功能,可以对波形进行实时的频谱分析。
同机配送的Wavestar软件提供了PC机与示波器双向通讯的功能,具有良好的用户界面,但其数据处理功能却是很少,仅能对波形的幅值、频率、周期、上升和下降时间等进行测量,并且大多数用户出于价格考虑而配置TDS2CM模块,它不具备TDS2MM模块的频谱分析功能,这就限制了示波器的进一步开发利用。
Mathworks公司的著名数值计算软件Matlab具有强大的数值计算功能,它的Instrument Control Toolbox提供了强大的外设控制功能,可以对GPIB、RS-232、VXI、Centronics端口进行控制。
用Matlab与TDS2CM模块配合可以实现示波器与微机之间的数据通讯,利用Matlab强大的数值处理、矩阵运算功能可对示波器记录的波形数据进行分析和处理。
1 通信原理Matlab中的Instrument Control Toolbox包括两大部件:M文件函数和接口驱动适配器。
这两部件提供了Matlab与外设的通讯功能,其与串行通讯端口的通讯原理。
由图1可见,Matlab的两大部件提供了一条外设与Matlab之间的交互通道,使用户与外设之间进行信息获取和传送。
同许多高级语言一样,Matlab通过调用M文件函数来创建设备对象,得到设备的文件句柄,而设备驱动程序作为操作系统中直接控制硬件的模块,是链接操作系统内核与系统外部设备I/O操作的关键模块。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%*******************************************************************%******************a simple gui design******************************%*******************************************************************%******************for information acquisition********************** clc;clf;close all;clear all;%*****************initializing some parameter*********************** global node icallback systime1nodenum chlnum nodeindex x;global index;%ÓÃÓÚ±ê¼ÇËùѡͨµÀglobal valid;%ÓÃÓÚ±ê¼ÇÏÔʾѡÔñindex=zeros(1,3);%¸³³õÖµvalid=zeros(1,2);%******************************************************************** global result_hkd;result_hkd=zeros(1,3);nodeindex=0;%//½ÚµãÖµ³õֵΪ0£¬¶øºóÔÚºóÃæ°´Å¥ÖÐÐÞ¸Änodenum=3;%number of nodes,chlnum=3;%%number of channels on one node icallback=0;%record the callbacksnode.channel(1:chlnum)=struct('receiveVoltage',[],'receiveTime',[],...'oldNum',1,'newNum',0);%//receiveVoltageÕ¼ÓÃÁ½Î»,¸ßºÍµÍλ¡£ËùÒÔ¹²5λif nodenum>1node(2:nodenum)=node;%//´Ë´¦¸ù¾Ý½ÚµãÊý²¹³ä¶¨ÒåÁËÆäËü½Úµãend%**************************genarate a figure*************************h0=figure('toolbar','none',...'position',[10100900600],...'name',...'ÈÈÊ͵çºìÍâÐźŲâÊÔÄ£Äâʾ²¨Æ÷'...%position[x1x2y1y2],x1:ˮƽλÖã¬);%x2£º´¹Ö±Î»Öã¬y1£ºË®Æ½¿í¶È£¬y2£º´¹Ö±¸ß¶È%*************************a callback function************************b1callback=[...'s=serial(''COM4'');,',...'set(s,''BaudRate'',57600);,',...'s.BytesAvailableFcnMode=''byte'';,',...'s.BytesAvailableFcnCount=4;,',...'s.BytesAvailableFcn={@instrcallback,s};,',...'fopen(s);,',...'get(s);,',...'systime1=clock;,',...'fprintf(''======Ready to receive data.======\n''),',...];%******************design some pushbutton**************************b1=uicontrol('parent',h0,...'units','points',...'tag','b1',...'style','pushbutton',...'string','¿ªÊ¼',...'backgroundcolor',[0.750.750.75],...'position',[320605020],...'callback',b1callback);b2=uicontrol('parent',h0,...'units','points',...'tag','b2',...'style','pushbutton',...'string','Í£Ö¹',...'backgroundcolor',[0.750.750.75],...'position',[380605020],...'callback',[...'save periodData;,',...'fclose(s);,',...'delete(s);,',...'clear s;']);b3=uicontrol('parent',h0,...'units','points',...'tag','b3',...'style','pushbutton',...'string','ת»»',...'backgroundcolor',[0.750.750.75],...'position',[440605020],...'callback','change_data_to_txt'...);%Ìí¼ÓÁËÊý¾Ý´æ´¢¸ñʽת»»º¯Êý£¬½«.matת.txt£¬Ïê¼ûchange_data_to_txt.mÎļþb4=uicontrol('parent',h0,...'units','points',...'tag','b4',...'style','pushbutton',...'string','¹Ø±Õ',...'backgroundcolor',[0.750.750.75],...'position',[500605020],...'callback',[...%'fclose(s);,',...%'delete(s);,',...%'clear s;,',...'close all;']);%**********************design some radiobutton********************** %r_valid=uicontrol('parent',h0,...%'style','radiobutton',...%'position',[50,400,65,20],...%'string','N_Valid',...%'backgroundcolor',[10.80.1],...%'callback',['valid(1,1)=abs(valid(1,1)-1);']);r1=uicontrol('parent',h0,...'style','radiobutton',...'position',[150,120,65,20],...'string','Node1',...'backgroundcolor',[0.550.550.55],...'callback',['nodeindex=1;']);%//°Ñ","È¥µô%'callback',['nodeindex=1;,']);r2=uicontrol('parent',h0,...'style','radiobutton',...'position',[150,90,65,20],...'string','Node2',...'backgroundcolor',[0.550.550.55],...'callback',['nodeindex=2;']);r3=uicontrol('parent',h0,...'style','radiobutton',...'position',[150,60,65,20],...'string','Node3',...'backgroundcolor',[0.550.550.55],...'callback',['nodeindex=3;']);%***********************½Úµã¿ÉÒÔÀ©Õ¹********************************** %r4=uicontrol('parent',h0,...%'style','radiobutton',...%'position',[30,320,65,20],...%'string','Node4',...%'backgroundcolor',[10.80.1],...%'callback',['nodeindex=4;']);%********************************************************************* %p_valid=uicontrol('parent',h0,...%'style','radiobutton',...%'position',[50,240,65,20],...%'string','P_Valid',...%'backgroundcolor',[10.80.1],...%'callback',['valid(1,2)=abs(valid(1,2)-1);']);p1=uicontrol('parent',h0,...'style','radiobutton',...'position',[280,120,65,20],...'string','Ch_1',...'backgroundcolor',[0.550.550.55],...'callback',['index(1,1)=abs(index(1,1)-1);']);p2=uicontrol('parent',h0,...'style','radiobutton',...'position',[280,90,65,20],...'string','Ch_2',...'backgroundcolor',[0.550.550.55],...'callback',['index(1,2)=abs(index(1,2)-1);']);p3=uicontrol('parent',h0,...'style','radiobutton',...'position',[280,60,65,20],...'string','Ch_3',...'backgroundcolor',[0.550.550.55],...'callback',['index(1,3)=abs(index(1,3)-1);']);%*****************½Úµã²É¼¯ÐŵÀ¿ÉÒÔÀ©Õ¹******************************** %p4=uicontrol('parent',h0,...%'style','radiobutton',...%'position',[30,260,65,20],...%'string','Ch_4',...%'backgroundcolor',[10.80.1],...%'callback',['index(1,4)=abs(index(1,4)-1);']);%p5=uicontrol('parent',h0,...%'style','radiobutton',...%'position',[30,230,65,20],...%'string','Ch_5',...%'backgroundcolor',[10.80.1],...%'callback',['index(1,5)=abs(index(1,5)-1);']);%p6=uicontrol('parent',h0,...%'style','radiobutton',...%'position',[30,200,65,20],...%'string','Ch_6',...%'backgroundcolor',[10.80.1],...%'callback',['index(1,6)=abs(index(1,6)-1);']);%p7=uicontrol('parent',h0,...%'style','radiobutton',...%'position',[30,170,65,20],...%'string','Ch_7',...%'backgroundcolor',[10.80.1],...%'callback',['index(1,7)=abs(index(1,7)-1);']);%******************************************************************%*************************genarate a legend************************%colour=['r-';'g-';'b-';'r:';'g:';'y';'p'];colour=['r-';'g-';'b-'];p=zeros(3,1);x=0;axes('position',[0.140.30.750.6])for ck=1:3p(ck)=plot([025],[1.62 1.62],colour(ck,:));hold onendtitle('ÈÈÊ͵çºìÍâÐźŲâÊÔʾ²¨Æ÷')legend('ch1','ch2','ch3','location','NorthEast');axis([x250 3.5]);ylabel('Voltage(v)')xlabel('Time(s)')grid ondelete(p)%********************************************************************。