This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TIDA-01606:如何将 SVPWM 用于6开关 PFC

Guru**** 2535750 points
Other Parts Discussed in Thread: TIDA-01606

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/simulation-hardware-system-design-tools-group/sim-hw-system-design/f/simulation-hardware-system-design-tools-forum/1038388/tida-01606-how-to-use-svpwm-for-6-switch-pfc

器件型号:TIDA-01606

大家好、我们将设计24KW 6开关双向 PFC、以便在 TIDA-01606参考设计中有 一个 SVPWM 函数、即 TINV_updateSVPWM (TINV_Vinv_dq0.a、 TINV_Vinv_dq0.b、TINV_Vinv_dq0.c)

我想在 lab7的参考设计中使用此函数、您能不能帮助我们如何将 SVPWM 函数用于6开关 PFC。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sadik:

    函数 TINV_updateSVPWM 是执行以下操作的函数:

    • 采用指数调制
    • 查找最大值和最小值
    • 计算三次谐波注入值
    • 将第三谐波注入值添加到所有现有调制指数中
    • 索引调制按占空比进行缩放
    • 更新寄存器以提供正确的占空比。

    在现有的实验7参考设计中、我看到了以下内容:

    • 计算 D 和 Q 环路的 PI 控制。
    • 从控制环路获取标么值 VD 和 VQ 值
    • 应用旋转和 α β 变换。 您会为该行的每个分支获取三个值。 在中、是写入占空比、但可以将其视为索引调制。  
    • 索引调制在占空比值中进行适当缩放并更新寄存器。

    有关实验7设计的注释:

    根据对代码的描述和比较、我想向您询问接下来的问题、这样我就可以正确地回答以下问题:

    • 您希望在代码中具有第三谐波功能吗?
    • 对您来说、指数和占空比对流是个问题吗?
    • 是否有任何不清楚的地方、以哪种方式更新这两个函数的寄存器?
    • 您的拓扑是标准的2级六开关 PFC 吗?

    非常感谢您的关注

    此致

    Riccardo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    拓扑是标准的2级六开关 PFC、如图所示。

    我希望在代码中具有用于6开关 PFC 的第三谐波特性。

    指数调制与三谐波之间的平均差值是多少,我是否可以对24KW PFC 使用指数调制,这对于这种高功率应用更好。

    μ ıt 不清楚如何将  TINV_updateSVPWM 函数应用于2级6开关 PFC。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sadik、

    第三谐波注入功能允许您通过使用相同的直流总线电压来实现更高的可控范围。

    当使用此方法时、有三个重要特性:

    • 控制环路具有更多的可控范围;
    • 当直流总线电压设置为较低值时、您的工作线性度更高;
    • 在没有此功能的情况下、直流总线电压可以进一步降低。

    总之、通过采用三谐波注入、您通常只需在系统中添加优势、因此我建议使用此功能。  

    与您的应用相关、我认为最好在计算占空比时使用函数 TINV_updateSVPWM 的一部分。 我的意思是:

    • 采用指数调制
    • 查找最大值和最小值
    • 计算三次谐波注入值
    • 将第三谐波注入值添加到所有现有调制指数中

    在获得这些占空比后、您应该重新调整比例、以实现0和1之间的标么值、并使用正确的值更新适当的寄存器。

    我希望我已完全回答了你的问题。

    此致

    Riccardo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    静态内联 void TINV_updateSVPWM (float32_t ma、
    float32_t MB、
    float32_t mc)

    float32_t mx;
    float32_t mn;
    float32_t md;
    float32_t mcm;

    float32_t D11;
    float32_t D14;
    float32_t D21;
    float32_t d24;
    float32_t d31;
    float32_t D34;

    //
    //在3中找到最大值
    //
    IF (((ma > MB)&&(ma > MC))

    Mx = ma;

    否则(MB > MC)

    MX = MB;

    其他

    Mx = mc;

    //
    //在3中查找最小值
    //
    IF (((ma < MB)&&(ma < MC))

    Mn = ma;

    否则(MB < MC)

    Mn = MB;

    其他

    Mn = MC;

    //
    //计算中间值
    //
    md =-(mx + mn);

    //
    //确定分部门和分部门
    //
    IF (mx - mn <= 0.5f)

    //
    //子部门= 1;
    //
    如果(MD > 0)

    //
    //界别分组1b
    //
    MCM = mx * 0.5f;

    其他

    //
    //界别分组1a
    //
    MCM = mn * 0.5f;


    否则(((mx - md <= 0.5f)&&(md - mn <= 0.5f))

    //
    //子部门= 2;
    //
    如果(MD > 0)

    //
    //界别分组2b
    //
    MCM =(mn + 0.5f)* 0.5f;

    其他

    //
    //界别分组2a
    //
    MCM =(mx - 0.5f)* 0.5f;


    其他

    //
    //界别分组3和4
    //
    MCM = MD * 0.5f;

    TINV_Duty_A_PU =(ma + mcm);
    TINV_Duty_B_pu =(ma + mcm);
    TINV_Duty_C_PU =(ma + mcm);
    TINV_mcm = mcm;
    //
    //分配占空比
    //
    如果(ma + mcm > 0)

    D11 =(ma + mcm);
    D14 = 0;

    其他

    D11 = 0;
    D14 =-(ma + mcm);

    如果(MB + mcm > 0)

    D21 =(MB + mcm);
    D24 = 0;

    其他

    D21 = 0;
    D24 =-(MB + mcm);

    如果(MC + mcm > 0)

    D31 =(MC + mcm);
    D34 = 0;

    其他

    D31 = 0;
    D34 =-(MC + mcm);

    ePWM_setCounterCompareValue (TINV_Q1_Q3_A_PWM_base、
    ePWM_COUNTER_COMPARE_A、
    (uint32_t)((float32_t)(TINV_PWM_PERIOD_TICKs / 2.0)* fabsf (D11)));

    ePWM_setCounterCompareValue (TINV_Q2_Q4_A_PWM_base、
    ePWM_COUNTER_COMPARE_A、
    (uint32_t)((float32_t)(TINV_PWM_PERIOD_TICKs / 2.0)* fabsf (D14)));

    ePWM_setCounterCompareValue (TINV_Q1_Q3_B_PWM_base、
    ePWM_COUNTER_COMPARE_A、
    (uint32_t)((float32_t)(TINV_PWM_PERIOD_TICKs / 2.0)* fabsf (D21)));
    ePWM_setCounterCompareValue (TINV_Q2_Q4_B_PWM_base、
    ePWM_COUNTER_COMPARE_A、
    (uint32_t)((float32_t)(TINV_PWM_PERIOD_TICKs / 2.0)* fabsf (d24)));

    ePWM_setCounterCompareValue (TINV_Q1_Q3_C_PWM_base、
    ePWM_COUNTER_COMPARE_A、
    (uint32_t)((float32_t)(TINV_PWM_PERIOD_TICKs / 2.0)* fabsf (d31)));
    ePWM_setCounterCompareValue (TINV_Q2_Q4_C_PWM_base、
    ePWM_COUNTER_COMPARE_A、
    (uint32_t)((float32_t)(TINV_PWM_PERIOD_TICKs / 2.0)* fabsf (D34)));

    对于6开关 PFC、我只需要3个占空比值、但在函数中有6个差分值。如何为 SVPWM 找到 Duty_A、Duty_B、Duty_C。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sadik、

    转换器必须应用的索引调制是序列:

    TINV_Duty_A_PU =(ma + mcm);
    TINV_Duty_B_pu =(ma + mcm);
    TINV_Duty_C_PU =(ma + mcm);

    此致

    Riccardo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Hı μ A、

    TINV_Duty_A_PU =(ma + mcm);
    TINV_Duty_B_pu =(MB + mcm);
    TINV_Duty_C_PU =(MC + mcm);

    是这个 currect 或

    TINV_Duty_A_PU =(ma + mcm);
    TINV_Duty_B_pu =(ma + mcm);
    TINV_Duty_C_PU =(ma + mcm);

    因为每个占空比必须是差值

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sadik、

    你是对的。
    此致

    Riccardo