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.

[参考译文] F28M35H52C:ePWM7

Guru**** 2538955 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/625115/f28m35h52c-epwm7

器件型号:F28M35H52C
Thread 中讨论的其他器件:controlSUITE

我正在 定制板上使用 F28M35H52C1 Concerto

我正在尝试在 C28内核上配置 ePWM7、但在我运行初始化代码后、所有寄存器保持为0。

ePWM1正常工作

我的第一个猜测是、这些寄存器不是时钟... ??  但我还没有找到任何东西。

有什么想法要去检查吗?

谢谢

Greg

以下代码:

M3:

SysCtlClockConfigSet (SYSCTL_USE_PLL |(SYSCTL_SPLLIMULT_M 和0xF)| SYSCTL_SYSDIV_1 | SYSCTL_M3SSDIV_2 | SYSCTL_XCLKDIV_4);

C28:

注意:周期是在手之前计算的

EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0; //停止所有 TB 时钟
EDIS;

//----------------------------------
// EPWM1 -主设备
EPwm1Regs.TBPRD =周期; //时基周期、PWM 频率= 1/周期
EPwm1Regs.TBPHS.ALL = 0; //时基相位
EPwm1Regs.TBCTR = 0; //时基计数器

//时基时钟
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上计数-向下计数模式:用于对称 PWM
EPwm1Regs.TBCTL.bit.PHSEN = TB_disable; //主机模块
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; //同步下流模块
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; //设置从影子寄存器加载

//中断
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_PRD;
EPwm1Regs.ETSEL.bit.INTEN = 1; //启用 INT
EPwm1Regs.ETPS.bit.INTPRD = et_1st; //在每个事件上生成 INT

//----------------------------------

// EPWM7
EPwm7Regs.TBPRD =周期; //时基周期
EPwm7Regs.TBPHS.ALL = 0; //时基相位
EPwm7Regs.TBCTR = 0; //时基计数器

//时基时钟
EPwm7Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//递减计数模式:用于对称 PWM
EPwm7Regs.TBCTL.bit.PHSEN = TB_ENABLE; //从设备到 EPWM1
EPwm7Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm7Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm7Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwm7Regs.TBCTL.bit.PRDLD = TB_SHADOW; //设置立即加载

//将影子寄存器加载设置为零
EPwm7Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm7Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm7Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;// CTR 上的负载=零
EPwm7Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// CTR 上的负载=零

//设置比较值
EPwm7Regs.CMPA.half.CMPA =周期+1; //初始设置低电平
EPwm7Regs.CMPB = 0; //初始将 B 设置为高电平

//设置操作
EPwm7Regs.AQCTLA.bit.CAU = AQ_SET; //在事件 A 上设置 PWM7A,向上计数
EPwm7Regs.AQCTLA.bit.CAD = AQ_CLEAR; //在事件 A 上清除 PWM7A,倒计数
EPwm7Regs.AQCTLB.bit.CBU = AQ_SET; //在事件 B 上设置 PWM7B,向上计数
EPwm7Regs.AQCTLB.bit.CBD = AQ_CLEAR; //在事件 B 上清除 PWM7B,倒计数

//死区配置
EPwm7Regs.DBCTL.bit.IN_MODE = DBA_ALL; // EPWM7A 是下降沿和上升沿延迟的源
EPwm7Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;//下降沿延迟(FED)和上升沿延迟(红色)均应用于输入信号
//EPwm7Regs.DBCTL.bit.OUT_MODE = DB_DISABLE;
EPwm7Regs.DBCTL.bit.POLSEL = DB_ACTV_HI; //高电平有效
EPwm7Regs.DBRED = RED_DELAY_B; //设置上升沿的死区时间
EPwm7Regs.DBFED = FED_DELAY_B; //设置下降沿的死区时间 

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

    您好、Greg、

    我认为您的发展方向是正确的。  请查看此器件技术参考手册中的外设时钟控制寄存器、特别是 PCLKCR1。

    ===

    以下示例可能会有所帮助:
    \controlSUITE\device_support\f28m35x\Vxxx\F28M35x_examples_Control\ePWM_updown_AQ\c28\

    此示例中的函数 InitSysCtrl 打开 ePWM 外设时钟。


    谢谢、
    Brett