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

【STM32C0评测】5、呼吸灯测试

[复制链接]
qintian0303 发布时间:2025-5-2 21:23
      PWM输出测试:使用示波器测试输出或者实现一个呼吸灯,如果要用比较直观的省事的方法,肯定是采用呼吸灯的方式,看到明显的阶梯式的变化。呼吸灯的效果还是很吸引人的,那么什么是呼吸灯?又要如何实现呢?
3 j% L+ L. Z5 O      PWM技术驱动LED呼吸灯的核心原理,巧妙融合了LED对电流的敏锐响应与人眼的视觉暂留特性。简而言之,PWM通过精细调控LED的导通时段——即高电平所占据的时间窗口,来灵活掌控其亮度表现。若高电平时段精简,LED则呈微光;反之,若时段延长,光芒随即璀璨。由此,通过无缝衔接地调整这一时段长度,我们得以实现对LED亮度的流畅调控,进而催生出迷人的呼吸灯效应。人类的视觉系统,在面对快速更迭的光影时,展现出了独特的“视觉暂留”奇观。当光线以迅雷不及掩耳之势闪烁,我们的双眼非但不会即刻捕捉到这瞬息万变,反而会将一连串短促的光影信号,在脑海中巧妙融合,形成一个稳定的亮度感知。正是得益于LED的极速响应与人眼这一奇妙的生理机制,当PWM信号的占空比——高电平占比整个周期的比例——微妙变迁时,尽管LED实则在亮与灭间疾速穿梭,但在我们眼中,却幻化为一抹恒定的光辉。
3 |7 e& l' Z: g: S      本阶段测试通过实现呼吸灯的方式体验开发板的的PWM功能,PWM功能属于定时器的高级功能之一。同时要实现明暗之间的变化也要用到精准定时的功能,所以使用呼吸灯测试可以比较好的学习了解定时器的应用。定时器(Timer)最基本的功能就是定时, 如果把定时器与 GPIO 引脚结合起来使用的话可以实现更加丰富的功能, 可以对输入信号进行计数,可以测量输入信号的脉冲宽度,可以输出单个脉冲、PWM 等波形,等等。 通过定时器生成 PWM 波形信号来控制电机状态是工业控制的普遍方法,这方面知识非常值得深入了解。$ F6 D+ h2 ^4 R4 ~
      这时候我们还是要看一下两个LED对应的引脚:  N# z' g! h5 b- ]
1.png 4 `5 U% p& O" S5 `
, ?+ r# {/ y0 s' m8 F
      LED1可以连接到定时器1和定时器2;
" F* m: B; i3 r: x8 I4 h: M
2.png
1 c* ^8 [6 V8 B! v+ r4 v

- ]2 B6 T- P4 q( r& O: U      LED2可以连接到定时器和定时器3,所以我们本次采用定时器1作为PWM输出的主要控制定时器,然后在找一个定时器作为精准定时。5 l: c# |3 K2 n' }5 R5 c+ z
      定时器1配置为PWM输出,使用了两个通道:
) l8 J5 I  M: |: e% ]4 N
3.png ' x" U) z% o' U' D
+ o& Q5 ?. e& ]" d" e
      定时器14作为普通定时器配置如下:
$ [4 l. K, z: I: k3 `; g
4.png 9 S. h  H; o. h2 M. I* c0 u
" x3 i2 O5 s- f3 f& c+ n% M6 @: z
      注意定时器需要开启中断;
/ }" l* v( i: e- t7 n      定时器的使用并不会直接开始定时器,我们在使用的时候需要在初始化阶段开启相应的定时器和中断:' @- u3 n/ V' P
  1.     HAL_TIM_Base_Start_IT(&htim14);
    " ~/ ]3 N! ]  m$ l# @) K% x
  2.     9 n2 V1 t/ D9 N1 t7 `4 n' Y! V9 v
  3.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
    ' Q: D. c6 L  p2 d6 f; f
  4.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);% Q4 g" c, w7 k9 B6 N  U
  5.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,500);; K0 B+ V% b* ~! f
  6.     - [7 _! G% k  S" A8 f
  7.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);
    + P/ s, B" T5 ^7 L3 g' ^- W8 `8 U
  8.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);
    2 ^& o# @0 H, V6 A% f/ K
  9.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,500);
复制代码
     然后就可以在定时器中断的回调函数中进行呼吸效果的修改了:
9 \7 M3 @, J3 v9 K' s
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    : J! F; Z2 z8 Q9 U
  2. {
    : ^. p* Y9 V' y: f  b
  3.   if (htim->Instance == TIM14) {+ T0 Q) P: z% K  _6 w+ _
  4.     HAL_IncTick();
    % p# j7 W- `' E# M6 g3 A. S
  5.         Tim_cnt++;
    % N+ J: z9 D1 y/ R$ v9 ]
  6.         if(Tim_cnt <= 100){
    $ ~( M! B1 _& W) u( Z" n
  7.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,Tim_cnt*10);
    0 ~4 H3 e. \! }) {9 S5 W
  8.               __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,Tim_cnt*10);+ }. C6 o+ h8 [* P( }
  9.             
    : j/ V9 U( D+ h
  10.         }( ^1 n( F0 S% Q" [4 ?+ K
  11.         else if(Tim_cnt > 100 && Tim_cnt <= 200){
    4 z; p; Q- t- H
  12.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,(200-Tim_cnt)*10);
    5 |4 P* N$ i2 Z/ E$ ^
  13.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,(200-Tim_cnt)*10);9 Z. {8 X9 T0 a- ^: m% }
  14.         }   
    / S. D: F, f4 U5 Z2 a
  15.         else if(Tim_cnt>=200)5 U  ~" b3 Q' O- M: ~& v8 c) E+ l
  16.             Tim_cnt = 0;
    ( k' u  D5 t+ b8 [# O; J# N
  17.     }* F3 H! \8 h3 _6 c. T! n
  18. }
复制代码
     由于两个LED的控制方式不同,同频的控制实现了交替呼吸的效果:
/ e  _4 J0 q5 y+ y6 ^) A3 i$ {8 q
呼吸灯测试 (1).gif / x. W4 T4 k" g3 ?  {! p
5 p6 k$ @" g' i$ ]2 I& }3 J
* X* J4 Y2 L# \7 Z9 [. H" G( ?
: h( ~: B  G* m; [
( I" P7 `9 x+ P7 E6 i3 y: k6 b
1 Q) `5 B3 z' @& b

0 R* `- ]% t) u9 B4 D( ~9 D# c4 _! X+ B3 L0 W7 n! V7 c$ N: C
1 A3 S. ]& _5 e
收藏 评论0 发布时间:2025-5-2 21:23

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版