OpenEdv-开源电子网

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

利用TIM1产生3通道6路PWM,要求3个通道相位相差60度 原子大哥帮帮看看吧

[复制链接]

15

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2012-7-5
在线时间
6 小时
发表于 2013-9-4 16:57:02 | 显示全部楼层 |阅读模式
具体问题如图所示


从图中可以看出,3个通道的频率占空比都是一样的,并且不需要改变占空比一直50%就可以,但是需要频率的改变(3通道频率同时改变)
现在可以产生6路PWM,但是相位的调整实在不知道该怎么才好,看过官方的程序,可以利用中断和各种比较模式产生不同通道的频率调节和占空比调节,但是相位的调节还是没有想到很好的办法,还请原子哥和各位大神帮帮忙。想想办法
相信自己,我能行
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2012-7-5
在线时间
6 小时
 楼主| 发表于 2013-9-4 17:07:56 | 显示全部楼层
其实实现相位的变化无非就是利用延时,如果延时1/6个周期那么相位就变化了,但是TIM1的3个通道并不能单独控制,除非利用中断来回扫描,感觉相位的实现变的挺困难的,一直想不到好的办法
相信自己,我能行
回复 支持 反对

使用道具 举报

15

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2012-7-5
在线时间
6 小时
 楼主| 发表于 2013-9-4 17:21:50 | 显示全部楼层
在其他论坛上也有相关的讨论,其中一个的解决方法

“搞定了!从定时器的框图上看,使能4个通道的线只有一根,所以不能分别开启和关闭,但是不同的通道可以有不同的CCxI寄存器配置,用TIM_ITConfig(TIM2 , TIM_IT_CC1, ENABLE);或DISABLE,直接开中断或关中断,开启之后再重新置计数值,就可以实现我想要的功能了”

这里他用的是TIM2的4个通道来实现各个通道分别开启和关闭,但是仔细想想还是有点问题,我并不需要分别控制各个通道,只需要依次开启各个通道,只要相邻两通道相差60度就可以了。还希望原子哥和各位大神能帮忙想想办法呀,谢谢啦!
相信自己,我能行
回复 支持 反对

使用道具 举报

15

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2012-7-5
在线时间
6 小时
 楼主| 发表于 2013-9-4 20:54:43 | 显示全部楼层
难道只能用example里面的6step方法吗?
感觉很笨啊!哎
  /*-----------------------------------------------------------------------------
  The STM32F10x TIM1 peripheral offers the possibility to program in advance the 
  configuration for the next TIM1 outputs behaviour (step) and change the configuration
  of all the channels at the same time. This operation is possible when the COM 
  (commutation) event is used.
  The COM event can be generated by software by setting the COM bit in the TIM1_EGR
  register or by hardware (on TRC rising edge).
  In this example, a software COM event is generated each 100 ms: using the Systick 
  interrupt.
  The TIM1 is configured in Timing Mode, each time a COM event occurs, 
  a new TIM1 configuration will be set in advance.
  The following Table  describes the TIM1 Channels states:
              -----------------------------------------------
             | Step1 | Step2 | Step3 | Step4 | Step5 | Step6 |
   ----------------------------------------------------------
  |Channel1  |   1   |   0   |   0   |   0   |   0   |   1   |
   ----------------------------------------------------------
  |Channel1N |   0   |   0   |   1   |   1   |   0   |   0   |
   ----------------------------------------------------------
  |Channel2  |   0   |   0   |   0   |   1   |   1   |   0   |
   ----------------------------------------------------------
  |Channel2N |   1   |   1   |   0   |   0   |   0   |   0   |
   ----------------------------------------------------------
  |Channel3  |   0   |   1   |   1   |   0   |   0   |   0   |
   ----------------------------------------------------------
  |Channel3N |   0   |   0   |   0   |   0   |   1   |   1   |
   ----------------------------------------------------------
  -----------------------------------------------------------------------------*/
相信自己,我能行
回复 支持 反对

使用道具 举报

15

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2012-7-5
在线时间
6 小时
 楼主| 发表于 2013-9-5 12:39:36 | 显示全部楼层
哎,还是有问题呀!求关注啊,原子哥帮帮忙看看,谢谢了
相信自己,我能行
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-5 19:07:01 | 显示全部楼层
你这个应该用定时器的输出比较模式,很好实现,今天特地花时间帮你写了个代码,呵呵,顺便作为我们战舰板的扩展实验6.
通过定时器3的输出比较模式,在PC6~PC9,输出4路PWM,每路PWM频率为500Hz,占空比为50%,每一路PWM相位差为45°

我的示波器只有2个通道,如下图所示:


通道1接的是PC6,通道2接的是PC7,可以看到他们的时间差是250us,一个周期是2ms(500Hz),刚好是1/8个周期,即45°。符合设计要求。

楼主的需要,只需要在我这个工程的基础上稍微修改一下,即可达到你的要求了。

扩展实验6 输出比较模式测试实验.rar

61.95 KB, 下载次数: 993

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2012-7-5
在线时间
6 小时
 楼主| 发表于 2013-9-5 19:46:56 | 显示全部楼层
哇哇,谢谢原子哥的帮助,太感动了,等我调出来了,我就公布出来供大家讨论学习。

谢谢原子哥,终于有了结果,已经在扩展实验6那一帖公布了我的代码,这里我也把程序贴出来,有始有终啊,呵呵。

6路相位相差60度PWM输出实验.rar

1.78 MB, 下载次数: 1583

相信自己,我能行
回复 支持 反对

使用道具 举报

9

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2011-6-11
在线时间
0 小时
发表于 2014-1-25 15:57:27 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
回复【7楼】方成无解:
---------------------------------
原子哥的这个方法,出来的严格来讲不是PWM波,因为占空比无法任意调节

原子哥,你有没有既能移相又能调节占空比的方法
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-28 11:58:49 | 显示全部楼层
回复【8楼】trusture:
---------------------------------
没有了。我就知道这个办法,呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
538
金钱
538
注册时间
2012-7-19
在线时间
63 小时
发表于 2014-2-2 16:52:38 | 显示全部楼层
回复【8楼】trusture:
---------------------------------
要想占空比可变也是可行的,只需要能够任意修改输出比较值。
步进电机调速一个道理,思路是用dma通道传递预先计算好的输出比较值就可以了
回复 支持 反对

使用道具 举报

48

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2015-4-6
在线时间
3 小时
发表于 2015-5-8 10:06:08 | 显示全部楼层
回复【8楼】trusture:
---------------------------------

请问你要这样的波形用在什么地方。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2021-11-7
在线时间
0 小时
发表于 2021-11-7 23:53:22 | 显示全部楼层
正点原子 发表于 2013-9-5 19:07
你这个应该用定时器的输出比较模式,很好实现,今天特地花时间帮你写了个代码,呵呵,顺便作为我们战舰板的 ...

下载了这个代码,没出现脉冲。。。。。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 09:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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