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

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

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

! B1 ~+ {" i' q  ?& A4 r      LED2可以连接到定时器和定时器3,所以我们本次采用定时器1作为PWM输出的主要控制定时器,然后在找一个定时器作为精准定时。4 ?3 z2 ~$ I; `: h# |  k6 D1 Y
      定时器1配置为PWM输出,使用了两个通道:
# ?+ c' L3 u9 n! f5 D+ P
3.png - L& N, c' S% E

- {1 q8 H0 `% N4 e, W* {+ @4 N      定时器14作为普通定时器配置如下:
; Z7 \6 d' b  v! v
4.png % \8 _  p0 c, `7 t$ o) f- _
8 W" w8 l2 u. H/ W
      注意定时器需要开启中断;/ J6 a6 e7 t6 S
      定时器的使用并不会直接开始定时器,我们在使用的时候需要在初始化阶段开启相应的定时器和中断:
! d1 S7 j& }1 M% {, i& U8 G( c1 a
  1.     HAL_TIM_Base_Start_IT(&htim14);
    . B5 b# d/ [: Q& k" A: c
  2.     . K# {6 @6 K2 h4 h- y: p
  3.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
    * D2 W3 X& q2 b/ V" T
  4.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
    4 l5 Q! {$ v8 l% V3 k- p% [( O8 F: O
  5.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,500);8 g2 [2 l4 N" c0 p
  6.     . O9 `3 C/ _- P& W
  7.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);& g0 y/ _/ w+ ?  w
  8.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);
    + m# E) y+ g9 M
  9.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,500);
复制代码
     然后就可以在定时器中断的回调函数中进行呼吸效果的修改了:
; T7 N5 X: l, w* p1 m, l
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    - v( I. d# H) }' Y/ P/ Y% N/ E; h
  2. {2 F1 X  K% `; ~9 E& J, G+ Q
  3.   if (htim->Instance == TIM14) {
      s9 x* p2 G* O8 e( `  r# N0 {
  4.     HAL_IncTick();
    7 r) Y# H0 l/ z5 r9 O4 [- T8 n
  5.         Tim_cnt++;
    4 A1 \! j; J* p! ?
  6.         if(Tim_cnt <= 100){9 E' R+ q9 v5 [. J
  7.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,Tim_cnt*10);
    9 C) r( l5 v( j" {: }2 V
  8.               __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,Tim_cnt*10);
    0 Y  \1 W+ t( ^$ v  c! r: C* s
  9.             
    : s+ W% f$ y6 H
  10.         }+ q/ z# {0 ?) ]2 \  d! _7 V8 Y( n
  11.         else if(Tim_cnt > 100 && Tim_cnt <= 200){6 c  U# U+ u! c7 i
  12.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,(200-Tim_cnt)*10);
    8 c+ Q( p% c) |! b2 Q1 e; D
  13.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,(200-Tim_cnt)*10);& W& B1 H+ I$ e. y
  14.         }   
    ; [" n& q, J- T1 T8 q, f
  15.         else if(Tim_cnt>=200)
    4 s2 }; l1 J( c
  16.             Tim_cnt = 0;; h/ g3 L, {- R( X0 ~$ V
  17.     }# s5 l7 ]  J4 e$ s8 o! ?
  18. }
复制代码
     由于两个LED的控制方式不同,同频的控制实现了交替呼吸的效果:8 g% a+ [, K" d( N2 B" S3 |3 Q$ m) G
呼吸灯测试 (1).gif 6 f1 @( J' I* g  w

9 e, o! S% O  M3 \( o
" b( F" g+ u3 X3 H7 b+ Z7 W( Y6 C  w1 A) U' F% G- r
; C$ m. N# ~! C+ s& d
' z( W; ^- _. Z1 a7 G. \
, ^7 ~/ Q) Y% z. Y
& f" n7 x- i+ C- f  V; p" X: T$ F
1 m  z, |2 n$ B
收藏 评论0 发布时间:2025-5-2 21:23

举报

0个回答

所属标签

相似技术帖

官网相关资源

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