大家好、我们将设计24KW 6开关双向 PFC、以便在 TIDA-01606参考设计中有 一个 SVPWM 函数、即 TINV_updateSVPWM (TINV_Vinv_dq0.a、 TINV_Vinv_dq0.b、TINV_Vinv_dq0.c);
我想在 lab7的参考设计中使用此函数、您能不能帮助我们如何将 SVPWM 函数用于6开关 PFC。
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.
大家好、我们将设计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参考设计中、我看到了以下内容:
有关实验7设计的注释:
根据对代码的描述和比较、我想向您询问接下来的问题、这样我就可以正确地回答以下问题:
非常感谢您的关注
此致
Riccardo
您好、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。
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);
因为每个占空比必须是差值