APP下载

基于STM32-MAT的交流永磁同步电机驱动控制系统开发

2022-10-01徐建明汪晨浩

浙江工业大学学报 2022年5期
关键词:外设控制算法被控

徐建明,汪晨浩

(浙江工业大学 信息工程学院,浙江 杭州 310023)

基于模型设计(Model-based design,MBD)是一种高效、便捷地设计控制系统的方法,最早出现于20世纪90年代[1-3]。基于模型设计思想被提出后,模型设计软件的代码自动生成技术得到了研究和推广。目前,国内外已有的应用级自动代码生成平台主要有3种:1) 德国ETAS公司的ASCET和Intecrio实时仿真系统;2) 德国dSPACE公司推出的基于Matlab/Simulink实时仿真系统;3) MathWorks公司开发的基于Matlab/Simulink的xPC target环境。

ETAS公司推出的ASCET软件结合现代软件工程的方法论及最佳的实践经验,从应用软件产品初始化设计到微控制器的代码自动生成,完全适应汽车设计开发的过程与要求[4-6]。dSPACE是德国dSPACE公司开发的一套基于Matlab/Simulink的软硬件开发平台[7-8]。Matlab/Simulink的Real-time workshop(RTW)开发环境可以将Simulink下的模型文件针对所需嵌入式系统进行C代码生成,此方式提高了算法的开发效率,从而简化了工程开发流程。TI公司和Mathworks公司联合推出了Embedded target for TI C2000 DSP工具箱,ST公司推出的STM32-MAT/Target工具箱,Aimagin推出的Waijung blockset工具箱都是为了将Matlab/Simulink模型文件中添加对应外设相关程序,辅助Embedded coder生成带有外设配置的工程文件,简化了项目工程开发[9-12]。笔者以永磁同步电机为研究对象,首先使用Matlab/Simulink构建电机控制模型;其次利用Embedded coder和STM32-MAT/Target工具包实现STM32工程项目的代码生成,详细研究该方法开发的流程与实现;最后将生成的项目文件编译并下载到STM32G474控制板中进行测试,验证该设计方法的高效性和稳定性。

1 基于模型设计开发流程

主要研究基于模型的设计方法应用于STM32上的实现问题。Matlab/Simulink环境下完成基于模型的设计过程参照DO-178b航空电子规范中的设计流程,基于模型设计的流程图如图1所示[1-2]。

完整的基于模型设计的开发流程可以分为3步:需求分析、模型设计和工程实现。需求分析需要对所使用的算法进行确定,对系统设计进行整体分析,并对设计的技术内容进行验证与确认,完成技术规范和方案说明的构建。模型设计首先需要将需求分析中确定的算法以模型的方式实现,将算法以模块的方式进行设计测试,当需要对功能进行调整时,可以直接修改仿真模型中的对应模块;然后通过Embedded coder将模型生成为对应的工程文件,并在多种在环测试中,完成项目的验证;最后在硬件平台上完成实验。

在需求分析和实验方案已经大致确认的情况下,可以将基于模型设计的STM32项目进行开发,按照图2所示的流程实现[13]。

图2 基于MBD的STM32项目开发流程图Fig.2 STM32 project development flow chart based on MBD

整个开发流程可分为4个步骤:

步骤1Simulink建模仿真,利用Matlab/Simulink完成控制算法和被控对象的建模,此过程完全在Matlab/Simulink上实现,用于算法可行性的验证。

步骤2软件在环仿真(Software in-the-loop,SIL),此过程在Matlab/Simulink上实现,控制算法和被控制对象模型都是在Matlab/Simulink上建立的仿真模型。设置为SIL模式的模型会生成为C代码,通过C代码对被控对象实现控制。

