APP下载

基于Matlab与STM32的电机控制代码自动生成

2017-04-21丁学明

电子科技 2017年4期
关键词:方波直流电机控制算法

徐 捷,丁学明

(上海理工大学 光电与计算机工程学院,上海 200093)

基于Matlab与STM32的电机控制代码自动生成

徐 捷,丁学明

(上海理工大学 光电与计算机工程学院,上海 200093)

基于Matlab与STM32的代码自动生成方法与无刷直流电机控制系统相结合,使得控制系统的设计与实现更为方便快捷。通过对无刷直流电机控制系统进行Matlab仿真模型设计,再利用针对STM32微型控制器的Simulink库STM32 MAT/Target与相关软件工具,实现可读、可移植的C代码工程文件的自动生成,并在STM32F103上实际运行,其运行状态与仿真结果基本一致。该方法既通过Matlab的仿真对控制系统进行精确的设计,又利用其自动生成代码的特点便于控制算法的实现,两者相互结合,在保证准确性的同时加快了从设计到实现的整个过程。

STM32;Matlab;无刷直流电机;自动生成代码

STM32系列微控制器是一款基于ARM Cortex-M3内核的嵌入式应用产品[1-3]。由于其高性能、低成本、低功耗的特性使其应用领域不断扩大,对于其高效地开发和利用便更为重要[4-5]。随着STM32 MCU生成代码的功能获得了MathWorks的全面支持,使软件开发人员能够在Matlab和Simulink环境中开发算法,然后在处理器在环(PIL)仿真中编译目标,集成、调试和测试这些模型。Embedded Coder生成的C代码运行于STM32评估板上,Keil?微控制器开发套件 (MDK-ARM?)的调试器与Simulink直接交互,进一步简化了代码集成过程[6-7]。

相较于传统的固件库和寄存器的人工编写方式,Matlab仿真后生成C代码工程文件的模式更为便捷,对于其开发效率更高。传统的开发过程往往需要两类人员参与:一类算法设计人员来建立修改算法模型;另一类程序编写人员去实现算法,两者之间要相互协调,反复验证与修改,延缓了开发进程。而Matlab的自动生成代码解决了这一问题,建立算法模型与其编程融为一体,使设计环境更为统一,测试与修改也更系统化,因此Matlab仿真后生成C代码工程文件的模式更为便捷,开发效率更高[8-10]。由于无刷直流电机控制方式在软件与硬件方面均易于实现,且对于STM32自动生成代码中GPIO、TIMER、ADC等各模块均有应用,故以此为模型进行仿真与代码的自动生成。

1 STM32的代码自动生成流程

在Matlab 中,主要有Real-Time Workshop(RTW)和Stateflow Coder 两种自动代码生成工具,RTW生成的代码简洁、可靠、易读[11]。而ST所提供的STM32 MAT/Target工具箱能够较好地与Matlab生成的代码相衔接,做到算法编程与底层驱动一步到位。在代码自动生成的过程中首先要安装相应的软件来做好准备,表1中列出了整个过程中涉及的软件。

表1 STM32代码自动生成相关工具

在整个设计过程中,基本可以分为3个步骤,每一个步骤的应用软件也不尽相同。其中,第一步是在Matlab/Simulink上设计控制系统的算法,该工作主要通过Matlab实现,并通过建立外部模型分析仿真结果;第二步是处理器在环(PIL)仿真,即将STM32芯片与Matlab通过UART相连接,进行实时仿真,此过程需要Matlab,STM32CubeMX和Toolchain等软件,其优点在于可利用STM32芯片的运算能力来验证算法。在上述仿真完成后,便可构建自动生成代码的模型,将设计模型的相应输入输出与STM32 MAT/Target库的模块相连接,根据模型功能在STM32CubeMX中具体设置,即可进行代码自动生成,生成的C代码工程文件通过相应开发环境进行再编译即可。其设计流程图如图1中所示。

2 模型的搭建与仿真

2.1 无刷直流电机方波控制

无刷直流电机的方波控制系统利用霍尔位置传感器进行调速控制[12-13]。图2为无刷直流电机方波控制的设计框图,其中左侧大方框为STM32F103芯片及其内部控制策略,其余为外部驱动电路、无刷直流电机和相关传感器。方波控制的主要控制策略思路是通过电机的霍尔传感器反馈的当前值对电机三相电桥开关信号进行换向处理[14],同时根据ADC采样到的转把信号换算出换向中开关信号输出的占空值,将其作为各相线输出PWM的占空比值,即改变三相电压,从而对无刷直流电机进行变压调速控制。

