通信人家园

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索

军衔等级:

  新兵

注册:2015-4-8
跳转到指定楼层
1#
发表于 2017-6-13 16:42:28 |只看该作者 |倒序浏览
         在MATLAB中使用串口进行通信是很简单的事情,MATLAB将底层的操作都封装成了函数。直接调用这些函数进行串口通信如果读写文件一样方便。
       首先先介绍一下Matlab中的串口通信主要函数,具体函数应用可以查看MATLAB帮助文档,里面有详细的介绍,非常有价值。
1.        obj = serial('port') %创建串口对象
2.        fopen(serial)        %打开串口对象
3.        fread(serial)        %二进制方式读数据
4.        fwrite(serial)       %二进制写数据,程序中没有用到
5.        fclose(serial)       %关闭串口对象
6.        delete(serial)       %删除串口对象


第一步,使用serial函数创建一个串口对象obj。如果要对波特率等通信参数进行设置,可以使用set(serial)函数进行设置,我这里使用默认参数,然后使用fopen函数打开obj。

  • obj=serial('com8');  %可以通过计算机的设备管理器查看下位机具体端口位置
  • fopen(obj);


复制代码


第二步,使用disp(obj)函数,可以查看obj的相关属性。

  • disp(obj)

复制代码

显示obj对象属性结果如下:
Serial Port Object : Serial-COM8       %串口对象的名称
   Communication Settings               %通信设置
      Port:               COM8                 %占用的端口号
      BaudRate:           9600             %通信波特率9600
      Terminator:         'LF'                %终止符为'LF',也就是回车

   Communication State                  %通信状态
      Status:             open                %当前为打开状态
      RecordStatus:       off              %记录状态为关闭

   Read/Write State                     %读/写状态
      TransferStatus:     idle           %传输状态idle表示没有异步读/写操作正在进行
      BytesAvailable:     234          %缓冲区中数据的字节数
      ValuesReceived:     0            %已经被用户读取的字节数
      ValuesSent:         0              %已经发送的字节数
   

第三步,读取数据。读取数据可以使用fread(serial),fscanf(serial),fgetl(serial),fgets(serial)等函数。这里使用fread函数读取8个字节的数据。

  • data=fread(obj,8)'    %读出的数据流是列向量,转换成行向量


复制代码

data =
    84    69    77    80     0   136    84    69

  • char(data)    %将数据转换成字符型,查看内容


复制代码

ans =
TEMP ?TE

  • temperature=0.0625*(data(5)*256+data(6))  %"TEMP"后的两字节内容为温度数据,计算温度,单位:℃。

复制代码

temperature =
    8.5000  

计算可知,当前温度为8.5℃。

第四步,完成通信操作后,使用fclose(serial)关闭串口,或者使用delete(serial)删除串口对象。


我编写了一个MATLAB程序来采集当前环境温度。图1~2精度为1℃,图3~4精度为0.0625℃(2^-4)
下面分享一下我编写的实时温度采集程序。
通信过程简介
       在这个应用中,下位机是一个stc单片机,该单片机连接一个ds18b20温度传感器采集温度(精度可达0.0625℃,测温范围-40~125℃),并将获取的温度数据通过串口不断向外发送。为方便上位机进行数据处理,发送数据的格式为“TEMP**”,**即代表两个字节的温度数据。MATLAB作为上位机,将从串口接收到的数据流进行处理并更新监控窗口(程序中每5秒刷新一次)。

图0,下位机图
温度传感器DS18B20的简介
        %下位机发送的数据格式微 'TEMPHLTEMPHLTEMP...' ,TEMP是我设置的温度标记符号
        %只起到一个定位的作用,H代表温度数据的高8位,L代表温度数据的低8位,以下程序
        %通过查找TEMP标记定位获取H和L。并转换计算出实际的温度。
        %[H L]共同组成温度数据[S S S S S H3 H2 H1 L8 L7 L6 L5 L4 L3 L2 L1]
        %高8位H分别为[S S S S S H3 H2 H1] 前5位S是温度标记,当温度为正时,S为0;
        %当温度为负时,S为1,[H L]是补码形式。
        % 位 温度(℃)
        % H3   2^6
        % H2   2^5
        % H1   2^4
        % L8   2^3
        % L7   2^2
        % L6   2^1
        % L5   2^0
        % L4   2^-1
        % L3   2^-2
        % L2   2^-3
        % L1   2^-4

程序运行结果(图):

图1,测试笔记本排风口温度1(CPU负载太大,温度竟达到70多℃,相当烫手)


图2 测试笔记本排风口温度2


图3,环境温度(高温区为空调房间,低温区是办公室内,苦啊T_T冷死了)


图4,逐渐靠近计算机排风口(从室温10℃左右升至50℃)

举报本楼

您需要登录后才可以回帖 登录 | 注册 |

手机版|C114 ( 沪ICP备12002291号-1 )|联系我们 |网站地图  

GMT+8, 2024-11-26 23:15 , Processed in 0.297295 second(s), 15 queries , Gzip On.

Copyright © 1999-2023 C114 All Rights Reserved

Discuz Licensed

回顶部