步骤3处理器在环仿真(Processor in-the-loop,PIL),该步骤中使用的控制程序都是经过SIL测试后对应控制模型生成的C代码,这部分程序将在相应的处理器上运行,控制算法会被编译并下载到STM32当中,通过STM32完成对Matlab/Simulink中被控对象模型控制,过程当中数据通过串口通信进行交互。PIL测试过程需要的时间成本远大于SIL测试,因此需要先进行SIL测试,保证C代码的可行性。由于STM32的运行速度有限,因此选择的电机控制算法必须在设定的控制周期内运算结束,另外还需兼顾芯片存储问题,防止计算过程中出现由于堆栈空间太少而导致运行错误。

步骤4实物运行,该步骤使用的是PIL测试中已经验证过的控制模块,将Matlab/Simulink中的该部分模型编译成STM32的工程文件。此步骤中输入输出参数都由真实外设采集而来,并且所有控制算法都在STM32上运行,完全脱离Matlab/Simulink。

2 实验平台软硬件搭建

图3为实验平台软硬件图,该实验平台由PC端、控制板、电机驱动器、永磁同步电机、制动器电源和磁滞制动器组成。该实验使用的永磁同步电机参数如表1所示。

图3 软硬件平台图Fig.3 Software and hardware platform diagram

表1 电机参数表

在PC端上需要安装Matlab/Simulink、STM32-MAT/Target、STM32CubeMX以及Keil等软件,Matlab/Simulink用于构建控制算法模型,Embedded coder借助STM32-MAT/Target和STM32CubeMX实现嵌入式处理器快速生成结构紧凑、代码可读性强的C和C++项目的生成,使用Keil将项目工程编译并下载到控制板中,利用上位机程序对实验平台运行情况进行监控。

在设计过程中,对STM32外设进行配置,通过STM32CubeMX对实验需要用到的外设进行配置,并将其保存为ioc文件。借助STM32-MAT工具包使Matlab/Simulink利用ioc文件获取到STM32配置完成的外设信息[14]。

当构建该项目时,需要先对Matlab/Simulink进行相关配置。在Matlab代码串口里输入pathtool指令,打开设置地址窗口,将STM32-MAT安装路径添加到Matlab search path里面。打开Simulink窗口,新建Blank model模型。在Model configuration parameters里,将Code generation的System target file选择为stm32.tlc,并在CodeGeneration里和STM32 Options里勾选STM32CubeMx path update和Download application。将Library brower里的Target support package-STM32 adapter中MCU config添加到Model里,将其Configuration file设置为STM32CubeMx配置好的ioc文件。STM32_Config中具体配置如图4所示。当完成上述配置之后,在此模型文件中添加控制算法,在验证算法可以实现之后,点击Build model生成STM32项目文件。

图4 STM32_Config配置图Fig.4 STM32_Config configuration diagram

3 电机控制仿真模型构建

在进行STM32代码自动生成测试实验之前,需要先建立永磁同步电机控制模型,此模型通过Matlab/Simulink内部Power system工具箱中的Universal bridge和Permanent magnet sychronous machine(PMSM)等模块构建为实验部分的被控对象,针对该部分被控对象,设计满足需求的控制模型。该实验使用了电压空间矢量脉宽调制算法(Space vector pulse width modulation,SVPWM),永磁同步电机矢量控制结构框图如图5所示[15-16],其中被控对象模型不参与代码的生成,只在仿真阶段被用于验证控制算法的理论可行性。如图6所示,将原有仿真模型分为3部分:目标输入、控制模型和控制对象模型。

图5 矢量控制结构框图Fig.5 Vector control system structure drawing

图6 模型分块图Fig.6 Model block diagramsign

当目标输入为控制算法的设定值时,该实验中为转速调节器提供的转速目标值就为该部分提供。被控对象模型在仿真中是由PowerSystem工具箱构建的模型,在实物实验中对应STM32的各类输入输出外设,具体被控对象模型如图7所示。

图7 被控对象模型Fig.7 Controlled object model

