嵌入式实时半实物仿真平台Sukung

前言

Sukung是由华侨大学先进控制实验室研发的一类嵌入式实时半实物仿真平台。它由聂卓赟副教授指导,李兆洋(研究生)主导研发,程前(研究生)完善维护,可用于自动化、控制科学与工程及相关专业学科的理论实践教学、专业实验教学、课程设计、毕设科创等教学实践环节,也可用于科学研究、机器人原型系统设计、工业系统算法测试等应用场景。

Sukung课题组选用MATLAB/Simulink作为仿真平台、STM32作为嵌入式目标机,研制了simulink和目标机之间各类资源调用的实时接口。Sukung拥有丰富的外设资源,包括:常用通信接口(USART,I2C,SPI,CAN),常用IO/计数模块(DAC,ADC,ADC_Ex,GPIO,TIM,PWM,计数器)和专用外设接口(MPU6050,电子罗盘GY271,超声波传感器,显示屏TFT-LCD)等,能够帮助用户快速地开展“实时数据采集与传输”、“快速控制原型”、“硬件在环”和“在线监督优化”等实验。

_images/image114.png

Sukung构建的一种典型半实物仿真平台如上图所示。图中,宿主机作为仿真平台用于控制算法仿真和目标机控制,仿真模型可在MATLAB/Simulink环境下通过代码生成部署的方式下载至目标机中运行。目标机为仿真模型提供实时运行环境和对象实时接口。

结合嵌入式实时半实物仿真平台Sukung,常用的各类传感器和执行器可以在MATLAB/Simulink环境下进行调用。下图给出了基于Sukung的部分实验系统。

_images/image2.jpg

软件获取与咨询

当前软件版本:Sukung V1.0,有线下载,有线数据传输。1.4 快速开始 Sukung。

  • 软件下载:github

  • 淘宝网址: 淘宝网址

  • 定制与合作请联系: yezhuyun@sukung.cn;

  • 技术问题可入群交流:

  • Sukung半实物仿真技术交流,QQ群:661419695;

    _images/image2681.png
  • 欢迎关注微信公众号【Sukung】,相关信息将通过公众号进行推送。

    _images/Sukung公众号.jpg

1.什么是Sukung

1.1 特色

Sukung研发的初衷,是希望能够将目标机的C/C++编程映射为MATLAB/Simulink的图形化编程,统一的图形化编程语言能够转化为规范的C/C++代码,避免科研人员重复性、不规范编程所引起的各种问题,让本科生、研究生或研发人员更加专注于控制算法设计、系统功能开发。

1.1.1 嵌入式

嵌入式半实物仿真平台是一种典型的“主从双机”方案,便携、易扩展、低成本、实时性高、多应用场景,符合快速控制原型的半实物仿真思想,可节省产品研发时间和部署成本。Sukung选择了意法半导体公司的STM32系列微处理器作为目标机的处理器核心。

1.1.2 易用性

即插即用,支持一键代码生成、编译、下载。在Simulink外部模式下,进行实时控制与数据监控,具有实时数据回传、记录和观测,以及实时参数修改和下发功能,包含有线/无线两种模式。

1.1.3 通用性

在丰富的外设接口/通信接口下,Sukung适用于各类自动控制实验对象,例如,倒立摆、直流电机/舵机/步进电机、平衡车、飞行器、板球系统、杆球系统、磁悬浮系统等。

1.1.4 实时性

通过底层代码优化、通信-控制优化、外部模式优化、资源调度优化、代码部署优化等方案,确保了控制系统的实时性。

1.1.5 拓展性

嵌入式微处理器的外设接口非常丰富且可扩展。很多基于UART/USART、CAN、LIN、I2C、SPI及SDIO等通用协议的廉价传感器模块,均可直接应用在嵌入式微处理器方案中,扩展快速且便捷。同时,开发了Simulink下各类外设接口和通信接口。

1.2 技术架构

Sukung系统的技术架构如下图所示。

_images/image3.jpg
1.2.1 面向STM32的定制驱动

定制驱动层是资源实时调度方案中为提高环境模型执行实时性而提出的解决方案。定制驱动层不仅在寄存器层面优化了片内外设的调用逻辑,提高了片内外设的调用协同性和效率,同时还对HAL和LL开源驱动库保持了高度的兼容性,以便能够快速部署现有代码。

1.2.3 代码生成部署

代码生成部署技术是将宿主机中Simulink可视化系统模型转换为目标机可运行代码的关键技术,该技术涉及代码生成、优化、编译、连接、下载等多个过程。

1.2.4 外部模式及改进

目标机与宿主机之间的相互通讯依赖于外部模式。外部模式作为宿主机和目标机之间的通信信道,通过调用双方的传输层接口实现物理对接。外部模式作为通讯部分的载体主要用于完成目标机状态控制、信号触发判断、信号数据记录及信号数据回传等任务。这些任务在嵌入式目标机的运行过程中占据了很大的比重,耗时较长且内存占用大,极易造成通讯的非实时,导致控制与通讯任务相互耦合。在Sukung研发中着重对外部模式的实时性进行了改进。

1.2.5 基于ISP的程序下载

提供一种基于ISP的一键式程序下载,简便易用。分为串口下载与无线下载两种模式。在 5.1点亮一个LED灯:Simulink环境配置与编译下载 中介绍使用方式。

1.2.6 嵌入式目标机

目标机是运行嵌入式软件的硬件平台,Sukung系统选用的目标机为STM32F103ZET6(基础型,144引脚,512K闪存,QFP封装),性能稳定,功能丰富。定制驱动主要面向该类目标机进行研发。

1.2.7 定制实时通信模块

宿主机通过目标机及时获取传感器数据或者目标机系统模型中信号采样点的数据,同时宿主机也可以及时向目标机下发控制命令。目前主要分为有线和无线两种通信方式。有线传输采用串口通信,通过宿主机的外部模式实现与目标机的实时通信;无线传输则采用WiFi通信,通过TCP/IP协议,实现宿主机和目标机之间的通信。

1.3 效果展示

1.3.1 独轮移动机器人

案例效果见B站移动机器人案例

_images/image5.png
1.3.2 板球系统

案例效果见B站板球系统案例

_images/image6.jpeg
1.3.3 旋转倒立摆

案例效果见B站旋转倒立摆案例

_images/image7.png
1.3.3 直流电机

案例效果见B站电机示例

_images/image8.png

1.4 快速开始

首先,到 6.1 软件下载 获取软件,并根据 2.1硬件平台2.2软件平台 进行 2.3 软件安装与注册2.5 Sukung的工程配置。用户可以根据给出的 5. 案例 进行系统搭建;主要的定制资源使用方法可在 4. Sukung定制驱动模块库介绍 中进行查询。同时,在调试中发现的各类问题将在 6.2 常见问题 进行了汇总和更新,鼓励用户反馈问题,共同完善Sukung实验平台,并在 6.6 贡献与致谢 中鸣谢。

1.5 注册与费用

目前提供的Sukung仿真系统为软件版,即有线下载和有线数据传输方式,如下图所示。推广期间,可申请免费试用3周。Sukung软件安装采用机器码注册+在线激活方式使用。相关资费信息见 淘宝网址

用户注册使用方法如下图所示:

_images/image9.jpg _images/image10.jpg

2.平台配置

2.1硬件平台

运行Sukung系统所需的硬件资源为:计算机一台,STM32F103ZET6单片机一套。后续将推出 定制无线通信模块 将Sukung升级为无线版,实现无线程序下载与数据通信。

_images/image11.jpg
2.1.1 计算机

装有操作系统的计算机,在本实验平台中作为宿主机。主要承担两个方面的作用:提供软件运行环境,负责对象建模、算法设计、控制系统仿真、代码生成部署等功能;作为宿主机,负责实验系统的数据监控、记录、参数调节、实时通信等任务。

为保证所有软件能够顺畅运行,计算机需要满足如下基本配置要求:

  • 系统:Windows 7/64位或Windows 10/64 位;

  • 处理器:英特尔 I3/I5/I7, AMD CPU;

  • 内存:推荐8G 及以上内存;

  • 硬盘:推荐固态硬盘;

  • 接口:至少有一个 USB Type A 接口(有线程序下载和数据传输);

  • 显示器;

  • 网络连接:用于注册有效验证;

  • 无线网卡:用于无线程序下载和数据传输(无线版Sukung);

注解

为了获取更高的开发效率,计算机的性能应适当高配,基本要求是能正常运行Matlab2018b。

2.1.2 嵌入式目标机:STM32F103ZET6

嵌入式目标机是MATLAB/Simulink生成代码运行的载体。目标机的性能和外设接口能力,赋予了Sukung实验系统的拓展空间。Sukung的目标机选用STM32F103ZET6型单片机。下图给出了这类常用单片机的硬件资源,详见 博客

_images/image12.jpg
2.1.3 定制无线通信模块

将设计一款专用的无线通信模块,实现Sukung的无线程序下载与无线数据传输。

2.2软件平台

Sukung系统所需的支撑软件如下图所示,包括:MATLAB/Simulink, Keil V5 和Sukung软件包。

_images/image13.jpg
2.2.2 Keil V5及以上版本

Keil公司推出Keil MDK v5使用uVision5 IDE集成开发环境,是针对ARM微控制器的一款集成开发工具。选用了最新发行的Arm Compiler V6编译器(下文将简称为AC6),版本号为AC6.12。该编译器可以大幅提升系统模型的编译速度。

警告

Sukung系统不提供 Keil 及相关工具箱的安装包与安装流程,请读者自行购买。

2.2.3 Sukung软件

Sukung是由华侨大学先进控制实验室研发的嵌入式实时半实物仿真平台,其核心是一套面向MATLAB/Simulink和嵌入式目标机STM32F103ZET6的高性能接口。能够将嵌入式目标机与MATLAB/Simulink进行无缝连接。

