刘 涛, 蔡 燕, 张海华, 李新旻
(天津工业大学 电工电能新技术天津市重点实验室, 天津市电机系统先进设计与 智能控制技术工程中心, 天津 300387)
Matlab/Simulink是一款高级科学计算与工程仿真软件,能够实现动态系统建模、仿真和综合集成分析以及线性/非线性系统、数字控制及数字信号处理的仿真[1-2],近十几年在电力电子系统和电机驱动等领域得到了广泛的应用[3-5]。
在高等院校,Matlab/Simulink相关课程通常安排在教学计划的后期,与其他专业课程相区别。该课程综合了电路理论、电器学、自动控制理论、信号与系统、电力系统、电力电子、电机学、电机拖动等多门课程的核心知识,对教学方法和实验设计的要求很高[6-8]。目前,Matlab/Simulink的教学包括简单的编程练习和基础仿真训练,学生掌握的知识是碎片化的,缺乏整体系统模型的概念。
本文在传统的Matlab/Simulink课程中引入代码生成技术和物理实验系统,使虚拟仿真技术与实验教学紧密结合,借此提高学生对所学理论知识的实践运用能力[9-12]。以传统经典的PID控制系统和电机控制系统实验为例,对Matlab/Simulink课程的实验教学进行改革,力求把理论知识与实际相结合,在Simulink建模的基础上实现理论与实践的一体化教学,使学生加深对复杂系统及其与专业知识之间映射关系的理解,初步积累项目经验和提高解决复杂工程的能力。
代码生成技术是将Matlab/Simulink中建立的算法模型自动生成代码,然后转换为能够控制实际物理模型的高级语言程序,通过将程序进行编译、链接、下载到开发板中,将Matlab/Simulink中虚拟形式的控制系统转换为可以直接实现功能的硬件系统控制程序。
Matlab/Simulink中的代码生成技术体现在软件所包含的Matlab Coder、Simulink Coder和Embedded Coder 3个工具箱中。其中,Matlab Coder用于Matlab编程语言与C/C++代码之间的转换;Simulink Coder用于Simulink仿真模型与C/C++代码之间的转换;Embedded Coder专门针对嵌入式系统实现C/C++代码的生成,同时提供Matlab Coder和Simulink Coder的配置选项和高级优化,以便对所生成代码的函数、文件和数据进行精细控制。
生成的C/C++代码并不能直接应用于物理硬件系统,需要根据目标控制器选择合适的编译环境,同时使用专用的接口工具实现Matlab/Simulink与编译环境的连接。例如,针对TI公司的C2000系列微控制器,需要采用Code Composer Studio 6作为编译环境,同时下载C2000支持包作为Matlab/Simulink的插件实现接口工具。
基于代码生成技术的Matlab/Simulink实验教学流程如图1所示。
图1 基于代码生成技术的实验教学流程
传统的Matlab/Simulink课程的实验教学模式包含3部分:
(1) 课程基本定义与基本方法:讲授仿真所涉及的基本理论知识和方法,该部分与学生以往所学的课程相关,例如讲授电机驱动系统仿真时,讲授电机学和电机拖动相关知识;
(2) 基本公式与推理过程:从基本理论和方法中提取关键公式和推理过程,用于仿真模型的搭建;
(3) Matlab/Simulink仿真模型实现:讲授Matlab /Simulink仿真模型的建立过程和相关参数设定方法。
传统的实验教学按基本理论的讲解、基本公式的推演、仿真模型的实现逐步推进,最后通过仿真实现对理论的阐明和验证,整个教学过程停留在单个反馈环中,所有的过程均利用黑板和个人电脑完成,很难让学生将理论知识、技术手段与实际工程相结合,而且仿真结果只是在数学层面验证基本理论的正确性,没有对学生进行实际硬件操作的训练,且并未考虑实际物理系统与数学模型的联系与区别。
附加代码生成技术后,教学过程增加了2个环节:
(1) C/C++代码生成:将Matlab/Simulink仿真模型对应的算法模型进行转换,生成相应的C/C++代码,在此基础上,利用接口工具对代码进行参数配置和优化,使其成为编译环境可以识别的程序语言;
(2) 实际控制系统:将C/C++代码下载到硬件系统的微控制器中,通过完成算法的功能实现对物理系统的控制,从而验证算法对应的理论知识。
可以看到:附加代码生成技术后,通过实验验证,增加一条反馈环,可以观察到算法对系统的控制作用,加深学生对系统知识的理解,学生可以观察到数学模型与实际物理系统的联系与区别。重要的是:基于代码生成技术,不需要经过繁琐的程序设计与硬件学习便可完成实验,减少了学习周期和实验设计的难度。
PID控制堪称自动控制理论中的经典,在Matlab/Simulink教学中,有必要将其加入相关实验教学过程。
图2是基于Matlab/Simulink代码生成技术的PID控制系统教学平台。图2中:
① 为实际物理系统,包括铝合金支架、电磁铁、H桥电路、光电传感器、arduino开发板等组件,可以实现电磁铁对铁球的磁悬浮控制,进而控制铁球的悬停位置;
② 为实际物理系统的结构示意图,其中,光电传感器测量铁球与电磁铁之间的距离,并通过模拟电路传递给arduino开发板的模拟数字转换端口,arduino根据铁球位置设定值,利用PID控制器得到合适的输出值,结合脉宽调制(pulse-width modulation,PWM)技术向H桥电路发出PWM信号,从而控制电磁铁对铁球的吸引力;
图2 基于Matlab/Simulink代码生成技术的 PID控制系统教学平台
③ 为Matlab/Simulink仿真模型,分为控制算法仿真部分和硬件系统仿真部分,其中控制算法部分主要包括PID控制器和铁球位置设定模块,体现经典控制理论中的数学模型,硬件系统仿真部分包括模/数转换以及脉宽调制,与实际物理硬件系统相对应。
在实验教学中,学生通过实际物理系统和结构示意图推导系统的控制原理,并在此基础上搭建PID控制系统的Matlab/Simulink仿真模型,通过代码生成技术,将仿真模型转换为C代码,经过接口工具,将生成的代码编译、链接、下载到arduino开发板中,实现铁球的磁悬浮控制。学生可以通过Matlab/Simulink中的虚拟示波器观察铁球的位置波动曲线,从而对PID控制器进行相应的调试。由于代码生成技术的辅助,学生在操作过程中不需要进行繁琐的编程,而是将主要精力放在PID控制器的特性学习和参数调试中,从而提高学习效率。
基于Matlab/Simulink代码生成技术的电机控制系统教学平台如图3所示。
图3 基于Matlab/Simulink代码生成技术的 电机控制系统教学平台
电机控制系统涉及电机拖动、自动控制和电力电子等多门课程的交叉,对实验教学设计有较高的要求。图3中:
① 为实际的硬件物理系统,由两台永磁同步电机、DRV8301驱动板和Launchpad 28069M开发板组成;
② 为Matlab/Simulink搭建的仿真电路;
③ 为代码生成工具运行时输出的报告。
在实验教学中,通过对图3①中硬件系统各部分的讲解,使学生直观地了解交流电机控制系统所需的控制器、驱动器、变流器各自的作用和相互关系。在此基础上,对仿真模型进行讲解,使学生了解控制算法的实现方法,以及仿真与实际物理系统的映射关系。利用代码生成技术,将仿真模型进行转换,并利用接口工具将代码传递给微控制器所需的编译环境Code Composer Studio 6中,通过编译、链接、下载到微控制器中。学生通过调试,能够更为实际地理解交流电机中坐标变换、闭环控制、空间矢量调制技术等重要环节。
Matlab/Simulink课程的教学过程可分为课前预习、教师讲解、学生自主学习、学生自主实验以及总结5部分。
在正式上课之前,要求学生对相关内容进行预习,了解实验所涉及的理论知识、实验原理、实验步骤,并提交实验预习报告。教师根据学生预习的情况,有重点地讲解相关知识内容,以节省在课堂上对基础知识进行讲解所花费的时间。
在实验人数安排上,安排3~4人为一组,通过分工合作,每人完成不同部分的程序编写与调试、记录参数和数据、下载程序与硬件调试,完成全部的实验步骤。通过组内交流,总结并记录实验中出现的问题以及解决方法。每次实验结束后,学生通过交换位置,确保每人都能掌握整个实验过程,并各自撰写实验总结报告。教师对学生在实验中遇到的问题进行解答,巩固和加深学生对知识的理解。
实验结束后,从有无预习报告、仿真模型搭建、代码生成、实际物理系统调试、实验数据以及实验报告等方面对学生的学习情况进行综合评分,评分中应兼顾学生的团队合作能力和表达沟通能力。
基于代码生成技术对Matlab/Simulink实验课程进行重新设计,加入了实际物理系统,使得学生在基础理论学习的基础上,通过代码生成工具对仿真模型进行转换,并将所生成的代码进行编译、链接、下载到硬件系统的微控制器中,完成实际物理系统的控制与调试。该实验课程的改革实现了仿真模型与实际物理系统对学生理论学习过程的双重反馈,加深了学生对所学内容的理解,锻炼了学生将理论知识应用到实际工程的能力,增强学生的学习兴趣,提高了学生的团队协作能力和解决复杂工程项目的能力。在设计的电气传动控制系统案例中,应用代码生成技术,简化了系统的编程设计过程,取得了良好的教学效果。