本文框架:

(1)介绍控制系统的基本性能要求及常用性能指标;
(2)简介RT1064与无线串口透传模块;
(3)MATLAB数据处理过程详解;
(4)效果展示与分析;
(5)操作指南(手把手教你使用)。


一、控制系统相关知识

(1)控制系统的基本性能要求:稳、准、快
稳:指的是系统的稳定性。稳定性是系统重新恢复平衡状态的能力。不稳定的系统将出现持续的震荡,无法运用于自动控制系统中。
准:对系统稳态(静态)性能的要求。对于一个稳定的系统而言,当过渡过程结束后,系统输出量的实际值与期望值之差称为静态误差,它是衡量系统控制精度的重要指标。稳态误差越小,表示系统的准确性越好,控制精度越高。
快:对系统动态(过渡过程)性能的要求。描述系统动态性能可以用平稳性和快速性加以衡量。平稳是指系统由初始状态过渡到新的平衡状态时,具有较小的过调和振荡性;快速性是指系统过渡到新的平衡状态所需要的调节时间最短。动态性能是衡量系统质量高低的重要指标。
(2)系统的动态性能指标:

延迟时间td :阶跃响应第一次达到终值h(∞)的50%所需时间。
上升时间tr :阶跃响应从终值的10%上升到终值的90%所需时间;对有振荡的系统,也可以定义为从0到第一次达到终值所需要的时间。
峰值时间tp:阶跃响应越过终值h(∞)达到第一个峰值所需时间。
调节时间ts :阶跃响应到达并保持在终值h(∞)±5%(或2%)误差带内所需要的最短时间。
超调量σ%:峰值超出终值h(∞)的百分比,即

在上述动态性能指标中,我们常用调节时间ts (反映过渡过程的长短)、超调量σ%(反映过渡过程的波动程度)和峰值时间tp来作为系统的动态性能指标。


二、硬件模块简介

(1)RT1064核心板
RT1064为NXP公司推出的RT1064,属于RT1060系列,Cortex M7内核,拥有600Mhz运行主频4MB Flash,1MB SRAM,32KB I-Cache,32KB D-Cache,是现阶段运算性能最为强劲的一款微控制器。详细技术指标可到NXP官网查看。这里我使用的是逐飞科技有限公司推出的RT1064最小系统版。

(2)无线串口透传模块
这里我使用的是逐飞科技推出的无线转USB(接上位机)/无线转串口(接下位机)模块,相比于平常使用的蓝牙模块,无需了解其他知识,就能快速入手,且该模块传输距离更远、传输速度更快!个人感觉:真香!

有两点需要注意一下:①在接线时,上位机的RX引脚要接下位机的TX引脚,同样上位机的TX引脚要接下位机的RX引脚。②我们传输的数据类型一般为int型、double型等等,而串口一次只能发送8位的数据,且发送的数据格式为uint8。这就需要涉及到数据转换。以int32型为例,因为int型数据有正负,需要先进行符号位的判断,先向上位机发送符号位(2字节);int32有32位数据,须将它分解为4个字节,依次发送给上位机。因此,一个int32型的数据通过数据转换为6个字节数据进行传输。其他数据类型的传输同理可得。若不知道某数据类型的字节数,可用sizeof( )函数进行获取。以下为数据转换代码,基于RT1064+逐飞的无线转串口模块,仅供参考。

void data_int32_transform(int32 data)//数据转换
{i_bit=sizeof(data);       //获取数据字节数if(data>=0)         //判断数据正负,若为正值,标志位为0{val=0;seekfree_wireless_send_buff(&val,1);//发送符号标志位//data=abs(data);for(i_bit;i_bit>=0;--i_bit)     //移位处理,先发送高位{data_temp=(uint8)(data>>(8*i_bit));seekfree_wireless_send_buff(&data_temp,1);//发送数据}   }else               //若为负值,标志位为1{val=1;seekfree_wireless_send_buff(&val,1);//符号标志位data=abs(data);for(i_bit;i_bit>=0;--i_bit){data_temp=(uint8)(data>>(8*i_bit));seekfree_wireless_send_buff(&data_temp,1);}}
}

