OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3027|回复: 16

关于单个定时器多路输出PWM

[复制链接]

11

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2017-7-14
在线时间
25 小时
发表于 2017-8-7 18:56:50 | 显示全部楼层 |阅读模式
5金钱
如果我用一个定时器同时输出4路PWM,定时器的系数设置一次,那四路岂不是一样的?请问怎么输出不同的四路PWM?

最佳答案

查看完整内容[请看2#楼]

输出比较模式,论坛搜索
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2017-8-7 18:56:51 | 显示全部楼层
输出比较模式,论坛搜索
回复

使用道具 举报

11

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2017-7-14
在线时间
25 小时
 楼主| 发表于 2017-8-7 19:39:39 | 显示全部楼层
还有,103ZE和103rc的程序共用吗?
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-8-7
在线时间
1 小时
发表于 2017-8-7 21:48:20 | 显示全部楼层
理论上来讲按原子哥的方法设置出来的4路PWM频率是一样的,占空比可以不一样。想要一个定时器输出不同频率的PWM的话比较复杂,上网找资料看看。
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-4-1
在线时间
23 小时
发表于 2017-8-7 22:11:46 | 显示全部楼层
可以用一个定时器同时输出4路占空比不同的PWM波,需要你在主程序里设置比较值函数。比如:我想用定时器2的2,3通道输出占空比为50%和60%的PWM波,那么我就在主函数里设置TIM_SetCompare2(TIM2,arr*50%);和TIM_SetCompare3(TIM2,arr*60%);这两个函数就可以达到输出不同的PWM波,我也是最近才解决这个问题的,望采纳!
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-4-1
在线时间
23 小时
发表于 2017-8-7 22:17:36 | 显示全部楼层
PsychoZy 发表于 2017-8-7 19:39
还有,103ZE和103rc的程序共用吗?

不同容量的芯片所需的启动文件不一样,也仅仅是启动文件不一样,其它的程序配置都是一样的,就是有的芯片比如C8和ZE这两个系列,它们的启动文件分别为startup_stm32f10x_md.s和startup_stm32f10x_hd.s这两个。但是C8在使用时需要你自己包含所用到的头文件,比如我用到了stm32f10x_tim.h这个头文件里面的函数,我就需要在源文件里包含stm32f10x_tim.h这个头文件
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2017-7-31
在线时间
18 小时
发表于 2017-8-7 22:54:05 | 显示全部楼层
一个定时器的四路pwm是四个不同io口输出,而且四路的设置函数也不一样,分别是TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1),TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2),TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3),TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4),分别使能并设置不同的Compare就可以输出不同的pwm了
回复

使用道具 举报

10

主题

80

帖子

0

精华

高级会员

Rank: 4

积分
514
金钱
514
注册时间
2017-5-21
在线时间
82 小时
发表于 2017-8-8 00:46:43 | 显示全部楼层
我也是刚接触stm32不久,比较菜,我来说下我对定时器的了解,定时器功能有很多,可以做普通定时加中断、PWM波控制、编码器模式、脉冲计数等等,我记得PWM波,定时器2、3、4、5都可以产生pwm,其中每个定时器都能产生同频率不同占空比的pwm波(1个定时器4路),例如tim2,不用映射的方案,你就可以初始化设置TIM2下用于pwm输出的通道以及管脚,比如PA0\PA1\PA2\PA3这四个管脚,然后在主程序里设置TIM2对应的PWM的4个通道的占空比,这个是同频率的。如果要不同频率,我目前只知道用不同的定时器去做,比如做智能车,舵机一个定时器,电机一个定时器,所以定时器非常稀缺,这个四个稳定能用pwm,至于高级定时器TIM1和TIM8配置的时候要设置时钟比较复杂,我还没有认真看过,希望能帮到你!或者请教一下原子大佬,如何可以一个定时器输出不同频率的pwm,我觉得要么可以多次初始化pwm代码(重复调用时钟部分的代码,封装一下定时器的代码要可带参数的那种),不过这样太频繁,不过应该也可以实现。
回复

使用道具 举报

11

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2017-7-14
在线时间
25 小时
 楼主| 发表于 2017-8-8 12:52:18 | 显示全部楼层
