FTM0混用PWM和ICU
未解决
YTM32B1M系列
-
可以,但两个模块的时钟源/预分频要一致,并且要先初始化PWM再初始化ICU
-
HEX MC0 的 eTMR(FTM)同一个实例的不同通道可以分别给 Pwm 和 Icu 用,比如 CH0 做 PWM 输出、CH2 做 ICU 输入捕获。
但实例级资源是共用的,必须注意:
- 通道不能重复:同一个物理通道只能给一个模块。
- 中断向量不能重叠:eTMR 的 Ch0/Ch1、Ch2/Ch3、Ch4/Ch5、Ch6/Ch7 各共用一个向量。
- 溢出中断只能给一个模块:MC0 上 Icu 做信号测量必须开溢出中断,所以同一实例的 Pwm 要把 PwmEtmrOverflowIrq 配成 false;否则链接时会报 eTMRx_Ovf_IRQHandler 重复定义。
- 时钟源和预分频必须一致:不一致时后初始化的那个模块会把前者覆盖掉,导致 PWM 频率和 ICU 测量都出错(YCT 会直接报错)。
- MOD 共用:ICU 的测量结果是 捕获值 + 溢出次数 × (MOD+1),且查询时才读 MOD。所以 ICU 测量期间不要调用 Pwm_SetPeriodAndDuty() 改周期。
- MOD 不能太小:MOD+1 就是一个 PWM 周期,溢出中断频率等于 PWM 开关频率。PWM 频率太高会造成中断风暴,中断间隔要远大于 ISR 执行时间。
- MC0 上建议一个 eTMR 实例只配一个 ICU 信号测量通道(MC0 的溢出 ISR 是统一累加所有 ICU 通道的)。
因此建议:PWM 频率较高或多路 ICU 测量时,给 Pwm 和 Icu 分配不同的 eTMR 实例最稳妥;共用时确保以上条件都满足即可。