摘要:系统设计与仿真软件GCKontrol能够对控制系统进行建模、仿真与测试。软件基于模型自动生成的代码能够满足嵌入式系统要求。GCKontrol的模型属于“应用层软件”,能够与“底层软件”一起编译,下载到目标板。本文将给大家展示一个基于STM32 ARM Cortex芯片实现的电机控制案例。
基于模型的设计为复杂系统的开发提供了一种数学性的、形象化的方法,其核心在于开发过程中,系统地使用了基于模型的设计思想,包括需求分析、系统架构建模、设计实现、仿真、自动代码生成以及验证和确认。基于模型的设计使开发者能够在项目的早期阶段就发现并改正产品开发的缺陷和设计问题,项目过程中还可以适应不断变化的客户需求,项目末期在通过软件在环(SiL)、模型在环(MiL)、硬件在环(HiL)仿真后,确保最终交付的系统可以满足客户需求。 在嵌入式开发中,利用仿真软件的相关功能模块搭建仿真模型后,一个非常重要的步骤就是利用代码生成功能将搭建的系统转化为代码,并且和嵌入式平台的芯片软件工程融合,使我们开发的系统能够在单片机上运行,实现产品的功能要求。 在本案例中我们采用世冠科技开发的GCKontrol系统设计与仿真软件来对控制器策略进行建模并生成代码,将代码载入到STM32开发板,(类似于汽车控制中的ECU),对汽车节气门实物进行控制。 本方案实施步骤如下:
1.控制策略建模:基于GCKontrol对控制器策略进行建模;
2.被控对象建模:基于GCKontrol对被控对象节气门进行建模;
3.模型在环测试:基于GCKontrol对控制策略和被控对象进行模型在环测试;
4.控制策略优化:对控制器策略进行优化评估迭代,以得到期望的控制效果;
5.生成C代码:基于GCKontrol对控制器策略生成C代码或定点运算C代码;
6.代码部署至嵌入式系统:将C代码部署至STM32开发板;
7.快速原型验证:搭建完整的硬件系统(汽车踏板 STM32控制器 节气门实物)进行快速原型(RCP)验证。
在本案例中,基于四个关键模块来实现控制器策略对汽车节气门的控制: 2.STM32开发板:作为控制器来运行控制策略输出PWM波; 3.电机驱动板:对STM32输出的PWM波进行放大,输出电压; 4.汽车节气门:实物,接收到电机驱动板的电压,对节气门进行实时控制。
用滑线变阻器模拟油门踏板的输入模拟信号-电压信号,脚踩踏油门踏板的深度决定了节气门的开度,节气门的开度又会控制汽油的燃烧,从而提供不同级别的动力。本案例中用滑线变阻器输出电压来表示油门踏板的输出电压。 STM32开发板型号为STM32-F103-ZET6,详细参数如下: 1.主流微控制器,大型生态系统。基于ARM内核,32位。 2.本案例中可选择的开发板有CAN、模拟、数字I/O。没有“电源”,只有逻辑([mA])。 3.本案例中电机驱动板是基于PWM波模式,输出1[A]电流。 PWM控制电机的基本原理:PWM就是脉宽调制器,通过调制器给电机提供一个具有一定频率且脉冲宽度可调的脉冲电。脉冲宽度越大即占空比越大,提供给电机的平均电压就会越大,电机转速因而越高。反之,脉冲宽度越小,则占空比越小,提供给电机的平均电压就越小,电机转速进而越低。PWM不管是高电平还是低电平时,电机都是转动的,电机的转速取决于平均电压。 首先设定节气门的控制策略。由于节气门较为简单,可直接采用传统的PID控制策略,因此主要的工作就是找出控制量和搭建PID控制模型。对于控制量,我们可以设定滑线变阻器的输入量与节气门传感器的输出信号之间的差值来做为PID的控制量。PID的输出量经过放大之后作为节气门内部电机的转矩输入,从而实现整个模型的建立。 1.1.输入踏板位置电压;
1.2.输入节气门位置电压;
2.1.验证电压是否在预期范围内并进行合理性检查;
2.2.故障保护模式;
3.1.正常模式:带前馈的PI控制;
3.2.位置传感器故障时的备份模式:带抖动的前馈(备用:无反馈);
依据以上需求,本案例GCKontrol的控制策略模型如下图所示:
1.直流电机:电机电阻,Kt(力矩增益),Kemf(反电动势常量); 4.弹簧扭矩和预加载力矩。
模型在环的GCKontrol工程如下图所示,被控对象是节气门,节气门由电机驱动,图中右边的子系统是控制器模块,左边的子系统是节气门和电机模型。
其中,节气门和电机模型的系统结构如下图所示,输入为PWM波-电压,驱动节气门转动,输出为节气门传感器电压。 模型在环系统测试结果如下图所示,油门踏板信号为输入信号,节气门信号是系统的输出信号,实现了节气门信号对油门踏板信号的追踪。
GCKontrol支持代码生成,包括C/C 源代码、动态库等文件,自动生成的代码是跨平台、跨硬件的全独立代码,可部署至嵌入式系统,且模型和代码具有一对一关系,易调试和追踪。
其中GCodeLink.c和GCodeLink.h是GCKontrol生成的C代码。 在GCKontrol的控制器模型做定点运算,需要在GCKontrol模型中的每个模块的信号属性页面进行定点运算配置,包括:数据类型、定标值、偏移等参数。
以增益、常量和加法三个模块为例来展示定点运算设置:
对增益模块FeedForward_DutyGain进行定点运算设置,在信号属性Tab页,输出数据类型选int16,选中定点计算CheckBox,在定标值里选为6,偏移设为3:
对常量模块FeedForward_StartPoint 15进行定点运算设置,在信号属性Tab页,输出数据类型选int32,选中定点计算CheckBox,在定标值里选为4,偏移设为-10:
对加法模块FeedFwd_duty进行定点运算设置,在信号属性Tab页,输出数据类型选int16,选中定点计算CheckBox,在定标值里选为3,偏移设为55:
本案例对控制器算法模型各模块进行定点运算设定后,运行GCKontrol工程,生成定点运算C代码,并将该C代码部署至嵌入式系统(STM32开发板)。 在GCKontrol生成的C代码中,需要关键的接口函数:DoStep函数和CreateValue函数。 ▎5.1 将GCKontrol生成的控制器C代码部署到STM32
将GCodeLink.h和GCodeLink.c文件拷贝至工程下的User文件夹中,如下图所示: ▎5.2 STM32调用GCKontrol策略代码的接口函数 1.初始化代码:无需修改,主要是设置硬件信息;
2.While循环:主控制回路;
3.读取模拟输入,传递给GCKontrol变量;
6.等待10ms。
1.生成代码的变量与STM32工程变量对接;
2.变量列表位于Gcodelink中;
3.如果模型更改,列表将更改,需要更新索引。
基于STM32 Cube IDE对代码进行编译并加载到STM32开发板中,如下图所示: ▎5.4 基于STM32 Cube IDE对代码进行编译调试 调试器连接到单板,在单板执行中插入断点,调试器读取主板内存,读取或写入变量/参数。如下图所示: 经过以上各步骤,本案例实现了对汽车节气门实物的控制。 1.滑线变阻器-模拟踏板开度电压;
2.STM32开发板;
3.电机驱动板;
4.稳压电源-供电给电机驱动板;
5.汽车节气门。
在本案例中我们采用GCKontrol系统设计与仿真软件来对控制器策略进行建模,仿真测试后生成C代码/定点计算C代码,并将生成的代码载入到嵌入式系统(系统采用STM32开发板,类似于汽车控制中的ECU),最终实现了对汽车节气门实物的控制。