OpenEdv-开源电子网

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

新人求助,关于pwm死区时间

[复制链接]

17

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2012-11-27
在线时间
31 小时
发表于 2012-11-27 13:46:22 | 显示全部楼层 |阅读模式
TIM1->BDTR|=0x002D时得到的5us死区波形

 

用timer1互补输出,能得到周期为50us的波形,没死区的话占空比为50%,要得到5us的死区时间 ,不应该TIM1->BDTR|=0x00CD吗,我用TIM1->BDTR|=0x002D;居然得到了5us的死区,前者反而得不到,难道TDTS有问题,不等于72MHZ?

 void PWM_Init(u16 arr,u16 psc),
{        
 //此部分需手动修改IO口设置
  RCC->APB2ENR|=1<<11;      //TIM1时钟使能   
    RCC->APB2ENR|=1<<2;       //GPIOA时钟使能
    RCC->APB2ENR|=1<<3;       //GPIOB时钟使能

    GPIOA->CRH&=0XFFFFFF00;   //PA8,PA9输出
    GPIOA->CRH|=0X000000BB;   //复用功能输出 推挽式   
    GPIOA->ODR|=3<<8;         //PA8,PA9上拉

    GPIOB->CRH&=0XF00FFFFF;   //PB13,PB14输出
    GPIOB->CRH|=0X0BB00000;   //复用功能输出 推挽式   
    GPIOB->ODR|=3<<13;        //PB13,PB14上拉


 TIM1->ARR=arr;//设定计数器自动重装值
 TIM1->SC=psc;//预分频器分频
 
 TIM1->CCMR1|=6<<4;  //CH1 PWM1模式  
 TIM1->CCMR1|=1<<3; //CH1预装载使能 
  
  TIM1->BDTR|=0x002D;  //72Mhz算,若BDTR低八位为2D,则死区时间=13.89nsXDTG,不等于5us啊 。
不应该是BDTR低八位为CD,然后死区时间=13.89nsX(32+DTG)X8=5us ,就是这里没搞明白 
  TIM1->CCER|=1<<0;   //OC1 输出使能
   TIM1->CCER|=1<<2;      //CH1互补输出使能   
    
  TIM1->CCER&=~(1<<1); //OC1高电平有效
  TIM1->CCER&=~(1<<3); //OC1高电平有效
     TIM1->CR1|=8<<4; ;   //ARPE使能 ,左边沿对齐,向上计数
     TIM1->EGR|=1<<0; //计数器清零
 
     TIM1->BDTR|=1<<15;    //主输出使能(MOE=1)
     TIM1->CR1|=0x01;    //使能定时器1            
}   

主函数:
int main(void)
{  
 
  Stm32_Clock_Init(9); //系统时钟设置
 delay_init(72);      //延时初始化
 uart_init(72,9600);  //串口初始化
 LED_Init();      //初始化与LED连接的硬件接口
 WM_Init(399,8);  //9分频,PWM频率为20KHZ
    while(1)
 {
  
  TIM1->CCR1=200;
    
 } 
}

大神呢?求帮助!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2014-6-25
在线时间
5 小时
发表于 2014-9-16 14:30:23 | 显示全部楼层
我把时钟分割设为TIM_CKD_DIV2,实现5us死区时间,发现没什么作用!求解?
回复 支持 0 反对 1

使用道具 举报

19

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
512
金钱
512
注册时间
2012-11-18
在线时间
72 小时
发表于 2013-9-24 15:43:39 | 显示全部楼层
DT为死区持续时间,TDTS为系统时钟周期时长,Tdtg为系统时钟周期时长乘以倍数后的死区设置时间步进值。
在72M的定时器时钟下TDTS=1/72M=13.89ns.
所以以第一个公式,死区时间能以13.89ns的步进从0调整到127*13.89ns=1764ns
第二个公式则能(64+0)*2*13.89~(64+63)*2*13.89=1777.9ns~3528.88ns
换个角度看,就是(128~254)*13.89同理,
第三个公式就是3555.84ns~7000.56ns
换个角度看,就是(256~504)*13.89
第四个公式就是7111.68ns~14001.12ns
换个角度看,就是(512~1008)*13.89
回复 支持 1 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-11-27 17:58:19 | 显示全部楼层
 确定好Tdts,根据提供的公式计算就是了。见图:


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

