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.

[参考译文] CCS/LAUNCCHXL-F2.8377万S:HRPWM和死区模块

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/577337/ccs-launchxl-f28377s-hrpwm-and-deadband-modul

部件号:LAUNCHXL-F2.8377万S

工具/软件:Code Composer Studio

哈洛

是否可能使用HRPWM在周期和占空比中创建两个PWM信号并使用固定死区?

我要创建具有特定周期和占空比的EPWMxA,EPWMxB应该是具有相同死区的A的反向信号。 我从controlSUITE示例修改了HRPWM_PRDUPDOWN SFO_cpu01项目。 但信道B上始终存在抖动

如何避免抖动?

//
//采用HRPWM的ePWM通道寄存器配置
// ePWMxA切换低/高,MEP控制在上升沿
//
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;//在ePWM中禁用TBCLK
EDIS;


EPwm2Regs.TBCTL.bit.PRDLD = TB_shadow;//设置阴影负载
EPwm2Regs.TBPRD =周期; // PWM频率=1/(2*TBPRD)
EPwm2Regs.CMPA.bit.CMPA =句点/ 2;//初始设置占空比50 %
EPwm2Regs.CMPA.bit.CMPAHR =(1<8);//初始化HRPWM扩展
EPwm2Regs.CMPB.Bit.CMPB =周期/ 2;//初始设置占空比50 %
EPwm2Regs.CMPB.all |=1;
EPwm2Regs.TBPHS.ALL = 0;
EPwm2Regs.TBCTR = 0;

EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UDOWN;//选择Up-Down
//计数模式
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1; // TBCLK = SYSCLKOUT
EPwm2Regs.TBCTL.bit.FREE_SOFT = 11;

EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO_PRD;//在CTR = 0上加载CMPA
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO_PRD;
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHAME;
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADO;

EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // PWM切换高/低
EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm2Regs.AQCTLB.bit.CBU = AQ_SET; // PWM切换高/低
EPwm2Regs.AQCTLB.bit.CBD = AQ_CLEAR;

EALLOW;
EPwm2Regs.HRCNFG.ALL = 0x0;
EPwm2Regs.HRCNFG.bit.EDGMODE = HR_BEP; // MEP控制开启
//两条边线。
EPwm2Regs.HRCNFG.bit.CTLMODE = HR_CMP; // CMPHR和TBPRDHR
//已更改 // HR控制。
EPwm2Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO_PRD;//在CTR上加载= 0
//和CTR = TBPRD
EPwm2Regs.HRCNFG.bit.EDGMODEB = HR_BEP; // MEP控制开启
//两条边线
EPwm2Regs.HRCNFG.bit.CTLMODEB = HR_CMP; // CMPBHR和TBPRDHR
// HR控制
EPwm2Regs.HRCNFG.bit.HRLOADB = HR_CTR_ZERO_PRD;//在CTR上加载= 0
//和CTR = TBPRD
EPwm2Regs.HRCNFG.bit.AUTOCONV = 1; //为启用自动转换
// HR期间

EPwm2Regs.HRPCTL.bit.TBPHSHRLOADE = 1;//启用TBPHSHR同步
//(对于上一个上一个上一个上一个上一个上
//计数HR控制)
EPwm2Regs.HRPCTL.bit.HRPE = 1; //打开高分辨率
//期间控制。

CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1; //在中启用TBCLK
// ePWM
EPwm2Regs.TBCTL.bit.SWFSYNC = 1; //同步高
//解析阶段至
//开始HR期间
EDIS;



// ohne EPwm2Regs.DBCTL.bit.POLSEL EPwm2Regs.DBRED EPwm2Regs.DBFED PWM2A = PWM2B
// Setzen der Totzeit
//有源低互补PWM -设置死区

