matlab串口程序


clc;clear all; close;
delete(instrfindall);%关闭已经打开的串口
clear obj;
name = 'temp_data.txt';  %0
read_success=0;
n = 16412;%设置一次接收数据长度
a=[126 126 0 34 0 4 1 1 1 1 89 213];   %发送指令
%ad_data=[];
j=1;
sendata = dec2hex(a);%十进制转成16进制
databuffer=[];
obj = serial('com3','baudrate',115200,'parity','none','databits',8,'stopbits',1);  %串口设置
set(obj, 'InputBufferSize', 32000);
set(obj, 'OutputBufferSize', 32000);
fopen(obj);
fwrite(obj,a);
databuffer = fread(obj,n,'uint8');   %串口读取数据
if isempty(databuffer) ==1
    disp('数据读取失败');
else
    disp('数据读取成功');
    read_success=1;
    dlmwrite(name,databuffer); %数据格式保存为txt文件
end    
fclose(obj);
delete(obj);

%保存数据
if read_success ==1
 gd_adc = 1;
%数据处理
ch1_data =[]; %通道1数据地址
ch2_data =[]; %通道2数据地址
j=1;
%ad_data=[];
m=load('temp_data.txt');
temp_data=m(27:16410);
b=reshape(temp_data,2048,8);
  for i = 1 : 2048  %27~2075-ch1,2075~4123-ch2
    temp1 = b(i,1); %
    temp2 = b(i,2);
    temp3 = b(i,3);
    temp4 = b(i,4); %
    temp5 = b(i,5);
    temp6 = b(i,6);
    temp7 = b(i,7);
    temp8 = b(i,8);    
    if mod(i,2)==1
      a1 = bitshift(temp1,8); %a左移8位赋值给b
      a2 = bitshift(temp2,8);
      a3 = bitshift(temp3,8); %a左移8位赋值给b
      a4 = bitshift(temp4,8);
      a5 = bitshift(temp5,8); %a左移8位赋值给b
      a6 = bitshift(temp6,8);
      a7 = bitshift(temp7,8); %a左移8位赋值给b
      a8 = bitshift(temp8,8);     
    elseif mod(i,2)==0
       ch1_data(j) = bitor(temp1,a1);
       ch2_data(j) = bitor(temp2,a2);
       ch3_data(j) = bitor(temp3,a3);
       ch4_data(j) = bitor(temp4,a4);
       ch5_data(j) = bitor(temp5,a5);
       ch6_data(j) = bitor(temp6,a6);
       ch7_data(j) = bitor(temp7,a7);
       ch8_data(j) = bitor(temp8,a8);     
        j=j+1;
    end
  end

for k=1:1024

      ch1_vin(k) = (5.0*ch1_data(k))/32768.0;
      ch2_vin(k) = (5.0*ch2_data(k))/32768.0;
      ch3_vin(k) = (5.0*ch3_data(k))/32768.0;
      ch4_vin(k) = (5.0*ch4_data(k))/32768.0;
      ch5_vin(k) = (5.0*ch5_data(k))/32768.0;
      ch6_vin(k) = (5.0*ch6_data(k))/32768.0;
      ch7_vin(k) = (5.0*ch7_data(k))/32768.0;
      ch8_vin(k) = (5.0*ch8_data(k))/32768.0;
end

number= length(ch1_vin);
x=linspace(1,number,number);

%原始信号
figure(1);
subplot(211);
plot(x,ch1_vin);
ylim([0,4]);xlim([0,1024]);
ylabel('幅值/v','FontSize',12);title('CH1');

subplot(212);
plot(x,ch2_vin);
ylim([0,4]);xlim([0,1024]);
ylabel('幅值/v','FontSize',12);title('CH2');

figure(2)
subplot(211);
plot(x,ch1_vin);
%ylim([-3.3,3.3]);
xlim([0,1024]);
xlabel('采样点数','FontSize',12);ylabel('幅值/v','FontSize',12);title('CH1振动信号');

%fft
fs=20000;
nfft=2048;
rfft = fft(ch7_vin,nfft);
y1=abs(rfft);
f1=(0:nfft-1).*fs/nfft;
%figure(2)
subplot(212);
plot(f1(1:nfft/2),y1(1:nfft/2)*2/nfft);
xlim([0,2000]);
xlabel('f/Hz','FontSize',12);ylabel('幅值/v','FontSize',12);title('CH1振动信号FFT谱图');


