简单来说,机电一体化(Mechatronics)系统指的是一个用电机来驱动机械部件,来完成某种特定任务的设备。例如机床、工业机器人、各种重型机械等等。
机电一体化设计是一个典型的多物理域集成的学科:电机设计和驱动属于电力电子学科;机械部件和液压系统的设计属于机械学科;而要准确地控制这些电机、机械和液压设备去完成任务,则需要控制学科。这些控制模块通常运行在MCU(微控制器)中。为了有序地控制协调各种部件进行工作,除了闭环控制本身之外,还需要在微处理器中运行复杂的软件程序。这属于软件学科。Simulink作为一个基于模型设计的平台,结合Simscape物理建模软件,从而为机电一体化系统设计提供了便利。本文试图用一个Drawworks(石油钻井绞车)的例子,来阐述如何在基于模型设计的基础上,进行机电一体化开发。◆◆◆◆上图中钻井绞车系统为一个Simulink仿真模型,由物理模型、控制部分和操作界面组成。物理模型由钻井绞车的框架和滑轮、传动滚筒和液压制动器和异步电机组成,他们分别属于机械、液压和电气系统。上层操控提供了丰富的界面,可使绞车运行在自动或者手动模式下;也可以调整挂载的高度和速度,以及提供相应的屏幕显示。当然为了保证挂载和绞车的安全,必须保证挂载在上升过程不能对绞车框架进行碰撞。控制部分运行在PLC(可编程逻辑控制器)中,通过判断绞车高度和上层控制命令,来输出速度指令和刹车指令,保证绞车的安全运行。PLC在各种工业设备中应用较为广泛,Simulink可以自动产生符合IEC的结构文本PLC代码或者梯形图。当然,代码生成的前提是模型的准确性。什么是“准确”的模型?这个问题很难回答。所有的模型都是对物理世界的抽象。在不同的设计问题中,有不同的答案。就本例来说,对于机械系统,Simulink仿真的目的就在于找到一个合适的机械系统配置,从而为电机提供选型依据。找到了这些参数,机械模型就是准确的。对于电机来说,模型永远不可能和实际电机完全一样。但在某些情况下,如果通过模型参数的选择,而导致模型的仿真结果和实际电机一致,那电机模型在这些情况下就是准确的。对于控制系统,如果达到了前期设定的控制精度和裕度要求,并且软件经过完整功能测试和覆盖度测试,那控制系统就是准确的。MathWorks提出的基于模型的设计(MBD)就是这样的理念:在系统设计的早期就进行多域系统仿真和确认;持续进行设计的验证和优化;最终生成高质量的代码。◆◆◆◆机电部件选型在设计的初期,系统工程师需要针对系统的要求,选择合适的机电部件。这时候,系统工程师可以搭建一个初略的模型,进行系统配置选型的仿真。上图为一个供选型用的系统模型。系统工程师通过选用滑轮的个数(5、7、9)来确定所需异步电机参数的峰值。在这种系统模型中,电机模型并不需要非常详细的模型,可以用电机的数学方程来代替,而电机的控制只是简单的速度控制。换句话说说,只需要将电机转速和输出扭矩、功率的数学方程式表达出来即可。这个方法也叫第一准则(firstprinciple)。第一准则比较适用于比较简单的被控对象,例如低自由度的机械系统、简单的直流电机等等。如果机械系统过于复杂,电力电子线路过于复杂,则推导这些方程则没那么容易。这时候可以用Simuink中的Simscape物理建模方法--用“搭积木”的方法来搭建物理模型。下图的滑轮模型就是用Simscape搭建而成。利用模型变体管理功能,可以很快地进行滑轮数分别为5、7、9的情况下,所需要的电机参数峰值。通过仿真可以确定:滑轮数分别为5、7、9的情况下,所需电机的峰值功率和扭矩。可见,5个滑轮需要的电机功率和输出扭矩最大。◆◆◆◆电机模型校准在完成电机选型后,工程师需要在更细节的层面进行电机的建模和控制设计。SimscapeElectrical提供了各种各样的库供选择。例如,上图就是一个异步鼠笼式电机的调速控制模型。电机控制部分为FOC(磁场定向控制),在以前的文章中,对FOC已经做过比较深入的介绍,请参考《FieldOrientedControl和Simulink》。此处不再展开。值得一提是:整流器和逆变器的模型,用的是“均值模型”。均值模型中,没有PWM的发生器,输入到逆变器的只有dutycycle。所以均值模型的仿真结果没有开关纹波。与之相反,开关模型需要PWM的发生器,所以在开关模型的仿真中,可以看到开关纹波。平均模型的优势是a)仿真速度块b)Simulink可以直接对电子线路线性化。但在一些需要高精度的场合,就丢失了PWM开关的特性。而开关模型的优势是:保留了PWM发生器和电力电子开关的特性。但仿真速度会大幅度降低,而且Simulink不能直接对其进行线性化。如果需要了解在开关模型的基础上,进行控制器的设计。请参考《电力电子控制器PID参数的几种调试方法》。其中介绍了诸如“ACSweeping”等业界标准的被控对象线性化的办法。在电机模型中,有很多参数。例如定子和转子的电感电阻等等。这些一方面可以从电机的参数Datasheet中读取填入。有一些情况,例如电机参数不准确或者丢失的情况下。可以用Simulink的参数估计(parameterestimation)功能,通过实验数据和参数的曲线逼近,来获取电机的实际准确参数。先看一下实际电机运行的速度曲线(蓝色)和电机模型的速度曲线。由于参数的不一致,很明显它们有较大差异。然后以实际电机数据为基准,运行“SimulinkDesignOptimization”的参数估计功能。在运行一段时间后,发现实际电机测试数据和待校准的参数所运行的速度曲线已经高度重合。这样所得出的电机曲线,就是和实际电机一致。由此得出了电机模型的参数,从而达到模型精确化的目的。◆◆◆◆控制部分设计控制部分设计主要分几个方面。1)闭环控制设计2)上层逻辑状态机设计。首先我们看一下整个异步电机控制的整体架构。首先外环为一个PI控制器,控制电机速度。如果把内环打开看,又有三个PI控制器,分别控制磁链和dq轴电流。根据先调节内环,再调节外环的原则,我们可以先将FOC部分PI参数调节好,然后再调节速度环的PI参数。现以外环为例,介绍用Simulink的PIDtuner进行辅助调试的功能。步骤1线性化:由于电机和逆变器模型都是均值模型,没有开关器件带来的不连续性。所以可直接应用PIDtuner进行线性化。双击速度环tune。然后选择plantrelinearzieclose-loop。之后,选择一个静态工作点做线性化。如下图所示,选择第3秒。步骤2参数调试:PIDtuner会以拖动的方式显示时域和频域的控制器性能,方便用户进行交互调试。如果用户对Simulink的ControlSystemTuner比较熟悉,也可以将内环外环的四个PI集中一起调试。这时候,需要手动的选择4个PI控制器作为被调试对象。然后分别加入4个PI控制器的控制调试目标,例如对于速度控制和磁链控制器,可以StepResponse作为控制调试目标;对于dq轴的电流控制,可以用loop-shaping来描述其控制调试目标。在定义好控制目标后,ControlSystemTuner可以在一个静态工作点按照目标进行PID的参数调试,一次性集中确保所有4个控制器的参数都能满足控制要求。在设计完所有的闭环控制器之后,用户还需要考虑上层逻辑控制。例如,系统运行模式的切换和状态逻辑控制。这一部分可以用Stateflow来完成。相对于代码,状态机可以给出清晰简单的逻辑跳转。例如,钻井绞车的运行模式可以分手动和自动两种状态。这种逻辑的切换,用状态机来表示非常清晰自然。用分层次的状态机,可以描述非常复杂的逻辑切换。◆◆◆◆测试覆盖率在控制逻辑(以软件的形式体现)完成后,需要对每个软件模块做严格的测试工作。考量测试是否充分的指标主要是测试覆盖率。测试覆盖率,可以从两个方面来考察1)功能测试对需求的覆盖2)软件结构覆盖。针对第一点,业界通行的做法是建立一个需求到测试用例的追踪矩阵。然后对每一个功能性需求,建立若干个测试用例。只要测试用例完全覆盖需求,或者说需求都被测试了。我们就认为基于需求的测试是充分的。例如:如下的软件模块,对应于若干个测试用例。即使这些测试用例都覆盖了所有需求,那么他们是不是就是足够了呢?我们可以运行一下测试用例。Simulink可以给出测试覆盖度的报告,注意这个覆盖度报告指的是对软件结构的覆盖度。例如,对这个状态机,测试报告显示判定/条件覆盖(Decision/Conditioncoverage)和修正判定条件覆盖(MC/DC)的覆盖率。很明显,它们并不充分。有些高安全的行业标准,例如汽车电子、航空电子等,需要高度的(例如%)的软件结构覆盖率。此时,仅仅靠从需求去人工写测试用例,很难满足这样的需求。这时候,借助SimulinkDesignVerifier这样的形式化验证工具,可以自动化生成一些测试用例。这些测试用例并没有需求意义,但对结构化覆盖率是一个充分的补充。除了这个功能外,SimulinkDesignVerifier可以来识别模型中隐藏的设计错误。检测模型中导致整数溢出、死逻辑、数组访问越界和被零除的块。◆◆◆◆代码生成在模型得到完备的测试之后,我们可以生成代码了!很多的重型机械和工业领域,PLC由于其可靠性高,抗干扰能力强,再加上配套齐全和完善的功能,依然占据大量的市场。Simulink的模型既可以生成嵌入式C代码,也可以生成符合IEC-3:的结构文本(StructuredText)或者梯形图(LadderDiagram)。Simulink产生的PLC代码运行在成千上万的工业设备上,所支持的PLC覆盖世界上主流厂商。◆◆◆◆想要了解更多基于模型的机电一体化设计,