EPwm2Regs.DBCTL.bit.out模式= DB_FULL启用;//启用上升边缘延迟和下降边缘延迟
EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; //极性选择控制EPWMxB反转|| 10:有源高互补(AHC)。 EPWMxB反转。
EPwm2Regs.DBCTL.bit.in_mode = DBA_All; //死带输入模式控制:EPWMxA是上升和下降边缘的来源
EPwm2Regs.DBRED = EPWM2_DB; //上升边缘延迟值
EPwm2Regs.DBFED = EPWM2_DB; //下降边缘延迟值 

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

    您好,Jonas:

    我正在查看您的代码,并将很快向您提供建议。

    此致,

    克里斯

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

    您是否发现了一些问题?

    此致,

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

    你有什么建议吗?

    此致,

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

    您是否可以附加一些示波器图像来突出显示抖动? 我已经加载了您的代码,现在正在查看,但我不相信我看到了抖动问题。

    此外,您能否验证这两行? 您写了什么价值?

    EPwm2Regs.DBRED = EPWM2_DB; //上升边缘延迟值
    EPwm2Regs.DBFED = EPWM2_DB; //下降边缘延迟值

    您可以尝试使用HRCNFG[SELOUTB]反转B通道,而不是在死区子模块中反转。

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

    您好,Kris,

    EPWM2_DB = 5;

    您的意思是不是设置DBCTL[POLSEL]设置SELOUTB =1?

    您是否知道SELOUTB =1的放置位置;

    以下是抖动的一个示例:

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

    我怀疑在A信道上发生了同样的事情,但您的触发器设置正在屏蔽它。 我们是否可以尝试测量A通道和B通道的脉冲宽度以及它们之间的停滞时间?

    当您开始使用原始controlSUITE代码时,是在添加死区代码之后还是仅在添加了死区代码之后才看到该问题? 我希望尽可能简化设置,以验证问题所在。 让我们从controlSUITE代码开始检查。

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


    我只在添加死区代码后才看到此问题。 我尝试修改了几个controlSUITE示例,但没有一个是抖动的。 问题是原始代码未能满足我所需的功能。
    我修改的文件是:
    HRPWM_Duty_SFO_V8.c -> controlSUITE
    HRPWM_PrdUpDown_SFO_v8.c -> controlSUITE
    HRPWM_DEADBACDE_SFO_V8.c ->这超出C2000Ware_1_00_00_00

    我尝试了许多不同的设置,认为问题可以隔离:
    如果我使用死区模块反转通道A,并在中断(或在主要环路中)中连续写入任意数字,例如在TBPRDHR中写入3.2万,则抖动消除。

    使用DBCTL[POLSEL]设置SELOUTB =1时,我应该将此设置放在哪个位置?


    对于我的应用,我需要死区模块,也需要反向信号来驱动半桥。 另一件事是我要控制一个转换器,所以我还需要一个中断和ADC模块。

    如果您需要,我可以向您提供代码,以便您也可以再现抖动。

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

    如果在给定示例中添加相关功能,您是否遇到相同的问题?

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

    您好,Jonas:

    如果您能够发布其中一个CCS项目,我可以在本地设备上运行这些项目以重现该问题。 您是否能够将其发布到论坛或包含敏感信息?

    谢谢!
    克里斯

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

    您好,Kris

    发布CCS项目没有问题。

    ADC_PWM_ASSM_LIB_JITSTY是我的主要项目。

    我还尝试了其他项目,如HRPWM_PRDUPDOWN SFO_cpu01_modified jitter,但它们也不起作用

    e2e.ti.com/.../hrpwm_5F00_prdupdown_5F00_sfo_5F00_cpu01_5F00_MODIFIED-JITTER.zip

    此致,

    Jonas

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

    e2e.ti.com/.../ADC_5F00_PWM_5F00_ASSM_5F00_LIB_5F00_JITTER_5F00_CCS.zip

    很抱歉,此项目未首次上传。 请先在您的设备上尝试此操作。

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

    您好,Jonas:

    昨天我尝试加载您的两个项目,但遇到了编译错误。 这似乎只是路径问题,而是被更改为本地计算机的绝对路径。 我仍在处理这些问题,我不期望这会成为问题,但如果出现其他问题,我会通知您。 我希望今天晚些时候加载它。

    此致,

    克里斯

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

    感谢您更新我的信息。 希望能解决路径问题。

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

    我正在运行项目,同时也看到抖动并调查信号源。 您能否确认您在通道A上也看到抖动?

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

    尝试将此行添加到初始化代码中:

    EPwm2Regs.CMPB.bit.CMPHR =(1<8);//初始化HRPWM扩展

    这解决了我的问题。您的设置是在两个边缘上配置HR控件,但CMPBHR扩展未初始化。

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

    对您而言,项目的含义是什么。 我添加了EPwm2Regs.CMPB.bit.CMPHR =(1 <8);//初始化HRPWM扩展到我的代码,但这未解决问题。 插入此代码后,ADC_PWM_ASSM_LIB_JITSTER和其它项目仍出现抖动。

    如果在通道B上触发,我也可以在通道A上抖动

    添加EPwm2Regs.CMPB.bit.CMPHR =(1<8);//将HRPWM扩展初始化到代码后,您看不到抖动?
    除了这一点,您是否做了任何更改?
    您是否在ADC_PWM_ASSM_LIB_JITSTER项目中尝试过?

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

    您好,Jonas:

    我在此处附上了.c文件供您查看。 我认为我所做的唯一更改是CMBHR在循环中写下并评论SFO呼叫(但这不应该导致问题)。

    您是否可以将其放入项目中并查看是否有抖动?

    此致,

    克里斯

    e2e.ti.com/.../ADC_5F00_PWM_5F00_ASSM.c

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

    出现错误。 但在变化之后
    EPwm2Regs.DBRED.All = 10; //上升边缘延迟值
    EPwm2Regs.DBFED.ALL = 10; //下降边缘延迟值

    EPwm2Regs.DBRED = 10; //上升边缘延迟值
    EPwm2Regs.DBFED = 10;
    我可以看到没有抖动的PWM信号。
    我尝试了EPwm2Regs.CMPB.bit.CMPHR =(1<8);//在另一个加载为.zip文件的项目上初始化HRPWM扩展,抖动仍然会发生。
    您能否确认您还看到其他项目的抖动?
    您为什么要评论SFO功能? 认为SFO函数的值必须不断更新。

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

    您使用的是哪个版本的头文件? 例如,来自controlSUITE的V200等。您可以在项目路径或头文件本身顶部的注释中找到此信息。

    //$TI发行版:F2837xS支持库V200 $"

    评论SFO只是调试的一部分。 理论上说,每次你打电话给它时,你可能会得到一个不同的HRMSTEP,这会导致边缘(非常)小的偏移,但这是在数百兆秒内,所以我们所看到的不是。 只有在温度和电压变化对MEP大小影响最大时,才需要定期调用SFO。 从冷启动开始,由于产生的热量,您可能会得到与设备运行一段时间后略有不同的HRMSTEP,因此最好定期呼叫它,但除非需要进行大幅更改,否则可能不需要。 除非您的应用中有较宽的温度或电压范围,否则本讨论仅限于picoseconds。

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

    我正在使用
    $TI发行版:F2837xS支持库V130 $,位于ADC_PWM_ASSM_LIB_JITSTY项目中
    路径为:
    .../controlSUITE/DEVICE_SUPPORT/ F2837xS/V130/F2837xS_HEADers/INCLUDE</s>2837


    $TI发行版:F2837xS支持库V200 $在另一个项目中。 您使用固定的
    EPwm2Regs.CMPB.bit.CMPHR =(1 <8);命令
    paht是:
    ...controlSUITE/device_support/F2837xS/V210/F2837xS_common/include</s>2837

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

    DBRED/DBFED寄存器中的更改是由于V130之后我们的头文件生成中进行了升级。 这是一项重大改进,可为C2000未来的发展提供一致性。 在这种情况下,必须作出一些调整,这些登记册就是其中之一。 我强烈建议尽可能迁移到所有头文件的最新版本,因为它们包含了调整和每个版本的客户反馈。

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

    我将项目移至V210。 然后我尝试了EPWM2Regs的配置,就像您在这里发布的配置一样。 我唯一改变的是为ADC转换创建另一个中断。
    EPwm2Regs.ETSEL.bit.SOCAEN = 0;//禁用组上的SOC
    EPwm2Regs.ETSEL.bit.SOCASEL = ET_CTR _ZERO;//抖动
    EPwm2Regs.ETPS.bit.SOCAPRD = 1;

    但抖动问题仍然存在。和以前一样。
    您是否尝试运行具有ADC中断(.zip文件)的另一个项目? 是否看到抖动?
    您在运行项目时设置了哪些标志(C2000编译器,C2000连接器)?

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

    我有关于您在此处发布的文件的更新,没有抖动。
    有一个名为epwm2_isr的中断
    第425行有一条评论
    //UPDATE_T_PWM (PWM_Periodendauer);
    请您在下面的行中对其进行注释。
    L.432
    EPwm2Regs.TBPRDHR = 0x3333;

    如果我这样做,我会看到您发送给我的版本抖动。 您能证明这一点。

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

    您好,Jonas:

    您是偶然使用修订版0还是修订版A芯片?  我在其中一台设备上加载了项目,并确认我仍然看到抖动。

    在查看勘误表中的通报后,我将HRCNFG的所有按位写入更改为一个.ALL写入,似乎已被删除。  您可以在设备上尝试此操作吗?

    我计算的值为:

    EPwm2Regs.HRCNFG.ALL = 0x1353;

    以下是勘误表供您查看(搜索HRCNFG):

    我无法访问具有足够分辨率的示波器,无法查看今天的人力资源变动,因此我在测试方面受到限制。 我可以确认抖动已消失,但请验证心率移动是否仍然正确。

    此致,

    克里斯

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

    我有修订代码C (使用TMS320 f2877SPZPT YFC-67A616W G4)

    我已删除每个EPwm2Regs.HRCNFG.bit.xxxx并设置
    EPwm2Regs.HRCNFG.ALL = 0x1353;
    但我仍然看到抖动。

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

    感谢您提供信息。 在update_t_wm()中,在函数末尾向CMPHR写入后,是否可以添加以下行?

    EPwm2Regs.CMPB.bit.CMPHR = CMPAHR_REG_VAL;

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

    我可以明天尝试一下,并向您提供反馈。 为什么要编写CMBB寄存器的高分辨率寄存器?
    修订版C的主板是否也有抖动?

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

    我想我在调试之前就停止了处理器的执行。 当我再次加载程序时,我确实看到了B信道抖动。 我很有信心这能解决您的问题。

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

    我尝试了一下
    EPwm2Regs.CMPB.bit.CMPHR = CMPAHR_REG_VAL;
    抖动似乎消失了。 我将EPWMA反转,这样CMBB寄存器应该不会对EPWMxA或EPWMxB产生影响。 您能解释一下吗?
    我将在另一个项目中尝试并提供反馈。 感谢您的帮助,感谢您抽出宝贵时间。

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

    如果您尝试"计数"模式,是否有抖动? 您是否可以更改:
    EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;

    EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR _PRD;//在CTR = 0上加载CMPA
    EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_PRD;

    EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // PWM切换高/低
    EPwm2Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
    EPwm2Regs.AQCTLB.bit.CBU = AQ_SET; // PWM切换高/低
    EPwm2Regs.AQCTLB.bit.ZRO = AQ_Clear;

    使用上升计数模式时,它似乎运行时没有抖动。 再次感谢。

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

    Jonas,

    我将放弃计数模式尝试。 我希望还有其他一些设置需要调整。

    关于为什么需要CMPBHR -这是我已经申请文档改进的内容。 我将尝试提供简要说明,因为我还没有任何更新的图表。 CMPHR仅影响A信道,并应用于斩波器和跳闸区域子模块之间。  CMPBHR仅影响在同一位置应用的B信道。  这里重要的是,这些延迟应用于死区模块之后的信道。  因此,CMPBHR仍在对EPWMxB信号起作用,尽管它确实只是死区的反向A信号。  因此,在您的配置中,假设您希望每个信道上的延迟相同,则每当您写入CMPHR时,也应将相同的值写入CMPHR。  

    这种情况也可能是一个很好的例子代码。

    此致,

    克里斯

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

    非常感谢您的解释和您的时间。 我很感谢。 如果在UP计数模式下出现任何意外问题,您可以更新我吗?

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

    Jonas,

    没问题-我很乐意提供帮助。

    为了提高计算,您的方法将需要稍微改变一下。  这里的问题是,您使用的是cTR=0作为应用了HR边缘的事件。  请记住,在PWM周期的前3个和最后3个周期中,不能对其应用HRPWM位移。  在此,我再次对文档表示歉意, 但是,当您将HRCNFG[EDGMODE]设置为两侧边缘时,实际发生的情况是CMPHR延迟被应用于通道A的两侧边缘。 当您将HRCNFG[EDGMODEB]设置为两侧边缘时,CMPBHR延迟将应用于通道B的两侧边缘(死区之后)。

    因此,不要仅使用CMPA,而是使用CMPA和CMBB在通道A上创建波形。 沿以下行:

    EPwm2Regs.CMPA.bit.CMPA =周期/ 4;//初始设置占空比50 %
    EPwm2Regs.CMPA.bit.CMPAHR =(1<8);//初始化HRPWM扩展
    EPwm2Regs.CMPB.Bit.CMPB = Period*3/4;//初始设置占空比50 %
    EPwm2Regs.CMPB.bit.CMPHR =(1<8);//初始化HRPWM扩展

    EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;// PWM切换高/低
    EPwm2Regs.AQCTLA.bit.CBU = AQ_CLEAR;

    当然,您的ISR计算也将发生一点变化。  请告诉我这是否可以解决您的问题。

    此致,

    克里斯

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

    是否有其他可能不使用CMBB进行计数模式的情况? 因为我想使用CMBB开始ADC转换。

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

    您好,Jonas:

    您需要同时使用CMPA和CMBB以进行加计数HRPWM模式,因为这些是Action Qualifier (操作限定符)使用的唯一两个CMP信号(不是0或HRPWM不能使用的PRD)。 但是,我相信您可以使用CMPC或CMPD来生成SOC转换。

    此致,

    克里斯