打印
[Kinetis]

PWM控制呼吸灯

[复制链接]
2269|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Mancherstun|  楼主 | 2015-12-8 20:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PWM输出开MCU开发过程中经常使用到,比如电机控制等等地方!!
今天就给大家分享一下FRDM-KL02Z实现的PWM输出,为了看效果,用PWM输出控制LED灯,实现灯的渐亮效果的呼吸灯。

开发环境仍就是:CW10.6+PE+FRDM-KL02Z+MiniDock
CW的使用方法依然见:CW10.6开发FRDM-KL02Z

首先来描述一下效果:
先看电路,我这里选择的是FRDM-KL02Z板子上的绿色LED,可以看到,绿色LED接到了PTB7引脚,而这个引脚是TPM1的通道0,那我们就用TPM1_CH0输出PWM波形,要求PWM周期1ms,脉冲宽度980us开始逐渐减小到20us,每次减小20us

1、新建工程PWM_TEST,如下图:

2、在PE中添加PWM组件
02.png (61.73 KB, 下载次数: 0)
下载附件
2015-12-5 21:38 上传




相关帖子

沙发
Mancherstun|  楼主 | 2015-12-8 20:35 | 只看该作者
3、双击组件,进入组件配置界面,选择TPM1_COV,并选择相应的输出引脚,允许中断。

进行周期配置,在这里设置1ms

配置脉宽,这里初始设置20us

配置最终效果如下图

4、使能下面的setDutyUs函数和PWM1_OnEnd事件


使用特权

评论回复
板凳
Mancherstun|  楼主 | 2015-12-8 20:36 | 只看该作者
5、在event.c中添加如下代码
实现每30ms改变一次输出脉冲宽度

6、编译下载后运行,效果如下图:

可以看出实现了呼吸灯效果!!

===============================================
下面来分析一下PWM的中断时间的处理过程!
1、还是在PE生成的代码中找到中断向量,如下图

2、追踪,发现在如下图TPM的溢出中断中首先清标志位,然后调用OnCounterRestart事件


使用特权

评论回复
地板
Mancherstun|  楼主 | 2015-12-8 20:37 | 只看该作者
3、在OnCounterRestart事件中调用了PwmLdd1_OnEnd函数

4、在PwmLdd1_OnEnd函数中调用了我们用户的PWM1_OnEnd事件函数,修改PWM的输出脉冲宽度


以上便是TPM实现一路PWM输出的开发笔记,希望大家多多交流!!



使用特权

评论回复
5
Mythx| | 2015-12-8 23:07 | 只看该作者
看帖前先顶一下!

使用特权

评论回复
6
Mancherstun|  楼主 | 2015-12-16 20:13 | 只看该作者
Mancherstun 发表于 2015-12-8 20:37
3、在OnCounterRestart事件中调用了PwmLdd1_OnEnd函数

4、在PwmLdd1_OnEnd函数中调用了我们用户的PWM1_OnE ...

除了用PWM能够实现呼吸灯,还能用别的方法吗?
这个PWM是用来控制电流的吗

使用特权

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

本版积分规则

35

主题

294

帖子

2

粉丝