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

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

[复制链接]
qintian0303 发布时间:2025-5-2 21:23
      PWM输出测试:使用示波器测试输出或者实现一个呼吸灯,如果要用比较直观的省事的方法,肯定是采用呼吸灯的方式,看到明显的阶梯式的变化。呼吸灯的效果还是很吸引人的,那么什么是呼吸灯?又要如何实现呢?
" @4 e9 p  B. L/ l4 O      PWM技术驱动LED呼吸灯的核心原理,巧妙融合了LED对电流的敏锐响应与人眼的视觉暂留特性。简而言之,PWM通过精细调控LED的导通时段——即高电平所占据的时间窗口,来灵活掌控其亮度表现。若高电平时段精简,LED则呈微光;反之,若时段延长,光芒随即璀璨。由此,通过无缝衔接地调整这一时段长度,我们得以实现对LED亮度的流畅调控,进而催生出迷人的呼吸灯效应。人类的视觉系统,在面对快速更迭的光影时,展现出了独特的“视觉暂留”奇观。当光线以迅雷不及掩耳之势闪烁,我们的双眼非但不会即刻捕捉到这瞬息万变,反而会将一连串短促的光影信号,在脑海中巧妙融合,形成一个稳定的亮度感知。正是得益于LED的极速响应与人眼这一奇妙的生理机制,当PWM信号的占空比——高电平占比整个周期的比例——微妙变迁时,尽管LED实则在亮与灭间疾速穿梭,但在我们眼中,却幻化为一抹恒定的光辉。 ' g7 @3 D4 ^6 V' a7 b, [
      本阶段测试通过实现呼吸灯的方式体验开发板的的PWM功能,PWM功能属于定时器的高级功能之一。同时要实现明暗之间的变化也要用到精准定时的功能,所以使用呼吸灯测试可以比较好的学习了解定时器的应用。定时器(Timer)最基本的功能就是定时, 如果把定时器与 GPIO 引脚结合起来使用的话可以实现更加丰富的功能, 可以对输入信号进行计数,可以测量输入信号的脉冲宽度,可以输出单个脉冲、PWM 等波形,等等。 通过定时器生成 PWM 波形信号来控制电机状态是工业控制的普遍方法,这方面知识非常值得深入了解。
9 \7 O+ `+ N+ Y4 _      这时候我们还是要看一下两个LED对应的引脚:9 S8 ]' p. L  O6 b$ s
1.png . }; R$ i6 [$ m7 y3 S% _' A1 i
3 [2 ^5 O9 g+ A
      LED1可以连接到定时器1和定时器2;
/ i$ t% b7 I* s4 n2 s
2.png 1 t; l0 `$ B* F& H+ d( n$ V
8 i( L+ K  v. Q, u) a- B! F7 s
      LED2可以连接到定时器和定时器3,所以我们本次采用定时器1作为PWM输出的主要控制定时器,然后在找一个定时器作为精准定时。  E; k1 H% J1 {1 C, ]8 v6 L
      定时器1配置为PWM输出,使用了两个通道:
0 s" T+ [7 t. _4 j& X  @5 c! s
3.png
3 B& ]* E" u) U  F( u/ h, A
( @9 b1 m0 }! T
      定时器14作为普通定时器配置如下:7 e; h; q6 M+ b) W7 I3 j
4.png , b9 }/ q( k2 x- y

9 |2 a" r( l# n6 r/ d2 s8 z# {( h; H      注意定时器需要开启中断;
3 W* z  ?5 n+ |4 h      定时器的使用并不会直接开始定时器,我们在使用的时候需要在初始化阶段开启相应的定时器和中断:
' S' b+ L  Y% f. q/ p1 k7 N. U
  1.     HAL_TIM_Base_Start_IT(&htim14);
    , J" z) q% k# l6 V; o
  2.    
    . J) z- W7 P$ f
  3.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);7 c( v1 y. S7 q. r% C9 e
  4.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
    . i: @8 E, C' Q# i2 V0 H
  5.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,500);2 l; c6 @8 F* @. i. d: L
  6.     " r9 k( J$ a5 A; ]; ~& ~4 T$ ?
  7.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);4 k/ P$ i, M1 e8 u. W
  8.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);; N/ F4 a8 Y6 V6 J% P5 w( G
  9.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,500);
复制代码
     然后就可以在定时器中断的回调函数中进行呼吸效果的修改了:
+ L4 p* A5 R- E& f# }& s' o
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    5 o4 o* T  k/ c9 k3 G3 u( M
  2. {$ r, x3 b$ j. E
  3.   if (htim->Instance == TIM14) {* C; I( B2 K' C- l" Q5 e! ~8 w% F
  4.     HAL_IncTick();
    : t9 K. {2 s1 p: W, r2 @0 Z4 ?# ?
  5.         Tim_cnt++;
    ; f( o* X' J& x' d
  6.         if(Tim_cnt <= 100){
    3 s0 g9 t  j* s
  7.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,Tim_cnt*10);3 {2 X( l: D& P1 u
  8.               __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,Tim_cnt*10);
    0 x9 D( m2 ?9 b: D9 k! U: f6 v$ W
  9.             2 V8 a0 m1 Q$ q* R
  10.         }
    ( ~" m: c8 @0 k& ^  E4 x2 t
  11.         else if(Tim_cnt > 100 && Tim_cnt <= 200){2 x6 j9 m& u0 I: j4 X( w. N1 f+ {8 Q
  12.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,(200-Tim_cnt)*10);
    6 b! u% K( l# r  `  t
  13.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,(200-Tim_cnt)*10);0 b& C2 S8 A" R3 b1 _* W! `' N0 F
  14.         }   
    % y+ J* ?7 d3 X
  15.         else if(Tim_cnt>=200)  K% F5 L/ ]. D1 M7 G' r. ~
  16.             Tim_cnt = 0;  g0 W3 x/ N, ^2 `, ]# A1 E
  17.     }
    ' Y8 |: \: {! E' w$ Q5 u+ V
  18. }
复制代码
     由于两个LED的控制方式不同,同频的控制实现了交替呼吸的效果:
3 x* r8 v- w6 |: B) a$ _5 Z
呼吸灯测试 (1).gif
6 x/ Q: D% @: G! L; O* Q; v' T4 X
( I4 m) z8 H/ N9 K& W& P7 n
+ g! k2 C; T# e% A/ h$ p4 Y
/ G* J$ P+ `6 d, A- K
6 P$ _) [4 P' M/ h1 S9 s

- F9 z+ ?$ u, }
3 q* N( P$ B. n1 I# x8 Q9 b: R/ t4 o8 L$ X3 G( o% _+ M

% U  d3 K4 ^, h, _$ C: G9 W! `! B
收藏 评论0 发布时间:2025-5-2 21:23

举报

0个回答

所属标签

相似技术帖

官网相关资源

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