三、MATLAB数据处理:

如下图所示,我在做速度、电流双闭环时同时向上位机发送了两种数据内容:电流值与速度值,且轮流发送;数据值即为单片机经过上述数据转换后发送给上位机的内容;每个数据内容为6个字节,其中分为2个字节的符号位和4个字节的数据位。

诚然,在MATLAB里需要将数据值再一次进行数据转换才能处理。我的转换思路为:(1)将数据值的每2个字节进行合并,即第一个字节左移8位并和第二个字节进行或运算;(2)经上述处理后,每个数据内容变为一个符号位和两个数据位;此时再将两个数据位合并,根据符号位判断数据的正负,到此数据转换结束,我们就能得到单片机原始要发送的数据(3)因为我同时发送了两种内容的数据,最后我还需要将数据进行分类处理。
以下为MATLAB数据处理代码:

duty=30;
s_P=2.58;
s_I=0.82;
c_P=0;
c_I=0;
goal_speed=(duty*2);
goal_current=(310+duty);  %以上为我所需要的一些常量a=textread('E:\毕业设计\无线转串口\串口助手\串口助手\sscom32\SaveWindows2021_3_28_19-28-50.txt','%s')';%以字符形式打开文件,文件地址具体查看你的数据文档所在地址
alpha=hex2dec(a)'; %16进制转化为10进制数,存入alpha矩阵,方便后面的数据处理
row=size(alpha,2); %判断我的数据总数,若只有一个数据内容:00 01 00 00 0C 5A 则                       row=6,存入1X6大小的矩阵
%以下为变量初始化
temp=zeros(1,row/2);%将数据值的每2个字节合并后暂存区矩阵
data=zeros(1,row/6);%数据内容暂存区矩阵
current_data=zeros(1,row/12); %存放电流数据的矩阵
speed_data=zeros(1,row/12);    %存放速度数据的矩阵
speed_lower_err_line=zeros(1,row/12);%速度动态响应曲线的下误差线
speed_upper_err_line=zeros(1,row/12);%速度动态响应曲线的上误差线
current_lower_err_line=zeros(1,row/12);%电流动态响应曲线的下误差线
current_upper_err_line=zeros(1,row/12);%电流动态响应曲线的上误差线
for i=1:row/2temp(1,i)=bitor(bitshift(alpha(1,2*i-1),8),alpha(1,2*i));%每2个字节数据进行合并处理,经过这步处理后,每个数据内容由原本占用1X6的矩阵变为1X3的矩阵,其中第一个表示符号位,第二、三个表示数据数据位。
end
for j=1:row/6data(1,j)=bitor(bitshift(temp(1,3*j-1),8),temp(1,3*j));%将数据位合并if(temp(1,(3*j-2))==256)%判断符号位正负,移位后原本的负号标志1变为256data(1,j)=-data(1,j);end
end
for jj=1:row/12 %将电流数据和速度数据经行分类处理,并确定各自的误差带current_data(1,jj)=data(1,(2*jj-1));speed_data(1,jj)=data(1,(2*jj));speed_lower_err_line(1,jj)=(goal_speed+goal_speed*0.05);speed_upper_err_line(1,jj)=(goal_speed-goal_speed*0.05);current_lower_err_line(1,jj)=(goal_current+goal_current*0.05);current_upper_err_line(1,jj)=(goal_current-goal_current*0.05);
endfigure(1);%画出电流动态响应曲线
hold onplot(1:5:(row/12)*5,current_data(1,1:row/12));plot(1:5:(row/12)*5,current_lower_err_line(1,1:row/12),'r--');%上误差线plot(1:5:(row/12)*5,current_upper_err_line(1,1:row/12),'r--');%下误差线
hold offcurrent_ave=mean(current_data(:));%求电流平均值%legend('name');title({['左轮开环空载电流时间图像(占空比:',num2str(duty),'%)'],['电流平均值:',num2str(current_ave),'mA/5ms']});xlabel('Time(ms)');ylabel('Current(mA)');figure(2)%画出速度动态响应曲线
hold onplot(1:5:(row/12)*5,speed_data(1,1:row/12));plot(1:5:(row/12)*5,speed_upper_err_line(1,1:row/12),'r--');%上误差线plot(1:5:(row/12)*5,speed_lower_err_line(1,1:row/12),'r--');%下误差线
hold off
speed_ave=mean(speed_data(:));%求转速平均值
%legend('name');
title({['左轮空载脉冲时间图像(占空比:',num2str(duty),'%  P:',num2str(s_P),'  I:',num2str(s_I),')'],['转速平均值:',num2str(speed_ave),'脉冲/5ms']});
xlabel('Time(ms)');
ylabel('Speed(脉冲)');
saveas(gcf,'E:\毕业设计\Matlab\波形\空载\Speed\左轮\test1.jpg');%保存图像

