新浦京81707con > 软件下载 > STM32高级定时器TIM1产生两路互补的PWM波

原标题:STM32高级定时器TIM1产生两路互补的PWM波

浏览次数:78 时间:2019-11-08

STM32尖端计时器TIM1发生两路互补的PWM波(带死区卡塔 尔(阿拉伯语:قطر‎,stm32tim1

测验情况:Keil 5.20.0.0 STM32F103RBT6 固件库版本:STM32F10x_StdPeriph_Lib_V3.5.0(2011)

图片 1

正文使用TIM1的坦途1,通道2,发生两路1khz,死区时间1us的抵补PWM波。

所采纳的IO口:由下图知,我们运用引脚为PA9,PA10,互补输出使用PB14,PB15

图片 2

一些代码如下:

图片 3

 1 /* 配置TIM1复用输出PWM时用到的I/O  */
 2 static void TIM1_GPIO_Config(void) 
 3 {
 4   GPIO_InitTypeDef GPIO_InitStructure;
 5 
 6   /* TIM1 clock enable */
 7   RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
 8 
 9   /* GPIOA and GPIOB clock enable */
10   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
11     
12   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9 | GPIO_Pin_10;
13   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
14   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
15 
16   GPIO_Init(GPIOA, &GPIO_InitStructure);
17 
18   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14 | GPIO_Pin_15;
19   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
20   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
21 
22   GPIO_Init(GPIOB, &GPIO_InitStructure);
23 
24 }

初始化IO

 开始化机械漏刻功用布局

 1 u16 CCR2_Val = 500;
 2 u16 CCR3_Val = 500;//占空比,周期为1000
 3 
 4 /*配置TIM1输出的PWM信号的模式,如周期、极性、占空比 */
 5 void TIM1_Mode_Config(void)
 6 {
 7     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 8     TIM_BDTRInitTypeDef      TIM1_BDTRInitStruct;
 9     TIM_OCInitTypeDef        TIM_OCInitStructure;
10 
11     /* Time base configuration */
12     TIM_TimeBaseStructure.TIM_Period = 1000-1; //计数周期,向上记到此数,计数值清零
13     TIM_TimeBaseStructure.TIM_Prescaler = 72-1;//定时器分频系数,Ftimer = 72M/(TIM_Prescaler 1) = 1ms
14     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//与死区时间分频有关
15     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式
16     TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
17     
18     /****** 配置BDTR寄存器,配置死区时间****************/
19     /*
20        定时器时钟 72M   TIM_ClockDivision = TIM_CKD_DIV1时,  Tdts = 13.89ns
21        0 - 1.764us  用算法一
22        1.778us - 3.505us  用算法二
23        3.556us - 7.000us  用算法三 
24        7.1117us - 14us    用算法四
25        需要更长时间,使用TIM_ClockDivision分频
26     */
27     TIM1_BDTRInitStruct.TIM_OSSRState = TIM_OSSRState_Disable;
28     TIM1_BDTRInitStruct.TIM_OSSIState = TIM_OSSIState_Disable;
29     TIM1_BDTRInitStruct.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
30     TIM1_BDTRInitStruct.TIM_DeadTime = 205; //死区时间  72:1us 172:3us 205:5us
31     TIM_BDTRConfig(TIM1,&TIM1_BDTRInitStruct);
32  
33 //    TIM1->BDTR |= 72;   //设置死区  注:上面那种方法也可以,这种快且简单
34     
35      /* PWM1 Mode configuration: Channel2 */
36      TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;//PWM2模式
37      TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
38      TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;//比较互补输出使能
39      TIM_OCInitStructure.TIM_Pulse = CCR2_Val;   //比较值,即占空比
40      TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //输出极性
41      TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;//互补输出极性
42      TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;//指定空闲状态下的TIM输出比较的引脚状态。
43      TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;//指定空闲状态下的TIM互补输出比较的引脚状态。
44      TIM_OC2Init(TIM1, &TIM_OCInitStructure);   //初始化通道二比较输出
45      TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);      //配置通道二,自动重装载使能
46 
47 
48     /* PWM1 Mode configuration: Channel3 */
49     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
50     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
51     TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
52     TIM_OCInitStructure.TIM_Pulse = CCR3_Val;
53     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
54     TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
55     TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
56     TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;      
57     TIM_OC3Init(TIM1, &TIM_OCInitStructure);
58     TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);    
59 
60     TIM_ARRPreloadConfig(TIM1, ENABLE);//重载装载值 ENABLE 立即生效,DISABLE 下一个比较周期生效
61 
62     /* TIM1 enable counter */
63     TIM_Cmd(TIM1, ENABLE);//使能定时器1
64     
65     TIM_CtrlPWMOutputs(TIM1, ENABLE);//使能PWM外围输出    
66 }

 

