foc矢量控制算法

一、 逆变器输出范围

根据逆变电桥6个开关管状态可以定义如下图8组矢量。
在这里插入图片描述
其中1表示上桥开下桥关,0表示下桥开上桥关。
八组矢量分别用V0(000),V1(001),V2(010),V3(011),V4(100),V5(101),V6(110),V7(111)表示。其中V0(000)表示三相同时接负母线,V7(111)表示三相同时接正母线。V0和V7也称为零矢量。
电机任意一相到电机中性点之间电压范围为-2/3Udc~2/3Udc,所以使用8个矢量相互组合,可以得到逆变器输出电压范围如图:

在这里插入图片描述

二、扇区确定

令α轴与V4重合,β超前α轴90度,确定αβ坐标系。

Va = Vbelta;
Vb = 1/2 * (sqrt(3)*Valpha - Vbelta);
Vc = 1/2 * (-sqrt(3) * Valpha - Vbelta);

   
  • 1
  • 2
  • 3

扇区计算可以看作比较大小的过程,判断β是否大于0,确定扇区在V3,V4矢量连成的直线的上方还是下方,sqrt(3)/2α 与β/2比较大小,确定扇区在V1,V6所连成直线的左边还是右边,-sqrt(3)/2α 与β/2比较大小,确定扇区在V2,V5连成直线的左边还是右边。
用Va,Vb,Vc的符号位表示比较的结果。可以给六个扇区分配扇区号如下:

sector = sign(Va) + 2*sign(Vb)+ 4*sign(Vc);

   
  • 1

在这里插入图片描述
也可以按其他规则分配扇区号。

三、Vn作用时间

确定参考矢量的扇区之后,使用参考矢量所在扇区相邻的Vn按某个系数叠加即可得到该矢量,以扇区3为例,对于任意Vref,都可以使用T6/T·V6和T4/T·V4合成。

在这里插入图片描述
如图:有
Vβ= T6/T |V6|·sqrt(3)/2
Vα = T4/T |V4| + Vβ/sqrt(3)

其中|Vn| = 2/3Udc
可得:
T6 = sqrt(3)·VβT/Udc
T4 = 1/2(3Vα – sqrt(3) · Vβ)·T/Udc

参考矢量在其他扇区时,系数Tn也可以由3Vα 以及 sqrt(3) ·Vβ组合得到。
为简化运算,预先对Tn进行计算
令:

Vdc = 1;
x = sqrt(3) * Vbelta;
y = sqrt(3)/2 * Vbelta + 3/2 * Valpha;
z = sqrt(3)/2 * Vbelta - 3/2 * Valpha;

   
  • 1
  • 2
  • 3
  • 4

无论任何扇区,Tn都可以使用xyz表示
设t1,t2分别为各扇区合成参考矢量所需相邻矢量的系数
t1,t2和xyz有如下关系

switch sector
    case 1 
        t1 = z;
        t2 = y;
    case 2
        t1 = y;
        t2 = -x;
    case 3
        t1 = -z;
        t2 = x;
    case 4
        t1 = -x;
        t2 = z;
    case 5
        t1 = x;
        t2 = -y;
    case 6
        t1 = -y;
        t2 = -z;
end

   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

到此,已经实现参考矢量的合成,但是实际逆变器只在相位差120度的两个方向有输出能力,也就是说逆变器的三个桥臂对应6个有效矢量中的三个,另外三个矢量,需要两个相邻桥臂合成。
把t1,t2映射到三个桥臂:

ta = (1 - t1 - t2) / 2;
tb = ta + t1;
tc = tb + t2;
则
switch sector
    case 1 
        phaseU = tb;
        phaseV = ta;
        phaseW = tc;
    case 2
        phaseU = ta;
        phaseV = tc;
        phaseW = tb;
    case 3
        phaseU = ta;
        phaseV = tb;
        phaseW = tc;
    case 4
        phaseU = tc;
        phaseV = tb;
        phaseW = ta;
    case 5
        phaseU = tc;
        phaseV = ta;
        phaseW = tb;
    case 6
        phaseU = tb;
        phaseV = tc;
        phaseW = ta;
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

phaseU,phaseV,phaseW可以定义为任意三个相位差120度的有效向量
到此,三相电桥占空比得出。

四、模块分析

为保证输出电压不失真,要保证合成矢量在该正六边形内接圆内。
在这里插入图片描述
此时,要求
α2 + β2 <= 1/3Vdc2,