Sukung软件的获取: 6.1 软件下载

2.3 软件安装与注册

此节将向用户介绍如何安装、配置以及注册Sukung,以使得用户可以正常使用Sukung完成各项工作。安装视频见B站: Sukung安装教程

步骤1:软件安装
    1. 安装MATLAB/Simulink(推荐2018b或以上版本)。安装路径示例:C:\SoftwareProgram\MATLAB;

    1. 安装Keil V5 (mdk 5.2.3)。安装路径示例:C:\SoftwareProgram\Keil;

    1. 安装Sukung软件:双击运行 Sukung.exe ,安装路径示例:C:\SoftwareProgram\Sukung

警告

上述软件的安装路径中不可包含空格、. 等MATLAB所认为的文件或文件名的非法命名方式。例:C:\Software Program\Sukung。具体参照博客

步骤2:环境变量及路径配置(环境变量

上述软件安装完成之后,进行MATLAB和Sukung根目录的环境变量配置,以及对应库文件、可执行文件、编译器和下载程序的路径配置。

image1image2

    1. 新建 系统变量 MATLAB_ROOT:根据先前MATLAB的安装路径,设定该变量值为 C:\SoftwareProgram\MATLAB

    1. 新建 系统变量 SUKUNG_ROOT:根据先前Sukung的安装路径,设定该变量值为 C:\SoftwareProgram\Sukung

    1. 编辑 Path 环境变量,新建 以下四个变量值,即定位到MATLAB、Keil和Sukung软件安装路径的下述文件夹,完成对可执行文件、编译器、库文件和下载程序的路径配置:

    • C:\SoftwareProgram\MATLAB\bin\win64

    • C:\SoftwareProgram\Keil\ARM\ARMCLANG\bin

    • C:\SoftwareProgram\Sukung\lib

    • C:\SoftwareProgram\Sukung\script\download

完成上述过程后,环境变量界面应当如下所示:

_images/image3.png
_images/image41.png
    1. 除了对环境变量配置,还需设置MATLAB对Sukung的文件路径包含。在MATLAB主界面,打开 设置路径 子界面,点击 添加并包含子文件夹 ,包含Sukung软件的安装路径,即此次示例中的 C:\\SoftwareProgram\Sukung ,具体见下图。

_images/image51.png
步骤3:MATLAB MEX编译器安装
_images/image68.png

在MATLAB命令行窗口执行命令 mex -setup:

    1. 如果执行完毕,输出结果出现上图所示的错误信息,则参考博客,进行MinGW-w64 C/C++ 编译器安装,我们提供MinGW安装文件,可以前往github下载。

    1. 如果出现下图所示输出,则按照输出提示点击 mex -setup C++ ,完成编译器选择和安装。

_images/image71.png
步骤4:注册与激活
_images/image88.png
    1. 重启MATLAB,会出现以下两种情况:

      1. 首次使用Sukung,即PC未注册激活,会出现上图请求激活界面:

      1. 若非首次注册使用Sukung,且注册码已过期,则会出现如下图警告界面:

_images/image9.png

出现上述两种情况,则需在命令行窗口输入控制指令 Sukung_Activate,进行Sukung的注册与激活。

    1. 输入指令后,出现版本的选择,目前Sukung版本为MiniBox版,所以点击 MiniBox

_images/image10.png
    1. 选择版型之后,弹出授权认证窗口,自动生成机器码。用户需将机器码交给客服人员,并登记信息,客服人员再将授权序列号(注册码)交给用户,填入注册界面,完成注册与激活。

_images/image11.png

至此,完成了Sukung的安装与注册。

警告

若使用Sukung相关功能,则需要在启动MATLAB时,保证PC连接网络,以此保证Sukung的正常使用。

2.4 安装完成效果

    1. 按照上节内容按照完毕之后,重启MATLAB,命令行窗口出现 Sukung is ready. ,且无其它警示。

    1. 新建并打开工程,Simulink顶部菜单栏与Simulink Library Browse中分别会出现Sukung相关的设置项和模块库,如下图所示。

_images/image12.png

2.5 Sukung的工程配置

在本节,将会帮助大家了解如何对一个Simulink工程进行Sukung环境配置,主要分为以下几个步骤。

步骤1:系统目标文件(TLC)选择与一键式参数配置
    1. 新建Simulink工程 LED.slx ;

    1. 点击齿轮样式的 Model Configuration Parameters ,进入工程的参数配置界面。点击 Code Generation 这一菜单。

    1. 点击 Browse.. ,等待数秒,在弹出的 System Target File Browser 窗口中,找到 Sukung.tlcEmbedded Target 类型,选择,确认。如下图所示。

_images/image13.png

执行完上述步骤,即会出现下图所示的现象:

_images/image14.png
    1. 展开 Code Generation 菜单栏,点击 Sukung Options ,再点击 Sukung recommended parameters ,即完成Sukung参数一键式配置。

_images/image15.png

警告

Language 栏未出现 C++ ,则可使用我们提供的空模板文件,无需此步骤的环境配置,直接进行模型搭建即可使用。

步骤2:实时传输层配置

若上述步骤配置得当,则 Code Generation 下的 Interface 子菜单栏,会出现下图所示的 External model configuration 界面。

_images/image16.png

此配置是对PC与目标机之间的传输介质以及相关参数的设置,本版本默认只提供 serial 有线的实时传输方式(目标机在Sukung环境中运行时的数据传输方式)。MEX-file arguments 的参数具体意义如下:

  • 0:日志输出等级,用户不需修改;

  • 5:对应目标机设备连接的COM5端口,用户使用时,需先将目标机与PC通过USB线连接,再查看PC上目标机的对应端口,对应作修改,查看方式见博客

  • 1200000:串口传输的波特率,最高可填2000000,若传输数据(示波器数量、Toworkspace模块)过多,则需降低波特率,以保证数据及时处理;相应的数据较少,可适当增加波特率;

  • 10:等待时间,单位(s),PC发出 EXT_CONNECT 指令,等待目标机响应,超过等待时间则报错,需检查通讯是否正确与正常,再次连接。

步骤3:步长(Sample Time)和Solver配置

完成上述Sukung相关配置后,还需对Simulink的相关工程参数进行配置。由于步长与ode的选择会影响传输的数据量和目标机的运行效率,所以我们在此说明。

_images/image17.png

经参数一键配置,Solver默认采用 ode1,步长默认 0.01 ,针对Sukung的使用,有如下建议:

  • Solver:搭建的Simulink算法复杂度过高,则建议ode,甚至采用 discrete 方式(需采用离散形式搭建算法);若算法复杂度较低,建议使用 ode3 或者 auto ,以确保算法经代码生成的精确性;

  • 步长(Sample Time):推荐使用0.005,较低的步长设置对目标机的程序运算能力,以及传输实时性有较高要求,所以需综合考虑进行设置,以确保目标机正常运行。

步骤4:数据接收与存储配置

在实时半实物仿真过程中,数据接收与存储是不可或缺的。Sukung通过对Simulink的外部模式数据结构及传输层接口优化,实现了几乎无存储限制的 ScopeToworkspaceSinks 类模块的数据接收与存储功能。

_images/image18.png

在使用此功能前,我们需对此功能进行配置。回到 LED.slx 的Simulink主界面,我们点击 Code 菜单栏,打开 External Mode Control Panel,会出现下图窗口:

_images/image19.png
    1. 信号使能设置:点击 Signal & Triggering… ,则出现下图所示窗口。我们可以在此窗口使能各个 Scope 模块的数据接收功能。并设置 信号使能设置 参数,对要存储的参数进行分段存储,如果存储的数据超过 信号使能设置 ,则自动将下一部分数据存储到下一个文件中。一般推荐将 信号使能设置 设置尽量大,以方便对数据进行处理。

_images/image20.png
    1. 数据存储设置:点击 Data Archiving… ,则出现如下图所示窗口。通过此窗口设置,可以将工程获取的数据以 Data.mat 存储到 C:\Project 路径下,在此必须勾选 Enable archiving 。每次运行都会生成 Data.mat ,并且尾缀序号。

_images/image21.png

至此,通过上述步骤的设置,我们可以正式开始一个工程 5.1点亮一个LED灯:Simulink环境配置与编译下载

警告

设置 Toworkspace 模块,应当将数据形式设置为 array 。如下图所示。

_images/image22.png

3. 平台使用

3.1使用模式

3.1.1 实时数据采集与传输

如图基于Sukung平台能很简便地构建面向MATLAB/Simulink的数据采集系统。根据传感器类型和通讯方式,在Simulink中设置相应的Sukung IO模块,并下载至目标机。系统运行时,获取的传感器数据能够在示波器中显示,也可以保存至Workspace,用于后续数据处理与分析。

_images/image36.jpg
3.1.2 快速控制原型(Rapid Control Prototyping,RCP)

如下图所示,快速控制原型就是利用某种手段将开发的算法下载到某个硬件平台中,该硬件平台在实时条件下运行,模拟实际控制器,通过I/O设备与被控对象实物连接,验证算法的可靠性和准确度。简单来看,即

快速控制原型=虚拟控制器+实际控制对象

_images/image37.jpg
3.1.3 硬件在环(Hardware in the loop,HIL)

如下图所示,利用某种硬件平台在实验室中模拟对象在实际工作条件下的运动过程,并且通过相应的I/O设备将信号提供给控制器。此时可通过修改控制对象参数来模拟各种工况,达到全面考察验证控制器开发质量及控制算法可靠程度的目的。简单来看,即

硬件在环=实际控制器+虚拟控制对象

_images/image38.jpg
3.1.4 中继与监督优化模式

如图下所示,对于复杂系统可采用分布式控制。Sukung目标机可作为MATLAB/Simulink与各个分布式控制器之间实时数据传输中继。同时,还可以对各个分布式控制回路进行在线监督优化。

_images/image39.jpg

3.2 Sukung模块设置

Sukung的IO资源用于与外设进行实时数据交互。相应地,在Simulink中使用各资源模块需要与外设进行匹配,包括通讯模式匹配,引脚功能匹配与功能参数匹配,如下图所示。

_images/image40.jpg

3.3抗扰控制器

3.3.1 线性自抗扰控制

线性自抗扰控制(Active disturbance rejection control, ADRC),是一类经典的主动抗扰控制方法[1]。在串联积分标准型与总扰动的系统描述下,控制器的设计简化为扩张状态观测器的带宽设计和反馈控制器带宽设计,以及增益参数设计。详细资料及介绍见B站和自抗扰控制QQ群(128464029(入门),914841616(学术)。

_images/image44.jpg

针对典型二阶对象,自抗扰控制器表示为:

\[{u{\rm{ = }}\frac{{Kr + Fz}}{{{b_0}}}}\]

其中

\[\begin{split}\left\{ \begin{array}{l} K{\rm{ = }}F_2^{} = \left[ {\omega _c^2} \right]\\ F{\rm{ = }} - \left[ {F_2^*,F_1^*,F_0^*} \right] = - \left[ {\omega _c^2,2{\omega _c},1} \right] \end{array} \right.\end{split}\]
\[\begin{split}ESO:\left\{ \begin{array}{l} \dot z = \left[ {\begin{array}{*{20}{c}} 0&1&0\\ 0&0&1\\ 0&0&0 \end{array}} \right]z + \left[ {\begin{array}{*{20}{c}} 0\\ {{b_0}}\\ 0 \end{array}} \right]u + \left[ {\begin{array}{*{20}{c}} {3{\omega _o}}\\ {3\omega _o^2}\\ {\omega _o^3} \end{array}} \right](y - {y_z}),\\ {y_z} = \left[ {\begin{array}{*{20}{c}} 1&0&0 \end{array}} \right]z, \end{array} \right.\end{split}\]

以LADRC为基准控制器,文献[2]设计了K和F的“定量自适应”调节,能在有限ESO带宽下提升抗扰性能。

  • [1] Gao Z. Scaling and Parameterization Based Controller Tuning[C]// American Control Conference. IEEE, 2003:4989-4996.

  • [2] Nie Zhuoyun, Zhang Bing, Wang Qing-Guo, Liu Rui-Juan, Luo Ji-Liang. Adaptive active disturbance rejection control guaranteeing uniformly ultimate boundedness and simplicity. International Journal of Robust and Nonlinear Control, 2020, 30(17): 7278-7294.

3.3.2 抗扰PID控制器

抗扰PID控制(Disturbance Rejection Proportional-Integral-Derivative control, DR-PID),是一种基于自抗扰控制原理设计的先进PID控制方法,见文献[3,4]。抗扰PID控制器采用了经典PID形式和自抗扰控制设计方法,参数调节简单、适用范围广、鲁棒性强,其调节方法与PID工程调参经验兼容。反馈控制结构如下图所示。

_images/image50.jpg

得益于ADRC中的带宽化调节方法,DR-PID参数调节非常简单,且物理含义明确。其基本公式为

\[C_{PID}^{DR}(s) = {K_P}\left( {1 + \frac{{{\omega _c}}}{{\alpha + 1}}\frac{{\rm{1}}}{s}{\rm{ + }}\frac{\alpha }{{(\alpha + 1){\omega _c}}}s} \right)\]

其中

  • \(\omega _c\) 为期望闭环带宽,决定闭环响应速度。由被控对象快买特性决定。期望闭环模型为 \(\frac{{{\omega _c}}}{{s + {\omega _c}}}\)

  • \(K_P\) 为控制器增益,相同条件下,逐步增大 \(K_P\) 可改善系统的抗扰性能和跟踪性能。

  • \(\alpha\) 代表相位超前补偿。\(\alpha = 0\) 即为PI控制器,\(\alpha = 1\) 即等效经典的ZN-PID。一般来看,\(\alpha\) 可在1附近进行微调。

几点说明:

  • 调参顺序为,先设定 \(\omega _c\) 即闭环目标,然后调节 \(K_P\)\(\alpha\) ,即实现目标的手段。

  • 如果系统存在超调,可在输入端加入滤波器 \({F_r}(s)\)

  • DR-PID适用于机电系统、一阶时滞系统、积分型(液位)系统、最小/非最小相位系统等各类常见工业对象。PID控制器的抗扰原理及相关技术资料详见博客

  • 在DR-PID下,各个参数物理含义与控制性能建立起了直接关联,有望在DR-PID下建立“白箱”自适应调节与在线优化,同时实现与上层MPC的高效对接,为工业系统APC提供一种实现途径。

  • [3] Nie Zhuoyun, Zhu Chao, Wang Qingguo, Gao Zhiqiang, Shao Hui, Luo Jiliang. Design, analysis and application of a new disturbance rejection PID for uncertain systems. ISA Transactions, 2020, 101: 281-294.

  • [4] 李高铭,聂卓赟,李兆洋,郑义民,罗继亮. 非平衡负载下轮式移动机器人的抗扰PID控制. 控制理论与应用. 2021.

4. Sukung定制驱动模块库介绍

在安装完成Sukung后,用户会在Simulink Library Browse中看到Sukung定制驱动模块库,如下图所式。这些定制驱动模块包括 AD (模数转换模块)、 DA (数模转换模块)、 Counter (编码器模块)、 Display (液晶屏模块)、 I2C (I2C通讯模块)、 IO (输入输出模块)、 PWM (PWM模块)、 Sensor (传感器模块)等。

通过定制驱动模块库,用户可以使用目标机的外设资源,快速搭建基于Sukung目标环境的系统模型,有效降低半实物仿真平台Sukung的使用门槛。接下来将分别对Sukung各模块进行介绍,让用户了解如何使用Sukung模块。我们也基于上述模块,制作了各种控制案例,详情参见 5. 案例

_images/image110.png

4.1 通讯模块

STM32单片机(目标机)常用通讯协议包括:USART/UART、I2C、SPI和CAN等,我们也定制了对应的驱动模块,使得用户可以通过模块使用目标机上的上述通讯接口,实现与其它设备进行通讯,或者接收传感器数据等功能,具有简便、通用的优点。

4.1.1 USART

此模块包括两个子模块: USART_Read 模块和 USART_Write 模块。此节介绍两模块的参数配置要点,使得用户能够利用此模块实现目标机与外部设备之间的串口通讯。

    1. USART_Read模块

    通过 USART_Read 模块,目标机可以通过配置的串口读取外部设备的数据信息,实现串口读功能。为了实现功能,用户需要做如下参数的设置:

    • USART/UART Index:选择所要使用的串口号,范围1~5,4~5对应的是 UART4UART5;

    • Baudrate:串口波特率,单位(bps),最高可设置为2000000,推荐1200000或以下;

    • Buffer Length:接收缓冲区长度,这个值必须是32的倍数,推荐1440;

    • Buffer Count:接受缓冲区个数,必须大于等于2,推荐为4;

    • Is Need Pin Remap:引脚重映射使能,填写0 或者1;

    • Pin Remap Index:重映射索引,参考下述所示的串口引脚映射图填写;

    • Sample Time:采样时间,推荐与系统步长一致。

    _images/image23.png
    1. USART_Write模块

    通过 USART_Write 模块,目标机可以通过配置的串口向外部设备发送数据信息,实现串口写功能。为了实现功能,用户需要做如下参数的设置:

    • USART/UART Index:选择所要使用的串口号,范围1~5,4~5 对应的是 UART4UART5;

    • Baudrate:串口波特率,单位(bps),最高可设置为2000000,推荐1200000或以下;

    • Is Need Pin Remap:引脚重映射使能,填写0 或者1;

    • Pin Remap Index:重映射索引,参考下述所示的串口引脚映射图填写;

    • Sample Time:采样时间,推荐与系统步长一致。

    为了充分利用目标机的外设I/O 资源,我们对USART的引脚做了部分的重映射。在使用过程可以通过设置对应模块参数,使用对应引脚。具体见下图。

    _images/image31.png

注解

USART在STM32单片机上的工作原理,推荐参考博客

注解

Simulink接收和发送数据都是以16进制格式,所以外部设备的数据接收和发送都需要进行16 进制的转化。

4.1.2 I2C

此模块包括三个子模块:I2C_WriteBytes 模块、I2C_WriteBytes_Loop 模块和 I2C_ReadByte 模块。此节介绍三个模块的参数配置要点,使得用户能够利用此模块实现目标机与外部从机进行I2C通讯。

    1. I2C_WriteBytes模块

    通过 I2C_WriteBytes 模块,用户可以将要发送的 Command Data 单次发送到从机,一般用于对从机的初始化或者模式配置。

    • I2C Index:选择目标机I2C外设,可填1和2,分别表示 I2C1I2C2;

    • I2C Mode:设置 I2C 模式,标准/快速模式;

    • I2C Fast Mode Duty Cycle:快速模型下的预分频设置;

    • I2C SCL Rise Time:SCL上升时间设置(纳秒),推荐1000;

    • Is Enable Clock Stretching:选择是否使用I2C时钟延展,推荐使用;

    • Is Need I2C1 Pin Remap:选择是否对I2C1引脚重映射,引脚见下图;

    • Slave Address:从机地址,十进制表示;

    • Command Length:单次要发送的命令长度,根据 CommandData 的长度决定;

    • Command Data:单次要发送的数据,十进制表示,要与 CommandLength 匹配;

    • Sample Time:采样时间,推荐与系统一致。

    _images/image42.png
    1. I2C_WriteBytes_Loop模块

    通过 I2C_WriteBytes_Loop 模块,用户可以将 WriteData 循环发送到从机,一般用于读从机数据前的寄存器设置。

    • I2CIndex:选择目标机I2C外设,可填1和2,分别表示 I2C1I2C2;

    • I2C Mode:设置 I2C 模式,标准/快速模式;

    • I2C Fast Mode Duty Cycle:快速模型下的预分频设置;

    • I2C SCL Rise Time:SCL上升时间设置(纳秒),推荐1000;

    • Is Enable Clock Stretching:选择是否使用I2C时钟延展,推荐使用;

    • Is Need I2C1 Pin Remap:选择是否对I2C1引脚重映射,引脚见下图;

    • Slave Address:从机地址,十进制表示;

    • Write Buffer Size:单次要发送的命令长度,根据 Write Data 的长度决定;

    • Write Data:单次要发送的数据,十进制表示,要与 Write Buffer Size 匹配;

    • Sample Time:采样时间,推荐与系统一致。

    _images/image52.png
    1. I2C_ReadBytes模块

    通过 I2C_ReadByte 模块,用户可以读取从机的数据,并经输出端输出,内部已进行数据拼接处理。

    • I2C Index:选择目标机I2C外设,可填1和2,分别表示 I2C1I2C2;

    • I2C Mode:设置 I2C 模式,标准/快速模式;

    • I2C Fast Mode Duty Cycle:快速模型下的预分频设置;

    • I2C SCL Rise Time:SCL 上升时间设置(纳秒),推荐1000;

    • Is Enable Clock Stretching:选择是否使用I2C时钟延展,推荐使用;

    • Is Need I2C1 Pin Remap:选择是否对 I2C1 引脚重映射,引脚见下图;

    • Slave Read Address:自从机读取数据的地址,十进制表示;

    • Read Buffer Size:要读取的数据长度;

    • Sample Time:采样时间,推荐与系统一致。

    Out[i] = (int16)(((uint32)P_y[i] << 8) | (uint32)P_y[i+1]);
    
    _images/image6.png

我们通过上述模块组合,实现了GY271传感器数据的读取,见案例。I2C引脚图见下方。

_images/image72.png

注解

STM32单片机(目标机)上的I2C协议,原理介绍以及使用,推荐博客

4.1.3 SPI

此模块包括两个子模块: SPI_Write 模块和 SPI_Read 模块。此节介绍两模块的参数配置要点,使得用户能够利用此模块实现目标机与外部设备之间的SPI通讯。

    1. SPI_Write模块

    通过 SPI_Write 模块,用户可以将要发送的 Write_Data 发送到从机,实现通信数据传输。

    • SPI Index:选择目标机SPI外设,可填1、2和3,分别表示 SPI1SPI2SPI3

    • Write_Buffer_Size:单次要发送数据长度,根据 Write_Data 的长度决定;

    • Write_Data:单次要发送的数据,十进制表示,要与 Write_BufferSize 匹配;

    • Sample_Time:采样时间,推荐与系统步长一致。

_images/image67.png
    1. SPI_Read模块

    通过 SPI_Read 模块,用户可以读取从机的数据,并经输出端输出,实现数据的读取。

    • SPI Index:选择目标机SPI外设,可填1、2和3,分别表示 SPI1SPI2SPI3

    • Baudrate_Prescaler:波特率预分频系数;

    • Read_Buffer_Size:要读取的数据长度;

    • Sample_Time:采样时间,推荐与系统步长一致。

_images/image681.png

注解

用户可根据设备条件自行选择,由于SPI1 和SPI3 引脚存在复用情况,可能会造成引脚冲突,为此,为了保证功能的正常实现,建议用SPI2。

注解

STM32单片机(目标机)上的SPI协议,原理介绍以及使用推荐参考SPI 协议

4.2 IO/计数模块

除了上节介绍的通讯模块,我们还定制了STM32单片机(目标机)的通用输入输出模块、DAC模块、ADC模块、PWM模块和计数器模块等,保证用户使用上述模块完成基于目标机的各类运动控制任务。

4.2.1 DAC

全称Digital to Analog Converter,数/模转换模块,可以实现离散数字信号到连续模拟信号的转换。用户可以给定一个输入数字量(0-4095),来指定某一引脚输出对应线性模拟量(0-3.3v)。

  • 独立双通道,分别对应 GPIOAPin4Pin5 引脚;

  • 采样时间 Sample Time 设定和系统控制步长相同;

  • 输入和输出是线性关系;

  • STM32DAC 模块是12位数字输入,电压输出型的 DAC

_images/DAC.jpg

注解

DAC在STM32单片机上的工作原理,推荐参考博客

4.2.2 ADC_Channel

ADC,全称Analog-to-Digital Converter,模/数转换模块,可以实现连续模拟信号到离散数字信号的转换。用户可以采集指定IO引脚上的模拟电压(0-3.3v),以数字量的形式输出(0-4095)。

  • 该模块调用的是STM32F103ZET6 的外设资源ADC1;

  • 可以多个ADC 同时使用,采集不同信号源;

  • 12位逐次逼近型的模拟数字转换器;

  • ADC工作在连续模式,可多次采样取平均;

  • INx:设置ADC 采样通道,可选择外设ADC1 的全部通道;

  • ADC_SAMPLETIME_xCYCLES_5(1-239):为设置ADC 采样周期,x 最小可设置为1,即1.5 个采样周期;最大设置为239,即239.5 个采样周期——采样周期越短,ADC 采集数据越快,最快约为1.17 微秒;

  • Average_xNum:可选在一个控制周期内的采样次数,并取采样均值输出。0为单次采样并输出,建议均值滤波个数<=8;

  • Sample Time:设置为与系统控制周期一致。

_images/image70.png _images/ADC_Table.jpg
4.2.3 ADC_Ex

ADC_Ex是ADC_Channel模块的升级版,可以完成短时、高精度的要求。STM32F103ZET6的外设ADC1 和ADC2 具有相同的通道, 采用ADC1 和ADC2 共同采样,并取平均值输出, 达到提升精度的目的。

  • INx :通道选择项, 同ADC_Channel模块;

  • ADC_SAMPLETIME_xCYCLES_5(1-239) :同ADC_Channel模块,推荐设置为13;

  • ADC Series Number :所使用全部ADC_Ex模块都需要编号, 从0开始编号,0、1、2、3…、15,编号不能重复;

  • Sample Time :设置为与系统控制周期一致。

_images/ADC_Ex.jpg
4.2.4 GPIO

此模块包括两个子模块:GPIO_Write模块和GPIO_Read模块,过此模块实现对引脚电平和数据的读和写。GPIO 最简单的功能是输出高低电平,同时GPIO还可以被设置为输入功能,用于读取按键等输入信号。为了实现不同工作条件要求,GPIO 共有8 种工作模式

  • 输入浮空——既不上拉也不下拉,可以做KEY 识别

  • 输入上拉——IO 内部上拉电阻输入

  • 输入下拉——IO 内部下拉电阻输入

  • 模拟输入——应用ADC 模拟输入,或者低功耗下省电

  • 开漏输出——需要外接上拉电阻才能输出高电平

  • 推挽输出——输入值是未知的

  • 推挽复用——片内外设功能(I2C 的SCL,SDA)

  • 开漏复用——片内外设功能(TX1,MOSI,MISO.SCK.SS)

(1) GPIO_Read模块

通过 GPIO_Read 模块,用户可以实现对电平的高低读取,并进行输出。为了实现功能,用户需要了解以下参数的含义以及设置

  • GPIO Port:选择GPIO 模块的字母引脚

  • Pin Index:选择对应字母下的数字编号

  • GPIO Mode:选择GPIO 的工作模式

  • GPIO Pull:选择对GPIO 引脚的上拉下拉

  • Sample Time :采样时间,推荐与系统步长一致

_images/image73.png

GPIO_Read模式下输入输出功能选择

_images/image74.png

GPIO_Read 功能选择界面,从上到下分别对应默认输入,输入上拉,输入下拉,输入浮空。其中IT 能够出发中断,EVT 只能设置中断标志位,不产生中断。当选择了IT_RISING(FALLING)时,需要在GPIO_Pull中选择对应的PLULLUP(PULLDOWN),使用INPUT 或者RISING_FALING时使用NOPULL

_images/image75.png
(2) GPIO_Write模块

GPIO_Write实现的功能是对STM32板子进行高低电平的写入,在使用过程中直接选择对应的输出模式即可,不用像GPIO_Read一样进行模式匹配操作

_images/image76.png

注解

GPIO在STM32单片机上的工作原理,推荐参考博客

4.2.5 TIMER

定时器主要有计数和定时功能,定时器在STM32上的原理以及使用,推荐博客

  • TIM Index:设置选用对应的TIM,可选序号见TIM引脚映射图;

  • Timing:定时器定时时间设置,单位为ms;

  • PinRemap:引脚重映射索引,参考引脚映射图;

  • Sample Time:采样时间,推荐与系统步长一致。

_images/image77.png

其中,4 个通用定时器的复用功能重映射情况如表格所示:

_images/image78.png
4.2.6 PWM

PWM 模块包括三个子模块: PWM Generators 模块、 BTS7960 模块和 TB6612FNG,都可以产生设定频率和占空比的PWM信号,模块的输入信号为占空比。三个子模块适用于不同的电机驱动模块,用户可根据自己的硬件情况进行选择。

    1. PWM Generators 模块

    PWM Generators 模块采用 L298N 的电机驱动逻辑,通过双路PWM控制电机的正反转,因此单个模块可以控制两个电机。

    模块的输入端 LR 分别控制两个电机, TIM 的PWM通道 ccr1ccr2 根据输入端 L 的正负值,来决定导通通道,值的大小决定PWM的占空比,从而控制电机的正反转以及转速, R 端也是如此。具体的分析可以参考驱动代码,和L298N的相关资料。

    uint32 ccr1, ccr2, ccr3, ccr4;
    
    if(speedLeft >= 0)
    {
       ccr1 = (uint16)speedLeft; cr2 = 0;
    }
    else
    {
       ccr1 = 0; ccr2 = (uint16)(-speedLeft);
    }
    if(speedRight >= 0)
    {
       ccr3 = (uint16)speedRight; ccr4 = 0;
    }
    else
    {
       ccr3 = 0; ccr4 = (uint16)(-speedRight);
    }
    TIM_PWM_SetPWM(TIMx, TIM_PWM_CHANNEL_MASK, ccr1, ccr2, ccr3, ccr4);
    

    而要实现功能,则需要对以下参数进行配置。

    • PWM Generator Index:设置选用对应的TIM,可选序号见TIM引脚映射图;

    • PWM Frequency:PWM 信号频率,可根据所使用的电机驱动进行设置;

    • PWM Pin Remap:引脚重映射索引,参考TIM引脚映射图;

    • Sample Time:采样时间,推荐与系统步长一致。

    _images/image81.png _images/image91.png
    1. BTS7960模块

    BTS7960 模块专门为BTS7960驱动所定制。相对于L298N驱动增加了PWM使能引脚设置,通过对使能引脚的高低电平控制,改变驱动通道的通断,即控制电机启停。而通过 TIM 的PWM两通道的占空比差值设计,实现电机速度的改变。具体可参考下文所示驱动代码,以及BTS7960的相关资料。

    if(speed_left == 0) GPIO_WritePin(GPIOxLeft,GPIO_Pin_Left,RESET);
    else GPIO_WritePin(GPIOxLeft,GPIO_Pin_Left,SET);
    
    if(speed_left > 0) ccr1 = limit, ccr2 = limit - speed_left;
    else ccr2 = limit, ccr1 = limit + speed_left;
    
    if(enableSecond == 1)
    {
       if(speed_right == 0) GPIO_WritePin(GPIOxRight,GPIO_Pin_Right,RESET);
       else GPIO_WritePin(GPIOxRight,GPIO_Pin_Right,SET);
    
       if(speed_right > 0) ccr3 = limit, ccr4 = limit - speed_right;
       else ccr4 = limit, ccr3 = limit + speed_right;
    }
    

    为了使用 BTS7960 模块,用户需要对模块进行正确配置,接下来介绍此模块的参数配置:

    • BTS7960 Tim Index:设置选用对应的TIM,可选序号见TIM引脚映射图;

    • BTS7960 Frequency:PWM 信号频率,可根据需要选取;

    • Tim Pin Remap:TIM引脚重映射索引;

    • Enable Second Channel:使能驱动的第二个通道,即是否使用 R 输入,若不使用则填入 0 ,则不对 R 使能引脚进行初始化以及使用,节约引脚资源;

    • BTS7960 Left Enable Port:驱动模块 L 端的使能端口设置;

    • BTS7960 Left Enable Pin:驱动模块 L 端的使能引脚设置;

    • BTS7960 Right Enable Port:驱动模块 R 端的使能端口设置;

    • BTS7960 Right Enable Pin:驱动模块 R 端的使能引脚设置;

    • Sample Time:采样时间,推荐与系统步长一致。

    _images/image101.png
    1. TB6612FNG模块

    TB6612FNG 模块是专门为TB6612FNG驱动所定制。此驱动相较于上述两种驱动,其可以驱动四个电机。对于TIM的四路PWM通道(ccr1,ccr2,ccr3,ccr4)对应四个电机,单个通道的占空比由模块输入量的绝对值决定,而电机的正反转由模块配置的两个引脚的高低电平变化决定。具体分析可参考TB6612FNG的相关资料。接下来对模块参数的配置进行介绍:

    • TB6612FNG Tim Index:设置选用对应的TIM,可选序号见TIM引脚映射图;

    • TB6612FNG Frequency:PWM 信号频率,可根据需要选取;

    • Tim Pin Remap:TIM引脚重映射索引;

    • TB6612FNG Number:使能驱动的通道数量,若填入 2 ,则只使用 ccr1ccr2 ,不对剩下的通道所需的正反转使能引脚(Second A1N1和A1N2,B1N1和B1N2)进行初始化和使用,节省引脚资源。(剩下的参数不再介绍,同上)

    _images/image111.png

注解

关于利用STM32产生PWM信号,推荐参考博客

注解

PWM 模块只使用了TIM1 和TIM8 的4 个通道,对于其它的3 个PWM 互补通道,暂未使用,后续版本补充。

4.3 定制板载模块

为了便于用户可以基于Sukung开发丰富的系统模型,我们定制了较为丰富的板载模块,包括:Sensor (传感器)模块和 Display (显示屏)模块。用户可以通过简单的参数配置,获取丰富有效的数据。

4.3.1 Sensor

Sensor 模块现包含三种子模块: MPU6050 模块、 GY271 模块和 Ultrasonic (超声波)模块。通过这三种传感器模块,用户可以获取被控对象的姿态、温度和距离数据,从而实现更复杂的控制系统设计。

(1) MPU6050模块

通过此MPU6050模块可以获得被控对象的3 轴加速度计输出、3轴陀螺仪输出和温度输出。

MPU6050 是一种6轴空间运动传感器芯片,集成了3轴MEMS陀螺仪和3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP,可用I2C接口与目标机通讯,其它原理介绍参考博客。通过相关姿态解算与融合可以得到被控对象的姿态信息。关于姿态解算与融合,推荐参考全权编写的《多旋翼飞行器设计与控制》。

为了使用此模块,用户需要对其进行参数配置。而考虑资源使用问题,设计使能数据获取通道:

  • Is Use Accel XY:使能加速度计X轴和Y轴的数据通道;

  • Is Use Accel Z:使能加速度计Z轴的数据通道;

  • Is Use Gryo XY:使能陀螺仪X轴和Y轴的数据通道;

  • Is Use Gryo Z:使能陀螺仪Z轴的数据通道;

  • Is Use Temp:使能温度测量通道;

  • Sample Time:采样时间.

_images/image131.png

如上图的MPU6050模块,对应加速度计和、陀螺仪和温度传感器的输出。在定制模块时,已对MPU6050的属性进行了设置。

MPU6050(I2C_TypeDef* I2Cx = I2C1, uint8 ownAddress = 0xD0, /*使用I2C1*/
MPU6050_GyroScaleTypeDef gyroScale = MPU6050_GYRO_SCALE_250DPS, /*陀螺仪的满量程范围为±250DPS*/
MPU6050_AcceScaleTypeDef acceScale = MPU6050_ACCE_SCALE_2G); /*加速度传感器的满量程范围为±2G*/

进行相关初始化,相关参数信息查看I2C

I2C_InitInfoTypeDef initInfo; /*采用I2C1与目标机通信,并对I2C初始化*/
initInfo.Mode = I2C_MODE_STANDARD_MODE;
initInfo.FastModeDutyCycle = I2C_FAST_MODE_DUTY_CYCLE_2_1;
initInfo.SCLRiseTime = 1000;
initInfo.isEnableClockStretching = true;
initInfo.isNeedI2C1PinRemap = true;
I2C_Init(I2Cx, &initInfo);
(2) GY271模块

此模块为电子罗盘模块,可以获得被控对象的偏航角数据。关于GY271在STM32的使用,推荐博客

此模块固定了传感器以及I2C协议的配置,只提供对采样时间的配置,如若想自行设定相关配置,推荐使用通用模块I2C自行构建。

_images/image141.png

我们已对模块进行了相关配置,以期获得良好的传感效果。我们设置GY271采用I2C1与目标机通信,并对I2C进行相关初始化,相关参数信息查看I2C.

I2C_InitInfoTypeDef initInfo;
initInfo.Mode = I2C_MODE_STANDARD_MODE;
initInfo.FastModeDutyCycle = I2C_FAST_MODE_DUTY_CYCLE_2_1;
initInfo.SCLRiseTime = 1000;
initInfo.isEnableClockStretching = true;
initInfo.isNeedI2C1PinRemap = true;
I2C_Init(I2C1, &initInfo);

GY271初始化设置:

I2C_WriteRegisterByte(I2C1, 0x3C, 0x00, 0x70);/*8 位的采样平均,15Hz的标准数据输出频率*/
I2C_WriteRegisterByte(I2C1, 0x3C, 0x02, 0x00);/*连续测量模式*/

数据获取:

I2C_WriteByte(I2C1, 0x3C, 0x03); /*数据获取*/
I2C_ReadBytes(I2C1, 0x3D, GY271_BUF, 6);

数据处理与融合:

GY271_Read_Multiple(GY271_BUF);
gy271.MagX=GY271_BUF[0] << 8 | GY271_BUF[1]; /*Combine MSB and LSB of X Data output register*/
gy271.MagZ=GY271_BUF[2] << 8 | GY271_BUF[3]; /*Combine MSB and LSB of Z Data output register*/
gy271.MagY=GY271_BUF[4] << 8 | GY271_BUF[5]; /*Combine MSB and LSB of Y Data output register*/

if(gy271.MagX>32767)
{
   gy271.MagX-= 65536;
}

if(gy271.MagY>32767)
{
   gy271.MagY-= 65536;
}

if(gy271.MagZ>32767)
{
   gy271.MagZ-= 65536;
}

GY271_Angle= atan2((double)gy271.MagY,(double)gy271.MagX)*(180/3.14159265);/*计算角度*/

对读取的数据进行拼接,并利用X 轴和Y 轴数据融合获取Yaw数据,单位弧度。

(3) 超声波传感器

通过此模块可实现一个或多个HC-SR04 芯片的超声波同时分组测距功能。

对 HC-SR04芯片的测距原理的基本介绍;

HC-SR04 模块为超声波测距模块。具有Vcc、Gnd、Trig 和Echo 四个引脚。Trig 是输出,Echo 是输入,Vcc 为5V 电压输入端,Gnd 为接地端。

该模块的工作原理为,先向TRIG脚输入至少10us的触发信号,该模块内部将发出 8 个 40kHz 周期电平并检测回波。一旦检测到有回波信号则ECHO输出高电平回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。即:

distancesPtr[i]=(endTimes[i]-startTime)*34/2

相关参数的配置说明:

  • Group Count:对应组使用的超声波芯片数;

  • Group Trig Port:对应组Trig 脚使用的引脚名称;

  • Group Echo PortGroup Echo Pin:对应组Echo脚使用的引脚名称,( [4,4],[3,5] ) 对应PD3、PD5;

  • Group Timeout:可测得的最长距离对应的所需仿真时间 (单位毫秒) ;

  • ample Time:采样时间,注意应略大于 Group Timeout 以免导致数据遗失(单位秒) 。

_images/image86.png

注解

Group Echo Port 和Group Echo Pin 的列数应与Group Count 的数值保持一致。

注解

我们在SWR案例中使用了 MPU6050 模块,用户可做参考。

4.3.2 Display模块

Display 模块现包含一个模块:TFT-LCD 模块。通过显示模块,可用于数据实时显示,用户可以直观地查看相关数据。

基于ST7735S 驱动的液晶屏显示模块,具体原理和数据手册参考ST7735S 数据手册

为了使用此模块,用户需要对其进行参数配置。
  • Time:模块采样时间。

_images/image87.png

对应STM32板,具体的引脚配置及基本功能:

_images/image881.png

为了直观展示具体,做了相应的显示测试:

_images/image89.png

注解

考虑到LCD 的刷新频率,此模块的采样时间需要独立设置,建议采样时间不低于0.02s。

4.4 Controller 模块

为了便于用户进行控制算法搭建,封装了几款抗扰控制器,包括,1-Order LADRC 模块、2-Order LADRC 模块、Tracking Differentiator (TD) 模块、Adaptive ADRC 模块以及 DR-PID 模块。接下来对模块的使用做具体介绍。

4.4.1 一阶、二阶LADRC模块

以二阶LADRC为例,介绍此模块使用方式:

2-Order LADRC 模块是针对典型二阶对象所设计的线性自抗扰控制器( 1-order LADRC 模块类似,在此不再赘述),请参考 3.3.1 线性自抗扰控制

详细内容请自行查看相关ADRC资料,推荐B站和自抗扰控制QQ群(128464029(入门),模块通过参考输入 r 和 被控对象输出 yp 产生控制量 u 以及扩张观测器的观测状态 xo1xo2xo3。使用模块(控制方法)需要对模块参数进行配置:

  • ESO Bandwidth wo:扩张状态观测器的带宽参数 \({{\omega _0}}\) ,其决定了ESO的跟踪速度,此值越大,ESO估计扰动越快,但过大可能导致噪声难以忍受或ESO振荡;

  • Conreoller Bandwidth wc:控制器带宽 \({{\omega _c}}\) ,其决定了控制器的响应速度,一定范围内越大控制效果越好,但过大可能使系统不稳定,需要根据瞬态响应进行调节;

  • Control Variable b0:控制量增益 \({b_0}\) ,其代表了对象的特性,可以由阶跃响应中的初始加速度导出。

_images/1O_LADRC.PNG
4.4.2 二阶Adaptive ADRC模块

2-Order Adaptive ADRC 模块是在二阶线性自抗扰控制器基础上增加“定量自适应”调节机制,有兴趣可以查看 文献 。在此对其使用进行说明

方法根据参考模型 \(\frac{{\omega _c^2}}{{{{\left( {s + {\omega _c}} \right)}^2}}}\) 与ESO的观测状态( \({x_{o1}}\)\({x_{o2}}\))之间的跟踪误差 \({e_r} = {P_1}{e_{r1}} + {P_2}{e_{r2}}\),经鲁棒自适应律对 2-Order LADRC 模块的控制器参数进行自适应调节保证被控对象状态能够跟踪参考模型。

  • Controller Bandwith wc:控制器带宽 \({{\omega _c}}\) ,调参方式与LADRC一致;

  • ESO Bandwidth wo:扩张状态观测器的带宽参数 \({{\omega _0}}\) ,调参方式与LADRC一致;

  • Control Variable b0:控制量增益 \({b_0}\) ,调参方式与LADRC一致;

  • Adaptive Scheme Bandwidth wa:自适应带宽 \({\omega _A}\) ,其决定自适应的速率,一般大于 \({\omega _o}\) ;

  • Quantitative Gain q:定量自适应调节参数 \(q\) ,当设置 \(q=0\) ,其退化为LADRC,在LADRC的基础上逐步定量增大 \(q\) ,以引入自适应机制,提高动态性能;

  • Tracking Error Gain P1:跟踪误差加权系数 \({P_1}\) ,跟踪误差 \({e_r}\)\({e_{r1}}\) 的比重;一般推荐设置为10;

  • Tracking Error Differential Gain P2:跟踪误差微分加权系数 \({P_2}\) ,跟踪误差 \({e_r}\)\({e_{r2}}\) 的比重;一般推荐设置为1。

_images/2O_AdaptiveADRC.PNG
4.4.3 DR-PID 模块

根据 3.3.2 抗扰PID控制器 ,封装了 DR-PID 模块,对应的参数配置可参考此章节,在此不再赘述。

_images/DRPID.PNG

5. 案例

5.2直流电机系统辨识实验:数据采集与保存

实验目标:掌握直流电机调速系统原理,能够搭建调速系统;掌握编码器原理;掌握最小二乘法,应用于直流电机模型辨识。

系统框图

实验系统主要包括宿主机与目标机的数据通信、直流电机的驱动以及编码器脉冲数的采集三个部分,如下图所示。

_images/image112.png

系统结构框图

硬件参数

直流电机型号为MG513P30,额定电压12V,减速比30:1,带500线光电编码器。驱动选择L298N双H桥驱动板。电机详细参数及L298N驱动板如下图所示。

_images/image29.png
系统相关信号设定

设输入信号u为PWM波占空比,u∈[-1,1],当u<0时表示电机反转;电机输出y为转速,单位:转每秒(r/s),计算公式如下:

\[y = \frac{{num}}{{{\rm{500*}}30*4*T}}(r/s)\]

其中:num表示当前周期脉冲数;500是编码器线数;30为电机减速比;4为采用编码器四倍频计数模式;T为采样周期(控制步长)。

步骤1:硬件连接

硬件连接方式如下图所示,其中上位机与单片机通过USB串口连接;单片机产生PWM调节驱动输出电压;直流电机由L298N驱动;编码器输出的高低电平信号通过单片机引脚进行采集并由计数器进行计数。

_images/image43.png
步骤2:驱动板测试

实验开始前,需要测试各部分能否正常工作,首先来测试驱动板输出:

  • 1)在Simulink中搭建“PWM Generator”;

  • 2)设置模块参数和占空比,如下图所示;

  • 3)程序下载运行,并通过数字示波器观测驱动输出。

_images/image53.png

注解

Simulink相关环境设置及操作注意事项可参考 2.5 Sukung的工程配置

步骤3:直流电机及编码器测试

直流电机及编码器测试主要测试电机能否正常运转以及编码器是否正常工作,基本步骤如下:

  • 1)在Simulink中搭建“Pulse Counter Channel”模块;

  • 2)配置模块参数和转速计算环节,如下图所示;

  • 3)程序下载运行,通过Scope观察输出转速。

    _images/image61.png
