我正在使用 eFlexPWM 模块(实例)。 我正在使用 S32K364 微控制器上的 IP_EFLEXPWM_0 ) 通过输入捕获来测量外部信号的频率和周期。 子模块 2 ( SM[2] )。我的配置如下:
SM2_CAPTCTRLB->EDGB0 = 0x02; (上升沿捕获电路 0)
SM2_CAPTCTRLB->EDGB1 = 0x02; (上升沿捕获电路 1)
SM2_ARMB = 1; (Arm捕获电路)
运行代码后,我观察到以下情况:
在 SM2_CAPTCTRLB ,计数器状态位显示:
CB0CNT = 0x4
CB1CNT = 0x4
在 SM2_STS ,两个标志位均已设置:
CFB0 = 1
CFB1 = 1
然而,捕获的值( SM2_CAPTCOMPB )仍然存在。 0 对于这两个捕获电路——都没有数据被锁存。
造成这种情况的原因可能是什么?我是否遗漏了其他需要的配置(例如,时钟启用、输入多路复用或计数器设置)?这些标志表明检测到了捕获事件,但捕获的值没有更新。您的见解将不胜感激。
如有需要,请随时添加其他详细信息(例如引脚复用设置或计数器模式)。祝你好运!
HI
首先,我检查了最新的 S32K3 RTD 7.0.x版本;但是, S32 配置工具尚不支持eFlexPWM E-Capture功能。
如果方便的话,能否分享一下您的项目,以便我可以在 S32K396 上进行测试?(可惜我没有 S32K364,只有S32K396-BGA-DC1评估板。)
其次,请查看 S32K396RM(修订版 4,2024 年 11 月) 中的“56.3.14 增强捕获(E-Capture)” 部分。请检查该部分中提到的寄存器,特别是图 254 中的寄存器。E-捕获 逻辑。您也可以与我分享eFlexPWM_0 寄存器的屏幕截图。
此外,如果您想读取SM2_CAPTCOMPB[EDGCNTB]的值,请先启用SM2_CAPTCTRLB[EDGCNTB_EN]和SM2_CAPTCOMPB[EDGCMPB] 。
我不明白你为什么要将SM2_CAPTCOMPB[EDGCMPB]设置为 0,因为这似乎会阻止图 254 中的比较器 E-Capture 逻辑正常工作。
子模块 2 的周期似乎太短了。请阅读“ 56.3.18.3 以低于子模块 0 的频率运行子模块”,并尝试为子模块 2 选择较低频率的时钟源,例如AUX_CLK或EXT_CLK 。
嗨@Robin_Shen ,
我通过正确配置 MCTRL 和 CAPTCTRLB 寄存器,成功实现了外部频率测量。然而,测试表明我能达到的最低可测量频率为 5 kHz,而我的要求是支持低至 1 Hz 的频率。
我尝试调整了预分频器和预分频器备用配置,但并未观察到任何改进。能否请您提供一些建议和故障排除方法?非常感谢您的支持。