四、效果展示与分析:

话不多说,直接上图展示:
(1)空载下采用开环控制

(2)空载下采用电流单闭环控制

(3)空载下采用速度单闭环控制


(4)空载下采用速度、电流双闭环控制


本期就只给出空载下的效果图哈,下期给出负载下的效果图和个人调节双闭环的心得!想要学习的小伙伴记得关注我哈~
从图像上来分析,在空载时若采用电流、速度闭环控制方式,其电流值出现超调量后快速趋于一个恒定值而波动,其调节时间最短;其速度值出现超调量后快速趋于期望值,调节时间最短,且调节过程较为平稳,没有太大的波动。
相比于传统的目测法、经验法调节PID参数,采用辅助工具进行调参显然更具科学性!
此外根据响应情况,我们可以快速的判断出该调节哪个参数、调大或者调小。


五、操作指南:

1、硬件连接、无线模块的配置、单片机程序设计
依照自己的情况而定。
2、上位机处理
我所使用的串口助手是sscom5.13.1,具体使用步骤如下:

3、导入数据到MATLAB
将数据文本的地址拷贝到MATLAB中,点击运行,进行数据处理。
4、图像分析
根据MATLAB生成的系统动态响应图像,借助第一节所提到的相关性能指标,进行参数调节。


总结

整篇文章涉及的内容庞杂,爱学习的小伙伴细品细品,相信你会学习到很多知识!鉴于我也是刚入门的C鸟,所以还请多多指教!有不懂的地方欢迎留言…

