OpenEdv-开源电子网

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

TIM1输出互补PWM问题

[复制链接]

5

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2011-8-31
在线时间
1 小时
发表于 2012-1-4 21:16:35 | 显示全部楼层 |阅读模式
在使用TIM1输出PWM波形的情况下,如何设置输出互补PWM波形?
PA9和PA10用作串口,如何设置才能输出PWM?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

130

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1878
金钱
1878
注册时间
2011-9-16
在线时间
421 小时
发表于 2012-1-4 22:09:42 | 显示全部楼层

回复【楼主位】 zhandy :
---------------------------------
#include<stm32f10x_lib.h>
#include"PWM.h"            // 头文件
#include"IOSET.h"     // 包含io口设置头文件
u16 pw1=0;
u16 pw2=5600;
u16 pw3=2800;
void PWM_Init( u16  arr,u16 psc)    //PWM初始化程序
   {
  RCC->APB2ENR|=1<<11;      // 使能定时器1时钟
  RCC->APB2ENR|=1<<2;               //使能IO口A时钟
  RCC->APB2ENR|=1<<3;               //使能IO口B时钟
    
  RCC->APB2ENR|=1<<0;               //开启辅助时钟
  GPIOB->CRH&=0X000FFFFF;     // 清除PB13PB14,15状态寄存器位 
  GPIOB->CRH|=0XBBB00000;     // 设定PB13PB14,15//TIM1CH1N,TIM1CHH2N CH3N输出
  GPIOA->CRH&=0XFFFFF000;     // 清除PA8,9,10状态寄存器位 
  GPIOA->CRH|=0X00000BBB;     // 设定PA8,9,10为复用功能TIM1CH1,2,3输出

  GPIOB->ODR|=1<<13;
  GPIOB->ODR|=1<<14;
  GPIOB->ODR|=1<<15;       // 输出上拉,低电平有效
  GPIOA->ODR|=1<<8;
  GPIOA->ODR|=1<<9;
  GPIOA->ODR|=1<<10;
  TIM1->CCR1=pw1;                //捕获比较预装载值
  TIM1->CCR2=pw2;
  TIM1->CCR3=pw3;
 
  TIM1->ARR=arr;        // 设定计数器自动重装值     
  TIM1->SC=psc;        // 预分频器不分频
  TIM1->BDTR|=0xCD;        // 死区时间设定
  TIM1->CCER|=1<<0;                 // TIM1CH1 通道开关 
   TIM1->CCER|=1<<2;                 // TIM1CH1N 通道开关
  TIM1->CCER|=1<<4;       // TIM1CH2 通道开关
  TIM1->CCER|=1<<6;                 // TIM4CH2N 通道开关
  TIM1->CCER|=1<<8;       // TIM4CH3 通道开关
  TIM1->CCER|=1<<10;                // TIM4CH3N 通道开关

 

  TIM1->CCMR1|=7<<4;       // TIM1CH1 PWM2模式
  TIM1->CCMR1|=7<<12;      // TIM1CH2 PWM2模式
  TIM1->CCMR2|=7<<4;       // TIM1CH3 PWM2模式
  TIM1->CCMR1|=1<<3;       // TIM1CH1 预装载使能
  TIM1->CCMR1|=1<<11;      // TIM1CH2 预装载使能
  TIM1->CCMR2|=1<<3;       // TIM1CH3 预装载使能
     TIM1->CR1|=0X80;       // CR1 ARPE自动重装载预装载允许位使能
  TIM1->BDTR|=1<<15;       // 刹车使能位置1,开启所有输出通道
  TIM1->CR1|=0X01;       // 使能定时计数器1
  //TIM1->EGR|=1<<0;
 }

以上是PWM.C 的代码,以及经过仿真测试的六路互补对称波形
除了串口还有其他下载方式