其中,六步换向顺序的算法可在Matlab中直接编写,并且利用Simulink的模型仿真可直接从Scope模块中看到输入与输出之间的关系,因此较传统编程更为便捷准确,本文的六步换向顺序如表2所示(本文采用的霍尔传感器各相间差120°),其中CHx=1为上桥臂导通,CHxN=1为下桥臂导通。

图1 STM32代码自动生成流程图

图2 无刷直流电机控制框图

正转上下桥臂反转hchbhaCH1CH1NCH2CH2NCH3CH3Nhchbha01100PWM00110101001PWM0000011100100PWM00111000001PWM0010101PWM00100110001PWM00001100

2.2 BLDC方波控制仿真模型

根据图2中的无刷直流电机控制框图与换向顺序表在Simulink中进行仿真建模,利用相关Simulink模块建立外部驱动电路和电机模型,形成闭环回路,以此来验证控制算法的可行性。图3为BLDC控制系统Simulink模型,其中Matlab Function模块为控制算法模块,即STM32芯片所需处理的算法,而其他模块则为外部模型,即模拟STM32芯片外围驱动及控制对象,从而验证算法可靠性。

图3 BLDC控制系统Simulink模型

将上述模型中的Matlab Function模块进行子模块的封装,并选择PIL模式仿真,并在Configuration Parameters中选中Code Generation,将其中的System target file选为stm32.tlc,将电脑与STM32芯片相连接(包括仿真器与串口1通道),点击运行并进行相应设置,便可利用Simulink中的Scope模块观测到芯片实时参数及其波形变化,利用其实时调试的特性验证控制算法的正确性。图4为三相控制信号仿真输出。

图4 上桥臂控制信号仿真输出

如图4所示,三相上桥臂MOSFET开关信号两两相差120°,与HALL信号一致,并且由无刷直流电机的输出变量中可以看出该控制算法可运用于无刷直流电机的方波控制,且运行结果良好,保证了算法的准确性,为之后自动生成代码做准备。

3 自动生成代码与验证

通过上述模型的仿真,算法得到验证,在确认表1中相应软件安装完成后,可建立代码生成模型。生成代码步骤如下:

(1)新建一个文件,并在Configuration Parameters中选中Code Generation,将其中的System target file选为stm32.tlc,并在STM32 Options更新STM32CubeMX相关路径;

(2)在Simulink Library Browser中找到STM32的工具箱,并将MCU CONFIG中的STM32_Config模块拖入模型文件,该模块与STM32CubeMX关联,打开该模块并建立.ioc工程文件,完成对STM32芯片的相关型号和引脚功能的相关设置;

(3)在芯片和引脚设置完成后,从STM32的工具箱中添加所需的相关功能模块,并于仿真模型中的算法模型建立完整的代码生成模型,如图5所示;

(4)点击Build生成代码工程文件,生成的工程文件位于.ioc工程文件夹中。

图5 自动生成代码模型

将生成的代码工程文件利用相关开发工具打开并编译,烧写到硬件芯片中便可直接运行,图6为同一桥臂MOSFET开关信号的实际输出波形。

图6 同一桥臂实际开关信号

从图4和图6中可以看出,实际无刷直流电机控制过程中其输出波形与仿真结果一致。另外,本文还利用ADC通道对于转把开度的采样来确定输出占空比大小,从而达到了对无刷直流电机的调速控制。从上述结果中可以看出,利用Matlab自动生成STM32代码的方法结果可靠且实用,再次证明了将其应用于实际项目中的可行性。

4 结束语

本文详细阐述了在Matlab环境下对STM32自动生成代码的过程,并在STM32F103单片机上实现了无刷直流电机的方波控制。纵观整个过程,在算法设计过程中,可以观测算法的准确性与可行性,从而避免相关设计缺陷,而实现过程中,并不需要人工输入代码或编写底层驱动,完全由计算机自动生成,并且结果与仿真结果基本一致。相较传统方法对工程进行编写与调试,该方法实现快、错误少[15]、开发周期短、生产效率高,并且同样可以应用到无刷直流电机的简易正弦波控制、永磁同步电机FOC控制或CAN通讯等领域,为STM32的开发设计提供了参考。