步骤4:离线辨识数据采集

离线辨识需要用到电机输入占空比u以及输出转速y的运行数据。

注解

Simulink运行数据两种保存方式见 5.4Sukung数据存储及绘图组件的使用

需要说明的是,Scope以及To Workspace模块的置入增加了单片机实时通信负担。为了保证控制步长准确和控制实时性,不推荐大量使用Scope及To Workspace模块。

_images/image79.png
步骤5:离线辨识算法设计

设电机模型为:

\[\frac{y}{u} = \frac{K}{{{s^2} + as + b}}\]

离散化为:

\[y(k) = - \underbrace {(aT - 2)}_{{\theta _1}}y(k - 1) - \underbrace {(1 - aT + b{T^2})}_{{\theta _2}}y(k - 2) + \underbrace {K{T^2}}_{{\theta _3}}u(k - 2)\]

其中,T为采样周期(控制步长),取0.002sKab为未知参数。构建数据向量 \(\varphi (k)\) 和参数向量 \(\theta (k)\)

\[\begin{split}\left\{ \begin{array}{l} {\bf{\varphi }}(k) = {[ - y(k - 1), - y(k - 2),u(k - 2)]^T}\\ {\bf{\theta }} = {[{\theta _1},{\theta _2},{\theta _3}]^T} \end{array} \right.\end{split}\]

构造输出向量Y和矩阵 \(\Phi\)

\[\begin{split}{\bf{Y}} = \left[ {\begin{array}{*{20}{c}} {y(1)}\\ {y(2)}\\ \vdots \\ {y(L)} \end{array}} \right],{\bf{\Phi }}{\rm{ = }}\left[ {\begin{array}{*{20}{c}} {{{\bf{\varphi }}^T}(1)}\\ {{{\bf{\varphi }}^T}(2)}\\ \vdots \\ {{{\bf{\varphi }}^T}(L)} \end{array}} \right]\end{split}\]

由批处理最小二乘法计算参数向量公式如下:

\[\mathord{\buildrel{\lower3pt\hbox{$\scriptscriptstyle\frown$}} \over \theta } = {\left( {{{\bf{\Phi }}^T}{\bf{\Phi }}} \right)^{ - 1}}{{\bf{\Phi }}^T}{\bf{Y}}\]

根据系统辨识原理可知,模型参数辨识的精度依赖于输入信号。合理选用辨识输入信号,是保证获得理想辨识结果的关键之一。为简化描述,本次实验中仅采用了常值输入。建议使用者采用更合理的输入信号方案,推荐M序列。离线辨识结果如下图所示:

_images/image161.png
步骤6:离线辨识模型在线验证

将所得模型置入目标机与系统同时运行,如下图所示,可见离线辨识模型输出与电机实际输出基本吻合。

_images/image171.png
步骤7:在线辨识算法设计

在具体应用批处理最小二乘法时,条件比较苛刻,往往需要庞大的数据量才能得出理想的辨识结果,且不能用于参数在线实时估计。在自适应控制系统中,常常要求对象参数能够在线实时估计。因此递推最小二乘法被广泛应用。其基本思想是:新的估计值 \({\bf{\hat \theta }}(k)\) =旧的估计值 \({\bf{\hat \theta }}(k - 1)\) +修正项。基本步骤如下:

已知: \({n_a}\)\({n_b}\)\(d\)

Step1:设置初值 \({\bf{\hat \theta }}(0)\)\({\bf{P}}(0)\) ,输入原始数据;

Step2:采样当前输出 \(y(k)\) 和输入 \(u(k)\)

Step3:利用下式计算 \({\bf{K}}(k)\)\({\bf{\hat \theta }}(k)\)\({\bf{P}}(k)\)

Step4: \(k \to k + 1\) ,返回Step2,继续循环。

\[\begin{split}\left\{ \begin{array}{l} {\bf{K}}(k) = [{\bf{P}}(k - 1){\bf{\varphi }}(k)]/[1 + {{\bf{\varphi }}^T}(k){\bf{P}}(k - 1){\bf{\varphi }}(k)]\\ {\bf{\hat \theta }}(k) = {\bf{\hat \theta }}(k - 1) + {\bf{K}}(k)[y(k) - {{\bf{\varphi }}^T}(k){\bf{\hat \theta }}(k - 1)]\\ {\bf{P}}(k) = [{\bf{I}} - {\bf{K}}(k){{\bf{\varphi }}^T}(k)]{\bf{P}}(k - 1) \end{array} \right.\end{split}\]

初值为:

\[\begin{split}\left\{ \begin{array}{l} {\bf{P}}(0) = \alpha {\bf{I}}\\ {\bf{\hat \theta }}(0) = {\bf{\varepsilon }} \end{array} \right.\end{split}\]

其中, \(\alpha \)\({\bf{\varepsilon }}\) 为零向量或充分小的正的实向量。

步骤8:在线辨识

在Simulink中搭建下图所示结构,其中控制周期同样为0.002s。

_images/image36.png

辨识结果如下:

_images/image37.png
_images/image38.png
步骤9:在线辨识模型验证

将所得模型置入目标机与系统同时运行,如下图所示,可见在线辨识模型输出与电机实际输出基本吻合。

_images/image39.png
步骤10:离线-在线辨识的连续模型对比

离线辨识和在线辨识的连续模型如下图所示,不难发现,离线辨识与在线辨识得到的模型参数是相近的,符合预期。此外,实验中,可采用具有复杂频率特性的信号作为辨识输入;模型验证时,可采用不同于辨识输入的测试信号。

_images/image40.png
小结
    1. 本实验搭建了直流电机调速系统,并通过Sukung实现了Simulink下的数据采集和系统测试;

    1. 采集了直流电机输入输出数据,采用最小二乘批处理算法,在MATLAB环境中实现了直流电机的离线参数辨识;

    1. 设计了递推最小二乘算法,并通过Sukung下载到目标机,实现了直流电机在线参数辨识;

    1. 离线辨识与在线辨识结果符合预期;

    1. 实验中,可进一步探讨M序列输入信号下的辨识效果,并研究各类系统辨识算法。

5.3直流电机抗扰PID调速控制实验

实验目标:掌握直流电机调速系统原理,能够搭建调速系统;掌握抗扰PID基本原理,并应用于直流电机调速控制实验中。

系统框图

实验系统主要包括宿主机与目标机的程序下载、实时数据通信两个部分,如下图所示。

_images/image411.png

在上一小节 5.2直流电机系统辨识实验:数据采集与保存 的基础上,进行本节实验。其中,硬件参数、系统相关信号设定、硬件连接以及驱动板、编码器测试与上节相同,此处不再赘述。

步骤1:算法设计

直流电机速度控制系统结构如下,其中,速度控制采用抗扰PID(DR-PID)控制器,可选前置滤波器以克服超调。

_images/image421.png

PID控制器的抗扰原理以及 章节 3.3.2 抗扰PID控制器

DR-PID公式如下:

\[C_{PID}^{DR}(s) = {K_P}\left( {1 + \frac{{{\omega _c}}}{{\alpha + 1}}\frac{{\rm{1}}}{s}{\rm{ + }}\frac{\alpha }{{(\alpha + 1){\omega _c}}}s} \right)\]

式中, \({\omega _c}\) 为期望带宽,决定闭环响应速度,期望闭环为 \({\omega _c}/(s + {\omega _c})\)\({K_P}\) 为控制器增益,相同条件下,逐步增大 \({K_P}\) 可改善系统性能; \(\alpha \)alpha = 0` 为PI控制器, \(\alpha = 1\) 为ZN-PID。

调参思路:

  • 1)先设定 \({\omega _c}\) (目标),然后调节 \({K_P}\)\(\alpha\) (手段);

  • 2)如果系统存在超调,可在输入端加入滤波器(任意形式)。

上述公式适用于:机电系统、一阶时滞系统、积分型(液位)系统、最小/非最小相位系统等各类常见工业对象。

相对于常规PID调参方法,抗扰PID有以下特点:

  • 1)主动抗扰:具有主动抗扰能力;

  • 2)机理明确:三个参数 \({\omega _c}\)\({K_P}\)\(\alpha\) 具有明确物理含义,且参数与控制性能建立了直接关联,调参机理明确、调参思路清晰;

  • 3)通用性强:适用于不同类型对象,调参方法具有一致性;

  • 4)等价性:可与各类经典PID调参方法建立等价性。例如, \(\alpha = 1\) 即为ZN-PID。

步骤2:仿真

通过上节系统辨识实验,获得的电机模型为:

\[G(s) = \frac{{75910}}{{{s^2} + 858.4s + 9780}}\]

式中系统极点:s1=-11.5(主导), s2=-846.8。

在Simulink中搭建仿真程序如下图所示:

_images/image531.png

方案1:PID控制

直流电机为快系统,闭环响应可以很快,因此 \({\omega _c}\) 可取大,取 \({\omega _c} = 20\) ;取 \(\alpha = 1\) ,仿真中 \({K_P}\) 逐渐增大0.1、0.2、0.3。仿真结果如下图所示:

_images/image58.png
_images/image59.png

方案2:PI控制

\({\omega _c} = 20\) ;取 \(\alpha = 0\) 为PI,仿真中 \({K_P}\) 逐渐增大0.1、0.2、0.3。仿真结果如下图所示:

_images/image611.png
_images/image62.png

综合以上两种方案,可以得到下表所示结论:

速度环

方案1 PID

方案2 PI

跟踪

超调小,

超调小,

相对慢

抗扰

wo(抗扰原理)

控制量

微分影响

无微分影响

存在问题

噪声敏感,带宽受限

结论

代价大

代价小

步骤3:实验测试

在Simulink搭建实验模型及各模块参数设置如下图所示,其中在第5秒时刻添加0.1的恒值扰动,控制系统运行时间为10s,控制步长为0.001s(区别于上一节的0.002s,这里没有很大的运算量,因而控制周期可设为最小允许值0.001s)。

_images/image63.png

点击编译,一键部署生成的代码,复位STM32开发板,点击连接、运行,打开示波器查看实时控制曲线,如下图所示(这里展示的是未封装的slx模型)。每次运行完保存数据,以备后续分析。

注解

Sukung运行数据两种保存方式见 5.4Sukung数据存储及绘图组件的使用

_images/image64.png

方案1:PID控制

\({\omega _c} = 20\)\(\alpha = 1\) ,实验中 \({K_P}\) 逐渐增大,取0.1、 0.2、0.3。绘图如下:

_images/image66.png

方案2:PI控制

\({\omega _c} = 20\)\(\alpha = 0\) ,,此时控制器为PI,实验中 \({K_P}\) 逐渐增大0.1, 0.2,0.3。绘图如下:

_images/image69.png

方案3:带前置滤波器PID/PI控制

添加一阶前置滤波器如下图所示:

_images/image701.png

\({\omega _c} = 20\)\({K_P} = 0.3\)\(\alpha = 0.1\) 。绘图如下:

_images/image731.png
小结

本实验搭建了直流电机调速系统,并通过Sukung实现了Simulink下的仿真与实验的相互验证,并使用抗扰PID控制器,达到了良好的控制效果。此外,用户还可以尝试在线修改期望速度以及控制器参数。

5.4Sukung数据存储及绘图组件的使用

实验目标:分别使用“To Workspace”和“Scope”存储实验数据,并使用“Sukung绘图组件.app“在MATLAB环境下绘图。

在前面两个小节的基础上,进行本节实验。其中,硬件参数、系统相关信号设定、硬件连接、软件设计完全相同。

步骤1:外部模式配置及“To Workspace”和“Scope”参数配置

外部模式及“To Workspace”和“Scope”参数配置如下图所示,其中数据格式均为``Array``。

_images/image74.jpg

编译下载运行后所得数据如下图所示:

_images/image751.png

打包工作区变量,另存为testdate.mat。

步骤2:Sukung绘图组app安装

首先将app安装包放入任意文件夹下,打开MATLAB APP页面>安装App>选择安装包位置并打开>点击安装。

_images/image761.png
步骤3:使用Sukung绘图组件绘制曲线

打开app “Sukung_plot_component”,点击“open”选择上一步保存的testdate.mat文件,根据数据量大小,等待时间有所不同,一般2s左右。选择各个坐标轴的数据,通过“preview”预览按钮,可以查看由X轴和Y轴数据绘制的图形,以检验数据选择是否正确。可通过app右侧修改标题及各坐标轴标签。

_images/image771.png

打开*.mat数据并选取各坐标轴数据

_images/image781.png
小结

本次实验主要介绍了实验数据的存储方式,需要注意的是,实际实验中要注意数据传输的数量不应过多,以避免系统阻塞、崩溃。对于同一个信号“To Workspace”和“Scope”不要同时使用,任选其一即可。同时介绍了使用Sukung_plot_component App绘制数据图像的基本流程,用户根据需要,选择使用。

5.5基于通用I2C 模块的GY271 传感器系统

通过使用I2C读写模块,在Simulink上读取GY271的三轴数据

步骤1:硬件连接

GY271由I2C驱动,我们设计使用I2C1,并且使能引脚重映射,因此,SCL连接PB8,SDA连接PB9,如下图所示。

_images/image135.jpeg
步骤2:工程搭建

我们新建一个程序,参考GY271的本地驱动,我们搭建如下程序。

_images/image136.png
  • 初始化与模式配置

    I2C_WriteRegisterByte(I2C1, 0x3C, 0x00,0x70);//8位的采样平均,15Hz的标准数据输出频率
    
    I2C_WriteRegisterByte(I2C1, 0x3C, 0x02, 0x00);//连续测量模式
    

    根据I2C单次写模块,做出如下图设置。

    _images/image137.png _images/image138.png
步骤3:获取数据
I2C_WriteByte(I2C1, 0x3C, 0x03);

I2C_ReadBytes(I2C1, 0x3D, GY271_BUF, 6);

我们分别使用I2C循环写和读模块去实现,上述代码。

_images/image139.png _images/image140.png
步骤4:结果

通过上述设置,搭建程序,编译、下载、运行,得到GY271三轴数据,如图。

_images/image1411.png

6. 其他

6.1 软件下载

当前软件版本:Sukung V1.0,有线下载,有线数据传输。

Sukung软件下载:github

mingW-W64下载:github

淘宝网址: 淘宝网址

案例库计划:

本说明书以直流电机为对象,抛砖引玉地给出了基于Sukung的系统辩识与调速控制的简单案例,后续还需进一步补充和完善。完整的Sukung实验/实践案例,能帮助初学者快速开展理论实践,在实验过程中学习并掌握必须的理论知识。Sukung将服务于自动化及相关专业、学科的教学实践,搭建起理论与实践的桥梁。为鼓励Sukung用户分享实验成果和案例,拟实施以下案例分享激励计划:

    1. 提供高质量的典型应用案例(文案、视频),审核发布后,可申请Sukung试用两周;

    1. 提供高质量视频,审核发布后,可申请Sukung试用一周。

说明: 1)同一项工作不累加; 2)所采用案例,Sukung团队有权用于宣传推广。

6.2 性能测试

6.2.1 测试目的

本小节对Sukung的整体性能进行测试,以帮助用户明确如何正常使用Sukung开展工作。测试过程设计了两类实验:

  • 实验 1) 采用Sukung平台,同时进行3个直流电机的调速控制(3个PID控制器+3个一阶低通滤波器等),以测试“数据传输性能”;

  • 实验 2) 采用Sukung平台,在实验 1)基础上,增加了1个MPU6050模块和1个ADC模块,以测试“CPU处理性能”。

6.2.2 数据传输性能

被动对象:

_images/image113.png

测试方案:

  • 方案一:最小采样时间

  • 方案二:最大示波器容量

  • 方案三:最长仿真时间

具体性能测试如下表所示

_images/image210.png

注解

最大或最小指标为本次测试电机的实际极限

6.2.3 CPU处理性能

测试方案:

  • 方案:最大容量(多任务)+最小采样时间

具体性能测试结果如下表所示

_images/image44.png

注解

最大或最小指标为本次测试电机的实际极限。

6.2 常见问题

6.2.1 安装

Sukung的安装以及环境配置,参照<安装流程>。在安装与配置说明中,已经提到相关错误以及其对应的解决方法。大多是由于环境变量配置出错,以及keil的编译器版本引起的问题,因此用户安装时,需谨慎注意。

6.2.2 下载与连接

此Sukung版本使用的是基于ISP的软件下载方式,相关注意事项,已在 5.1点亮一个LED灯:Simulink环境配置与编译下载 中给出。在此做出对与目标机连接时相关问题的补充,并给出相关分析。

  • 问题2: 点击 Connect To Target 实现连接目标机操作时,立即弹出如下图错误信息:Error occurred while executing External Mode MEX-file `ext_sukung_serial_comm`…

    _images/image260.png

    解决方法:

      1. 若立即弹出,则说明PC未与目标机建立连接,串口通讯或 interface 设置出现问题,检查相关COM与硬件连接

      1. 若稍等片刻(10s)才弹出此错误信息,则说明目标机未及时响应,则可能目标机未处于初始化运行状态,可以复位目标机,重新连接。或者,Simulink程序中使用了I2C或SPI等在初始化操作时,需要和外部设备进行交互的通讯方式,外部设备供电或者连接线问题导致目标机初始化失败,无法进入等待PC连接的阶段。

      1. 若由于在运行时,直接由目标机关闭与PC的连接(手动复位、供电失效等),但PC的外部模式依然处于运行当中,导致再次连接时调用串口应用时出错,也会弹出上述信息。此时需重启MATLAB。

  • 问题3: 点击 Connect To Target 实现连接目标机操作时,弹出以下错误信息:Checksum test (TARGET_DATA_MAP) failed

    _images/image261.png

    解决方法:

      1. 此问题是由于工程中的Simulink程序与生成代码不匹配,很可能无意间做出修改,遂,删除已存在的 RTW 文件,重新编译下载程序至目标机。

      1. 若上述步骤未解决,请检查文件中是否有其它 RTW 文件存在,以及现MATLAB目录是否定位到此工程文件下。

6.2.3 运行

在实时半实物仿真中,PC与目标机需要建立牢固的实时传输通道,因此硬件连接上的不牢固、以及超大量数据的实时传输都会造成运行出错。

  • 问题4 :在运行时,通讯接线不牢固、或者手动操作失误,导致目标机主动断开,而非在Simulink端手动点击断开,使得Simulink无法操作。

    解决方法: 重启MATLAB,并固定通讯接线。

  • 问题5: 在运行时,大量数据要进行收发,导致通讯堵塞,会弹出如下错误信息:

    _images/image262.png _images/image263.png _images/image264.png

    解决方法: 重启MATLAB,减少一次性传输的数据量,或者降低 Interface 设置中串口的波特率。

  • 问题6: 在运行时,MATLAB报出 出现未知错误 ,并直接退出。

    解决方法: 一方面是程序复杂度过高,目标机处理能力有限,出现此次错误的同时,目标机可能会发散也可能依然正常运行。因此,需要用户优化程序,减少不必要的模块,另一方面降低ODE,最好使用 discrete Solver。

6.2.4模块使用

在模块使用当中,由于硬件或者引脚冲突,导致部分模块在处于某种模式时无法使用,在此对部分模块说明。

  • Pulse_Counters模块与PWM模块 :具体使用参照定制模块等相关章节。由于两模块使用的都是STM32单片机(目标机)的TIM资源,因而在进行运动控制使用多个电机时,容易出现引脚冲突问题,在此给出使用有效结果以及多电机策略。

    _images/image265.png

    单独针对PWM模块进行测试,结果如下,可以实现8电机的控制,但无法使用编码器。

    _images/image266.png

    我们再对Pulse_Counters模块进行测试,结果如下,在同时使用PWM Generators 模块和Pulse_Counters模块时,可以最多使用4电机和3编码器,但如果使用TB6612FNG模块和Pulse_Counters模块,则可以使用4电机和4编码器,即TB6612FNG模块使用一个TIM去控制4电机,而另外四个TIM被PWM Generators 模块去使用驱动4个编码器。

    _images/image267.png

6.4 技术支持

  • 定制与合作请联系: yezhuyun@sukung.cn;

  • 技术问题可入群交流:

  • Sukung半实物仿真技术交流,QQ群:661419695;

    _images/image268.png
  • 控制器模块相关论文:

    • [1] Gao Z. Scaling and Parameterization Based Controller Tuning[C]// American Control Conference. IEEE, 2003:4989-4996.

    • [2] Nie Zhuoyun, Zhang Bing, Wang Qing-Guo, Liu Rui-Juan, Luo Ji-Liang. Adaptive active disturbance rejection control guaranteeing uniformly ultimate boundedness and simplicity. International Journal of Robust and Nonlinear Control, 2020, 30(17): 7278-7294.

    • [3] Nie Zhuoyun, Zhu Chao, Wang Qingguo, Gao Zhiqiang, Shao Hui, Luo Jiliang. Design, analysis and application of a new disturbance rejection PID for uncertain systems. ISA Transactions, 2020, 101: 281-294.

    • [4] 李高铭,聂卓赟,李兆洋,郑义民,罗继亮. 非平衡负载下轮式移动机器人的抗扰PID控制. 控制理论与应用. 2021.

6.5 研发计划

在现有Sukung系统基础上,后续的研究计划包括:

    1. 定制无线通信模块,实现程序无线一键下载和无线数据传输;

    1. 定制专用实验系统,例如:Sukung+机械臂,Sukung+移动机器人,Sukung+四旋翼飞行器等;

    1. 面向本科、研究生实验教学的课程建设;

    1. 研制面向高性能嵌入式目标机的Sukung平台;

    1. 面向互联网的程序一键下载技术,打造Sukung云端实验室;

6.6 贡献与致谢

感谢华侨大学信息科学与工程学院的支持。

感谢华侨大学先进控制实验室研究小组成员,包括:李兆洋、程前、何旺祥、聂方明、朱恩泽、李赫然,周长新、吴雨泽等研究生同学参与研发、测试和维护工作。