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

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

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

% ?7 J: ^' N. s" g0 Z" P0 U      LED1可以连接到定时器1和定时器2;0 r1 S. m8 T* k; c
2.png 3 ]; ?' X# f+ E# q' s
5 @! }5 z1 O& g; _$ T2 h7 y
      LED2可以连接到定时器和定时器3,所以我们本次采用定时器1作为PWM输出的主要控制定时器,然后在找一个定时器作为精准定时。
. i+ X$ ?/ N2 Y7 e) P      定时器1配置为PWM输出,使用了两个通道:
# s5 ^9 H3 T# ^  `2 m
3.png
( }5 E7 g$ z0 Z

, P" a& c! E7 w# E      定时器14作为普通定时器配置如下:) e/ d4 j4 @) F% P
4.png
' C( J* @& X+ z
+ O& r0 ?' z. S) R  g! ]" [! h
      注意定时器需要开启中断;
& g: [: s8 h* j& e7 f0 S      定时器的使用并不会直接开始定时器,我们在使用的时候需要在初始化阶段开启相应的定时器和中断:
6 R/ p) [  T9 J2 l- \2 x7 Z/ G- C
  1.     HAL_TIM_Base_Start_IT(&htim14);+ R. U/ l* e0 j$ X+ m) ]+ ^7 {8 U# R
  2.     . Y" F( U, h3 V2 {7 S" _3 S1 Q5 ~
  3.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
    1 {$ J0 I- A6 k9 z* Z
  4.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
    # w& i- i$ |& @, C) f/ j# d
  5.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,500);
    ) Z* ]1 W* |* |( B
  6.    
    : m" V7 I+ a' D( F5 Z( l4 K* u
  7.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);' d3 N) k& `! J# N7 j+ d
  8.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);
    % K6 u( @  u' Z8 m  E5 F6 o5 P+ _4 L! x
  9.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,500);
复制代码
     然后就可以在定时器中断的回调函数中进行呼吸效果的修改了:
* Q4 l: Y/ e3 g' @& Y, b) Q  I
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    1 ]- a) P6 S/ W  Q& j
  2. {
    1 N9 M) f# |# s; k% t0 V
  3.   if (htim->Instance == TIM14) {$ c: N1 m( b/ Z& _
  4.     HAL_IncTick();+ d3 S4 x+ s* z0 c- s- a: L! @0 \) x
  5.         Tim_cnt++;
    1 x4 g3 l! w, s" T* o! D
  6.         if(Tim_cnt <= 100){7 l4 E' y" n1 {; F( X
  7.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,Tim_cnt*10);
    ! E, `8 n" O/ g1 b# ]
  8.               __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,Tim_cnt*10);1 k7 x+ I  K4 f; u; x
  9.             # |  W( H/ D. R2 j2 q/ G
  10.         }0 C. {3 @% n& `8 |6 H
  11.         else if(Tim_cnt > 100 && Tim_cnt <= 200){# N' X; E5 u9 n" P
  12.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,(200-Tim_cnt)*10);
    / C) Y# Y. s! F
  13.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,(200-Tim_cnt)*10);: e1 H# y: W3 U2 t; n9 V% c
  14.         }   
    ' }1 t. U5 x' {: t( \9 h
  15.         else if(Tim_cnt>=200)
    $ R$ c1 i1 e9 Z( Z5 u
  16.             Tim_cnt = 0;
    / J. F( h, S/ O+ I
  17.     }& V7 ^1 g, K$ ~0 G! X" k8 y2 g
  18. }
复制代码
     由于两个LED的控制方式不同,同频的控制实现了交替呼吸的效果:
4 {- s+ y4 y: }$ J- T) G% T- C: T
呼吸灯测试 (1).gif
8 n% Q7 l0 A" j& Z% ^" ^

+ |$ g* r+ C. S' e4 [1 N3 o& A& o$ l+ |
$ t- K# P/ O9 L5 @' j3 M) A
: g/ P5 ?7 J' e/ U& I

. T; O8 \( |7 H3 _$ G& M7 J+ W' S) ~; i2 q: @

" {$ r0 [. w* ^; x5 S/ h- n- k+ c: O0 n' [6 \/ {
赞 收藏 评论0 发布时间:2025-5-2 21:23

举报

0个回答

所属标签

相似技术帖

官网相关资源

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