[1] 王永虹,徐炜,郝立平.STM32系列ARM Cortex-M3微控制器原理与实践 [M].北京:北京航空航天大学出版社, 2008.

[2] 彭刚,秦志强.基于ARM Cortex-M3的STM32系列嵌入式微控制器应用实践[M].北京:电子工业出版社, 2010.

[3] 孙书鹰,陈志佳,寇超.新一代嵌入式微处理器STM32F103开发与应用[J].网络新媒体技术,2010,31(12):59-63.

[4] Gou Yuntao,Du Gang,Wang Ning, et al.The design and realization of a rotary inverted pendulum based on STM32[C].Shanghai:2015 International Conference on Identification, Information, and Knowledge in the Internet of Things (IIKI),IEEE Computer Society,2015.

[5] Attila.STM32F4-discovery LED blinker[M].CA,USA: Attila Conpration,2005.

[6] 余新栓. 基于Matlab的STM32软件快速开发方法[J]. 单片机与嵌入式系统应用,2011,11(10):46-48.

[7] Ropp M E,Gonzalez S.Development of a Matlab/Simulink model of a single-phase grid-connected photovoltaic system[J]. IEEE Transactions on Energy Conversion,2009,24(1):195-202.

[8] Pawel Stojaczyk,Dawid Woroch,洪波,等.基于Matlab/Simulink的PMSM磁场定向控制算法的设计与应用[J].汽车安全与节能学报, 2014(2):166-171.

[9] 廖灿灿,张树群,雷兆宜.Matlab Coder生成C代码的研究与应用[J].计算机与现代化, 2013(3):175-178.

[10] 周丹,曾宇航.Matlab/Simulink的直流电机调速系统C代码生成[J].单片机与嵌入式系统应用, 2015(10):12-15.

[11] 杨蕊,张建军,马昭,等.基于Matlab的SVPWM算法自动代码生成技术研究[J].电子器件, 2015(6):1341-1345.

[12] 张晓红,张安年,杨雷.基于DSP的方波无刷直流电动机(BLDGM)控制系统的设计[J].矿山机械, 2005(11):82-84.

[13] 靳方义,郝晓弘.无刷直流方波电机控制特性及其伺服系统控制策略[J].微特电机,1999,27(5):19-22.

[14] 刘和平,刘平,王贵.永磁无刷直流电动机换向过程分析[J].微电机, 2008, 41(10):10-13.

[15] 吴志红,孙萌,毛明平.基于Matlab/RTW的车载无刷直流电机调速系统代码自动生成[J].沈阳理工大学学报,2005, 24(4):43-45.

Embedded Coder Generation of Motor Controller Based on Matlab and STM32

XU Jie,DING Xueming

(School of Optical-Electrical and Computer Engineering, University of Shanghai for Science and Technology, Shanghai 200093, China)

Embedded coder generation based on Matlab and STM32 is combined with the BLCD control system, which makes the design and implementation of the control system more convenient and more efficient. First, a BLCD motor control system is designed and simulated by Matlab. Then, readable C code project documents are generated automatically with Simulink library STM32 MAT/Target and other software tools. Actual operation is performed on STM32F103, and the operation states agree with the simulation results. Matlab simulation offers easy designs the control system and the automatic codes generation facilitates the implementation of the control algorithm. The combination of the two speeds up the process from design to implementation with good accuracy.

STM32; Matlab; BLDC; embedded coder generation

2016- 06- 01

徐捷(1992-),男,硕士研究生。研究方向:电机控制等。丁学明(1971-),男,副教授,硕士生导师。研究方向:机控制等。

10.16180/j.cnki.issn1007-7820.2017.04.037

TN873;TM36+1

A

1007-7820(2017)04-148-04

猜你喜欢

方波直流电机控制算法
基于模糊PID的无刷直流电机速度控制系统的设计与仿真
便携式多功能频率计的设计与实现
基于模糊自适应ADRC的无刷直流电机控制技术
纺织机械手专利瞄准控制算法
测绘技术在土地资源管理中的应用
一种基于555定时器的方波产生电路设计
基于ARM+FPGA的模块化同步控制算法研究
基于FPGA的双绕组无刷直流电机软件设计
直流电机电源设计研究
一种防垢除垢的变频电磁场发生装置