|Vref| <= sqrt(3)/3·Vdc
参考矢量幅值不超过0.577倍Vdc
所以逆变器最大输出不失真相电压峰值为
sqrt(3)/3 · Vdc
逆变器最大输出线电压峰值为Vdc母线电压利用率为100%

五、波形记录

输入d轴电压0,q轴电压0.57,频率50hz,经ipark变换后将uα,uβ送入svpwm调制模块,得到波形如下:
在这里插入图片描述
可以看到三相调制波均为漂亮的马鞍波,波峰接近1,波谷接近0,已经接近逆变器不失真输出的极限。
此时的线电压波形如下:
在这里插入图片描述
可以看到,线电压波形为50hz的正弦波,输入参考电压为母线电压的0.57倍时,输出线电压峰值为接近1,svpwm调制能够实现母线电压利用率100%.

使用fpga实现svpwm调制,经pwm输出后滤波,实测输入q轴电压0.56倍电源电压时,输出如下。
在这里插入图片描述
上图母线电压为5V

输入参考电压幅值0.2,频率50hz,记录仿真相电压与线电压结果如下:
在这里插入图片描述

如果内容对各位看官有一定帮助,作者感到十分荣幸,在此也希望得到您的鼓励,请别忘了点个赞哦~

### FOC矢量闭环算法的实现与原理 #### 背景介绍 FOC(Field-Oriented Control,磁场定向控制)是一种用于永磁同步电机(PMSM)和其他交流电机高效控制的技术。其核心思想是通过解耦电机的励磁电流和转矩电流来分别独立调节它们,从而提高系统的动态性能和稳态精度。 #### 数学模型基础 在FOC控制系统中,通常采用dq坐标系下的数学模型表示电机的状态方程。该模型将三相静止坐标系中的变量转化为旋转坐标系下更易处理的形式: \[ v_d = R_s i_d - \omega L_q i_q \\ v_q = R_s i_q + \omega (\psi_f + (L_d - L_q)i_d) \] 其中 \( v_d, v_q \) 是d轴和q轴上的电压分量;\( i_d, i_q \) 是对应的电流分量;\( R_s \) 表示绕组电阻;\( L_d, L_q \) 分别代表直轴电感和交轴电感;\( \omega \) 是机械角速度;\( \psi_f \) 是永磁体产生的磁链[^1]。 #### 控制器设计 为了实现精确的速度和位置跟踪,在FOC系统中常引入PI控制器作为内环和外环的核心组件之一。具体来说,速度误差被送入外部速度环路生成期望电磁转矩指令信号T*ref,进而映射到所需的定子电流参考值iq_ref。与此同时,设定id_ref一般固定为零或者负数以优化效率并减小铜损影响[^2]。 对于实际应用而言,由于硬件限制以及软件计算延迟等因素的存在,往往还需要考虑诸如死区效应补偿等问题。这可以通过调整PWM脉冲宽度等方式加以解决,确保最终输出更加接近理想情况下的波形表现[^3]。 #### SVPWM调制技术简介 空间矢量脉宽调制(Space Vector Pulse Width Modulation,SVPWM),作为一种先进的逆变器驱动策略,在FOC架构里扮演着重要角色。它能够有效提升直流母线利用率的同时降低总谐波失真率(THD)[^1]。按照特定规则选取基本电压向量组合形成近似圆形轨迹的空间矢量序列,使得合成电动势逼近正弦形式的理想状态。 以下是Python伪代码展示如何利用SVPWM方法生成相应的占空比参数: ```python def svpwm(voltage_vector_magnitude, angle): T_sampling = 1e-6 # Sampling period Vdc = voltage_dc_level() # Function returning DC link voltage level. Va_star = ... # Calculate from magnitude & angle inputs. Vb_star = ... Vc_star = ... alpha_beta_transform_matrix = [[1,-0.5,-0.5], [0,sqrt(3)/2,-sqrt(3)/2]] ab_voltage_components = np.dot(alpha_beta_transform_matrix,[Va_star,Vb_star,Vc_star]) duty_cycle_a,b,c = calculate_sector_and_time_ratios(ab_voltage_components,T_sampling,Vdc) return duty_cycle_a,duty_cycle_b,duty_cycle_c ``` #### 总结说明 综上所述,FOC矢量闭环算法不仅涉及复杂的理论推导过程而且需要精心调试各个部分才能获得满意的整体效果。从建立合适的电机物理特性描述出发,经过合理安排各个环节直至最后完成高质量的实际产品开发周期较长但意义非凡。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值