end

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MATLAB串口通讯程序用于在MATLAB中与串口设备进行通信。在使用串口通讯之前需要先确定好串口设备的连接和参数设置。下面是一个简单的MATLAB串口通讯程序示例: ```matlab % 创建串口对象 s = serial('COM1'); % 设置串口参数 set(s, 'BaudRate', 9600); set(s, 'DataBits', 8); set(s, 'StopBits', 1); set(s, 'Parity', 'none'); % 打开串口 fopen(s); % 发送数据 dataToSend = 'Hello'; fwrite(s, dataToSend); % 接收数据 dataReceived = fread(s, s.BytesAvailable); % 关闭串口 fclose(s); delete(s); clear s; ``` 以上示例中,首先创建了一个串口对象,并设置了串口参数,如波特率、数据位、停止位和校验位等。然后使用`fopen`函数打开串口连接。接着可以使用`fwrite`函数向串口发送数据,也可以使用`fread`函数接收从串口接收到的数据。最后使用`fclose`函数关闭串口连接,并删除并清除掉使用的串口对象。 需要注意的是,在实际使用中,可能需要根据具体的串口设备和通信协议进行一定的定制化操作,如添加数据处理、错误检查和超时处理等。此外,还可以使用MATLAB的工具箱和函数扩展串口通讯的能力,如通过`MATLAB Instrument Control Toolbox`中的函数来进行更高级的串口通讯操作。 总之,MATLAB串口通讯程序可以方便地实现与串口设备的数据交互,提供了简单而灵活的API,可以满足各种串口通讯需求。 ### 回答2: MATLAB串口通讯程序是用来与外部设备进行数据交互的程序。在MATLAB中,我们可以通过串口通讯实现与硬件设备(如传感器、执行器等)的数据读取和发送。 下面是一个简单的MATLAB串口通讯程序示例: 1. 首先,我们需要创建一个与外部设备进行通信的串口对象。可以使用以下代码: ```matlab s = serial('COM1'); % 创建串口对象,COM1代表串口号 ``` 2. 接下来,我们可以设置串口的参数,如波特率、数据位数、停止位等。以下是一个设置波特率为9600、数据位数为8位、停止位为1位的示例代码: ```matlab set(s, 'BaudRate', 9600); set(s, 'DataBits', 8); set(s, 'StopBits', 1); ``` 3. 现在,我们可以打开串口并建立与设备的连接: ```matlab fopen(s); % 打开串口 ``` 4. 数据读取和发送是串口通讯的核心功能之一。可以使用以下代码来读取从设备发送的数据: ```matlab data = fread(s, n); % 读取n个字节的数据 ``` 其中n代表读取的字节数。同样,我们也可以使用以下代码将数据发送给设备: ```matlab fwrite(s, data); % 发送数据给设备 ``` 5. 最后,当通讯结束时,我们需要关闭串口并释放资源: ```matlab fclose(s); % 关闭串口 delete(s); % 删除串口对象 clear s; % 清除串口对象 ``` 以上就是一个简单的MATLAB串口通讯程序示例。在实际应用中,我们可以根据具体的需求进行数据处理和控制操作,实现与外部设备的可靠通讯。 ### 回答3: MATLAB是一个强大的数值计算和科学仿真软件,也提供了与外部设备进行串口通信的功能。在MATLAB中,我们可以使用Serial对象来建立与串口设备的通信连接,并通过串口发送和接收数据。 首先,我们需要使用MATLAB的serial函数创建一个Serial对象。在创建Serial对象时,我们需要指定串口号、波特率、数据位数等参数。例如,下面的代码创建了一个与COM1串口的连接,波特率为9600,数据位数为8位的Serial对象: s = serial('COM1','BaudRate',9600,'DataBits',8); 接下来,我们可以使用fopen函数将Serial对象与串口设备建立连接: fopen(s); 连接建立后,我们可以使用fread函数从串口接收数据,使用fwrite函数向串口发送数据。这两个函数的语法分别为: data = fread(s,num_bytes); fwrite(s, data); 其中,s是Serial对象的名称,num_bytes是要接收的字节数,data是要发送的数据。 在进行串口通信时,我们可能还需要设置串口的其他参数,例如校验位、停止位等。可以使用set函数来设置Serial对象的属性,如: set(s,'Parity','none'); set(s,'StopBits',1); 最后,当我们不再需要与串口设备通信时,可以使用fclose函数关闭串口连接: fclose(s); 这是一个简单的示例,说明如何使用MATLAB进行串口通信。根据具体的应用需求,我们可以根据Serial对象的各种方法和属性来实现更复杂的串口通信功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值