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.

[参考译文] TMS320F280037C:PWM 5A、7A、7B 和8A 不工作

Guru**** 2529900 points
Other Parts Discussed in Thread: TMS320F280037, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1264186/tms320f280037c-pwms-5a-7a-7b-and-8a-are-not-working

器件型号:TMS320F280037C
主题中讨论的其他器件:TMS320F280037C2000WARE

您好!
 
我正在使用 TMS320F280037来控制 T 型逆变器、为此、我需要12个 PWM、但目前我只能生成8个 PWM 信号、即 PWM 1A、1B、2A、2B、3A 3B、4A 和4B。 PWM 5A、7A、7B 和8A 无法正常工作。 我的代码中可能出现了错误或缺失。 您能分析一下我的代码并提供一些建议吗?

int main (空)
{

InitSysCtrl ();//初始化器件时钟和外设
dint;//禁用 CPU 中断
InitPieCtrl ();//将 PIE 控制寄存器初始化为已知状态
IER = 0x0000;//禁用 CPU 中断
IFR = 0x0000;//清除所有 CPU 中断标志
InitPieVectTable();//初始化 PIE 向量表

//设置
Setup_GPIO ();//设置 GPIO
Setup_ePWM ();//设置 ePWM

EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM

while (1)
{
EPwm1Regs.CMPA.bit.CMPA = 50;
EPwm2Regs.CMPA.bit.CMPA = 100;
EPwm3Regs.CMPA.bit.CMPA = 150;
EPwm4Regs.CMPA.bit.CMPA = 200;
EPwm5Regs.CMPA.bit.CMPA = 250;
EPwm7Regs.CMPA.bit.CMPA = 300;
EPwm8Regs.CMPA.bit.CMPA = 350;
DELAY_US (5000000);

返回0;

void Setup_GPIO (void)
{
  EALLOW;

  //PWM 1
  GpioCtrlRegs.GPAGMUX1.bit.GPIO0 = 0;  //选择 PWM 的 GMUX 1A
  GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;  //选择 PWM 的多路复用器1A
  GpioCtrlRegs.GPAPUD.bit.GPIO0 = 1;   //禁用 PWM 的上拉电阻1A

  GpioCtrlRegs.GPAGMUX1.bit.GPIO1 = 0;  //选择 PWM 的 GMUX 1B
  GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;  //选择 PWM 1B 的多路复用器
  GpioCtrlRegs.GPAPUD.bit.GPIO1 = 1;   //禁用 PWM 的上拉电阻1B

  //PWM 2
  GpioCtrlRegs.GPAGMUX1.bit.GPIO2 = 0;  //选择 PWM 2A 的 GMUX
  GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1;  //选择 PWM 2A 的多路复用器
  GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1;   //禁用 PWM 2A 的上拉电阻

  GpioCtrlRegs.GPAGMUX1.bit.GPIO3 = 0;  //选择 PWM 2B 的 GMUX
  GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1;  //选择 PWM 2B 的多路复用器
  GpioCtrlRegs.GPAPUD.bit.GPIO3 = 1;   //禁用 PWM 2B 的上拉电阻

  //PWM 3
  GpioCtrlRegs.GPAGMUX1.bit.GPIO4 = 0;  //选择 PWM 3A 的 GMUX
  GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 1;  //选择 PWM 3A 的多路复用器
  GpioCtrlRegs.GPAPUD.bit.GPIO4 = 1;   //禁用 PWM 3A 的上拉电阻

  GpioCtrlRegs.GPAGMUX1.bit.GPIO5 = 0;  //选择 PWM 3B 的 GMUX
  GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1;  //选择 PWM 3B 的 MUX
  GpioCtrlRegs.GPAPUD.bit.GPIO5 = 1;   //禁用 PWM 3B 的上拉电阻

  //PWM 4
  GpioCtrlRegs.GPAGMUX1.bit.GPIO6 = 0;  //选择 PWM 4A 的 GMUX
  GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 1;  //选择 PWM 4A 的多路复用器
  GpioCtrlRegs.GPAPUD.bit.GPIO6 = 1;   //禁用 PWM 4A 的上拉电阻

  GpioCtrlRegs.GPAGMUX1.bit.GPIO7 = 0;  //选择 PWM 4B 的 GMUX
  GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 1;  //选择 PWM 4B 的多路复用器
  GpioCtrlRegs.GPAPUD.bit.GPIO7 = 1;   //禁用 PWM 4B 的上拉电阻

  //PWM 5
  GpioCtrlRegs.GPAGMUX2.bit.GPIO16 = 0;  //选择 PWM 的 GMUX 5A
  GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1;  //选择 PWM 5A 的多路复用器
  GpioCtrlRegs.GPAPUD.bit.GPIO16 = 1;   //禁用 PWM 5A 的上拉电阻

  //PWM 7
  GpioCtrlRegs.GPAGMUX2.bit.GPIO28 = 0;  //选择 PWM 的 GMUX 7A
  GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;  //选择 PWM 的多路复用器7A
  GpioCtrlRegs.GPAPUD.bit.GPIO28 = 1;   //禁用 PWM 7A 的上拉电阻

  GPioCtrlRegs.GPAGMUX2.bit.GPIO29 = 0;  //选择 PWM 7B 的 GMUX
  GPioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;  //选择 PWM 7B 的 MUX
  GpioCtrlRegs.GPAPUD.bit.GPIO29 = 1;   //禁用 PWM 7B 的上拉电阻

  //PWM 8
  GpioCtrlRegs.GPAGMUX2.bit.GPIO24 = 0;  //选择 PWM 8A 的 GMUX
  GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 1;  //选择 PWM 8A 的多路复用器
  GpioCtrlRegs.GPAPUD.bit.GPIO24 = 1;   //禁用 PWM 8A 的上拉电阻

  EDIS;

void Setup_ePWM (void)
{
  EALLOW;                 //允许版本
  CpuSysRegs.PCLKCR2.bit.EPWM1 = 1;   //启用 ePWM1
  CpuSysRegs.PCLKCR2.bit.EPWM2 = 1;   //启用 ePWM2
  CpuSysRegs.PCLKCR2.bit.EPWM3 = 1;   //启用 ePWM3
  CpuSysRegs.PCLKCR2.bit.EPWM4 = 1;   //启用 ePWM4
  CpuSysRegs.PCLKCR2.bit.EPWM5 = 1;   //启用 ePWM5
  CpuSysRegs.PCLKCR2.bit.EPWM7 = 1;   //启用 ePWM7
  CpuSysRegs.PCLKCR2.bit.EPWM8 = 1;   //启用 ePWM8

  CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0; //开始与其他 PWM 同步

  //PWM 1
  EPwm1Regs.TBPRD = 1200;             //设置定时器周期(120e6)/(1*2*2)
  EPwm1Regs.TBPHS.bit.TBPHS = 0;          //设置相移
  EPwm1Regs.EPWMSYNCOUTEN.all = SYNC_OUT_SRC_ENABLE_ALL;
  EPwm1Regs.TBCTR = 0x0000;            //清除计数器
  EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; //向上计数/向下计数
  EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;     //禁用相移
  EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;    //预分频高速时钟
  EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;      //预分频低速时钟

  EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_shadow;     //避免多次切换
  EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_Zero_PRD; //刷新三角波顶部和底部的占空比
  EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_影子;     //模块 B 也是如此
  EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_Zero_PRD; //对于模块 B 也是如此

  EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;   //有效高电平互补
  EPwm1Regs.DBCTL.bit.out_mode = DB_FULL_ENABLE; //启用死区时间模块
  EPwm1Regs.DBFED.bit.DBFED = 10;         //下降死区时间(0.5us)
  EPwm1Regs.DBRED.bit.DBRED = 10;         //上升死区时间(0.25us)

  EPwm1Regs.AQCTLA.bit.PRD = AQ_NO_ACTION;    //实现 PRD 值时采取的操作(在这种情况下无操作)
  EPwm1Regs.AQCTLA.bit.ZRO = AQ_NO_ACTION;    //实现零值时采取操作(在这种情况下无操作)
  EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;       //实现计数器递增值时的操作(在这种情况下清除)
  EPwm1Regs.AQCTLA.bit.CAD = AQ_SET;        //实现计数器递减值时的操作(在这种情况下设置)

  EPwm1Regs.ETSEL.bit.SOCAEN = 1;         //启用模块 A 的转换开始
  EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_PRDZERO; //ADC 触发在顶部
  EPwm1Regs.ETPS.bit.SOCAPRD = ET_1ST;       //在第一个事件上触发

  // PWM 2
  EPwm2Regs.TBPRD = EPwm1Regs.TBPRD;        // PWM 1的相同周期
  EPwm2Regs.TBPHS.bit.TBPHS = 0.5* EPwm1Regs.TBPRD;//相移为90度(0.5* EPwm1Regs.TBPRD)
  EPwm2Regs.EPWMSYNCINSEL.bit.SEL = SYNC_IN_SRC_SYNCOUT_EPWM1;
  EPwm2Regs.TBCTR = 0x0000;            //清除计数器
  EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; //向上计数/向下计数
  EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;      //启用相移
  EPwm2Regs.TBCTL.bit.PHSDIR = TB_DOWN;      //相移方向(正)
  EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;    //预分频高速时钟
  EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;      //预分频低速时钟

  EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_影子;     //避免多次切换
  EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_Zero_PRD; //刷新三角波顶部和底部的占空比
  EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_影子;     //模块 B 也是如此
  EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_Zero_PRD; //对于模块 B 也是如此

  EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;   //有效高电平互补
  EPwm2Regs.DBCTL.bit.out_mode = DB_FULL_ENABLE; //启用死区时间模块
  EPwm2Regs.DBFED.bit.DBFED = 10;         //下降死区时间(0.1us)
  EPwm2Regs.DBRED.bit.DBRED = 10;         //上升死区时间(0.1us)

  EPwm2Regs.AQCTLA.bit.PRD = AQ_NO_ACTION;    //实现 PRD 值时采取的操作(在这种情况下无操作)
  EPwm2Regs.AQCTLA.bit.ZRO = AQ_NO_ACTION;    //实现零值时采取操作(在这种情况下无操作)
  EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;       //实现计数器递增值时的操作(在这种情况下清除)
  EPwm2Regs.AQCTLA.bit.CAD = AQ_SET;        //实现计数器递减值时的操作(在这种情况下设置)

  EPwm2Regs.ETSEL.bit.SOCAEN = 1;         //启用模块 A 的转换开始
  EPwm2Regs.ETSEL.bit.SOCASEL = ET_CTR_PRDZERO; //ADC 触发在顶部
  EPwm2Regs.ETPS.bit.SOCAPRD = ET_1ST;       //在第一个事件上触发

  // PWM 3
  EPwm3Regs.TBPRD = EPwm1Regs.TBPRD;        // PWM 1的相同周期
  EPwm3Regs.TBPHS.bit.TBPHS = 1* EPwm1Regs.TBPRD; //相移为180度(1* EPwm1Regs.TBPRD)
  EPwm3Regs.EPWMSYNCINSEL.bit.SEL = SYNC_IN_SRC_SYNCOUT_EPWM1;
  EPwm3Regs.TBCTR = 0x0000;            //清除计数器
  EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; //向上计数/向下计数
  EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE;      //启用相移
  EPwm3Regs.TBCTL.bit.PHSDIR = TB_DOWN;      //相移方向(正)
  EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;    //预分频高速时钟
  EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;      //预分频低速时钟

  EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_shadow;     //避免多次切换
  EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_Zero_PRD; //刷新三角波顶部和底部的占空比
  EPwm3Regs.CMPCTL.bit.SHDLBMODE = CC_影子;     //模块 B 也是如此
  EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_Zero_PRD; //对于模块 B 也是如此

  EPwm3Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;   //有效高电平互补
  EPwm3Regs.DBCTL.bit.out_mode = DB_FULL_ENABLE; //启用死区时间模块
  EPwm3Regs.DBFED.bit.DBFED = 10;         //下降死区时间(0.1us)
  EPwm3Regs.DBRED.bit.DBRED = 10;         //上升死区时间(0.1us)

  EPwm3Regs.AQCTLA.bit.PRD = AQ_NO_ACTION;    //实现 PRD 值时采取的操作(在这种情况下无操作)
  EPwm3Regs.AQCTLA.bit.ZRO = AQ_NO_ACTION;    //实现零值时采取操作(在这种情况下无操作)
  EPwm3Regs.AQCTLA.bit.CAU = AQ_CLEAR;       //实现计数器递增值时的操作(在这种情况下清除)
  EPwm3Regs.AQCTLA.bit.CAD = AQ_SET;        //实现计数器递减值时的操作(在这种情况下设置)

  EPwm3Regs.ETSEL.bit.SOCAEN = 1;         //启用模块 A 的转换开始
  EPwm3Regs.ETSEL.bit.SOCASEL = ET_CTR_PRDZERO; //ADC 触发在顶部
  EPwm3Regs.ETPS.bit.SOCAPRD = ET_1ST;       //在第一个事件上触发

  // PWM 4
  EPwm4Regs.TBPRD = EPwm1Regs.TBPRD;        // PWM 1的相同周期
  EPwm4Regs.TBPHS.bit.TBPHS = 0.5* EPwm1Regs.TBPRD;//相移为270度(0.5* EPwm1Regs.TBPRD)
  EPwm4Regs.EPWMSYNCINSEL.bit.SEL = SYNC_IN_SRC_SYNCOUT_EPWM1;
  EPwm4Regs.TBCTR = 0x0000;            //清除计数器
  EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; //向上计数/向下计数
  EPwm4Regs.TBCTL.bit.PHSEN = TB_DISABLE;      //启用相移
  EPwm4Regs.TBCTL.bit.PHSDIR = TB_UP;       //相移方向(负)
  EPwm4Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;    //预分频高速时钟
  EPwm4Regs.TBCTL.bit.CLKDIV = TB_DIV1;      //预分频低速时钟

  EPwm4Regs.CMPCTL.bit.SHDWAMODE = CC_影子;     //避免多次切换
  EPwm4Regs.CMPCTL.bit.LOADAMODE = CC_CTR_Zero_PRD; //刷新三角波顶部和底部的占空比
  EPwm4Regs.CMPCTL.bit.SHDWBMODE = CC_影子;     //模块 B 也是如此
  EPwm4Regs.CMPCTL.bit.LOADBMODE = CC_CTR_Zero_PRD; //对于模块 B 也是如此

  EPwm4Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;   //有效高电平互补
  EPwm4Regs.DBCTL.bit.out_mode = DB_FULL_ENABLE; //启用死区时间模块
  EPwm4Regs.DBFED.bit.DBFED = 10;         //下降死区时间(0.1us)
  EPwm4Regs.DBRED.bit.DBRED = 10;         //上升死区时间(0.1us)

  EPwm4Regs.AQCTLA.bit.PRD = AQ_NO_ACTION;    //实现 PRD 值时采取的操作(在这种情况下无操作)
  EPwm4Regs.AQCTLA.bit.ZRO = AQ_NO_ACTION;    //实现零值时采取操作(在这种情况下无操作)
  EPwm4Regs.AQCTLA.bit.CAU = AQ_CLEAR;       //实现计数器递增值时的操作(在这种情况下清除)
  EPwm4Regs.AQCTLA.bit.CAD = AQ_SET;        //实现计数器递减值时的操作(在这种情况下设置)

  EPwm4Regs.ETSEL.bit.SOCAEN = 1;         //启用模块 A 的转换开始
  EPwm4Regs.ETSEL.bit.SOCASEL = ET_CTR_PRDZERO; //ADC 触发在顶部
  EPwm4Regs.ETPS.bit.SOCAPRD = ET_1ST;       //在第一个事件上触发

  // PWM 5
  EPwm5Regs.TBPRD = EPwm1Regs.TBPRD;        // PWM 1的相同周期
  EPwm5Regs.TBPHS.bit.TBPHS = 0;          //无相移(0度)
  EPwm5Regs.EPWMSYNCINSEL.bit.SEL = SYNC_IN_SRC_SYNCOUT_EPWM1;
  EPwm5Regs.TBCTR = 0x0000;            //清除计数器
  EPwm5Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; //向上计数/向下计数
  EPwm5Regs.TBCTL.bit.PHSEN = TB_ENABLE;      //启用相移
  EPwm5Regs.TBCTL.bit.PHSDIR = TB_DOWN;      //相移方向(正)
  EPwm5Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;    //预分频高速时钟
  EPwm5Regs.TBCTL.bit.CLKDIV = TB_DIV1;      //预分频低速时钟

  EPwm5Regs.CMPCTL.bit.SHDWAMODE = CC_影子;     //避免多次切换
  EPwm5Regs.CMPCTL.bit.LOADAMODE = CC_CTR_Zero_PRD; //刷新三角波顶部和底部的占空比


  EPwm5Regs.AQCTLA.bit.PRD = AQ_NO_ACTION;    //实现 PRD 值时采取的操作(在这种情况下无操作)
  EPwm5Regs.AQCTLA.bit.ZRO = AQ_NO_ACTION;    //实现零值时采取操作(在这种情况下无操作)
  EPwm5Regs.AQCTLA.bit.CAU = AQ_CLEAR;       //实现计数器递增值时的操作(在这种情况下清除)
  EPwm5Regs.AQCTLA.bit.CAD = AQ_SET;        //实现计数器递减值时的操作(在这种情况下设置)


  // PWM 7
  EPwm7Regs.TBPRD = EPwm1Regs.TBPRD;        // PWM 1的相同周期
  EPwm7Regs.TBPHS.bit.TBPHS = 0;          //无相移(0度)
  EPwm7Regs.TBCTR = 0x0000;            //清除计数器
  EPwm7Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; //向上计数/向下计数
  EPwm7Regs.TBCTL.bit.PHSEN = TB_DISABLE;      //启用相移
  EPwm7Regs.TBCTL.bit.PHSDIR = TB_DOWN;      //相移方向(正)
  EPwm7Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;    //预分频高速时钟
  EPwm7Regs.TBCTL.bit.CLKDIV = TB_DIV1;      //预分频低速时钟

  EPwm7Regs.CMPCTL.bit.SHDWAMODE = CC_影子;     //避免多次切换
  EPwm7Regs.CMPCTL.bit.LOADAMODE = CC_CTR_Zero_PRD; //刷新三角波顶部和底部的占空比
  EPwm7Regs.CMPCTL.bit.SHDWBMODE = CC_影子;     //模块 B 也是如此
  EPwm7Regs.CMPCTL.bit.LOADBMODE = CC_CTR_Zero_PRD; //对于模块 B 也是如此

  EPwm7Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;   //有效高电平互补
  EPwm7Regs.DBCTL.bit.out_mode = DB_FULL_ENABLE; //启用死区时间模块
  EPwm7Regs.DBFED.bit.DBFED = 10;         //下降死区时间(0.1us)
  EPwm7Regs.DBRED.bit.DBRED = 10;         //上升死区时间(0.1us)

  EPwm7Regs.AQCTLA.bit.PRD = AQ_NO_ACTION;    //实现 PRD 值时采取的操作(在这种情况下无操作)
  EPwm7Regs.AQCTLA.bit.ZRO = AQ_NO_ACTION;    //实现零值时采取操作(在这种情况下无操作)
  EPwm7Regs.AQCTLA.bit.CAU = AQ_CLEAR;       //实现计数器递增值时的操作(在这种情况下清除)
  EPwm7Regs.AQCTLA.bit.CAD = AQ_SET;        //实现计数器递减值时的操作(在这种情况下设置)

  // PWM 8
  EPwm8Regs.TBPRD = EPwm1Regs.TBPRD;        // PWM 1的相同周期
  EPwm8Regs.TBPHS.bit.TBPHS = 0;          //无相移(0度)
  EPwm8Regs.EPWMSYNCINSEL.bit.SEL = SYNC_IN_SRC_SYNCOUT_EPWM1;
  EPwm8Regs.TBCTR = 0x0000;            //清除计数器
  EPwm8Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; //向上计数/向下计数
  EPwm8Regs.TBCTL.bit.PHSEN = TB_DISABLE;      //启用相移
  EPwm8Regs.TBCTL.bit.PHSDIR = TB_DOWN;      //相移方向(正)
  EPwm8Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;    //预分频高速时钟
  EPwm8Regs.TBCTL.bit.CLKDIV = TB_DIV1;      //预分频低速时钟

  EPwm8Regs.CMPCTL.bit.SHDWAMODE = CC_影子;     //避免多次切换
  EPwm8Regs.CMPCTL.bit.LOADAMODE = CC_CTR_Zero_PRD; //刷新三角波顶部和底部的占空比

  EPwm8Regs.AQCTLA.bit.PRD = AQ_NO_ACTION;    //实现 PRD 值时采取的操作(在这种情况下无操作)
  EPwm8Regs.AQCTLA.bit.ZRO = AQ_NO_ACTION;    //实现零值时采取行动(在这种情况下无操作)
  EPwm8Regs.AQCTLA.bit.CAU = AQ_CLEAR;       //实现计数器递增值时的操作(在这种情况下清除)
  EPwm8Regs.AQCTLA.bit.CAD = AQ_SET;        //实现计数器递减值时的操作(在这种情况下设置)

  //结束设置
  CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1; //结束与其他 PWM 的同步
  EDIS;                  //结束版本

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

    尊敬的 Jonas:

      //PWM 5
      GpioCtrlRegs.GPAGMUX2.bit.GPIO16 = 0;  //选择 PWM 的 GMUX 5A
      GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1;  //选择 PWM 5A 的多路复用器
      GpioCtrlRegs.GPAPUD.bit.GPIO16 = 1;   //禁用 PWM 5A 的上拉电阻

      //PWM 7
      GpioCtrlRegs.GPAGMUX2.bit.GPIO28 = 0;  //选择 PWM 的 GMUX 7A
      GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;  //选择 PWM 的多路复用器7A
      GpioCtrlRegs.GPAPUD.bit.GPIO28 = 1;   //禁用 PWM 7A 的上拉电阻

      GPioCtrlRegs.GPAGMUX2.bit.GPIO29 = 0;  //选择 PWM 7B 的 GMUX
      GPioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;  //选择 PWM 7B 的 MUX
      GpioCtrlRegs.GPAPUD.bit.GPIO29 = 1;   //禁用 PWM 7B 的上拉电阻

      //PWM 8
      GpioCtrlRegs.GPAGMUX2.bit.GPIO24 = 0;  //选择 PWM 8A 的 GMUX
      GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 1;  //选择 PWM 8A 的多路复用器
      GpioCtrlRegs.GPAPUD.bit.GPIO24 = 1;   //禁用 PWM 8A 的上拉电阻

    [/报价]

    配置应如下所示:

    void InitEPwm5Gpio (void)
    {
    EALLOW;

    //
    //针对所选输出引脚禁用内部上拉,以降低
    //功耗。 用户可启用或禁用上拉。
    //注释掉其他不需要的行。
    //

    GpioCtrlRegs.GPAPUD.bit.GPIO16 = 1;//禁用 GPIO16上的上拉电阻(EPWM5A)

    //
    //使用 GPIO 寄存器配置 EPWM-5引脚 这会指定哪一个
    //可能的 GPIO 引脚将是 EPWM5功能引脚。
    //注释掉其他不需要的行。
    //

    GpioCtrlRegs.GPAGMUX2.bit.GPIO16 = 1;//将 GPIO16配置为 EPWM5A
    GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1;//将 GPIO16配置为 EPWM5A

    EDIS;

    void InitEPwm7Gpio (void)
    {
    EALLOW;

    //
    //针对所选输出引脚禁用内部上拉,以降低
    //功耗。 用户可启用或禁用上拉。
    //注释掉其他不需要的行。
    //
    GpioCtrlRegs.GPAPUD.bit.GPIO28 = 1;//禁用 GPIO28上的上拉电阻(EPWM7A)
    GpioCtrlRegs.GPAPUD.bit.GPIO29 = 1;//禁用 GPIO29上的上拉电阻(EPWM7B)

    //
    //使用 GPIO 寄存器配置 EPWM-7引脚 这会指定哪一个
    //可能的 GPIO 引脚将是 EPWM7功能引脚。
    //注释掉其他不需要的行。
    //

    GpioCtrlRegs.GPAGMUX2.bit.GPIO28 = 0;//将 GPIO28配置为 EPWM7A
    GPioCtrlRegs.GPAGMUX2.bit.GPIO29 = 0;//将 GPIO29配置为 EPWM7B
    GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 3;//将 GPIO28配置为 EPWM7A
    GPioCtrlRegs.GPAMUX2.bit.GPIO29 = 3;//将 GPIO29配置为 EPWM7B

    EDIS;

    void InitEPwm8Gpio (void)
    {
    EALLOW;

    //
    //针对所选输出引脚禁用内部上拉,以降低
    //功耗。 用户可启用或禁用上拉。
    //注释掉其他不需要的行。
    //
    GpioCtrlRegs.GPAPUD.bit.GPIO24 = 1;//禁用 GPIO24上的上拉电阻(EPWM8A)

    //
    //使用 GPIO 寄存器配置 EPWM-8引脚 这会指定哪一个
    //可能的 GPIO 引脚将是 EPWM7功能引脚。
    //注释掉其他不需要的行。
    //

    GpioCtrlRegs.GPAGMUX2.bit.GPIO24= 0x1;//将 GPIO24配置为 EPWM8A
    GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 0x1;//将 GPIO24配置为 EPWM8A

    EDIS;

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

    尊敬的 Ryan Ma:

    感谢您的回答、您发送的代码解决了我的问题。

    在结束此问题之前、我想知道在哪里可以找到您发送的代码所使用的信息。

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

    尊敬的 Jonas:

    有关 GPIO 初始化、您可以参阅我们的 TRM 一章、并查看如何设置 GPIO 多路复用的示例。  

    另请参阅 C2000WARE SDK 中的 ePWM GPIO 初始化支持文件。

    C:\ti\c2000\c2000Ware_x_xx_xx\device_support\f28003x\common\source\f28003x_ePWM.c

    此致!

    mA