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

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

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

( T9 B: e" ]  L+ W0 J! x* G. W      LED1可以连接到定时器1和定时器2;) n" N% j5 V$ H2 P" x6 C
2.png ! w5 `7 n1 O2 ~+ A0 c6 z

: o4 A! h9 B  o8 X0 g# T" F      LED2可以连接到定时器和定时器3,所以我们本次采用定时器1作为PWM输出的主要控制定时器,然后在找一个定时器作为精准定时。& M5 c4 f/ Y2 W, d2 H' W
      定时器1配置为PWM输出,使用了两个通道:9 q8 M2 ?. c7 I* N$ S
3.png 3 X1 M, S6 i9 {0 d
8 Q/ `0 X1 p+ l1 d
      定时器14作为普通定时器配置如下:
2 h+ @) I5 k2 r* @! y7 {, e
4.png
+ ?# p& H: t4 d
: E6 P* k# t( L: ]. C
      注意定时器需要开启中断;
7 Q, F: b& z3 ]% Z: t      定时器的使用并不会直接开始定时器,我们在使用的时候需要在初始化阶段开启相应的定时器和中断:
; ]- n6 ?' @' p) x3 y/ }5 i
  1.     HAL_TIM_Base_Start_IT(&htim14);
    ! `0 u& H, S5 m
  2.    
    + n4 v; D; a0 t( B& f8 ~
  3.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
    / O1 w1 s6 x( O0 v3 {* u% N
  4.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
      `& w  t9 z2 o6 Z6 z9 y0 t5 t. d- E
  5.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,500);
    # c* L, v3 ]! w# T+ U2 I3 R5 N' g
  6.     / g* I% v2 {, L+ i0 d8 k
  7.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);
    6 ^8 S& {. e8 k) L- E* B
  8.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);6 |2 F% @( W6 ?4 z/ ~5 j
  9.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,500);
复制代码
     然后就可以在定时器中断的回调函数中进行呼吸效果的修改了:2 {2 K2 O9 Y% C1 R8 l) w
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    4 H/ j! D+ N1 |+ o8 l) N
  2. {8 v) C: m3 Q& N9 @
  3.   if (htim->Instance == TIM14) {
    8 K& ~$ [1 B% K* s
  4.     HAL_IncTick();. p4 k- E1 n8 T- W* T
  5.         Tim_cnt++;
    - o% L# T; z$ Z3 S: J2 p9 {
  6.         if(Tim_cnt <= 100){
    / Y0 F6 f, _/ C2 C' h8 B$ ?2 O, j
  7.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,Tim_cnt*10);2 i) L8 c7 Z+ j. K" n; t% `
  8.               __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,Tim_cnt*10);7 \' s( L7 g; l; S
  9.             
    ) |) p3 q% m9 D- f& T9 H. Y
  10.         }
    2 q* D- N: q8 D$ G1 g% y, V
  11.         else if(Tim_cnt > 100 && Tim_cnt <= 200){5 L) ?  `  u, S2 j( f
  12.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,(200-Tim_cnt)*10);/ U- e* E7 e& p- c& `
  13.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,(200-Tim_cnt)*10);
    ! O7 ~5 X$ J) a: `- R7 U
  14.         }   
    : a  X" X: E9 J  K# d8 r' b) F
  15.         else if(Tim_cnt>=200)4 U* Q( b( O+ q/ K+ x3 Y
  16.             Tim_cnt = 0;& Z, D- [0 ?# h, ~9 t. O5 T$ [
  17.     }
    , v( @' D! ?2 g6 a4 G% v* J1 U
  18. }
复制代码
     由于两个LED的控制方式不同,同频的控制实现了交替呼吸的效果:
1 ~8 [4 ^2 H$ ]
呼吸灯测试 (1).gif $ x& B! \- P4 d2 I0 B3 I- J; ]
0 G# Y9 H+ n, |2 @8 g7 g
8 T3 o4 N0 |/ k' J
- _9 F1 N' F, D/ R- W- B

, v' [2 k! z0 D' l+ e. v6 v
) J/ n& b: t2 A+ f, c6 ~- {' F1 W$ G# A9 W: C/ S$ M

6 @2 g) b6 u; y# f  i
( ^( g+ L! `5 Z3 G" n
收藏 评论0 发布时间:2025-5-2 21:23

举报

0个回答

所属标签

相似分享

官网相关资源

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