图片 4

 1 int main(void)
 2 {
 3     TIM1_GPIO_Config();
 4     TIM1_Mode_Config();    
 5     while(1)
 6     {
 7          TIM1->CCR2 = CCR2_Val;
 8          TIM1->CCR3 = CCR3_Val;
 9          CCR2_Val =5;
10          CCR3_Val =10;
11          if(CCR2_Val>900)  CCR2_Val = 100;
12          if(CCR3_Val>900)  CCR3_Val = 100;   
13          Delay_mS(200);
14     }
15 }

main函数

 

至于死区时间总括:

 先贴几张有关TIM机械钟的图:

率先张图:关于死区时间分频因子。(代码见,开头化停车计时器功效布局代码部分第14行所示卡塔尔国

图片 5

其次张图:死区时间估测计算

图片 6

图片 7

 

       定时器1时钟挂在APB2总线上,时钟为72M   当TIM_ClockDivision = TIM_CKD_DIV1时,  Tdts = 1/72M = 13.89ns
       0 - 1.764us  用算法一
       1.778us - 3.505us  用算法二
       3.556us - 7.000us  用算法三 
       7.1117us - 14us    用算法四
       需要更长时间,使用TIM_ClockDivision分频后(可2分,4分频),设置死区时间。

 

测验数据:

尝试现象:发生了两路死区时间为1us的补给PWM复信号,其作用都以1kHz,占空比在一成

  • 十分之七缕缕变动,通道三比通道二变通要快。

死区时间(以通道二为例):(黄:PA10  绿:PB15卡塔尔国

   图片 8

通道二抓拍波形  (黄:PA10  绿:PB15卡塔尔

图片 9

通道三抓拍波形  (黄:PA9 绿:PB14卡塔 尔(英语:State of Qatar)

图片 10

大路二和通道三  (黄:PA9  绿:PA10卡塔尔

图片 11

 

测验情形:Keil 5.20.0.0 STM32F103RBT6 固件库版本:STM32F10x_StdPeriph_Lib_V3.5.0(2011) 本...

4个常备定时器

占空比

STM32F103风流浪漫共有拾二个计时器,在那之中:

当流速計(TIM3_CNT卡塔 尔(阿拉伯语:قطر‎大于捕获/相比较贮存器(TIM3_CC福睿斯3卡塔 尔(阿拉伯语:قطر‎的值时,当时PB0电平就能扭转,输出高电平,计数器(TIM3_CNT卡塔尔国的值持续增加,

2个主导沙漏

还富有支撑针对一定的增量(正交)编码器和霍尔传感器电路

A福特Explorer昂科雷正是机关心注重装载存放器(TIMx_ARR);

duty cycle = (TIMx_CCRx/ TIMx_ARR 1)* 100%

不无行车制动器踏板输入功能,在紧迫的意况下那几个行车制动器踏板效用能够凝集PWM时域信号的输出

尖端沙漏都能够何况产生3路互补带死区时间的PWM实信号和同步独门的PWM非功率信号,

其中

2、输入捕获。

72M正是系统的效能;

此地只需求提一点微微网络朋友纠结的TIM_TimeBaseStructure.TIM_ClockDivision

0;那句话是怎么成效?其实细心看过手艺手册后意识那句话与PWM输出实验其实是没什么的,那句话是安装电火花计时器机械钟(CK_INT)频率与数字滤波器(ET翼虎,TIx)使用的采集样本频率之间的分频比例的(与输入捕获相关卡塔尔,0表示滤波器的频率和放大计时器的作用是均等的。

110:PWM形式1- 在前行计数时,大器晚成旦TIMx_CNT

失效电平;在向下计数时,意气风发旦TIMx_CNT>TIMx_CC帕杰罗1时通道1为无用电平(OC1REF=0),否

则为可行电平(OC1REF=1)。

111:PWM格局2- 在腾飞计数时,后生可畏旦TIMx_CNT

有效电平;在向下计数时,风华正茂旦TIMx_CNT>TIMx_CCEnclave1时通道1为可行电平,不然为无效电

平。

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出相比极性高,所以这里大家设置的CC2P是0,也正是暗中认可的OC2高电平有效。

图片 12

当TIM3_CNT=TIM3_ARR的值时,TIM3_CNT重新回到0继续计数,PB0电平翻转,输出低电平,那时候一个完好的PWM非确定性信号就出生了。

测量时间的装置3的第二个PWM通道对应是PB0这引脚,三角顶点的值便是TIM3_A奔驰M级君越寄放器的值,上海体育场合这条红线的值就TIM3_CCR3

还或许有二种形式调控作而成效:从格局调节和主情势调节。

本文由新浦京81707con发布于软件下载,转载请注明出处:STM32高级定时器TIM1产生两路互补的PWM波

关键词: 新浦京81707con 日记本

上一篇:正规澳门葡京app搭建基于Nginx环境的Nagios监控系统

下一篇:没有了