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

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

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

- T1 t6 j/ l! R* K      LED2可以连接到定时器和定时器3,所以我们本次采用定时器1作为PWM输出的主要控制定时器,然后在找一个定时器作为精准定时。
& `% j' N# U! c" o      定时器1配置为PWM输出,使用了两个通道:
3 c3 R6 r2 H. E$ q/ x
3.png
# ~( l% K! u: n7 u- k) T6 P
, n1 Z' O# O- t! j2 ~) w% X3 B
      定时器14作为普通定时器配置如下:
0 y  J3 e0 i0 Y" E8 a+ r# c9 x
4.png 0 L, G+ V" q/ c  r( Y- x4 [  |
2 o! R. S' O; i3 F! x6 j
      注意定时器需要开启中断;
& {" ?; a% `! B      定时器的使用并不会直接开始定时器,我们在使用的时候需要在初始化阶段开启相应的定时器和中断:
* s0 k+ Y! }1 r) ^' O
  1.     HAL_TIM_Base_Start_IT(&htim14);
    1 ?: w" X( x6 U0 q
  2.     ) ^$ i9 u/ A8 R% T7 Y: K
  3.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
    # Q# K# m# I7 r, `. c- r, [
  4.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
    4 P2 F' Y8 v8 g' A1 _+ ~
  5.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,500);
    5 {- `- @' _! R) G
  6.     - x$ J! ~9 Q7 O( ?2 L
  7.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);
    ' |( Q& ]3 ?0 ?2 u5 Y7 ]' R
  8.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);) a3 D! p* U" f- |
  9.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,500);
复制代码
     然后就可以在定时器中断的回调函数中进行呼吸效果的修改了:
* ^$ S( o* T/ a
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)) Y3 [5 I- c8 a% V% V( m+ g- C
  2. {
    9 J  s4 M% F; D2 O, I7 f# w( n# X/ H
  3.   if (htim->Instance == TIM14) {. _) h" q  e# c  Z
  4.     HAL_IncTick();
    " n. [3 \+ F- L" i. j  g, N; t
  5.         Tim_cnt++;
    + t# S' F4 B- f; \8 b! e" }  U
  6.         if(Tim_cnt <= 100){" ~2 h' P% s% L7 Q9 G
  7.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,Tim_cnt*10);" c" `: O" N4 a5 P
  8.               __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,Tim_cnt*10);5 x6 e- W/ `3 g+ @! f
  9.             
    & i! q" R: Y3 B% w% g
  10.         }* K4 E$ X) T. d% \1 P  m
  11.         else if(Tim_cnt > 100 && Tim_cnt <= 200){# A* f: E- a) V+ j% m; a& b
  12.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,(200-Tim_cnt)*10);
    1 S; \9 }# o1 S% n, ^4 Z
  13.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,(200-Tim_cnt)*10);1 T( q! ?, r) z1 {% N0 ^
  14.         }    + I# i1 A5 |1 J( t
  15.         else if(Tim_cnt>=200)
    # ]; z6 h/ z" E& f
  16.             Tim_cnt = 0;
    % G- o$ j. J4 `: ~% B3 ]0 r
  17.     }0 l  ~) v! {$ i
  18. }
复制代码
     由于两个LED的控制方式不同,同频的控制实现了交替呼吸的效果:
; p7 ~- L, C* b& Z' v1 @# R
呼吸灯测试 (1).gif 3 \" I! @9 C! a4 H1 L
5 l, c  F+ ~3 ]( l

# _& r0 M; h) }1 N) E! D+ _! V. w. b/ r& B4 m- F" p. c
4 U$ a8 P4 p& Y  L, I9 Z
4 ?6 r7 t8 ?, x1 ?% P1 V
3 V6 I' v4 d: Y# M4 L

6 z* d( y* o; M# C  V& B$ C$ n3 _* v( m! {3 W3 O" b
收藏 评论0 发布时间:2025-5-2 21:23

举报

0个回答

所属标签

相似分享

官网相关资源

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