打印
[Kinetis]

KE02Z FTM2 互补PWM控制

[复制链接]
2082|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
KE02Z FTM2 模块比较复杂。在PE配置中如下配置参数,示波器中出现插入死区的互补控制波形,但是在死区时间内控制信号为高,这不符合我的要求,需要为低,请高手指导

FTM2 complementary output.png (45.76 KB )

FTM2 complementary output.png

FTM2.png (51.44 KB )

FTM2.png

相关帖子

沙发
FSL_TICS_Robin| | 2015-6-10 15:34 | 只看该作者
建议你把配置完整地截图,或者干脆将工程打包上传以便大家分析问题。
你需要的其实就是类似参考手册“26.4.14 Deadtime insertion”章节波形的PWM波咯?
是否检查过PE生成代码,其寄存器是否与手册上的描述匹配?

使用特权

评论回复
板凳
FSL_TJN_Jackie|  楼主 | 2015-6-10 17:09 | 只看该作者
感谢Robin的回答。是的,就是Deadtime insertion”章节波形的PWM波。不过现在已经解决了。原因是Channel output polarity 应该调整为为高。
另外一个问题是我希望用FTM1 的 input capture 功能捕获外部的clock信号的上升沿。用PE 配置后开启FTM1中断,并设定了中断名称,那么接下来如何使用该中断,我是不是还要在中断向量表中指定该中断对应的向量号? 谢谢。

FTM2_output_polarity_adjust.png (47.91 KB )

FTM2_output_polarity_adjust.png

FTM2 output_polarity.png (49.71 KB )

FTM2 output_polarity.png

使用特权

评论回复
地板
FSL_TICS_Robin| | 2015-6-10 17:32 | 只看该作者
如果你的PE用的是Peripheral Initialization级别的Init_FTM实现输入捕捉,那么哪怕你在Properties里使能了中断并填写了中断服务名称。依旧是需要自己将FTM2.c里的PE_ISR(中断服务函数名)拷贝到在Event.c或main.c里实现。
中断向量表Vectors.c里已经根据你定义名称注册好了。

使用特权

评论回复
5
FSL_TJN_Jackie|  楼主 | 2015-6-10 18:43 | 只看该作者
是的, 我用的是Peripheral Initialization级别的Init_FTM。我用FTM1的目的是捕获外部的clock信号的上升沿(请见附图),当捕获到第一个上升沿后,开启FTM中断。然后开启FTM2 输出带死区的互补PWM波(这个通过调用已调试好的FTM2_init函数实现了PWM波)。同时我需要让FTM1计数外部的clock信号,待clock结束,FTM2关闭输出。这是我想要实现的功能。在附图中我给出了目前我的程序。请您帮我看看为何我进不了中断?我的标志位 flag 没有置1?
谢谢。

capture_pic.png (46.03 KB )

capture_pic.png

FTM1_input_capture.PNG (166.61 KB )

FTM1_input_capture.PNG

FTM1_input_capture1.PNG (162.17 KB )

FTM1_input_capture1.PNG

使用特权

评论回复
6
FSL_TICS_Robin| | 2015-6-11 11:21 | 只看该作者
FSL_TJN_Jackie 发表于 2015-6-10 18:43
是的, 我用的是Peripheral Initialization级别的Init_FTM。我用FTM1的目的是捕获外部的clock信号的上升沿 ...

中断服务函数提示让清除的标志是引起FTM模块进入中断的相应标志,比如捕获到上升沿后对应通道的CHnF标志就会被置1,需要你手动清除。

使用特权

评论回复
7
FSL_TICS_Robin| | 2015-6-11 11:22 | 只看该作者
你先用仿真器调试:在中断服务函数里打个断点,看是否无法停在中断服务函数里?

使用特权

评论回复
8
FSL_TJN_Jackie|  楼主 | 2015-6-11 13:41 | 只看该作者
您说的对,我后来在中断处理函数中user code 结束添加一条语句用于复位CHnF标志位,FTM0_C0SC &= ~(1<<7);  现在能够捕获到外部时钟的上升沿,然后产生FTM2 PWM 波形,请见附图中。感谢。
另外,FTM0 input capture 是单次捕捉,还是能多次捕捉呢?看您给你figure,如果我在中断处理函数末尾复位CHnF标志位,那么我外部时钟的6个上升沿会被重复捕获。而我要实现捕获单次上升沿从而触发FTM2 PWM 波的话,也许我code需要适当修改位置,不能把它放在for循环中。

PWM trigger by ext-clock..png (57.01 KB )

PWM trigger by ext-clock..png

使用特权

评论回复
9
FSL_TICS_Robin| | 2015-6-11 14:23 | 只看该作者
FSL_TJN_Jackie 发表于 2015-6-11 13:41
您说的对,我后来在中断处理函数中user code 结束添加一条语句用于复位CHnF标志位,FTM0_C0SC &= ~(1 ...

多次捕捉
你的代码现在会致使FTM2重复初始化,这个就得根据你的需求来修改代码了。

使用特权

评论回复
10
FSL_TJN_Jackie|  楼主 | 2015-6-11 18:21 | 只看该作者
感谢Robin的回答。我对FTM2设置的clock是40khz, 25us. 可是产生的FTM2 PWM 是20Khz的。即便我修改Clock setting中的Module counter 使得PE计算出的peroid是25us,拿示波器测的频率还是20KHz,想请问在component inspector property里我是不是还要设置其他参数。因为我看到FTM2 的clock绝对可以超过40Khz.

使用特权

评论回复
11
FSL_TJN_Jackie|  楼主 | 2015-6-11 18:28 | 只看该作者
请见附件中的截图,帮助我分析。

Period settting.PNG (39.09 KB )

Period settting.PNG

Period settting_No_match.PNG (57.61 KB )

Period settting_No_match.PNG

使用特权

评论回复
12
FSL_TICS_Robin| | 2015-6-12 09:36 | 只看该作者
FSL_TJN_Jackie 发表于 2015-6-11 18:28
请见附件中的截图,帮助我分析。

PE修改完成后需要点击 按钮重新生成代码,然后集成开发环境再经过编译后调试。
如果觉得FTM频率不够快,可以将Prescaler改成divide by 1

使用特权

评论回复
13
FSL_TJN_Jackie|  楼主 | 2015-6-12 13:00 | 只看该作者
频率还是对不上,我把配置图发出来您给看看。

Period_setting.PNG (50.25 KB )

Period_setting.PNG

Clock_setting.PNG (30.26 KB )

Clock_setting.PNG

使用特权

评论回复
14
FSL_TICS_Robin| | 2015-6-12 16:16 | 只看该作者
FSL_TJN_Jackie 发表于 2015-6-12 13:00
频率还是对不上,我把配置图发出来您给看看。

你的芯片没有用到外部晶振吗,怎么用了FEI模式?
如果有外部晶振,ICS mode选FEE 配置到20MHz的Core Bus频率,此时FTM频率比较好计算。

使用特权

评论回复
15
FSL_TJN_Jackie|  楼主 | 2015-6-15 09:32 | 只看该作者
按照FRDM板子上看,有个10M晶振,我已经找了个1M电阻并联在晶振两端,只是ICS mode 改变不了。PE产生code提示出错。这是怎么问题?

使用特权

评论回复
16
多多娃娃| | 2015-12-23 15:29 | 只看该作者
只会用 IAR 开来 PE可是好东西

使用特权

评论回复
17
多多娃娃| | 2015-12-23 15:30 | 只看该作者
可否 把 KE系类的 时钟 初始化 给弄的 简单点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

51

帖子

0

粉丝