把目标输入部分设置的电机目标转速和被控对象模型提供的电机转子转速、位置和三相电流信号作为控制模型的输入。定时器CCR寄存器设定值作为控制模型的输出。使用将直轴目标电流设置为0的矢量控制算法模型,具体的控制模型如图8所示。将该部分模型保存为新Model模块,并将此部分模型命名为Motor control,在之后的仿真当中使用Model模块调用该部分模型的方式进行实验。

图8 控制模型Fig.8 Control model

该实验使用了SVPWM算法,借助PowerSystem对被控对象进行建模时,需要考虑Unversal bridge使用到的开关信号频率比控制算法的计算频率快的问题,通过在仿真模型中添加Rate transition模块的方式,处理此类不同速率端口之间的数据传输。使用了100倍的控制模型运行频率作为解调的计数频率,设定控制模型的运行频率为14 kHz,解调过程中计数频率为1.4 MHz,此选择可以保证输出较为精确的波形,同时保证仿真的运行时间不会过长。完整的仿真模型如图9所示。

图9 电机控制模型图Fig.9 Motor control model diagram

4 基于模型设计的实现与结果

在完成仿真模型的功能实现以后,需要对上述模型进行在环测试以验证其生成的代码稳定、可行。

4.1 SIL测试

对模型进行SIL测试,并对控制模型进行修改,将其Simulation mode选项更改为SIL模式。SIL模式和Normal模式模型图如图10所示。先对仿真模型中各个模块分别进行评估测试,在保证各个模块符合要求之后,再对其模型整体进行评测。

图10 SIL模式和Normal模式模型图Fig.10 SIL mode and Normal mode model diagrams

在该实验分析SIL整体模型时,只分析生成为C代码的程序对仿真模型的控制结果,不考虑在相同输入的情况下,与一般仿真模型的输出之间的关系,各个模块之间需要考虑相同输入时对应输出的误差大小。图11为SIL模式对应电机转速图,图11中:NrActual为电机实际转速值;NrTarget为电机设定转速值。

图11 SIL模式转速图Fig.11 SIL mode speed diagram

4.2 PIL测试

确保控制模型在SIL模式下运行正常之后进入PIL测试,此过程需要将模型Simulation mode设置为PIL模式,运行模块之后会借助STM32CubeMX生成为工程文件,对其进行编译并下载到对应控制板中,在确保STM32正常运行之后,在Matlab/Simulink上运行模型。此时控制系统运行情况如图12所示。

图12 PIL模式转速图Fig.12 PIL mode speed diagram

图12中PIL模式与SIL模式转速曲线都是围绕转速的设定值上下波动,与目标转速的差值较小。当获取PIL测试中任务或其模块的运行时间时,需要在CodeGeneration下Verification中Code profiling的Measure task execution time勾选,并选择需要的Measure function execution times参数。配置图如图13所示。PIL模式下对应的运行时间如图14所示。控制算法总体运行时间在10.9 μs以内,平均7.3 μs完成计算,这个运算时间满足设定的14 kHz的运行频率要求。

图13 PIL任务执行时间测量配置图Fig.13 PIL task execution time measurement configuration diagram

图14 PIL执行时间图Fig.14 PIL execution time diagram

4.3 实验模型配置

对经过在环测试的仿真模型进行修改,通过STM32-MAT/Target工具将STM32外设模块添加到仿真模型,用ADC采样模块对相电流进行采集,通过配置Tim3为Encoder mode采集增量式编码器信号,通过配置GPIO获取Hall位置传感器信息。设定一条电机运行时使用的速度曲线,并设定电机切换状态的时间,配置TIM1作为功率器件开关信号输出的PWM mode,由于直接使用STM32-MAT中的TIMERS模块时,只能以给定占空比的形式控制,对应CCR寄存器计算时会出现浮点数运算,因此此处通过对寄存器直接控制的方式将控制算法中的计算结果直接赋值[17]。控制算法部分模型如图15所示。

图15 STM32控制模型图Fig.15 STM32 control model diagram

