OpenEdv-开源电子网

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

终于调通了STM32F407的8路PWM不同频率占空比50%,精确输出PWM个数的程序。

[复制链接]

14

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2014-1-14
在线时间
18 小时
发表于 2015-5-30 15:31:47 | 显示全部楼层 |阅读模式
一天的成果,STM32F407同步输出8个不同频率的PWM波,每路PWM波可以设定任意的GPIO脚输出,同时又精确控制PWM的个数,又可以随时改变每路PWM的频率。按思路还可以再增加PWM的路数,只是没验证。高兴!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2014-1-14
在线时间
18 小时
 楼主| 发表于 2015-6-14 23:27:22 | 显示全部楼层
思路是按照STM32F4-Discovery_FW_V1.1.0例程里的Master_Workspace中的TimeBase做的,里面是做了一个定时器,不指定定时器引脚,在中断中反转引脚,所以引脚可以随意指定,PWM数是在中断中加了if判断语句,
if (TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET)
 {
    TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);
    if(motorset.Stroke)
   {
       STM_EVAL_PWMToggle(PWM1);
       LED_Toggle(X_CLK);
       motorset.Stroke--;
   }else LED_Off(X_CLK);
  capture = TIM_GetCapture1(TIM3);
   TIM_SetCompare1(TIM3, capture + motorset.Speed[0]);
 }

motorset.Stroke是PWM脉冲数的2倍。后面的else 是如果没有输出,则指定引脚输出你想要的电平。理论是你加几个定时器就可以输出定时器*4个PWM波,每个都可以控。我只实验了2个定时器,是正常的。我只需要6个PWM波,每个波的频率不同,占空比一样,最主要的是实现同步,而且互不影响。
回复 支持 1 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-5-30 22:50:57 | 显示全部楼层
恭喜恭喜。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2014-8-15
在线时间
4 小时
发表于 2015-6-9 16:27:09 | 显示全部楼层
楼主,有没有程序啊,学习学习
回复 支持 反对

使用道具 举报

13

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2015-6-8
在线时间
2 小时
发表于 2015-6-9 17:30:31 | 显示全部楼层
楼主,求程序
回复 支持 反对

使用道具 举报

77

主题

521

帖子

0

精华

高级会员

Rank: 4

积分
729
金钱
729
注册时间
2014-9-30
在线时间
124 小时
发表于 2015-6-9 17:30:44 | 显示全部楼层
不同频率的 WM ,也不错。。但是:个人觉得 传统的 输出更可靠——

传统的 WM 输出:即使 CPU 停在 【断点】 上,PWM 照样有固定输出。
回复 支持 反对

使用道具 举报

14

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2014-1-14
在线时间
18 小时
 楼主| 发表于 2015-6-14 23:28:46 | 显示全部楼层
最新版的是stm32cubef4\Projects\STM324xG_EVAL\Examples\TIM\TIM_OCToggle这个全程。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-10-22
在线时间
0 小时
发表于 2015-10-22 11:13:37 | 显示全部楼层
你好   看了你的“一天的成果,STM32F407同步输出8个不同频率的PWM波,每路PWM波可以设定任意的GPIO脚输出,同时又精确控制PWM的个数,又可以随时改变每路PWM的频率。”
我也在做但是调不出来呀   能不能给我发一份你的程序啊     万分感谢!谢谢啦
回复 支持 反对

使用道具 举报

14

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2014-1-14
在线时间
18 小时
 楼主| 发表于 2015-12-7 21:22:50 | 显示全部楼层
呵呵,程序改了,因为我发现这样实现PWM波不能做到可以输出任意频率的,而只能输出2的N次幂的波,也就是分频,所以同时用了8个定时器,这样就可以输出8路1M以内的任意频率的波。
回复 支持 反对

使用道具 举报

4

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2012-9-20
在线时间
19 小时
发表于 2016-1-27 10:19:06 | 显示全部楼层
你有没有发现在ARR寄存器溢出时会有个占空比不对的波形
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2015-6-5
在线时间
1 小时
发表于 2016-2-22 15:50:02 | 显示全部楼层
楼主果真好人啊
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2015-6-5
在线时间
1 小时
发表于 2016-2-22 15:50:43 | 显示全部楼层
然而有程序可以分享吗?
回复 支持 反对

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1679
金钱
1679
注册时间
2014-2-25
在线时间
229 小时
发表于 2016-2-23 19:23:03 | 显示全部楼层
用软件模拟的方式产生的?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-11-22
在线时间
2 小时
发表于 2016-5-9 10:53:54 | 显示全部楼层
不错!!!!
回复 支持 反对

使用道具 举报

6

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2016-3-25
在线时间
16 小时
发表于 2016-5-9 21:08:42 | 显示全部楼层
PWM波的个数楼主是怎么设定的?我的思路是在while(num<100){ TIM_SetCompare1(TIM14,led0pwmval);                        num++;}这样结果不行。。。。。。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2015-9-8
在线时间
0 小时
发表于 2016-6-2 16:03:21 | 显示全部楼层
牛叉叉
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-5-5
在线时间
4 小时
发表于 2016-9-18 17:15:27 | 显示全部楼层
楼主你好,我也正在调这个程序,你qq多少,可以买你的程序吗
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-5-5
在线时间
4 小时
发表于 2016-9-18 17:15:50 | 显示全部楼层
我qq 280990169
回复 支持 反对

使用道具 举报

18

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2014-3-24
在线时间
5 小时
发表于 2017-4-27 20:35:18 | 显示全部楼层
你用了8个定时器实现8个不同频率的PWM波?我以为你用2个定时器输出8个不同频率的PWM波呢
回复 支持 反对

使用道具 举报

95

主题

549

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3293
金钱
3293
注册时间
2016-1-7
在线时间
541 小时
发表于 2018-5-9 11:24:36 | 显示全部楼层
8路PWM,是用定时器实现的吗?
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-9-9
在线时间
28 小时
发表于 2018-8-1 19:30:42 | 显示全部楼层
赞一个
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2019-12-10
在线时间
3 小时
发表于 2019-12-10 17:50:14 | 显示全部楼层
你这个中断方式吧,这个不难
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-7-20
在线时间
1 小时
发表于 2019-12-14 15:51:42 | 显示全部楼层
用LM3S做过,硬件6路PWM,频率,周期,占空比都独立可调,使用作马达控制几年了,棒棒的
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2020-12-1
在线时间
2 小时
发表于 2021-3-12 23:02:55 | 显示全部楼层
感谢分享!!!!
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2016-3-5
在线时间
42 小时
发表于 2021-9-6 14:13:46 | 显示全部楼层
11111111
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-4-13
在线时间
4 小时
发表于 2024-10-14 20:05:25 | 显示全部楼层
采用中断实现的嘛
回复 支持 反对

使用道具 举报

13

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
350
金钱
350
注册时间
2018-11-2
在线时间
78 小时
发表于 2024-10-26 15:08:40 | 显示全部楼层
还是学学FPGA吧,毕竟这种软件模拟的方式频率上不去
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 05:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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