经本人实际测试,使用MATLAB/Simulink R2024a以及dSPACE SCALEXIO 4210,我曾遇到因模型离散化步长设置不合适,加上惯性环节设置不妥当,进而致使高频段误差超过50%的情……
经本人实际测试,使用MATLAB/Simulink R2024a以及dSPACE SCALEXIO 4210,我曾遇到因模型离散化步长设置不合适,加上惯性环节设置不妥当,进而致使高频段误差超过50%的情况。对于新手而言,只要依照步骤逐个去操作,便能够轻松躲开这类常见的问题。
仿真实测的实质乃是于数字范畴之内重复性呈现物理体系的表现,误差处置便是从中寻觅出数字仿真的那般“理想”之境与物理世界实质进行运行的状况之间普遍存在的差距范畴了,而且想各种办法把此差距范畴予以降低至工程层面能够予以接纳的程度,这一情形恰似针对一个虚拟类型的热水器去开展压力检测一般,我们凭借采取对模型参量所施展适度手段措施得以显著准确化方式的时候,能够促使仿真所具体生成呈现出来而所谓“水流”以及“压力”出现相应程度的起伏变动之际,跟真实设备实际获取的有关数据之间所存在的偏差能够达到最小化状态,如此这般就为实际进行产品设计以及各项调试工作提供了值得信赖的相应依据了。
##仿真测试为何会存在固有误差呢
所有仿真都是基于模型的,而模型始终是物理实体的简化形式。举例来说,当我们针对一个电机系统进行建模时,有可能遗漏轴承的微观摩擦以及温升所引发的磁钢微变参数。此类简化从模型搭建伊始便引入了误差。另外,计算的实质是离散的,我们所运用的求解器是一步步“跳跃”着向前计算的,并非如同现实世界那般连续演变。这种时间方面的“跳跃”自身就会造成信息丢失,特别是在处理快速变化的信号时,误差会被放大。从实践里得到的感受里最为直观的那一种,便是,在仿真出现剧烈震荡或者高速频率信号之际,我们通常反倒需要进行时间步长设置的检查。
##实际工程中如何标定仿真模型减少误差
首先进行的这一步,是要去执行灵敏度分析,以针对汽车发动机控制策略仿真的情况来说,像进气流量系数、摩擦扭矩模型系数这样关键的参数所存在的不确定性,会直接对扭矩输出误差产生影响,其操作方法为,在Simulink里面,用右键点击需要进行分析的子系统,选择“设计优化”,再从中点击“响应优化器”。把不确定性参数添加至“参数”选项卡内,一般会把每个参数的变动范围设定成基准值加上或减去百分之十。在运行完优化操作后,对代价函数针对各参数的梯度展开观察,从里面挑选出位列前三的、对于输出误差造成影响最为明显的“关键参数”。
【新手避坑】
在这一步骤当中,最为常见的问题产生了,那就是当工具运行完毕之后,会让人感觉似乎所有的参数都具备着重要性,从而让人陷入到不知所措,根本不知道该从何处着手的困境之中。而其核心出现错误的原因在于,初始参数变动范围的设置过大,进而导致扰动将真实的影响给淹没了。最佳的实践方式是,首先从正负百分之五的小范围开始,去识别出处于第一梯队的影响参数,接着在此基础之上,再针对这些参数进行正负百分之十五更为精细的二次扫描。
第二步,开展实物在环测试,以此进行对比校准。这可是把误差予以量化的关键核心环节哟。要运用dSPACE ControlDesk软件,把模型部署投放至实时仿真机去运行。还要连接真实的ECU或者被测的实物,于同一个测试工况当中,像NEDC循环工况这种,同步采集被控对象的真实CAN信号,诸如实际车速、发动机转速之类的,以及仿真模型里对应的信号呢。完成数据采集之后,于MATLAB里把两路信号导入进去,运用系统辨识也就是System Identification工具箱的关键指令procest(data, ‘P2DZ’)针对数据予以处理。此一指令会将实测数据跟模型输出相互对比,自动拟合出具备双实极点以及一零点的改进模型。
【新手避坑】
在测试期间,常常会出现仿真跟实物信号并非同步的状况,进而致使相关分析归于失败。这一般来讲就是仿真模型里I/O接口板的硬件中断触发周期跟实物ECU的任务周期不相匹配所导致而成的。要想快速予以解决:就是务必要确保dSPACE模型的最小步长严格等同于(或者被整数倍整除)硬件接口板(像是DS4302)的中断触发周期设置,一个较为常用的匹配值是1ms。
第三步,对模型参数作反向迭代修正。依据第二步所辨识出的,改进模型的传递函数,解算出和原模型的主要差别参数。重点在于此处并非精确公式替换。需把辨识出的主要时间常数或者增益系数,朝第一步里找出的“关键参数”作反向代入,来开展迭代调整。例如,要是辨识发觉系统低频增益比模型高出8%,而我们第一步清楚“燃油喷射脉宽标定因子”对这一增益最为敏感,那么能够在模型里把该因子的值按照比例增加8%。进行修改操作之后,再次运行第二步的对比测试,留意误差收敛状况,通常历经2至3轮的迭代,能够有效地把稳态误差压制到2%之内。
【新手避坑】
当进行迭代修正的时候,一开始就大幅度更改许多参数,最终致使模型出现发散的情况。核心的出错缘由是忽略了参数之间的耦合性。一定要严格遵照单变量修正的原则,每一次仅仅调整上一步灵敏度分析里排名首位的关键参数,等到它稳定收敛之后,再去变动排名第二的参数。最佳的推荐做法是,把经过迭代修正的上下限硬件设定为处于[-20%, +20%]这个区间范围之内,目的是避免修正过度从而引发系统出现不稳定的状况。
##处理高频动态误差的两种方案怎么选
对于那种涉及高频开关动作的仿真,像电机PWM控制,还有电源变换器方面的,高频动态误差特别明显。这里给出了两种实际操作的方案,取舍的逻辑十分清晰明显。方案A,也就是提升求解精度的那种:把固定步长求解器,比如ode4,换成变步长的,像ode45,并且大幅调低相对容差,从默认的1e – 3变为1e – 5。这样做能够提升精度,不过计算所花费的时间有可能会翻倍。方案B(模型等效降阶):采用一个等效的一阶惯性滞后环节(1/(Ts+1)),来对实际开关过程的平均效应予以模拟,将具体的开关沿予以忽略,经验公式为,时间常数T选取开关频率倒数的1/3,这属于有损近似,不过速度较快,能够抓住系统主要动态。从逻辑角度进行取舍,对于离线验证核心算法收敛性,采用方案A,而针对于做系统级、长周期的耐久性工况仿真,若追求速度,则运用方案B。
##仿真报错“代数环”如何一站式解决
有一个高频出现的报错情形便是Algebraic Loop,仅仅只是在诊断之中勾选“打破代数环”这种做法是不可取的,因为这将会把模型动态属性进行彻底改变,一站式解决流程是这样的,首先是定位根源,也就是在Simulink菜单栏调试这一操作项中,找到信息覆盖,之后勾选代数环,如此一来模型里的环就会呈现高亮状态。2. 剖析缘由:一般而言是有着一个信号的径直馈通这种情况,举例来说像一个“Gain”模块的输出,经由某一条逻辑线路,未曾历经任何“Unit Delay”或者“Memory”模块,便回馈至了其自身的输入端 ,找到根源并插入:于反馈环的最起始之处,人工插入一个“Unit Delay” 模块。4. 关键配置方面,要双击“Unit Delay”模块,把“初始条件”参数设定为0,或者设定为该系统合理的稳态初始值,在“采样时间”当中填入-1,以此来继承驱动信号的采样时间。5. 验证的部分,要运行仿真,确认代数环警告已经消失,并且系统动态响应虽然存在微小延迟,不过主要趋势达成吻合。
针对那些涉及流体、还有复杂热交换等具体情况,呈现出强非线性特征并且难以做到准确建模之系统,上述借助参数修改的框架校准办法或许并不适用,原因在于模型结构自身所存在的偏差有可能远远大于参数偏差。处于这种情形之下,替代的方案乃是采用数据驱动建模。直接借助实测的数量众多的输入输出数据,经由像神经网络这般的黑箱模型,去构建一个具备高精度的行为拟合模型,以此用于特定工况情形下的预测,尽管后者在物理层面颇具可解释性较差的状况,然而对于那些机理极为复杂的子系统当中,准确地精准预测其行为正是表现为最高效的策略。
微信扫一扫
还没有评论呢,快来抢沙发~