原创 STM32系列之四旋翼(一)PWM输出与PWM仿真

2017-8-9 14:34 3858 17 17 分类: MCU/ 嵌入式

四旋翼如果驱动电机,定时器的PWM输出定然是必不可少的,今天的内容是跟着小马哥的视频,完成高级定时器1的4路PWM输出和如何使用Keil自带的仿真功能检验输出的PWM波。

要使用定时器输出我们需要的PWM,就要会配置定时器。我们直接看高级定时器的功能框图,从框图上看定时器都需要哪些配置:

图中的红色箭头表示一条通道,我们配置好这条通道沿线的寄存器就能输出我们需要的波形了,这条通道上,我标注了三个区域:1、2、3,这三个区域就是需要配置的:

区域1:时钟源选择,我们通过RCC_APB2PeriphClockCmd()就可以选择内部时钟源作为定时器的时钟;

区域2:这里主要是设置时基,通过自动重装载寄存器(TIMx_ARR)、计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)进行设置。对应库函数中的TIM_TimeBaseInit()函数,通过这个函数设置计数模式、预分频数、计数次数等,就可以得到我们想要的计时时间,比如我们要定时1s、1us,这个时间的长度就是通过在这个区域设置的,定时公式为:

T = (TIM_Period +1) X (TIM_Prescaler +1)/TIMxCLK ;

TIM_Period是计数次数,也就是自动重装载中的值,TIM_Prescaler是预分频系数,是预分频器中的值,TIMxCLK是时钟。

区域3:这个区域是输出比较通道的配置,包括输出比较的空闲模式、输出比较模式、极性、输出状态、捕获/比较寄存器等的设置,对应库函数的TIM_OCxInit()函数,其中捕获/比较寄存器是一个16位寄存器,装的是当前捕获/比较寄存器的值,通过设置这个值,我们就可以得到不同占空比的PWM。

另外,除了这些设置,我们还需要使能自动重装载寄存器ARR的预装载功能,失能捕获/比较寄存器CCR的预装载功能,对应的库函数为:

TIM_ARRPreloadConfig(TIM1, ENABLE);

TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);

失能CCR的预装载功能后,写入的值会立即传到捕获/比较寄存器,不用等到更新事件的发生。

其他的配置就不介绍了,大家可以参考官方例程。

配置好定时器后,我们怎样知道,到底有没有PWM输出呢,检测方法有好几种,视频中介绍的是利用Keil自带的仿真功能,下面我们就说说,这个仿真功能怎么使用:

步骤:

第一步:配置好定时器,运行程序,并且没有错误;

第二步:点击工具栏的“Options for target”,选择Debug选项卡,进行如下设置:

第三步:点击工具栏的“Start/Stop Debug”快捷键,然后点击“Setup”,进入下面的界面,点击红框表示的位置,添加仿真通道:

需要添加四次,即添加四个通道,因为我们有四路输出,添加通道的名称分别为:PORTA.8、PORTA.9、PORTA.10、PORTA.11,我们TIM1的四个输出通道是GPIO_8,GPIO_9,GPIO_10,GPIO_11,通道添加好后,点Close;

第四步:此时,已经有四个通道了,我们需要设置输出通道为数字输出,方法是:鼠标右键点击下图红框所示位置,选择bit即可,每一路都要设置;

第五步:点击工具栏的“Run”,启动仿真,就看到有四路输出了,神不神奇?

今天的内容到这里就结束了,真是收获满满呀……

如果有写的不合适的地方,还请大家多多指教。如果你有兴趣,也可以一起互相学习,共同进步。 (微信号 :c18093458455)

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
17
关闭 站长推荐上一条 /5 下一条