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¶
STM32CUBEMX的配置
ADC的相关配置
定时器输出比较结构体TIM_OC_InitTypeDef配置
开环FOC的算法流程
实验现象
19.2.2. (1) STM32CUBEMX的配置¶
在本次实验中,我们需要重点关注的是定时器PWM输出的配置、ADC采样的配置, 其他关于串口的配置在之前的章节有讲过,这里就不在重复讲解。
首先来看定时器PWM输出的配置,在开发板上,实验使用的是无刷电机驱动接口1, 其中需要使用的是定时器1,需要去配置三路互补PWM波。

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

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

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

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

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

到这一步,STM32CUBEMX的配置的硬件配置就已经完成了, 下面去生成代码,然后去编写相关的软件算法。
19.2.3. (2) ADC的相关配置¶
在本次实验中,需要使用三个ADC通道去输出三相电流的波形, 这里使用ADC注入转换模式,通过定时器1的4通道,去触发ADC 的采样,可以保证ADC采样都是在控制波形的同一个时间点去采集。 采集完成后,在触发中断去对数据进行处理,就可以得到真实的三相电流。
下面是相关的软件配置:
ADC初始化以及开始采集:

ADC中断数据处理:

数据处理成真实电流的过程,在上面的章节中已经讲解过,这里就不在重复讲解。
19.2.4. (3) 定时器时基结构体TIM_HandleTypeDef配置¶
在本次实验中,使用了两组定时器,分别是定时器1,定时器6, 定时器1功能主要是使用了3组互补输出通道,去输出电机的控制信号, 通道4则是用来去触发ADC的采样。
下面来看一下定时器1的初始化:

在这里将定时器1的PWM通道输出都打开,并初始化通道4的比较值。
19.2.5. (4) 开环FOC的算法流程¶
在开环FOC控制思路中,一共有两种方案,第一是使用编码器去获取转子的位置, 第二是用定时器自增的模式来模拟转子角度自增。在本次实验中,采用的是第二种方案。 用定时器自增的模式来模拟转子角度自增。
下面来看一下控制的大概流程:

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

Park逆变换:

SVPWM算法:

主函数:

在本次实验中,将代码烧入开发板后,电机会直接开始运行,同时会输出三相电流数据。
19.2.6. 实验现象¶
将开发板和电机接入电源后,将程序烧入开发板中, 烧录成功后,电机会开始转动。同时打开VOFT+软件, 打开开发板的串口,使用tab控件去显示开发板发送的 三相电流的波形,如下图所示:
