matlab串口 中断接收程序,Matlab串口数据接收发送流程和串口速度提高 您所在的位置:网站首页 serialport函数matlab matlab串口 中断接收程序,Matlab串口数据接收发送流程和串口速度提高

matlab串口 中断接收程序,Matlab串口数据接收发送流程和串口速度提高

2023-08-31 09:12| 来源: 网络整理| 查看: 265

在进行PID参数整定的工作过程中,我需要将电机的转速、扭矩、母线电压、母线电流、相电压、相电流等参数通过串口传递到电脑上用Matlab来进行BP神经网络算法的PID整定计算,再将计算得到的PID参数传给电机的驱动板,来控制电机运行。在整个过程中采用了Matlab来进行串口数据的读写。目前整个流程已经走通,在此将实现过程中遇到的问题,解决方法,以及尚未解决的疑问进行总结。

首先声明本人是一个初学Matlab的新手,因此下面大部分都是自己摸索的东西,可能有肤浅或者不简洁的地方。这里写出来主要还是对自己工作的一个总结,以便未来的使用和提高。

Matlab串口数据接收一般可以通过两种方法来实现,一种是直接调用tmtool工具,找到相应的串口,配置串口参数,生成代码;另一种方法是通过一系列与串口有关的函数来对串口进行操作。

通过tmtool进行串口设计比较简单,如图所示,在Communiate项目栏中可以对串口进行读写操作并输出,这里可以设置数据种类(Data type)为ASCII码,二进制、二进制数据块(这里笔者的理解是类似一个数据帧,拥有帧头、传输数据个数位等)。通过数据格式(Data format)来设置接收数据的格式,例如ASCII码的格式有字符、字符串、带换行符的字符串等;二进制有位数等。还可以设置写入和读取是否按照HEX(16进制)进行表示。

a224a248d021

image.png

在Configure项目栏中,可以对串口的参数进行配置,如图所示。

BauRate是对串口波特率的设置,只有上下位机采用相同的波特率时串口才能够进行正常通讯。

DataBits : 是数据位,有8位和9位两种,一般选8位。

DataTerminalReady(DTR) : 数据终端就绪,表明机器已经准备好可以接受数据的一个标志位,一般用在RS232的串口场合。

FlowControl : 流控制位,当数据读写速度存在差异时,可以采用流控制,来开启和关闭数据流,有硬件和软件控制两种方式。

InputBufferSize/OutputBufferSize : 是输入缓存大小和输出缓存大小,单位是字节。

Parity : 奇偶校验位,这里应该与下位机格式相匹配。

RequestToSend(RTS): 请求结束位,也是在RS232中常用。

StopBits: 结束位,这里应该与下位机格式相匹配。

Terminator: 中断标志,这里是以某个字符作为中断函数入口的标志,检测到这个字符存在后即可进入回调函数。

Timeout: 溢出时间,当开始接收后超过这个时间还没有数据还没有接收完成,即可认为数据接收失败,这个时间可按照实际传输周期来设定,一般越小越好。

ByreOrder: 是数据的传输模式,有大端模式和小端模式两种。小端模式是指数据的高字节保存在内存的高地址中,大端模式是指数据的高字节保存在内存的低地址中。以unsigned int value = 0x12345678为例,该数分为四个字节 12 34 56 78:

小端模式情况下,字节存储顺序是

Buffer[3]=0x12 ------高位

Buffer[2]=0x34

Buffer[1]=0x56

Buffer[0]=0x78 ------低位

大端模式下,字节存储顺序是

Buffer[3]=0x78------高位

Buffer[2]=0x56

Buffer[1]=0x34

Buffer[0]=0x12 ------低位

大端模式和小端模式只在传输的一个数据是个多字节数据时,才需要区分。一般来说下位机ARM是按照小端模式来存储的,这一现象我会在另一篇下位机串口通讯时将共用体时举出例子。因为我这里传输的数据每次就是一个字节,因此无所谓大小端。

a224a248d021

image

Session Log项目栏可以将之前的各种操作用函数语言来表示。

采用与串口有关的函数也能实现对串口的操作。作者主要是通过这种方法来实现整个串口的运行。

首先了解几个主要函数:

delete(instrfindall) : 删除所有串口信息,在程序结束后没有删除串口信息,可能会导致串口被占用,下一次程序无法使用串口或者其他软件无法使用串口。因此在不再使用串口的时候,应将串口释放。为了Matlab运行的正确性,也可以将运行中的所有工作变量删除,这里可以采用clera all语句。

obj1=serial('com2'): 定义某串口为变量obj1,也就是相当于为串口com2起了一个名字叫obj1,后面对obj1操作就相当于对com2操作。

fclose(obj1)/fopen(obj1): 关闭串口和开启串口,有些参数设定需要先关闭串口,因此在进行串口参数设定前先将串口关闭,设定完成后再打开。

obj1:直接在命令行窗口输入定义好的串口变量,可以看到一个串口obj1的参数列表。

set(obj1, 'BaudRate', 115200): 通过set函数可以对obj1进行参数设定,格式是set(串口变量名,'参数名称',参数),这里是设定波特率是115200。

set(obj1, 'InputBufferSize', 100): 输入缓存大小 100 字节。

set(obj1, 'OutputBufferSize', 100)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有