主题中讨论的其他器件:AM6442
工具与软件:
该设计的链接 : EPWM_tbTimebaseClkCfg ePWM.c 中的函数并不总是 hspClkDiv lspClkDiv 根据允许的值计算和的最佳组合。 这会导致 ePWM 模块的性能欠佳或配置错误。
预期的行为 :该函数应 hspClkDiv lspClkDiv 从允许的值中选择和的最佳组合:
hspClkDiv:1、2、4、6、8、 10、12、14lspClkDiv:1、2、4、8、16、 32、64,128
实际行为 :该功能并不总是选择最佳组合、这会导致 ePWM 模块配置中出现潜在问题。
添加了示例 :
moduleClk= 25,000,000HztbClk= 25,000,000 / 128 = 195,312.5HzclkDiv= 128
最佳值 :
hspClkDiv= 1lspClkDiv= 128
实际值 (根据当前行为):
-
hspClkDivlspClkDiv由于当前逻辑、函数可能计算错误和。 例如、它可以设置:hspClkDiv= 14 (最大允许值)lspClkDiv= 8 (源自128 / 14)
- 这会导致配置错误、因为分频器会导致14*8=112、而不是128。 因此、实际的 TBCLK 不是
moduleClk/128, as the user expects, but moduleClk/112 - 使用 TBCLK 的所有进一步用户计算和函数调用将不准确、因为用户期望生成的频率是调用 ePWM_tbTimebaseClkCfg 后设置的频率
实际值 clkDiv:
clkDiv= 14 * 8 = 112 (不等于预期的clkDiv128)
建议:
- 此外还提供一种回读结果预分频器(HSPCLKDIV×CLKDIV)或至少读单个预分频器值的方法
执行 :
- 硬件: AM6442
- SDK 版本:AM64x MCU+ SDK v10.01.00.32
- 编译器:tiarmclang 4.0.1
它的格式 :问题似乎是从用于确定 hspClkDiv 和值的逻辑产生的 lspClkDiv。 需要更稳健的方法、以确保始终选择最佳组合。