使用道具 举报

17

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2012-11-27
在线时间
31 小时
 楼主| 发表于 2012-11-27 18:37:54 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
我也不太清楚这个Tdts,不是系统时钟吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-11-27 21:22:59 | 显示全部楼层
不是呢!
回复 支持 反对

使用道具 举报

17

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2012-11-27
在线时间
31 小时
 楼主| 发表于 2012-11-27 22:46:50 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
那这个Tdts是什么时间啊,哪里有设置么?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-11-28 00:11:14 | 显示全部楼层
回复【6楼】unkown:
---------------------------------
在<stm32参考手册>全文搜索:Tdts,你可以大概知道Tdts的由来,另外,注意看定时器的框图,这个很重要.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

17

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2012-11-27
在线时间
31 小时
 楼主| 发表于 2012-11-28 08:54:06 | 显示全部楼层
回复【7楼】正点原子:
回复【6楼】unkown: --------------------------------- 在<stm32参考手册>全文搜索:Tdts,你可以大概知道Tdts的由来,另外,注意看定时器的框图,这个很重要.
---------------------------------
谢谢原子大哥!
回复 支持 反对

使用道具 举报

1

主题

18

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2013-3-18
在线时间
0 小时
发表于 2013-4-27 18:08:39 | 显示全部楼层
楼主用keil软件下的逻辑分析仪调试的吧!不是硬件仿真 像用逻辑分析仪或者示波器,因为具体电路中可能有电容电阻等的影响...
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
发表于 2013-5-10 10:07:15 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
原子哥 能在你百忙分时候能看下我这个吗?
   

TDTS

TIM->CR1
CKD[1:0]: 时钟分频因子 
这2位定义在定时器时钟(CK_INT)频率、死区时间和由死区发生器与数字滤波器(ETR,TIx)所用的采样时钟之间的分频比例。 
00:tDTS = tCK_INT 
01:tDTS = 2 x tCK_INT 
10:tDTS = 4 x tCK_INT 
11:保留,不要使用这个配置 
就是根据TDTS来计算死区时间
TIM_TimeBaseStructure.TIM_ClockDivision = 0;  //72mhz 运与计算死区时间  我没分频  那TDTS 就是72mhz 算了?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-5-10 10:45:59 | 显示全部楼层
回复【10楼】电子好学者:
---------------------------------
fck_int是定时器的输入频率,没分频就是72M。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2012-4-12
在线时间
11 小时
发表于 2014-8-18 09:25:50 | 显示全部楼层
11楼正解。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-11-10
在线时间
0 小时
发表于 2014-11-10 16:39:12 | 显示全部楼层
Tdts为你设置TIM_ClockDivision过后的周期,若你设置1分频,即TIM_ClockDivision=TIM_CKD_DIV1,那么Tdts=1/72MHz=13.88us(假设时钟源周期为72MHz)
回复 支持 反对

使用道具 举报

6

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-3-20
在线时间
11 小时
发表于 2016-11-21 14:40:40 | 显示全部楼层
本帖最后由 杨胡 于 2016-11-21 14:51 编辑
lansing1648 发表于 2013-9-24 15:43
DT为死区持续时间,TDTS为系统时钟周期时长,Tdtg为系统时钟周期时长乘以倍数后的死区设置时间步进值。
在7 ...
TDTS为系统时钟周期时长,未必。看定时器有没有分频吧。

1.png
微博Sweeneycc
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 10:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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