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

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

[复制链接]
《源》 发布时间:2017-9-6 08:20
本帖最后由 《源》 于 2017-9-6 08:25 编辑 - [4 m8 @" H# c; B
4 Q: ]% {% l* g! I

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


9 d( p# [% A& f' r, _
要使用定时器输出我们需要的PWM,就要会配置定时器。我们直接看高级定时器的功能框图,从框图上看定时器都需要哪些配置:
2 T& p+ N- [4 q3 A
6 ?- T4 g0 b) }. w

8 ~0 j6 N0 D5 [  `+ u, B* J( {/ y6 u4 O' `
图中的红色箭头表示一条通道,我们配置好这条通道沿线的寄存器就能输出我们需要的波形了,这条通道上,我标注了三个区域:1、2、3,这三个区域就是需要配置的:
区域1:时钟源选择,我们通过RCC_APB2PeriphClockCmd()就可以选择内部时钟源作为定时器的时钟;

7 l; h- e' }7 v
区域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是时钟。

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

, ]/ C' P* E! w
另外,除了这些设置,我们还需要使能自动重装载寄存器ARR的预装载功能,失能捕获/比较寄存器CCR的预装载功能,对应的库函数为:
TIM_ARRPreloadConfig(TIM1, ENABLE);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
失能CCR的预装载功能后,写入的值会立即传到捕获/比较寄存器,不用等到更新事件的发生。
其他的配置就不介绍了,大家可以参考官方例程。
0 t% @1 V9 V) V' ?& A) s5 p
配置好定时器后,我们怎样知道,到底有没有PWM输出呢,检测方法有好几种,视频中介绍的是利用Keil自带的仿真功能,下面我们就说说,这个仿真功能怎么使用:
步骤:
第一步:配置好定时器,运行程序,并且没有错误;
第二步:点击工具栏的“Options for target”,选择Debug选项卡,进行如下设置:
, l+ z3 }/ ]& o/ q8 H$ ~+ B
第三步:点击工具栏的“Start/Stop Debug”快捷键,然后点击“Setup”,进入下面的界面,点击红框表示的位置,添加仿真通道:
需要添加四次,即添加四个通道,因为我们有四路输出,添加通道的名称分别为:PORTA.8、PORTA.9、PORTA.10、PORTA.11,我们TIM1的四个输出通道是GPIO_8,GPIO_9,GPIO_10,GPIO_11,通道添加好后,点Close;

2 k* ?: O% J; v/ T' _
第四步:此时,已经有四个通道了,我们需要设置输出通道为数字输出,方法是:鼠标右键点击下图红框所示位置,选择bit即可,每一路都要设置;
0 N' j: T$ b% I, L3 |

8 b0 _: n& }" n" v" w0 P! i
第五步:点击工具栏的“Run”,启动仿真,就看到有四路输出了,神不神奇?
% ?* V* Q" s7 ]4 x) I0 C
今天的内容到这里就结束了,真是收获满满呀……
5 x" S3 ^* z6 D, P# h  ]- V; a
赞 收藏 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% Z2 _& x. B5 r: o
收获满满呀
" Q" o0 }8 T$ _3 m6 d7 G
淡然微笑 回答时间:2018-5-2 17:11:53
楼主您好,为什么我输入PORTA.8会显示“unknown signal”呢?
- x$ T' [5 {* w! ]/ _3 `% y: Y
淡然微笑 回答时间:2018-5-2 18:24:40
懂了懂了,按照楼主的配置就可以了
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版