查看: 3178|回复: 8

[已解决] KL25Z128单个定时器如何输出产生多路不同频率的PWM?

[复制链接]

该用户从未签到

32

主题

138

帖子

0

中级会员

Rank: 3Rank: 3

积分
390
最后登录
2017-12-29
发表于 2017-2-15 23:00:11 | 显示全部楼层 |阅读模式
各位大神,用一个定时器产生多路不同频率【1hz、3hz,5hz,7hz。。】的PWM,怎么搞?

我现在想到的就是计算出PWM的周期,定时器定时时间为0.268ms,每达到对应的频率对应的周期时间就控制GPIO输出一路模拟的PWM。但是感觉这种方法不够灵活。
还有就是想问下KL25的每个TPM模块不是有6个通道吗,可以输出6路不同频率的PWM吗?如果可以具体设置哪些寄存器。

(新手求轻虐。。)
挖坑在此,欢迎并感谢任何相关的回复。

最佳答案

楼主你好! 不好意思,回复迟了。 感谢你自己的解决方案分享。 这里回答下你一楼关于TPM的问题,TPM是有6个通道,但是对于同一个TPM硬件模块,以及配套的PWM引脚来说,只能输出相同频率的PWM,因为这些通道用的时钟 ...
回复

使用道具 举报

该用户从未签到

32

主题

138

帖子

0

中级会员

Rank: 3Rank: 3

积分
390
最后登录
2017-12-29
 楼主| 发表于 2017-2-16 08:32:55 | 显示全部楼层
没人吗?自己顶!
回复 支持 反对

使用道具 举报

该用户从未签到

32

主题

138

帖子

0

中级会员

Rank: 3Rank: 3

积分
390
最后登录
2017-12-29
 楼主| 发表于 2017-2-16 08:38:31 | 显示全部楼层
本帖最后由 胡孟龙 于 2017-2-16 09:00 编辑

void Lptmr_isr()
{
        static int i=0;
        static int j=0;
        static int k=0;
        LPTMR_isr_inti();
        i++;
        j++;
        k++;
        if(((i%100)==0)&&(i!=0))//判断5hz半周期是否记满
                {Blue_LED_NegVal(Blue_LED_DeviceData);i=0;}
        if(((j%167)==0)&&(j!=0))//判断3hz半周期是否记满        
                {Green_LED_NegVal(Green_LED_DeviceData);j=0;}
        if(((k%500)==0)&&(k!=0))//判断1hz半周期是否记满
                {Red_LED_NegVal(Red_LED_DeviceData);k=0;}
}
这是我目前的想法,定时器周期是0.001ms,中断周期1ms,但是觉得这个思路不好,又说不上哪里不好。还有就是可能那里程序写的还有问题,所以结果还没有出来
回复 支持 反对

使用道具 举报

该用户从未签到

32

主题

138

帖子

0

中级会员

Rank: 3Rank: 3

积分
390
最后登录
2017-12-29
 楼主| 发表于 2017-2-16 09:41:01 | 显示全部楼层
怎么没有人回答啊
回复 支持 反对

使用道具 举报

该用户从未签到

32

主题

138

帖子

0

中级会员

Rank: 3Rank: 3

积分
390
最后登录
2017-12-29
 楼主| 发表于 2017-2-16 11:16:14 | 显示全部楼层
顶一下
回复

使用道具 举报

该用户从未签到

32

主题

138

帖子

0

中级会员

Rank: 3Rank: 3

积分
390
最后登录
2017-12-29
 楼主| 发表于 2017-2-17 11:48:16 | 显示全部楼层
已经找到解决方案了,发一段启发性文字:
        我们可以取内部RAM中一个单元,取名为INCPI(Increase Per Interrupt),在中断中,装完T0初值后,用INC INCPI指令将其加1。从这个单元中,无论中断程序还是主程序,都可以从中获得20mS的1~256之间任意整数倍的信号。例如:有一段向数码管送显的程序,需要每0.5秒执行一次以便刷新显示器,便可以设一单元(称为等待单元)W_DISP,用/MOV A,INCPI/ADD A,#25/MOV W_DISP,A/语句让其比当前的INCPI值大25,然后在每次中断中检查是否于INCPI值相等。若相等,说明已过了25个中断周期,便执行送显程序,并且让W_DISP再加上25,等待下个0.5秒。我们可以设置多个等待单元,以便取出多个不同的时基信号。让中断程序在每次中断时依次查询各个等待单元是否与INCPI相等,若相等,则执行相应的处理,并重新设置该等待单元的值,否则跳过。例如:用0.5秒信号刷新或闪烁显示器,用1秒信号产生实时时钟,或输出一定频率的方波,以一定间隔查询输入设备等。

没人回复让我很失望啊
回复 支持 反对

使用道具 举报

该用户从未签到

32

主题

138

帖子

0

中级会员

Rank: 3Rank: 3

积分
390
最后登录
2017-12-29
 楼主| 发表于 2017-2-17 11:49:18 | 显示全部楼层
答案请看楼主自己的回复。
回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25442
最后登录
2025-9-4
发表于 2017-2-17 12:51:21 | 显示全部楼层
楼主你好!
不好意思,回复迟了。
感谢你自己的解决方案分享。
这里回答下你一楼关于TPM的问题,TPM是有6个通道,但是对于同一个TPM硬件模块,以及配套的PWM引脚来说,只能输出相同频率的PWM,因为这些通道用的时钟还是一个时钟。
回复 支持 反对

使用道具 举报

该用户从未签到

32

主题

138

帖子

0

中级会员

Rank: 3Rank: 3

积分
390
最后登录
2017-12-29
 楼主| 发表于 2017-3-27 10:22:19 | 显示全部楼层
小恩GG 发表于 2017-2-17 12:51
楼主你好!
不好意思,回复迟了。
感谢你自己的解决方案分享。

谢谢回复!时隔一个多月,再一次用到了KL25Z128,不过这次用到的是ADC、DAC、Uart这3个peripheral module。有问题希望多指点啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-6 03:40 , Processed in 0.113425 second(s), 30 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表