Thread 中讨论的其他器件:TIDM-1000、
工具与软件:
大家好、团队成员:
我已经介绍了单向 Vienna 整流器的控制和固件部分。 我无法理解 PWM 调制器的实施。 它是 SVPWM、迟滞还是任何其他基于高级载波的调制? 我已经看完了设计指南和所有东西、但是没有用。 如果对 PWM 调制器的实施进行了说明、将会非常有帮助。
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.
工具与软件:
大家好、团队成员:
我已经介绍了单向 Vienna 整流器的控制和固件部分。 我无法理解 PWM 调制器的实施。 它是 SVPWM、迟滞还是任何其他基于高级载波的调制? 我已经看完了设计指南和所有东西、但是没有用。 如果对 PWM 调制器的实施进行了说明、将会非常有帮助。
Ricardo、您好!
非常感谢您的答复。 我真的很抱歉标题中的混乱。 我引用的代码是 TIDM1000。 我了解了 T 型中的 DQ 控制实现。 但是、我遇到的问题在函数"TINV_HAL_updatePWMDuty ()"中。 如果有人解释此功能、这将对我非常有帮助。 我无法遵循此特定功能中涉及的流程。
为方便起见、我已添加了代码片段。
static inline void TINV_HAL_updatePWMDuty(float32_t dutyA,
float32_t dutyB,
float32_t dutyC)
{
uint32_t dutyA_ticks, dutyB_ticks, dutyC_ticks;
dutyA_ticks = (uint32_t)((float32_t)(TINV_PWM_PERIOD_TICKS / 2.0)
* fabsf(dutyA));
dutyB_ticks = (uint32_t)((float32_t)(TINV_PWM_PERIOD_TICKS / 2.0)
* fabsf(dutyB));
dutyC_ticks = (uint32_t)((float32_t)(TINV_PWM_PERIOD_TICKS / 2.0)
* fabsf(dutyC));
//
// Set PWM outputs
//
if(dutyA > 0.0f)
{
TINV_HAL_AQ_SW_FORCE_PWMXA_LOW_PWMxB_HIGH(TINV_Q2_Q4_A_PWM_BASE);
TINV_HAL_AQ_SW_FORCE_PWMXA_DISABLE_PWMxB_DISABLE(TINV_Q1_Q3_A_PWM_BASE);
}
else
{
TINV_HAL_AQ_SW_FORCE_PWMXA_LOW_PWMxB_HIGH(TINV_Q1_Q3_A_PWM_BASE);
TINV_HAL_AQ_SW_FORCE_PWMXA_DISABLE_PWMxB_DISABLE(TINV_Q2_Q4_A_PWM_BASE);
}
if(dutyB > 0.0f)
{
TINV_HAL_AQ_SW_FORCE_PWMXA_LOW_PWMxB_HIGH(TINV_Q2_Q4_B_PWM_BASE);
TINV_HAL_AQ_SW_FORCE_PWMXA_DISABLE_PWMxB_DISABLE(TINV_Q1_Q3_B_PWM_BASE);
}
else
{
TINV_HAL_AQ_SW_FORCE_PWMXA_LOW_PWMxB_HIGH(TINV_Q1_Q3_B_PWM_BASE);
TINV_HAL_AQ_SW_FORCE_PWMXA_DISABLE_PWMxB_DISABLE(TINV_Q2_Q4_B_PWM_BASE);
}
if(dutyC > 0.0f)
{
TINV_HAL_AQ_SW_FORCE_PWMXA_LOW_PWMxB_HIGH(TINV_Q2_Q4_C_PWM_BASE);
TINV_HAL_AQ_SW_FORCE_PWMXA_DISABLE_PWMxB_DISABLE(TINV_Q1_Q3_C_PWM_BASE);
}
else
{
TINV_HAL_AQ_SW_FORCE_PWMXA_LOW_PWMxB_HIGH(TINV_Q1_Q3_C_PWM_BASE);
TINV_HAL_AQ_SW_FORCE_PWMXA_DISABLE_PWMxB_DISABLE(TINV_Q2_Q4_C_PWM_BASE);
}
EPWM_setCounterCompareValue(TINV_Q1_Q3_A_PWM_BASE,
EPWM_COUNTER_COMPARE_A,
dutyA_ticks);
EPWM_setCounterCompareValue(TINV_Q2_Q4_A_PWM_BASE,
EPWM_COUNTER_COMPARE_A,
dutyA_ticks);
EPWM_setCounterCompareValue(TINV_Q1_Q3_B_PWM_BASE,
EPWM_COUNTER_COMPARE_A,
dutyB_ticks);
EPWM_setCounterCompareValue(TINV_Q2_Q4_B_PWM_BASE,
EPWM_COUNTER_COMPARE_A,
dutyB_ticks);
EPWM_setCounterCompareValue(TINV_Q1_Q3_C_PWM_BASE,
EPWM_COUNTER_COMPARE_A,
dutyC_ticks);
EPWM_setCounterCompareValue(TINV_Q2_Q4_C_PWM_BASE,
EPWM_COUNTER_COMPARE_A,
dutyC_ticks);
}
此致
Sayandev
尊敬的 Riccardo:
我已尝试了解函数'TINV_HAL_updatePWMDuty()'。 我现在了解了 TIDA-01606的第2.3.1.1节架构概述。
如果我没有错、那么基本操作涉及2组切换:
1. 两个电流方向的 DC+到 N 和 N 到 DC+都有一组开关。
2.两个电流方向的 N 到直流和直流到 N 之间有另一组开关。
但我有一个疑问-在代码中,它可以看到,对于 da>0 MOSFET Q4永久打开,Q1和 Q3被赋予 PWM 信号。 但这可能会导致对 Q3和 Q4的高压开关要求。
在本例中、TIDA 01606文档第18页中提到的优势将为空。
"这种调制方案的另一个好处是 Q3和 Q4绝不会同时开关。 这一优势可降低器件上的电压应力以及偏置电源的额定功率、从而有效驱动这些器件"
感谢 Riccardo 纠正我!
但是、我还想问您一件事。 您说过他们实现了 SVPWM。 但我没有看到任何停留时间计算或扇区计算。 我观察到的是、从 DQ 控制中以 PU 计算得出的 va、vb、vc 被视为占空比、然后转换为 Duty.tick、用于馈入 ePWM 外设的 CMPA。 它与 SPWM 是否相似? 唯一的区别是、它采用了两种基于正占空比和负占空比的不同开关方案。