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

STM32定时器单脉冲模式及其应用

[复制链接]
STMCU-管管 发布时间:2021-2-20 13:58
STM32定时器单脉冲模式及其应用
' m# [4 u4 S( Y* s7 w) B
* h- `0 i, d! ~: W1 H3 ?8 x# o
STM32的定时器可以配置为单脉冲模式,所谓的单脉冲就是通过配置定时器使其在一个可控延时后,产生一个脉宽可控的脉冲。使用STM32CubeMX工具配置起来非常方便。
. b4 U; R' X9 z3 V! O. @硬件环境:STM32F103C8T6) U8 N* s# G) R
软件环境:STM32CubeMX v5.5.00 \+ M1 B' k9 g3 y
HAL库:STM32CubeF1 Firmware Package V1.8.0
) }8 o' |* N6 L( A
% C& j0 c2 k5 w+ \: f6 C  D

5 ]. W7 v0 Q& y; `- W, B1.STM32CubeMX配置; h8 O" ?6 L' f- P
基本配置不再赘述,可参考之前的文章。直接看定时器的配置,这里以TIM1的CH2为例。, P* M% U3 k  [" R3 R, ^2 g3 _
11.png
       将TIM1的CH2配置为PWM输出模式,使能One Pulse Mode(单脉冲模式)CH Polarity选择为Low。分频系数、计数周期、输出比较值根据实际需求进行设置,用于控制延时时间和脉冲宽度。单脉冲模式的定义如下图所示。
* [8 Q- L6 }" K+ O: [
12.png
定时器启动后,TIM1开始计数,经过 tDelay时间后,输出高电平,经过tPulse时间后,输出低电平。在图中可以看到,tPulse为延时时间,即寄存器TIM_CCRx的值;tPulse为脉冲宽度,即(TIM_ARR – TIM_CCRx + 1)的值。& X$ Z& Z& d3 q1 `4 z. `
本例中,设置定时器分频系数为71,即计数周期为1us。TIM_CCRx为50,即脉冲宽度为50us,TIM_ARR为199,则延时时间为199-50+1=150us。
6 M2 L1 r" `' ]% [( X" D) r2 W0 z( w3 L, Z3 T" m
2.程序编写+ D, n/ i" D  ^( ?! s

) o1 n3 ?4 N+ J7 t4 f" K

& S( t( b7 @* n/ ?4 f9 k生成代码后,HAL库中有一个HAL_TIM_OnePulse_Start函数,但调用该函数无效。直接调用PWM函数即可产生单个脉冲。7 u; a% ^* k8 a; F- F: p% d
  1. HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);
复制代码
调用下面函数可以设置延时时间和脉冲宽度:: \% n# |; O0 b( \9 @/ y6 i3 f8 ~
  1. _HAL_TIM_SET_AUTORELOAD(&htim1,plusedelay + plusewidth - 2);//设置脉冲宽度
    # y/ _% Z; I. S9 J3 c# }
  2. __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,plusedelay - 1); //设置脉冲延时
复制代码
3.单脉冲模式的应用
' ^7 K% e, |7 X8 j# U
( q9 \7 ~( j& E

3 u8 a' _' d' V& d! O做过可控硅控制的朋友可能已经发现了,单脉冲模式的非常适合用于可控硅控制。可控硅控制可参考之前文章《单片机控制可控硅调压》。检测到过零点后,根据需要控制的电压设置脉冲宽度和延时时间即可,完全由硬件控制,更精确也更方便。3 ?% B* h$ ~2 T6 Q5 v! z
假设,检测到过零点后,需要延时5ms,输出一个100us的脉冲。定义变量:
% R$ u' G+ L6 ?, r" D6 o: Y* a

  1. . L2 X1 A/ q4 A, C
  2. uint16_t plusedelay = 5000;//脉冲延时
      I- N5 D) V2 V; k: e
  3. uint16_t plusewidth = 100;//脉冲宽度
复制代码
在过零检测函数中设置延时时间和脉冲宽度,并开启定时器单脉冲即可。
+ H; g6 I+ g) u  n# J6 H5 p+ j, L
  1. 0 {7 f  ^5 m& V; y
  2. __HAL_TIM_SET_AUTORELOAD(&htim1,plusedelay + plusewidth - 2);//设置脉冲宽度
    1 u  i9 f2 L* V/ Q0 R
  3. __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,plusedelay - 1); //设置脉冲延时& x' N$ s8 K+ c6 p9 o. J
  4. HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);
复制代码

: P6 M, [7 H% _/ i) p4 i3 f! m; p8 s" ?! d- [) N9 K
收藏 评论2 发布时间:2021-2-20 13:58

举报

2个回答
goyhuan 回答时间:2021-2-20 15:43:45
闪光电路非常需要
暴走的鲜橙多 回答时间:2021-2-20 22:44:39
很棒,谢谢楼主分享

所属标签

相似分享

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