夜妖壹号 发表于 2017-8-7 22:17
不同容量的芯片所需的启动文件不一样,也仅仅是启动文件不一样,其它的程序配置都是一样的,就是有的芯片 ...

谢谢,RCT6和ZEt6的启动程序应该是一样的吧?启动程序不同,那是不是MDK5那里C/C++选项卡里宏定义设置也要不同?
回复

使用道具 举报

11

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2017-7-14
在线时间
25 小时
 楼主| 发表于 2017-8-8 12:54:27 | 显示全部楼层
Anyint 发表于 2017-8-8 00:46
我也是刚接触stm32不久,比较菜,我来说下我对定时器的了解,定时器功能有很多,可以做普通定时加中断、PWM ...

可以的,我也是才接触32不到一个月,一起加油咯,昨天弄懂后发现你的理解是完全正确的,你有试过一个定时器输出PWM同时开启定时中断吗?
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-4-1
在线时间
23 小时
发表于 2017-8-8 19:46:09 | 显示全部楼层
PsychoZy 发表于 2017-8-8 12:52
谢谢,RCT6和ZEt6的启动程序应该是一样的吧?启动程序不同,那是不是MDK5那里C/C++选项卡里宏定义设置也 ...

RCT6和ZEt6的启动程序是一样的,flash>=256k就是大容量的了,启动程序不同,MDK5里C/C++选项卡里宏定义设置也要不同,这些原子视频头两讲里面都有说的
回复

使用道具 举报

10

主题

80

帖子

0

精华

高级会员

Rank: 4

积分
514
金钱
514
注册时间
2017-5-21
在线时间
82 小时
发表于 2017-8-8 20:07:46 | 显示全部楼层
PsychoZy 发表于 2017-8-8 12:54
可以的,我也是才接触32不到一个月,一起加油咯,昨天弄懂后发现你的理解是完全正确的,你有试过一个定时 ...

我没有试过,我猜一个恐怕不行(或者请教大佬们分享一下有什么好的方案),一般用两个定时器,一个做pwm控制,另一个用于中断控制吧
回复

使用道具 举报

11

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2017-7-14
在线时间
25 小时
 楼主| 发表于 2017-8-8 21:36:20 | 显示全部楼层
夜妖壹号 发表于 2017-8-8 19:46
RCT6和ZEt6的启动程序是一样的,flash>=256k就是大容量的了,启动程序不同,MDK5里C/C++选项卡里宏定义设 ...

记住了,多谢了
回复

使用道具 举报

11

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2017-7-14
在线时间
25 小时
 楼主| 发表于 2017-8-8 21:37:13 | 显示全部楼层
Anyint 发表于 2017-8-8 20:07
我没有试过,我猜一个恐怕不行(或者请教大佬们分享一下有什么好的方案),一般用两个定时器,一个做pwm ...

唉,实际做项目真的不像学啊,只要配置好可以用就行,还的考虑那么多
回复

使用道具 举报

1

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2016-11-25
在线时间
14 小时
发表于 2017-8-8 22:15:22 | 显示全部楼层
在你想要的channel   里面加入          TIM_OCInitStructure.TIM_Pulse = arr*x;  x是0-1  就是占空比,我这样调节的时候是能够出来的,我的PWM波输出没有用到中断
回复

使用道具 举报

10

主题

80

帖子

0

精华

高级会员

Rank: 4

积分
514
金钱
514
注册时间
2017-5-21
在线时间
82 小时
发表于 2017-8-8 22:36:05 | 显示全部楼层
正点原子 发表于 2017-8-7 18:56
输出比较模式,论坛搜索

学习啦,谢谢原子大佬,这个方案可以
回复

使用道具 举报

10

主题

80

帖子

0

精华

高级会员

Rank: 4

积分
514
金钱
514
注册时间
2017-5-21
在线时间
82 小时
发表于 2017-8-8 22:37:26 | 显示全部楼层
PsychoZy 发表于 2017-8-8 21:37
唉,实际做项目真的不像学啊,只要配置好可以用就行,还的考虑那么多

啊哈,这说明有一些定时器的特殊应用要翻看数据手册才行,里面是蛮详细的,就看领悟能力啦,毕竟例程不多哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-20 12:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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