回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-1-4 22:18:12 | 显示全部楼层
谢谢楼上.
不过按我的理解(我没实际做过),互补输出我的理解就是相反的两个电平输出,这个是1,那个就是0,总是相反的.
PA9/PA10,应该设置复用输出就可以使用了吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

130

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1878
金钱
1878
注册时间
2011-9-16
在线时间
421 小时
发表于 2012-1-4 22:42:25 | 显示全部楼层
 


实际波形如上图,加了死区时间的,变频器,交流伺服驱动,永磁同步驱动,关键点是如何按所需要的正弦规律变化。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-1-4 22:56:55 | 显示全部楼层
楼上做这块的?
我没研究,呵呵.多多指教.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2245
金钱
2245
注册时间
2010-12-16
在线时间
202 小时
发表于 2012-1-5 00:30:20 | 显示全部楼层
回复【楼主位】zhandy:
---------------------------------
PA9和PA10如果用作串口了,就只能用PA8和PA11输出了。
PA8可以和PB13/PB7直接组成互补输出,代码如沙发。
由于没有CH4N,所以CH4只能由PA11输出,PA11的互补输出功能交给CH2N/CH3N,初始化时CH2和CH3不要使能输出,只使能CH2N或者CH3N,使用时同时把输出值赋给CCR2/CCR3和CCR4。因为存在临界问题,所以代码最好使能preload,并且确保不在update附近赋值。

如果真的需要两个或以上带死区互补输出,建议还是想办法把UART1 Remap掉吧。。
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

5

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2011-8-31
在线时间
1 小时
 楼主| 发表于 2012-1-5 22:10:45 | 显示全部楼层
回复【2楼】mackyming:
---------------------------------
小弟在此谢过,真是谢谢,受教了
回复 支持 反对

使用道具 举报

18

主题

82

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2011-10-27
在线时间
0 小时
发表于 2012-2-18 13:11:53 | 显示全部楼层
我用2楼的程序并未得到相应的输出,请问有人做过成功的演示吗?
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2012-5-23
在线时间
0 小时
发表于 2012-5-25 14:20:50 | 显示全部楼层
回复【2楼】mackyming:
你的上下两个图的波形怎么不全一样呢?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-4-28
在线时间
2 小时
发表于 2013-4-28 17:05:03 | 显示全部楼层
那个这种互补pwm可以控制直流电机吗
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
发表于 2013-5-4 14:44:42 | 显示全部楼层
回复【4楼】mackyming:
---------------------------------
求交流啊  小弟我现在也想用32 做无刷无位置的驱动
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
发表于 2013-5-10 22:39:46 | 显示全部楼层
回复【2楼】mackyming:
---------------------------------
求交流啊
!!!!!!!
回复 支持 反对

使用道具 举报

2

主题

20

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2012-9-6
在线时间
0 小时
发表于 2013-5-28 17:41:06 | 显示全部楼层
if (invert) {
        treg->CCER |= invBit;
    } else {
        treg->CCER &= ~invBit;
    }

这是我们MF里面的互补输出控制代码。

我很明白楼主的意思,其实你需要的就是差分脉冲,我们在工业上用来控制步进电机和伺服电机,哈哈!

在我们的控制板上,通过反向器实现互补,这样节省定时器资源,又不用复杂的编程。
我不相信神话,我只相信汗水!我不相信命运,我只相信双手!.Net/逆向/.Net Micro Framework嵌入式http://www.NewLifeX.com,Q群:1600838
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-8-14 01:02:28 | 显示全部楼层
多谢,学习了!
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
发表于 2013-8-14 10:05:33 | 显示全部楼层
二楼果然是人才啊
回复 支持 反对

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2013-3-16
在线时间
3 小时
发表于 2013-8-21 14:12:23 | 显示全部楼层
 不错 调试成功  多谢
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2012-11-6
在线时间
2 小时
发表于 2013-12-10 10:54:54 | 显示全部楼层
回复【16楼】耿安坤:
---------------------------------
你调试成功了! 求完整程序736931640@qq.com   我邮箱
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-1-18
在线时间
0 小时
发表于 2014-1-18 16:23:09 | 显示全部楼层
为什么这个程序能看到仿真波形,但在示波器上看不到?
回复 支持 反对

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-6-20
在线时间
0 小时
发表于 2014-7-3 11:29:50 | 显示全部楼层
回复【2楼】mackyming:
---------------------------------
请问,用通用定时器可以做到两个通道互补输出吗?
回复 支持 反对

