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.

[参考译文] TMS320F28069M:三相电机桥的 PWM 编程

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/638070/tms320f28069m-pwm-programming-for-three-phase-motor-bridges

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

尊敬的所有人

我尚未测试下面的代码。  

有人可以说它是否起作用吗? 请注意两种情况

可以检测到任何错误吗?

高电平有效、互补输出、递增计数、PWM4、5、6、以生成三相正弦信号

(二

EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;
EDIS;

EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;


EPwm4Regs.TBPRD = 4500;//设置定时器周期
EPwm4Regs.TBPHS.Half.TBPHS = 0x0000;//相位为0
EPwm4Regs.TBCTR = 0x0000;//清除计数器

//
//设置 TBCLK
//
EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数
EPwm4Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载

EPwm4Regs.TBCTL.bit.PRDLD = TB_SHADOW;


EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

EPwm4Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm4Regs.TBCTL.bit.CLKDIV = TB_DIV1;

EPwm4Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;//每0加载一次寄存器
EPwm4Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm4Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm4Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

//
//设置比较
//
EPwm4Regs.CMPA.half.CMPA = 0;

//
//设置操作
//

EPwm4Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm4Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm4Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
EPwm4Regs.AQCTLB.bit.CAU = AQ_SET;


//
//有源互补高 PWM -设置死区
//
EPwm4Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;
EPwm4Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
EPwm4Regs.DBCTL.bit.IN_MODE = DBA_ALL;
EPwm4Regs.DBRED = 90;
EPwm4Regs.DBFED = 90;


EPwm5Regs.TBPRD = 4500;//设置定时器周期
EPwm5Regs.TBPHS.Half.TBPHS = 0x0000;//相位为0
EPwm5Regs.TBCTR = 0x0000;//清除计数器

//
//设置 TBCLK
//
EPwm5Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数
EPwm5Regs.TBCTL.bit.PHSEN = TB_ENABLE;//禁用相位加载

EPwm5Regs.TBCTL.bit.PRDLD = TB_SHADOW;

EPwm5Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

EPwm5Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm5Regs.TBCTL.bit.CLKDIV = TB_DIV1;

EPwm5Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;//每0加载一次寄存器
EPwm5Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm5Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm5Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

//
//设置比较
//
EPwm5Regs.CMPA.half.CMPA = 0;

//
//设置操作
//
EPwm5Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm5Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm5Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
EPwm5Regs.AQCTLB.bit.CAU = AQ_SET;


//
//高电平有效 PWM -设置死区
//
EPwm5Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;
EPwm5Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
EPwm5Regs.DBCTL.bit.IN_MODE = DBA_ALL;
EPwm5Regs.DBRED = 90;
EPwm5Regs.DBFED = 90;

EPwm6Regs.TBPRD = 4500;//设置定时器周期
EPwm6Regs.TBPHS.Half.TBPHS = 0x0000;//相位为0
EPwm6Regs.TBCTR = 0x0000;//清除计数器

//
//设置 TBCLK
//
EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数
EPwm6Regs.TBCTL.bit.PHSEN = TB_ENABLE;//禁用相位加载

EPwm6Regs.TBCTL.bit.PRDLD = TB_SHADOW;

EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

EPwm6Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm6Regs.TBCTL.bit.CLKDIV = TB_DIV1;

EPwm6Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;//每0加载一次寄存器
EPwm6Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm6Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm6Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

//
//设置比较
//
EPwm6Regs.CMPA.half.CMPA = 0;

//
//设置操作
//

EPwm6Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm6Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm6Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
EPwm6Regs.AQCTLA.bit.CAU = AQ_SET;


//
//高电平有效 PWM -设置死区
//
EPwm6Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;
EPwm6Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
EPwm6Regs.DBCTL.bit.IN_MODE = DBA_ALL;
EPwm6Regs.DBRED = 90;
EPwm6Regs.DBFED = 90;

EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;

秘书长的报告

高电平有效、独立输出、递增计数、PWM4、5、6、以在两个相位之间生成斜坡

(三

EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;
EDIS;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

EPwm4Regs.TBPRD = 4500;//周期= 4500 TBCLK 计数
EPwm4Regs.CMPA.half.CMPA = 0;//比较 A = 0 TBCLK 计数
EPwm4Regs.CMPB = 0;//比较 B = 0 TBCLK 计数
EPwm4Regs.TBPHS.Half.TBPHS = 0x0000;//相位为0
EPwm4Regs.TBCTR = 0;//清除 TB 计数器
EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwm4Regs.TBCTL.bit.PHSEN = TB_DISABLE;//相位加载被禁用
EPwm4Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwm4Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;// TBCLK = SYSCLK
EPwm4Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm4Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm4Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm4Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;// CTR 上的负载=零
EPwm4Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// CTR 上的负载=零
EPwm4Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm4Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm4Regs.AQCTLB.bit.ZRO = AQ_SET;
EPwm4Regs.AQCTLB.bit.CBU = AQ_CLEAR;
EPwm4Regs.DBCTL.bit.OUT_MODE = DB_DISABLE;

EPwm5Regs.TBPRD = 4500;//周期= 4500 TBCLK 计数
EPwm5Regs.CMPA.half.CMPA = 0;//比较 A = 0 TBCLK 计数
EPwm5Regs.CMPB = 0;//比较 B = 0 TBCLK 计数
EPwm5Regs.TBPHS.Half.TBPHS = 0x0000;
EPwm5Regs.TBCTR = 0;//清除 TB 计数器
EPwm5Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwm5Regs.TBCTL.bit.PHSEN = TB_DISABLE;//相位加载被禁用
EPwm5Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm5Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwm5Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;// TBCLK = SYSCLK
EPwm5Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm5Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm5Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm5Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;// CTR 上的负载=零
EPwm5Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// CTR 上的负载=零
EPwm5Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm5Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm5Regs.AQCTLB.bit.ZRO = AQ_SET;
EPwm5Regs.AQCTLB.bit.CBU = AQ_CLEAR;
EPwm5Regs.DBCTL.bit.OUT_MODE = DB_DISABLE;


EPwm6Regs.TBPRD = 4500;//周期= 4500 TBCLK 计数
EPwm6Regs.CMPA.half.CMPA = 0;//比较 A = 0 TBCLK 计数
EPwm6Regs.CMPB = 0;//比较 B = 0 TBCLK 计数
EPwm6Regs.TBPHS.Half.TBPHS = 0x0000;
EPwm6Regs.TBCTR = 0;//清除 TB 计数器
EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwm6Regs.TBCTL.bit.PHSEN = TB_DISABLE;//相位加载被禁用
EPwm6Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwm6Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;// TBCLK = SYSCLK
EPwm6Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm6Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm6Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm6Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;// CTR 上的负载=零
EPwm6Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// CTR 上的负载=零
EPwm6Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm6Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm6Regs.AQCTLB.bit.ZRO = AQ_SET;
EPwm6Regs.AQCTLB.bit.CBU = AQ_CLEAR;
EPwm6Regs.DBCTL.bit.OUT_MODE = DB_DISABLE;

EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;

(一

谢谢

Luis Gonçalves ó n

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

    此代码是否来自 C2000示例? 您在构建过程中发现了什么错误? 谢谢。

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

    代码正在编译正常。 我只想在实验过程中不会出现任何概念错误或其他错误。 在现场、很难纠正错误、可能需要一些时间。 如果有经验的人能帮助我的话。 这只是 PWM 的配置。

    谢谢

    Luis Gonçalves ó n
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以参阅 controlSUITE 中的示例项目、有许多三相电机控制示例项目可供您参考、其中包括三相电桥的 PWM 配置、如下所示。 PWM 配置也可以在 F2806x 上使用、无需任何更改、只需将 epwm1/2/3更改为 epwm4/5/6、如果您想要向上计数模式、则需要更改计数模式、而不是向上/向下计数模式。

    \controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.1\HVPM_Sensorless_2833x