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

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

[复制链接]
STMCU-管管 发布时间:2021-2-20 13:58
STM32定时器单脉冲模式及其应用

% ]) h2 b9 t6 k1 G

& r: c# P9 z* Q0 DSTM32的定时器可以配置为单脉冲模式,所谓的单脉冲就是通过配置定时器使其在一个可控延时后,产生一个脉宽可控的脉冲。使用STM32CubeMX工具配置起来非常方便。+ }# t/ Q9 f% x. z7 O4 |3 G; y
硬件环境:STM32F103C8T6$ j; ]8 |9 I2 B2 P5 ~, K
软件环境:STM32CubeMX v5.5.05 |; {$ J" \5 i. q& d
HAL库:STM32CubeF1 Firmware Package V1.8.0
" ]; q8 ^3 |; e( e. t# @3 b6 r# s. {3 i$ n" U2 _" L2 S
( q+ u2 ]7 I( {
1.STM32CubeMX配置
7 ^2 _1 _& Z- M2 M6 D& C1 I! @2 w基本配置不再赘述,可参考之前的文章。直接看定时器的配置,这里以TIM1的CH2为例。
' d% R1 l6 g' v& {7 A7 ^4 P! U# H
11.png
       将TIM1的CH2配置为PWM输出模式,使能One Pulse Mode(单脉冲模式)CH Polarity选择为Low。分频系数、计数周期、输出比较值根据实际需求进行设置,用于控制延时时间和脉冲宽度。单脉冲模式的定义如下图所示。( @6 o5 {6 p5 ]8 S2 p& j/ M
12.png
定时器启动后,TIM1开始计数,经过 tDelay时间后,输出高电平,经过tPulse时间后,输出低电平。在图中可以看到,tPulse为延时时间,即寄存器TIM_CCRx的值;tPulse为脉冲宽度,即(TIM_ARR – TIM_CCRx + 1)的值。
, Q6 a9 @7 G+ C9 k- N本例中,设置定时器分频系数为71,即计数周期为1us。TIM_CCRx为50,即脉冲宽度为50us,TIM_ARR为199,则延时时间为199-50+1=150us。
! f' E) {* y5 W6 c' k8 A1 d
3 P" V! [9 @. I6 m% a0 a0 Q2.程序编写6 N  x) Q' c! }5 Y  F' t" d) I+ x( F

) H, o/ S! e' U+ E7 E4 W% D

4 X- G: @  q% E8 b. a" @$ g生成代码后,HAL库中有一个HAL_TIM_OnePulse_Start函数,但调用该函数无效。直接调用PWM函数即可产生单个脉冲。3 y! W2 l! X5 R0 u
  1. HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);
复制代码
调用下面函数可以设置延时时间和脉冲宽度:) c/ i& \9 A* j' U; k' J8 R9 F
  1. _HAL_TIM_SET_AUTORELOAD(&htim1,plusedelay + plusewidth - 2);//设置脉冲宽度1 L1 `( F9 N9 I3 r, h  V
  2. __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,plusedelay - 1); //设置脉冲延时
复制代码
3.单脉冲模式的应用
4 {& M$ M' f3 J. w; O6 F5 l
5 m  x7 o2 {3 T- B) @) }

' o( J4 ]9 \1 ]5 K7 Z6 }做过可控硅控制的朋友可能已经发现了,单脉冲模式的非常适合用于可控硅控制。可控硅控制可参考之前文章《单片机控制可控硅调压》。检测到过零点后,根据需要控制的电压设置脉冲宽度和延时时间即可,完全由硬件控制,更精确也更方便。
5 r5 R6 \$ h0 X假设,检测到过零点后,需要延时5ms,输出一个100us的脉冲。定义变量:: h( X  T. D* {! J
  1. 9 |3 |$ }* i! b, F" f
  2. uint16_t plusedelay = 5000;//脉冲延时
    4 B4 D& R- v/ _* {
  3. uint16_t plusewidth = 100;//脉冲宽度
复制代码
在过零检测函数中设置延时时间和脉冲宽度,并开启定时器单脉冲即可。
! X; M: B5 b% n1 Y" X* @
  1.   K' K. ?4 X$ E! R& d. D
  2. __HAL_TIM_SET_AUTORELOAD(&htim1,plusedelay + plusewidth - 2);//设置脉冲宽度6 N; T: p; T6 u" j( Q0 G
  3. __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,plusedelay - 1); //设置脉冲延时6 K! h2 q9 I; y' V
  4. HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);
复制代码
* r  u, m! w8 }7 \
: U" _) E" x  Q! r9 m
赞 收藏 评论2 发布时间:2021-2-20 13:58

举报

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

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版