你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
《源》 发布时间:2017-9-6 08:20
本帖最后由 《源》 于 2017-9-6 08:25 编辑 ! t: O1 l# G) s- a8 e
1 D1 t! G3 X0 `5 D+ g+ h+ T6 c

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

1 f: I, E4 z& q: L
要使用定时器输出我们需要的PWM,就要会配置定时器。我们直接看高级定时器的功能框图,从框图上看定时器都需要哪些配置:
: w& ^9 R3 F7 c7 d/ S

- I; W# Q% ]1 k+ q4 k" s- S4 l7 [9 k5 b: ]* a( _/ r
图中的红色箭头表示一条通道,我们配置好这条通道沿线的寄存器就能输出我们需要的波形了,这条通道上,我标注了三个区域:1、2、3,这三个区域就是需要配置的:
区域1:时钟源选择,我们通过RCC_APB2PeriphClockCmd()就可以选择内部时钟源作为定时器的时钟;
9 p2 P# d. T, }" b( ^+ R
区域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是时钟。

" X) ?* }6 L3 i4 M
区域3:这个区域是输出比较通道的配置,包括输出比较的空闲模式、输出比较模式、极性、输出状态、捕获/比较寄存器等的设置,对应库函数的TIM_OCxInit()函数,其中捕获/比较寄存器是一个16位寄存器,装的是当前捕获/比较寄存器的值,通过设置这个值,我们就可以得到不同占空比的PWM。
- h% b: @+ t# y: i
另外,除了这些设置,我们还需要使能自动重装载寄存器ARR的预装载功能,失能捕获/比较寄存器CCR的预装载功能,对应的库函数为:
TIM_ARRPreloadConfig(TIM1, ENABLE);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
失能CCR的预装载功能后,写入的值会立即传到捕获/比较寄存器,不用等到更新事件的发生。
其他的配置就不介绍了,大家可以参考官方例程。
8 z+ k$ E5 `2 p* h
配置好定时器后,我们怎样知道,到底有没有PWM输出呢,检测方法有好几种,视频中介绍的是利用Keil自带的仿真功能,下面我们就说说,这个仿真功能怎么使用:
步骤:
第一步:配置好定时器,运行程序,并且没有错误;
第二步:点击工具栏的“Options for target”,选择Debug选项卡,进行如下设置:

+ B" p! |8 m8 o
第三步:点击工具栏的“Start/Stop Debug”快捷键,然后点击“Setup”,进入下面的界面,点击红框表示的位置,添加仿真通道:
需要添加四次,即添加四个通道,因为我们有四路输出,添加通道的名称分别为:PORTA.8、PORTA.9、PORTA.10、PORTA.11,我们TIM1的四个输出通道是GPIO_8,GPIO_9,GPIO_10,GPIO_11,通道添加好后,点Close;
/ o: f& W) E5 f$ @: O. \
第四步:此时,已经有四个通道了,我们需要设置输出通道为数字输出,方法是:鼠标右键点击下图红框所示位置,选择bit即可,每一路都要设置;
+ W+ W$ h: s3 z  @8 v. r- S( q! z


4 s2 T& w) }4 j/ \. T
第五步:点击工具栏的“Run”,启动仿真,就看到有四路输出了,神不神奇?
  B& L; c& e! O
今天的内容到这里就结束了,真是收获满满呀……

+ @4 Z1 M2 A  ]/ v
收藏 1 评论4 发布时间:2017-9-6 08:20

举报

4个回答
五哥1 回答时间:2017-9-7 00:24:49
收获满满呀
《源》 回答时间:2017-9-7 12:25:01
五哥1 发表于 2017-9-7 00:24- b! m% l2 c8 [
收获满满呀

) ~$ k: L4 ]: Y; w
淡然微笑 回答时间:2018-5-2 17:11:53
楼主您好,为什么我输入PORTA.8会显示“unknown signal”呢?
. L) R9 F4 a% _$ n8 m
淡然微笑 回答时间:2018-5-2 18:24:40
懂了懂了,按照楼主的配置就可以了

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版