为什么要使用SVPWM来控制电机呢?有霍尔传感器SVPWM学习总结
2024-08-09 来源:elecfans
SVPWM:空间矢量脉冲宽度调制
为什么要使用SVPWM来控制电机呢?传统的六拍换相控制方式使逆变器的输出呈方波变化,该种控制方式在电机空间形成的旋转磁场为一个正六边形,与我们期望的理想的圆形旋转磁场并不相符,可见六拍换相控制的方式并不是最理想的控制方式,因此本着我们期望的获得圆形旋转磁场的目标,在人们的探索下,SVPWM控制方式就得以实现了。
SVPWM的控制方式就是通过交替使用不同的电压空间矢量来得到一个更趋近于圆形磁场的一个磁链轨迹。
这里需要明确,为什么通过使用不用的电压空间矢量就可以得到圆形磁链轨迹呢?下面我们就来推导下具体过程:
图一:定子电压空间矢量表示
而我们知道,当电机用三相平衡的正弦电压供电时,电机的定子磁链的幅值不变,其合成的空间矢量以恒速旋转,其矢量的顶端的运动轨迹呈圆形,也就是常说的磁链圆,所以磁链旋转矢量就可表示如下:
上式表明,当磁链的幅值一定时,合成的空间电压矢量的大小与磁链的旋转角速度(或电机供电电压的频率)成正比,其方向与磁链轨迹正交,所以我们可以用下图表示上式:
图二:合成磁链矢量与合成空间电压矢量的关系
接下来讲解模拟正弦波的PWM的产生方法:
因为我们所用的电机不是交流电机,而是直流电机,所以我们在电机的三相供电端不可能供交流正弦电压,所以我们只能去模拟正弦电压的规律,在三相供电端通与正弦电压规律一样的PWM,这样也能达到我们最初的产生趋于圆形的旋转磁场。那么我们要模拟这种规律,就不能像六步换相那种两个管子导通了(两相通电),而是要三个管子导通(三相都通电),这样才能满足类似交流电机供正弦电的规律。所以下面我们就来推导下怎么利用PWM去模拟正弦波。
图三:MOSFET逆变电路
图四:电压空间矢量表示
为了方便分析,我们把六个电压空间矢量所表示的一个电周期划分为六个区域,称其为扇区,每个扇区对应的时间均是60°的时间。扇区划分如下图所示:
图五:扇区划分图
对于六拍换相的逆变器来说,每个电周期内,六种有效的电压状态各出现一次,每隔60°就换一个状态(也就是我们说的换相),在这60°的时间里,该种状态不会发生改变,直到60°时间到,然后切换为下一个状态,也就对应着电压矢量状态的切换,在切换过程中,电压矢量的幅值不变,而相位每次变化60°直到一个电周期的结束。
当电压矢量走过一个电周期时(360°),就形成了一个封闭的正六边形,如下图所示:
图六:空间电压矢量供电时围成的图
所以我们就可得出,如果我们想得到趋近于圆形的旋转磁场的话,就必须在一个扇区内出现多种电压矢量状态,这样可以将正六边形的每一条边再细分,形成相位不同的电压空间矢量。
假定我们把正六边形的每一条边再细分四次,也即是再合成四个相位不同的电压空间矢量,这四个相位不同的电压空间矢量可以利用已有的电压空间矢量进行线性组合得到,示意图如下所示:
图八:趋于圆形的磁链增量轨迹
图九:电压空间矢量的线性组合
但是在实际系统中,应该尽量减少开关状态变化时引起的开关损耗,因此不同开关状态的顺序必须遵守下述原则: 任意一次电压矢量的变化只能有一个桥臂的开关动作,表现在二进制矢量表示中只有一位变化 ,以 满足最小开关损耗 。
这是因为如果允许有两个或三个桥臂同时动作,则在线电压的半周期内会出现反极性的电压脉冲,产生反向转矩,引起转矩脉动和电磁噪声。
所以上面的顺序是不对的,我们应该将其调整为71288217,也即是000,100,110,111,111,110,100,000,这样就能满足 最小开关损耗原则了 。
这样我们就可以得到各个扇区对应的PWM波,如下图所示:
图十:各扇区对应的PWM
这样我们就能在电机三相端模拟出一个正弦波了。
基于STMF051实现SVPWM算法学习总结:
上面我们推导了SVPWM的原理,下面我们就来看怎么把上面的推导用程序实现的,我们知道实现SVPWM算法重要的是合成的空间电压矢量所在扇区的判断和用来合成空间电压矢量的相邻两个基本电压矢量线性组合的时间的计算,扇区判断是根据霍尔值来判断的,程序实现如下:
得到了合成的空间电压矢量所处的扇区后,我们可以根据扇区号找到对应的扇区起始角(这里的角为电角度)
得到了扇区对应的电角度后,我们再去计算基本空间电压矢量线性组合的时间,然后给到PWM值,输出正弦波,时间计算被封装成了一个函数,这个函数的实现过程,就跟我们推导的结果是一致的,只不过这里需要说明一点,该函数是用一个扇区推广到多个扇区,实现我们所需的功能。
首先定义了各个扇区的起始电角度值,调制比限制值,和正弦表,其中电角度值就是把16位无符号整型65536六等分了,调制比就是我们上文推导过的M,这里是让M不能大于1,防止过调现象,正弦表给出了0-60度的Q15格式的值,这里为什么只用0-60呢,是因为,该该函数是用不同扇区计算时间,而每个扇区结果都是一样的,所以我们只需根据判断好所处的扇区后,根据第一个扇区的方法计算出时间就行了。
我们以第一扇区时间计算为例,首先是查表,因为我们的电角度是0-65536对应的值,我们需要转换到0-1024,所以这里除了64,就转换过来了,volts的作用是调速的,程序里先把它转换到PWM周期,右移15位的作用是两个Q15相乘后变成了Q30,这里需要再转换到Q15格式,所以需要右移15位,然后计算t就结束了。整个SVPWM的算法就结束了。
下面给出程序的流程:
这个是主定时中断,用来计算转速、电角度增量。
这个是霍尔捕获中断,用来获取霍尔值及找到对应的扇区和初始电角度和计算捕获周期。
这里根据PWM中断用来产生正弦波。