使用道具 举报

51

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
357
金钱
357
注册时间
2014-6-16
在线时间
12 小时
发表于 2014-7-5 11:33:00 | 显示全部楼层
回复【2楼】mackyming:
---------------------------------
有库函数版本吗,谢谢分享
回复 支持 反对

使用道具 举报

29

主题

340

帖子

0

精华

高级会员

Rank: 4

积分
799
金钱
799
注册时间
2013-12-17
在线时间
100 小时
发表于 2014-7-6 11:22:34 | 显示全部楼层
回复【20楼】fjqzzhangzhibin:
---------------------------------
有 你上百度一下 就行 我是从阿莫论坛下的
就算有一天梦想成真,而你做好准备了吗?
回复 支持 反对

使用道具 举报

29

主题

340

帖子

0

精华

高级会员

Rank: 4

积分
799
金钱
799
注册时间
2013-12-17
在线时间
100 小时
发表于 2014-7-6 11:24:49 | 显示全部楼层
回复【19楼】魔法师:
---------------------------------
可以呀,但是不知道能不能带死区。我用定时器写过  但是没有死区
就算有一天梦想成真,而你做好准备了吗?
回复 支持 反对

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-6-20
在线时间
0 小时
发表于 2014-7-7 08:53:12 | 显示全部楼层
回复【22楼】老虎的菜:
---------------------------------
哦,这样呀,谢谢哈
回复 支持 反对

使用道具 举报

14

主题

173

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2011-10-14
在线时间
2 小时
发表于 2014-7-21 16:20:23 | 显示全部楼层
这里高手比较多。偶刚开始搞TIM1。有一点不明白,请求指点:
我的理解:
1. 因为TIM1的频率初始化时已经确定了,所以整个周期确定了。
2. TIM1->CCR1设置确定了,就意味着占空比被设定了。
3. 那为什么还要设置DeadTime呢?
举个例子,一个周期为50us, 正脉宽是20us,负脉宽是30us,那么占空比为20/50。DeadTime就可以计算出来:(30-20)/2 = 5us
就不需要自己设置了啊。
唯一的可能是死区的长度在前面和后面可以不相等,这样设定才有意义。

我的理解对吗?高手们!
回复 支持 反对

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2245
金钱
2245
注册时间
2010-12-16
在线时间
202 小时
发表于 2014-7-21 21:36:59 | 显示全部楼层
回复【24楼】smithlin:
---------------------------------
DeadTime的来源是电机驱动电路,为了避免上下开关管同时导通设计的同时关断时间,这个芯片的死区设计初衷是适应这种应用,或者类似的应用.

当然像你说的这么用也行,毕竟工具设计了用途,但不仅用于设计用途.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

14

主题

173

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2011-10-14
在线时间
2 小时
发表于 2014-7-22 17:01:18 | 显示全部楼层
回复【25楼】shihantu:
---------------------------------
多谢回复!理解了这个是为了电机控制的安全。
回复 支持 反对

使用道具 举报

3

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2011-12-1
在线时间
1 小时
发表于 2014-9-15 20:20:55 | 显示全部楼层
回复【2楼】mackyming:
---------------------------------
终于看到寄存器版,网上的都是库函数版的,我只看得懂寄存器版的!
给我发一份你的无刷电机的代码吧!先谢谢了!
邮箱:caiwenbin1981@126.com
回复 支持 反对

使用道具 举报

水也离不开鱼 该用户已被删除
发表于 2016-11-3 21:57:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 21:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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