主题中讨论的其他器件:TMS320F28035、 controlSUITE、
大家好、
我将 TMS320F28377S micro_controller 用于三相感应电机的标量(V/f)控制。 我已经从 ti\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.1\HVACI_Scalar 中获取了参考代码、该代码在 TMS320F28035控制器上运行正常、只对 VHZ 宏中的电压/Hz 设置进行了相同的修改、即我设置了415V/50Hz。 我 尝试在 TMS320F28377S 中转储的代码相同,但我观察到 O/p 电压与给定的 I/p 频率不匹配。
我已经检查 了每个微控制器的输出、即 VHZ 微控制器、SVGEN 微控制 器的所有输出都按照计算值获取、仅 PWM 初始化中发生变化。 目前我没有使用任何外部跳闸区域来提供 PWM 保护。 如果我需要在 PWM 初始化中或在任何位置更改任何这一点、请提供建议。
空 InitEPwmUPDON (uint16 inV_PWM_NO、uint16 PWM_PERIOD_TICK)
{
EALLOW;
//设置 TBCLK
(* ePWM[INV_PWM_no]).TBPRD = PWM_PERIOD_TICK;
(* ePWM[INV_PWM_no]).TBPHS.bit.TBPHS = 0x0000;
(* ePWM[INV_PWM_no]).TBCTR = 0x0000;
//设置比较值
//(* ePWM[inV_PWM_no]).cmpA.bit.cmpA = 10;
//(* ePWM[INV_PWM_no]).CMPB.bit.CMPB = 10;
//设置计数器模式
(* ePWM[INV_PWM_no]).TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
(* ePWM[INV_PWM_no]).TBCTL.bit.PHSEN = 0x1; //pH_sens;
(* ePWM[INV_PWM_no]).TBCTL.bit.HSPCLKDIV = TB_DIV1; //010 ->/4
(* ePWM[INV_PWM_no]).TBCTL.bit.CLKDIV = TB_DIV1; //001 -->/1
(* ePWM[INV_PWM_no]).TBCTL.bit.FREE_SOFT = 0x2;
(* ePWM[INV_PWM_no]).TBCTL.bit.PHSDIR = 0x1;
(* ePWM[INV_PWM_no]).TBCTL.bit.SWFSYNC = 0x0;
//设置隐藏
(* ePWM[INV_PWM_no]).cmPCTL.bit.SHDWAMODE = CC_SHADOW;
(* ePWM[INV_PWM_no]).cmPCTL.bit.SHDWBMODE = CC_SHADOW;
(* ePWM[INV_PWM_no]).cmPCTL.bit.LOADAMODE = CC_CTR_ZERO;
(* ePWM[INV_PWM_no]).cmPCTL.bit.LOADBMODE = CC_CTR_ZERO;
//设置操作
(* ePWM[INV_PWM_no]).AQCTLA.bit.CAU = AQ_CLEAR; // CTR = CMPA@UP,设置为1
(* ePWM[inV_PWM_no]).AQCTLA.bit.CAD = AQ_SET; // CTR = CMPA@DOWN、togleAQ_CLEAR
// (* ePWM[inV_PWM_no]).AQCTLB.bit.CBU = AQ_SET;
// (* ePWM[inV_PWM_no]).AQCTLB.bit.CBD = AQ_CLEAR;
(* ePWM[INV_PWM_no]).TBCTL.bit.PRDLD = TB_IMMETIATE;//TB_SHADOW;
//高电平有效互补 PWM -设置死区
(* ePWM[INV_PWM_no]).DBCTL.bit.IN_MODE = DBA_ALL;
(* ePWM[INV_PWM_no]).DBCTL.bit.out_mode = DB_full_enable;
(* ePWM[INV_PWM_no]).DBCTL.bit.POLSEL = DB_ACTV_HIC;
(* ePWM[INV_PWM_no]).DBRED.bit.DBRED = 1000;
(* ePWM[INV_PWM_no]).DBFED.bit.DBFED = 1000;
(* ePWM[INV_PWM_no]).TBCTL.bit.SYNCOSEL = 0x00; //SYn_SEL; //
(* ePWM[INV_PWM_no]).PCCTL.ALL = 0x0000;
(* ePWM[INV_PWM_no]).TZSEL.ALL = 0x0000;
//todo
(* ePWM[INV_PWM_no]).ETSEL.bit.INTSEL = et_CTR_ZERO;//选择"INT on Zero (零事件时的 INT)"
(* ePWM[INV_PWM_no]).ETSEL.bit.INTEN = 1; //启用 INT
(* ePWM[INV_PWM_no]).ETPS.bit.INTPRD= et_1st;//在发生第一个事件时生成 INT
(* ePWM[INV_PWM_no]).ETCLR.bit.INT = 1;
EDIS;
}