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

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

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

6 W' L! `' `3 \      LED2可以连接到定时器和定时器3,所以我们本次采用定时器1作为PWM输出的主要控制定时器,然后在找一个定时器作为精准定时。
  M% K3 m  V  r* j8 G9 |$ K6 O      定时器1配置为PWM输出,使用了两个通道:
! m2 p9 L/ ?5 @! I' P1 j# z
3.png
3 a- r9 M  E6 n8 `/ x/ q
, Q( \0 E8 {& e+ x' d8 C; \8 T2 f
      定时器14作为普通定时器配置如下:
2 @/ n1 I" v" F# S2 D: B! c, T. k
4.png   B6 t0 S9 I6 Q7 Q+ Z  z

  N) A* n' J- v. w      注意定时器需要开启中断;, o9 O. k# O1 J! [$ k
      定时器的使用并不会直接开始定时器,我们在使用的时候需要在初始化阶段开启相应的定时器和中断:
/ a+ ~1 g, V) e1 \
  1.     HAL_TIM_Base_Start_IT(&htim14);
    " L" s5 e+ c# \3 F  I
  2.    
    0 g  m0 F% v9 N7 s0 f. s  |
  3.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
    2 R6 e# y5 B+ W8 p2 y
  4.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);& ^/ K  v& \0 X" w4 Q
  5.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,500);
      u9 i! h- F, H# s
  6.     / _; U* k4 l  M  ~  \$ F; J- J
  7.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);: C; h: n1 L) j) I7 \" c
  8.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);. [' a+ s( i6 m7 s
  9.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,500);
复制代码
     然后就可以在定时器中断的回调函数中进行呼吸效果的修改了:8 ^. u% M$ e* _/ X0 T* T* J' p4 a
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)% k9 P$ X  {3 S2 Z0 h: q, m
  2. {4 H0 w3 e3 Y0 c7 F+ v/ F
  3.   if (htim->Instance == TIM14) {4 F6 Z4 m' x, K
  4.     HAL_IncTick();" V8 v4 |( K% s# b8 \. _
  5.         Tim_cnt++;! G/ z6 P7 `+ z
  6.         if(Tim_cnt <= 100){5 n; J! |* ]. O
  7.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,Tim_cnt*10);
    & P$ k4 U9 P. O0 Z
  8.               __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,Tim_cnt*10);4 o. s  N! V2 x! @! N" S) v
  9.             * f6 u3 U* G- p) W5 t
  10.         }
    7 m6 B/ `+ p7 p* u
  11.         else if(Tim_cnt > 100 && Tim_cnt <= 200){9 X5 p- P% l7 o- a
  12.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,(200-Tim_cnt)*10);
    , c- c! L! e3 f$ \, ]3 u4 A
  13.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,(200-Tim_cnt)*10);
    & s9 F* ?6 T. ^4 ]( M. [
  14.         }    8 W4 i6 J' P4 k+ h6 s8 X4 q
  15.         else if(Tim_cnt>=200)
    / B0 ^% V  {, L( B
  16.             Tim_cnt = 0;" w: t, P5 }8 H& x9 y. {: m0 [
  17.     }/ ?, H  ?$ i# G# c2 d6 F. u# Z' c
  18. }
复制代码
     由于两个LED的控制方式不同,同频的控制实现了交替呼吸的效果:7 c% Q9 g6 B/ A7 K, f0 y+ Y) X
呼吸灯测试 (1).gif ) w: {5 W) ?! X8 n, X
- m" N8 f, X" C6 H1 ]5 G
# B- q: Y3 q( O5 A* b

' U* p6 H( ~7 Z: C) S& J  q$ h! t6 ^5 k
' Z: _. R; w$ x. _' }, `4 M

0 n- z8 T2 E* [  t  R6 I" J. j7 l7 ^" K6 F

  n& F3 M4 F7 w* L; p. Q
收藏 评论0 发布时间:2025-5-2 21:23

举报

0个回答

所属标签

相似技术帖

官网相关资源

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