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.

[参考译文] TMS320F280049C:半桥逆变器的 PWM 生成

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1256678/tms320f280049c-pwm-generation-for-half-bridge-inverter

器件型号:TMS320F280049C
主题中讨论的其他器件:C2000WAREISO5451

您好!
在 F280049上使用 ePWM 模块的半桥逆变器正弦输出电压存在失真问题。
此设计通过 ePWM2A 和 ePWM2B 输出的互补输出生成正弦 PWM。 以下是与代码相关的片段:
/*------------------------------------------------------------------------------------------------------------------------------------------ */
/*--PWM 初始化--*/
EALLOW;


//时基子模块寄存器
ePWM_setPeriodLoadMode (base、ePWM_Period_shadow_load);
EPWM_setTimeBaseCounterMode (base、EPWM_COUNTER_MODE_UP_DOWN);

EPWM_disablePhaseShiftLoad (base);

ePWM_setClockPrescaler (base、ePWM_CLOCK_DIVIDER_1、ePWM_HSCLOCK_DIVIDER_1);
ePWM_setTimeBasePeriod (base、PWM_PERIOD_TICK);//设置 PWM 周期
EPWM_setTimeBaseCounter (base、0);
EPWM_setPhaseShift (base、0);


//计数器比较子模块寄存器
EPWM_setCounterCompareValue (base、EPWM_COUNTER_COMPARE_A、0);
EPWM_setCounterCompareValue (base、EPWM_COUNTER_Compare_B、0);
EPWM_setCounterCompareShadowLoadMode (base、EPWM_COUNTER_COMPARE_A、EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareShadowLoadMode (base、EPWM_COUNTER_COMPARE_B、EPWM_COMP_LOAD_ON_CNTR_ZERO);

//设置为立即模式
EPWM_disableCounterCompareShadowLoadMode (base、EPWM_COUNTER_COMPARE_A);
EPWM_disableCounterCompareShadowLoadMode (base、EPWM_COUNTER_COMPARE_B);


//动作限定器子模块寄存器

//要开始,请不要将 PWM 配置为执行任何操作
HWREGH (base + ePWM_O_AQCTLA)=0;
HWREGH (base + ePWM_O_AQCTLB)=0;

EPWM_setActionQualifierAction (base、EPWM_AQ_OUTPUT_A、
ePWM_AQ_OUTPUT_HIGH、ePWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
EPWM_setActionQualifierAction (base、EPWM_AQ_OUTPUT_A、
ePWM_AQ_OUTPUT_LOW、ePWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);


//互补 PWM,OUTA 和 OUTB 的 PWMA 源
EPWM_setDeadBandCounterClock (base、EPWM_DB_COUNTER_CLOCK_FULL_CYCLE);
EPWM_setRisingEdgeDelayCount (base、PWM_dbred_ticks);
EPWM_setFallingEdgeDelayCount (base、PWM_dbred_ticks);
ePWM_setDeadBandDelayMode (base、ePWM_DB_RED、TRUE);//寄存器 DBCTL 位 OUT_MODE;S1=1->信号路径中的红色
ePWM_setDeadBandDelayMode (base、ePWM_DB_FED、TRUE);//寄存器 DBCTL 位 OUT_MODE;S0=-> FED IN B 信号路径
ePWM_setRisingEdgeDeadBandDelayInput (base、ePWM_DB_INPUT_EPWMA);//寄存器 DBCTL 位 in_mode;S4=0 -> RED 和 FED 的输入信号 ePWMA
ePWM_setFallingEdgeDeadBandDelayInput (base、ePWM_DB_INPUT_EPWMA);//Reg DBCTL 位 DEDB_MODE (S8)=0;IN_MODE S5=0 ->馈送的输入信号 ePWMA
EPWM_setDeadBandDelayPolarity (base、EPWM_DB_FED、EPWM_DB_POLICY_ACTIVE_LOW);// Reg DBCTL 位 POLSEL (S3)=1 -> OUTB 反转
EPWM_setDeadBandDelayPolarity (base、EPWM_DB_RED、EPWM_DB_POLICY_ACTIVE_HIGH);//Reg DBCTL 位 POLSEL (S2)=0->OUTA 未反转


/*--ISR 中的 PWM 在开环中生成--*/

invDutyPU =(spll1.sine)* invVoRefInst * 0.8;

invDutyPU=(invDutyPU>(Float)(0.8)?(float)(0.8):invDutyPU;
invDutyPU=(invDutyPU<(float)(-0.8)?(float)(-0.8):invDutyPU;
EPWM_setCounterCompareValue (INV_PWM_BASE、EPWM_COUNTER_COMPARE_A、(uint16_t)(pwmDutyVar +(pwmDutyVar*invDutyPU)));//pwmDutyVar 是 PWM 周期计数的一半
/*------------------------------------------------------------------------------------------------------------------------------------------ */

请参阅使用上述代码生成的输出电压波形(随附图像中的蓝色波形)。 在负半个周期内、波形出现小幅失真。 为了确保失真是由 PWM 模块生成的 PWM 导致的、我们交换了逆变器晶体管驱动器输出、保持输入不变。 然后失真出现在正半周期。

您能帮助我们了解一下这是否与我们怀疑的 PWM 生成相关吗?

此致、

维贾伊

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

    Vijay、您好!

    您是否有可能直接获得 PWM 输出的示波器屏幕截图? 也许我们会发现一些故障、即 PWM 输出与基于配置代码的预期输出不匹配。

    谢谢!

    卢克

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

    Luke、您好!

    请在下图中查看微控制器的 PWMA 和 PWMB 的 PWM 输出波形。

    此致、

    维贾伊

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

    感谢 Vijay、

    您的 PWM 输出似乎有很大的噪声。 这可能是正弦波输出出现毛刺脉冲的原因。 在正占空比期间、PWM 周期开始时会出现非常大的尖峰。 您能否确定导致此噪声的原因可能是什么?

    谢谢!

    卢克

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

    Luke、您好!

    我们将研究并消除干扰。 同时、我们在栅极驱动器输入端添加了一个小型滤波器来滤除噪声。 请在下方查看栅极驱动器输入引脚处的波形。 噪声降到最低、但逆变器输出中的失真问题仍然存在。

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

    Vijay、您好!

    在您刚刚发送的图像中、PWM 输出似乎没有任何问题。 如果您可以指出 PWM 输出似乎有问题的特定内容、我可以帮助您找到正确的配置。 但是、问题似乎出在逆变器本身。 我会将该主题分配给另一位可以更好地为您提供帮助的专家。

    与此同时、您应用滤波器后能否发送逆变器输出的更新示波器屏幕截图?

    谢谢!

    卢克

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

    Luke、您好!

    如果 有人能指导您的工作、那将非常有帮助。 正如我在初始消息中所说的、当驱动晶体管的 PWM 输出发生相互作用时、失真会从负半周期变为正半周期。 如果逆变器中存在问题、而不是 PWM 生成问题、则当 PWM 输出互换时、失真不应从正半周期变为负半周期。

    此致、

    维贾伊

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

    Vijay、您好!

    为了帮助尝试并找到能够 提供适当帮助的专家、 在创建系统时、您是否参考了任何参考设计或 C2000库(例如数字电源或电机控制)?

    此致、

    阿米尔·奥马尔

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

    Vijay、即使在没有负载的情况下您是否也碰巧观察到失真?  

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

    您好、Omer:

    我们曾审阅过 Digital Power SDK 中的设计、将其作为类似工作概念的参考(\DigitalPowerSDK\C2000 Ware_Digital SDK_3_01_00_00\solutions\tidm_hv_1ph_dcac)、但我们拥有的系统(硬件和软件)是我们自己的设计。

    上述设计是额定电压为600VA 的全桥逆变器、而我们拥有的逆变器是额定电压为3000VA 的半桥逆变器。

    此致、

    维贾伊·利马耶

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

    你好、Navaneeth:

    我们观察到的失真在轻阻性负载上。 如果负载有问题、为什么当驱动器输出相互改变时、失真会从负半周期 tp 正半周期变为其他周期?

    此致、

    维贾伊

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

    Vijay、您好!

    我将 在 F28004x 控制卡上尝试您的代码、并告知您。 PWM 波形以固定间隔(7.5us)失真。 随机代码可能导致此问题(也可能来自硬件)。  

    请等待2天等待我的答复。  

    谢谢。此致、

    乌坦姆

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

    Uttam 您好、

    感谢你的帮助。 如前所述、为了验证逆变器输出中的失真是否由于 PWM 中的失真导致、我们在驱动器输入之前添加了 RC 滤波器。 请参阅之前的回复中使用滤波器的驱动器输入 PWM 波形。 与清理滤波器的 PWM 波形一样、反相器中的失真仍保持不变。

    此致、

    维贾伊

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

    Vijay、您好!  

    代码看起来不错。  

    我想知道 C2000器件是在硬件上(基板)还是在您的应用中使用 controlCARD。 如果是 controlCARD、我们可以在没有基板的情况下运行代码、并查看是否正确生成了 PWM?  

    此致!

    乌坦姆

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

    Vijay、您好!

    请问您是否仍然看到此问题?

    谢谢。此致、

    乌坦姆

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

    Uttam 您好、

    C2000器件位于我们定制的电路板上。 问题仍然存在。

    此致、

    维贾伊

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

    Vijay,

    在 PWM 上添加 RC 滤波器后、您可以共享输出电流波形吗? 为了进一步调试、

    1.这可能是由于硬件上的交叉耦合、如果您愿意与我们分享硬件设计以供专家审阅、请告诉我。  

    2. 您是否可以在 任何 LaunchPad/控制卡上运行相同的开环代码、然后探测 PWM 输出以确认 SW 具有任何不对称中断导致该代码。 (或者)我可以看看代码、并从终端开始尝试。  

    此致、

    乌坦姆

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

    Uttam 您好、

    我将研究从 controlCARD 运行此代码并检查结果的可能性。 这应该能够明确问题是硬件还是软件。

    此致、

    维贾伊

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

    Uttam 您好、

    我们使用 F280049C controlCARD 测试了相同的代码。 请参阅随附的快照-使用 controlCARD 的 PWM 输出时出现相同的失真。

    此致、

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

    Vijay、您好!

    感谢您在控制卡上对其进行测试。 您能否探测控制卡的 PWM 输出并在此处分享代码片段?  

    此致、

    乌坦姆

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

    Uttam 您好、

    请查看 controlCARD PWM 输出快照。

    此致、

    维贾伊

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

    Vijay、您好!  

    我认为这可能是由于后台运行了一些外部代码造成的。 您能否与我分享代码以便我可以在控制卡上运行它、以便为您提供更好的帮助。 同时、我也可以向其他专家提问。  

    谢谢。此致、

    乌坦姆

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

    Uttam 您好、

    请参阅下面逆变器 PWM 的 ISR 代码。

    dcBusVoltageSamplePU =((float32_t)(READ_DC_BUS_AD_RESULT2)*ADC_PU_SCALE_factor;
    offset1V65SamplePU =((float32_t)(READ_OFFSET1V65_AD_RESULT))* adc_pu_scale_factor;

    inverterOut.i =((((float32_t)(READ_OP_CUR_AD_RESULT))*ADC_PU_SCALE_FACTOR)-(偏移1V65PU))*2.0;
    inverterout.v =((((float32_t)(READ_INV_VOLT_AD_RESULT))* adc_pu_SCALE_factor)-(offset1V65pu))* 2.0;
    inputVoltageLE.v =((((float32_t)(READ_IP_VOLT_LE_AD_RESULT))*ADC_PU_SCALE_factor)- offset1V65PU)*2.0;


    //闭合电压和电流环路
    invVoRefInst = sinf (0.007853981634 * sampleCount)* invVoRef * 0.8;

    VOLTAGE_ERROR= invVoRefInst - inverterOut.v;

    gv_out= DCL_runDF22_c1 (&gv_pr1、volte_error)
    + DCL_runDF22_C1 (&gv_r3、VOLTAGE_ERROR)
    + DCL_runDF22_C1 (&gv_R5、VOLTAGE_ERROR)
    + DCL_runDF22_c1 (&gv_r7、voltage_error);

    gv_out=(gv_out>(float)(0.8)?(float)(0.8):gv_out;
    gv_out=(gv_out<(float)(-0.8)?(float)(-0.8):gv_out;

    gv_lead_lag_out= DCL_runDF22_c1 (&gv_lead_lag、gv_out);
    gv_lead_lag_out=(gv_lead_lag_out>(float)(0.8)?(float)(0.8):gv_lead_lag_out;
    gv_lead_lag_out=(gv_lead_lag_out<(float)(-0.8)?(float)(-0.8):gv_lead_lag_out;

    invIoRefInst =(gv_lead_lag_out);

    GI_OUT= DCL_runDF22_C1 (&gi、(invIoRefInst - inverterOut.I));
    gi_out=(gi_out>(float)(0.8)?(float)(0.8):gi_out;
    gi_out=(gi_out<(float)(-0.8)?(float)(-0.8):gi_out;

    invDutyPU= invVoRefInst;
    if ((enable)&&(ONOFF))
    {
    INV_PWMH_OFF = 0x0;
    INV_PWML_OFF = 0x0;
    if (invVoRef < 1.0)
    {
    invVoRef+= INV_VO_REF_INC_PU;

    否则
    {
    invVoRef = 1.0;


    否则
    {
    INV_PWMH_OFF = 0x01;
    INV_PWML_OFF = 0x01;
    invVoRef = 0.0;


    invDutyPU=(invDutyPU>(Float)(0.8)?(float)(0.8):invDutyPU;
    invDutyPU=(invDutyPU<(float)(-0.8)?(float)(-0.8):invDutyPU;

    //逆变器 PWM 更新
    INV_PWM_CMPA =(uint16_t)((float)(pwmDutyVar)+((float)(pwmDutyVar)*invDutyPU);

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

    Vijay,

    在探测 ePWM 输出时、您能否确认何时仅使用控制卡。 您的 HW 未连接到半桥逆变器是否正确?

    谢谢。此致、

    乌坦姆

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

    Uttam 您好、

    以下是探测 controlCARD 的 ePWM 输出时的设置:

    controlCARD 的 ePWM 输出连接到驱动器 IC (ISO5451)的输入。 驱动器 IC 的隔离式输出连接到逆变器。 但是、逆变器电源电路处于关闭状态、即逆变器直流母线未通电。

    此致、

    维贾伊

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

    Vijay、您好!  

    我明白了、  

    您是否能够 仅从控制卡示波器上观察 HSEC 上的波形 、而不将其提供 给硬件上的驱动程序。  

    理想情况下、如果没有电源电路、则应显示相同的结果。 但我想从主板上排除可能出现 GND 束的情况。  

    谢谢。此致、

    乌坦姆

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

    Uttam 您好、

    请查看现在与驱动器以及电源电路处于关闭状态时断开的 controlCARD PWM 输出。

    此致、

    维贾伊

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

    Vijay、我认为上述代码没问题。  

    要在无法运行代码的情况下确定问题是很困难的。 如有可能、请通过分享给您的电子邮件发送完整代码。   

    谢谢。

    乌坦姆

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

    Uttam 您好、

    目前不在办公室几天,将很快发送代码

    此致、

    维贾伊

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

    Uttam 您好、

    我尝试将代码发送到您共享的电子邮件 ID。 但我会收到送达失败通知。

    我将稍后重试。

    此致、

    维贾伊

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

    Uttam 您好、

    我再次尝试将代码发送 到您共享的电子邮件 ID。 但我会收到送达失败通知。

    要求您通过 ID 向我发送一封电子邮件、以便我可以回复该电子邮件。

    此致、

    维贾伊

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

    Vijay、您好!  

    我给你发了一封私信。 请发送至同一个共享的电子邮件。

    谢谢。此致、

    乌坦姆

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

    Uttam 您好、

    我已将该代码发送到您共享的电子邮件中。

    此致、

    维贾伊

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

    Vijay、您好!

    关闭该 E2E 主题。 随着我们的对话被移至电子邮件中、

    谢谢。此致、

    乌坦姆