主题中讨论的其他器件: HALCOGEN
大家好、
我研究了针对这个 HET PWM 问题的权变措施(HET 问题:如果占空比被设定为100%的话、不能停止 PWM 输出)。
下面是 HALOCGEN (v04.07.00)生成的 pwmSetDuty()函数的代码。
void pwmSetDuty (hetRAMBASE_t * hetRAM、uint32 PWM、uint32 pwmDuty)
{
uint32行动;
uint32 pwmPolarity =0U;
uint32 pwmPeriod = hetRAM->指令[(PWM << 1U)+ 42U].Data + 128U;
pwmPeriod = pwmPeriod >> 7U;
if (hetRAM =hetRAM1)
{
pwmPolarity = s_het1pwmPolarity[PWM];
}
其他
{
}
如果(pwmDuty == 0U)
{
操作=(pwmPolarity = 3U)? 0U:2U;
}
否则(pwmDuty >= 100U)
{
操作=(pwmPolarity = 3U)? 2U:0U;
}
其他
{
操作= pwmPolarity;
}
hetRAM->指令[(PWM << 1U)+ 41U].Control =((hetRAM->指令[(PWM << 1U)+ 41U].Control)&(~(UINT32)(0x00000018U)))|(操作<< 3U);
hetRAM->指令[(PWM << 1U)+ 41U].Data =((pwmPeriod * pwmDuty)/100U)<< 7U)+ 128U;
}
在最后两行中、使用 HET 的 MOV64指令设置 PWM 占空比。
使用 MOV64指令的 ACTION = 0 (清零)或 ACTION = 2 (SET)将占空比设置为0%和100%。
当命令占空比为0%时、MOV64指令不能使用 ACTION = 2 (SET)将 PWM 输出切换为高电平至低电平。
因此、当命令占空比为0%时、我按照如下方式修改代码以检查 HET-RAM 中 MOV64指令的操作字段、并使用 ACTION=3 (PULSEHI)而不是 ACTION =2 (SET)。
如果(pwmDuty == 0U)
{
if ((uint32)(((hetRAM->Instruction [(PWM << 1U)+ 41U].Control)&((uint32)(0x00000018U))>> 3U)== 2U)
{
操作= pwmPolarity;
}
其他
{
操作=(pwmPolarity = 3U)? 0U:2U;
}
}
我使用 TMS570LS0432 Launchpad 检查了运行情况、PWM 占空比正确从100%切换到0%。
使用此变通办法时 MCU 的运行是否存在问题?
请 告诉我 是否有其他解决方案。
谢谢、