设置定时器TIM1 channel 4为PWM generation模式,将ADC采样的触发信号选择为Timer1 trigger out event的上升沿信号。通过调整Channel 4的CCR寄存器数值大小调整ADC采样开始时刻。将控制算法添加进ADC的EOC中断当中,等待ADC采样结束之后,将其数值用于控制算法计算。

4.4 实验结果分析

系统过流保护的策略是通过对三相母线电流进行添加采样电阻的方式,对采样电阻两端电压进行放大处理,与设定电压数值进行比较,比较器输出作为TIM1的BRK信号。当过流发生时,此信号会切断PWM输出,快速关断所有MOS管,防止电路烧毁。事件配置模型如图16所示。在建模中使用了中断事件,因此模型存在SS_OPTION_ASYCHRONOUS_INTERRUPT部分,这使得Simulation mode中External mode不能正常使用,无法在Simulink平台上直接对模型数据进行观察,因此本实验另外设计了一套基于串口通信的上位机交互软件。

图16 STM32中断事件模型图Fig.16 STM interrupt event model diagram

监控界面如图17所示,图17中的曲线为空载情况下I/f控制时对应的三相电流、转速、相电压和力矩的变化曲线监控。

图17 监控界面Fig.17 Monitoring interface

在控制算法开始前将一个GPIO口设置为高电平输出,在程序结束后将该GPIO口设置为低电平输出,高电平持续时间可以看作控制算法需要运行的实际时间,由于在此过程中需要通过外设读取并处理位置、速度和电流信号,因此实际生成的项目文件中控制算法大致运行时间为15 μs,略大于PIL模式时的运行时间,实际工程耗时如图18所示。

图18 项目控制算法执行时间测试图Fig.18 Project control algorithm execution time test diagram

将由STM32-MAT工具生成的项目文件进行编译下载,并在仿真模型中设置一条速度曲线。在自己设计制作的硬件测试平台中对其进行程序的运行,电机对应空载的速度曲线如图19(a)所示,可以看到:当时间为30~35 s时,对应转速误差约为±20 r/min,最大偏差为±40 r/min,对应其±1 200 r/min的速度约为1.6%;当电机加载0.2 N·m时,对应的速度曲线如图19(b)所示,其速度偏差会超过±45 r/min,误差约为运行速度的2.5%。在面对突加0.2 N·m负载时,其速度会突然下降到1 095 r/min,在170 ms内重新跟上设定速度数值,具体速度曲线如图19(c)所示。电机匀速、加速和减速状态下突加0.146 N·m负载对应转速如图20所示,在突加负载时,电机都会先减速一小段时间,之后再重新跟踪上设定的曲线,当使负载大小恢复为0 N·m时,会有一个转速超越设定转速的时间,并在短时间内重新跟踪上设定曲线。图20中TlSetting为负载力矩值。

图19 电机实际转速图Fig.19 Actual motor speed diagram

图20 负载力矩与电机转速图Fig.20 Load torque and motor speed diagram

5 结 论

分析了传统开发过程中存在的问题,在Matlab/Simulink环境中对STM32的基于模型设计过程作了详细的阐述。借助Matlab embedded coder和STM32-Mat完成仿真模型的构建,快速高效地部署、生成相应的工程文件,整个流程不需要在STM32工程项目中添加代码,修改工程项目时,直接对Maltab/Simulink中仿真模型进行修改设计。通过基于模型设计的开发思想完成了永磁同步电机矢量控制算法的设计,验证了该开发过程相较于传统的设计方法的优越性。

本文得到了浙江工业大学教学改革项目(JG201918)的资助。

猜你喜欢

外设控制算法被控
港警在“修例风波”中拘捕近万人
基于dSPACE和PLC的控制算法测试系统设计
基于DCS的过程实时控制平台的研究
卫星姿控系统半物理仿真中转台控制算法的实现
外设天地行情
外设天地行情
外设天地行情
外设天地行情