19. 无刷电机SVPWM调制方法的开环控制(BLDC)

前面我们学习了无刷电机简单的6步PWM控制。但是我们在实际使用中并不是只是简单的PWM控制就能满足应用要求, 尤其是简单的PWM控制过于简单,控制的效果比较差。在控制效果上,SVPWM(空间矢量脉宽调制)调制方法的控制效果, 会明显比PWM要好上很多,其系统相对简单。而SVPWM调制方法也分为开环闭环控制。这一节课主要介绍开环。

19.1. 硬件设计

关于详细的硬件分析在直流无刷电机章节中已经讲解过,这里不再做分析, 如有不明白请参考前面章节,这里只给出接线表。

电机主控板与无刷电机驱动板连接见下表所示。

电机与无刷电机驱动板连接

电机

无刷电机驱动板

粗黄

U

粗绿

V

粗蓝

W

细红

+(编码器电源)

细黑

-(编码器电源)

细黄

HIU

细绿

HIV

细蓝

HIW

无刷电机驱动板与主控板连接见下表所示。

无刷电机驱动板与主控板连接

无刷电机驱动板

主控板

5V_IN

5V

GND

GND

U+

PA8

U-

PB13

V+

PA9

V-

PB14

W+

PA10

W-

PB15

HU

PC6

HV

PC7

HW

PC8

SD

PPG12

推荐使用配套的牛角排线直接连接驱动板和主控板。连接开发板的那端,请连接在“无刷电机驱动接口1”上。

19.2. 无刷电机SVPWM调制方法的开环控制实现

19.2.1. 软件设计1

在本次实验中,需要准备的软件有:STM32CUBEMX,KEIL、VOFA+。

这里只讲解核心的部分代码,有些变量的设置,头文件的包含等并没有涉及到, 还有一些在前章节章节分析过的代码在这里也不在重复讲解,完整的代码请参考本章配套的工程。

19.2.1.1. 编程要点1

  1. STM32CUBEMX的配置

  2. ADC的相关配置

  3. 定时器输出比较结构体TIM_OC_InitTypeDef配置

  4. 开环FOC的算法流程

  5. 实验现象

19.2.2. (1) STM32CUBEMX的配置

在本次实验中,我们需要重点关注的是定时器PWM输出的配置、ADC采样的配置, 其他关于串口的配置在之前的章节有讲过,这里就不在重复讲解。

首先来看定时器PWM输出的配置,在开发板上,实验使用的是无刷电机驱动接口1, 其中需要使用的是定时器1,需要去配置三路互补PWM波。

三路互补PWM波

接下来设置频率为15K的PWM波。因此满占空比计数是5600。 设置死区时间100ns,关于死区时间的计算,请参考前面的内容。

占空比计数

接下来是三路PWM设置,三路都是一样的参数。

三路PWM设置

在系统运行时,还需要一个定时器,去定时的做角度变换和算法计算, 这里使能一个定时器,让其每1ms中断一次,在中断函数中去做算法控制。

定时器6设置

下面还需要去配置ADC,当电机在运行时,需要去实时的采集电流信息, 然后通过串口发送到上位机VOFT+,并在VOFT+中画出电流曲线。 在这里需要去配置三路的ADC采集,分别是PA3、PA4以及PA6。 在本次例程中,是由定时器1的第四通道,去触发ADC的采集。 下面是ADC的配置:

ADC配置

在骄阳开发板上,无刷接口存在一个使能引脚,需要去将它置为高电平, 电机才能去运行,所以还需要去将它初始化。这里直接将他初始化为高电平。

使能引脚初始化

到这一步,STM32CUBEMX的配置的硬件配置就已经完成了, 下面去生成代码,然后去编写相关的软件算法。

19.2.3. (2) ADC的相关配置

在本次实验中,需要使用三个ADC通道去输出三相电流的波形, 这里使用ADC注入转换模式,通过定时器1的4通道,去触发ADC 的采样,可以保证ADC采样都是在控制波形的同一个时间点去采集。 采集完成后,在触发中断去对数据进行处理,就可以得到真实的三相电流。

下面是相关的软件配置:

ADC初始化以及开始采集:

ADC初始化

ADC中断数据处理:

ADC数据处理

数据处理成真实电流的过程,在上面的章节中已经讲解过,这里就不在重复讲解。

19.2.4. (3) 定时器时基结构体TIM_HandleTypeDef配置

在本次实验中,使用了两组定时器,分别是定时器1,定时器6, 定时器1功能主要是使用了3组互补输出通道,去输出电机的控制信号, 通道4则是用来去触发ADC的采样。

下面来看一下定时器1的初始化:

TIM初始化

在这里将定时器1的PWM通道输出都打开,并初始化通道4的比较值。

19.2.5. (4) 开环FOC的算法流程

在开环FOC控制思路中,一共有两种方案,第一是使用编码器去获取转子的位置, 第二是用定时器自增的模式来模拟转子角度自增。在本次实验中,采用的是第二种方案。 用定时器自增的模式来模拟转子角度自增。

下面来看一下控制的大概流程:

FOC控制流程

在本次实验中,使用定时器6去做角度的自增,然后通过Park逆变换去得到Uα、Uβ, 在经过SVPWM算法后,就可以得到定时器1的比较值,从而去控制电机的转动。

下面是详细的代码:

定时器6的中断函数:

定时器6中断

Park逆变换:

Park逆变换

SVPWM算法:

svpwm

主函数:

主函数

在本次实验中,将代码烧入开发板后,电机会直接开始运行,同时会输出三相电流数据。

19.2.6. 实验现象

将开发板和电机接入电源后,将程序烧入开发板中, 烧录成功后,电机会开始转动。同时打开VOFT+软件, 打开开发板的串口,使用tab控件去显示开发板发送的 三相电流的波形,如下图所示:

三相电流波形