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

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

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

. Q1 n- x" V4 s/ D# |+ g      LED1可以连接到定时器1和定时器2;
6 h/ @* i1 l, B' L
2.png
' R# \2 N7 N  N2 L/ T
: t! q! v' K. |7 l, Y9 V
      LED2可以连接到定时器和定时器3,所以我们本次采用定时器1作为PWM输出的主要控制定时器,然后在找一个定时器作为精准定时。; u+ a% c% W5 x3 r0 Z; T/ F
      定时器1配置为PWM输出,使用了两个通道:
6 ~7 B4 z* Q# A6 v3 K% ^7 x
3.png " m  u6 Z& [  }! S

  P5 x+ B3 [( f% E4 I; v      定时器14作为普通定时器配置如下:0 z/ `+ z, y% u
4.png
, D2 g; D4 O# d8 X0 v1 d& u. ~% b

7 ]# s( Z. w6 f+ Y      注意定时器需要开启中断;
  d+ f1 \* U) a4 ^      定时器的使用并不会直接开始定时器,我们在使用的时候需要在初始化阶段开启相应的定时器和中断:
* o6 U, q0 ^2 \
  1.     HAL_TIM_Base_Start_IT(&htim14);( p8 ~# Z+ f9 u7 L( E
  2.    
    * C1 O+ {! E- N
  3.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
    ! A: H9 j( j$ U5 n0 [
  4.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);2 X# I1 I; F3 ]. y, W9 ^& Z
  5.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,500);
    7 \/ ^/ g3 c8 y$ T2 B1 e" X: S4 x
  6.    
    + Z+ \, z) a# o' j
  7.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);
    . v' {$ ^3 u. M+ J+ J
  8.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);% S3 A- R9 q1 M- v" F
  9.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,500);
复制代码
     然后就可以在定时器中断的回调函数中进行呼吸效果的修改了:
, H# P4 @1 z2 L8 ^9 a" k
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)  W5 E  [. \4 Z. ^
  2. {
    5 E9 ~8 P  s! E# c  z
  3.   if (htim->Instance == TIM14) {9 {6 p9 N5 d( D% X
  4.     HAL_IncTick();$ |; u, g5 G- O6 I
  5.         Tim_cnt++;8 P& K3 C# I" n8 ^, k
  6.         if(Tim_cnt <= 100){4 ~) ^+ W( a! c2 {% \
  7.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,Tim_cnt*10);
    3 E# C0 J2 E8 G
  8.               __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,Tim_cnt*10);
    8 I+ K& X* u/ _2 w, i
  9.             
    2 v( d) x3 H% G
  10.         }
    $ i5 {  ^# k2 B
  11.         else if(Tim_cnt > 100 && Tim_cnt <= 200){( T" {7 a. f9 q+ R/ A5 Y' e% E
  12.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,(200-Tim_cnt)*10);% I% m8 {. V/ s
  13.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,(200-Tim_cnt)*10);
    9 O- |9 |$ k; [1 ^
  14.         }    7 _  s, [7 z0 g0 S
  15.         else if(Tim_cnt>=200)
    2 ~% G$ ^8 V: w. P" |& n5 Q
  16.             Tim_cnt = 0;
    ) o% L  Q* W2 j. i8 T4 c( J
  17.     }
    ( h1 G. v, _- W
  18. }
复制代码
     由于两个LED的控制方式不同,同频的控制实现了交替呼吸的效果:2 z4 n: v) A8 g$ R$ i
呼吸灯测试 (1).gif
$ _9 i7 z. y5 P) U
8 Y5 p/ Z1 Y4 {4 ~
+ z, f: u8 S( _$ c
' V& i+ ~6 ?0 a
, q/ S: J  _& Y) c2 l) g( d& E  I( o

3 M; {2 @$ C( e) |2 K9 Y. R! G7 U  i# P8 {2 E$ S

# _$ S1 x9 c( ~. R. g- B+ A5 E' Q
赞 收藏 评论0 发布时间:2025-5-2 21:23

举报

0个回答

所属标签

相似技术帖

官网相关资源

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