智能车基于RT1064+无线串口透传模块利用MATLAB辅助调节PID参数相关推荐

  1. 物联网高温作业应用场景耐高温无线收发串口透传模块推荐

    E30T-433T20S 耐高温无线串口透传模块 载波频率:410-450MHz 发射功率:20dBm 通信距离:3.5km 产品尺寸:16 * 26mm 产品简介:E30T-433T20S 是一款耐 ...

  2. 【单片机笔记】使用ESP8266的WIFI-MQTT串口透传模块实现TLINK平台测试

    以下内容是使用MARS-WIFI-MQTT串口透传工具对TLINK平台中的MQTT协议进行的测试,请用户使用自己的帐号创建设备进行测试. 模块手册在下面连接中找: 链接:https://pan.bai ...

  3. wifi android透传源代码,【终极版】ESP8266远程控制wifi透传模块带调试app

    本帖最后由 ITEAD创易工作室 于 2016-1-27 11:57 编辑 你好,2016!ITEAD给大家带来新年的第一帖!发财贴! 为什么说是发财贴呢?今天要介绍给大家的是一款成品级的wifi远程 ...

  4. 在龙芯1C单片机上使用ESP8266 wifi透传模块

    龙芯1C既可以运行linux,也可以当作单片机用.当用作linux时,可以通过USB wifi模块RTL8192C,RTL8188ETV等,当作单片机用时,可以像STM32那样使用串口透传wifi模块 ...

  5. ESP8266局域网智能家居 路由器下作服务器模式串口透传 无线通信控制 arduino uno示例 模板参考

    准备工作 下载一个Arduino IDE, 下载8266的库文件 ESP8266服务器模式串口透传编译 功能说明 1.直接使用路由器中转数据 2.手机放热点模式直接传输数据 两者有访问IP地址的差别, ...

  6. 物联网智能家居DIY_TC32篇(2) BLE_AT透传串口点灯

    物联网智能家居DIY_TC32系列文章目录 1. 环境搭建与点灯 2. TC32透传解析 文章目录 物联网智能家居DIY_TC32系列文章目录 一.前言 二.前置条件 三.本文参考资料 四.正文部分 ...

  7. linux系统串口透传,基于CC2540的USB虚拟串口透传方案

    1.USB虚拟串口代替物理串口的可行性 首先,越来越多带USB接口的器件涌现出来,如带USB接口的单片机,或独立的USB接口器件,而且这些器件的成本已经很接近于使用RS232电平转换芯片所带来的成本. ...

  8. 【嵌入式】蓝牙串口通信透传模块(HC-08)的使用

    一 使用蓝牙透传模块简介 HC-08 蓝牙串口通信模块是新一代的基于 Bluetooth Specification V4.0 BLE 蓝牙协议的数传模块.无线工作频段为 2.4GHz ISM,调制方 ...

  9. 物联网IOT选型wifi路由模块串口透传不得不知的秘密

    2020年一场突如其来的疫情灾难袭来,各大经济市场在不同程度被按下了"暂停键".物联网控制作为新兴行业优势凸显出来,其无接触式的交互方式,远程控制,智能控制车间,给疫情期间的人民带 ...

  10. 十、stm32-ESP8266(串口透传、MCU透传、控制LED亮灭)

    目录 一.固件库模板 二.准备资料 三.简介 1. 引脚 2. 无线组网 2.1 ESP8266 在 SoftAP 模式 2.2 ESP8266 在 station 模式 2.3 ESP8266 在 ...

最新文章

  1. 怎么读取java文件,Java怎么读取文件
  2. python系统提供构造函数传入参数_[ Python入门教程 ] Python函数定义和使用
  3. SOA、SOAP、RPC、REST、DUBBO的区别与联系
  4. vi/vim 中批量在行插入或删除指定字符
  5. 概念设计师凌云:《蜘蛛侠:平行宇宙》和《证人》美术浅析
  6. Leetcode--1019. 链表中的下一个更大节点(java)
  7. JAVA中iterator与add的顺序问题
  8. 集成学习(三)——LightGBM
  9. Qt 中实现在控件中点击鼠标,就在鼠标点击处加载图片的方法
  10. 国内域名商.wang总量TOP14统计报告(6月9日)
  11. centos6.5系统执行mv /* /path,只能用cd命令,如何恢复
  12. h5制作导出html,Hype这款H5制作软件的导出功能的详细介绍
  13. HF-LPX30 LPX20
  14. I Irrational Division
  15. Python读写矢量数据(1)针对读取矢量数据——Python地理数据处理学习分享
  16. word文档生成方案
  17. 智能语音技术:从哪儿来?往何处去?
  18. 手把手教你使用Django如何连接Mysql
  19. 思博伦CEO称LTE与云计算紧密相连
  20. AIX 报错“BFE4C025 P H sysplanar0 UNDETERMINED ERROR”

热门文章

  1. 草蛋的Android studio 居然让我搞了好几天 真是智障啊non-zero exit value 2
  2. OpenWrt开发必备软件模块——进程管理服务procd
  3. 【考前必读】致PMI项目管理认证系列考试考生
  4. Win10环境下完美卸载MySQL
  5. 从Uber和快的、滴滴、易到App对比看人性
  6. Codeforces::GYM 102896E Easy Measurements
  7. 金融理财产品后台原型|Axure原型
  8. IPD解读——市场管理(MM)方法论
  9. jar包打包成exe安装包
  10. UEFI原理与编程实践-PROTOCOL