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

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

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

* L- Q5 p( u1 F4 G1 ^  ?* g3 X      LED1可以连接到定时器1和定时器2;
+ O' p& {# `' w
2.png & E: Q, Z+ b. M6 ?
3 q  j4 R8 S9 G0 Q. b, U+ a0 n5 L7 [
      LED2可以连接到定时器和定时器3,所以我们本次采用定时器1作为PWM输出的主要控制定时器,然后在找一个定时器作为精准定时。
, ?* o& K; I* W& j) c. @% p      定时器1配置为PWM输出,使用了两个通道:4 n" J" W0 ?% F: T. q9 O! o" U
3.png 7 Z) s9 D& D4 o/ I; g- V
9 L! h6 c4 V7 ^0 c7 r# i
      定时器14作为普通定时器配置如下:# ^9 [4 x$ z( E* o. \5 L
4.png 1 ~3 j0 I& \1 B5 p" u7 h) O9 @) ]" X, n

2 Y9 \, x' _( L+ H- l; }' u      注意定时器需要开启中断;9 u& Z: |1 x; n8 d3 _/ s* m! V
      定时器的使用并不会直接开始定时器,我们在使用的时候需要在初始化阶段开启相应的定时器和中断:- a, F6 m4 I3 [  q& m4 b- O
  1.     HAL_TIM_Base_Start_IT(&htim14);
    $ }- l; G" m; O( t/ \
  2.     0 a( R7 o- s, U! W
  3.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);5 z0 G  O3 R" V/ a& t3 S* s
  4.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
    . T* R+ n* }- d" I. K! V
  5.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,500);
    ! ?' m7 C* F; u9 F2 o
  6.       `' n3 k( u8 d# S9 Z7 S, A
  7.     HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);
    6 ]! v9 P* v% @2 X6 ^
  8.     HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);
    ) s# p' O1 A7 k  g
  9.   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,500);
复制代码
     然后就可以在定时器中断的回调函数中进行呼吸效果的修改了:6 T& V  C$ [( C6 s  n
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)- v/ R% C* Q/ p6 X( I
  2. {5 d9 t" \. B$ ~% e) p( |4 A6 B
  3.   if (htim->Instance == TIM14) {
    - U4 ^+ F; X  {
  4.     HAL_IncTick();* Q1 ]: a! c' n& s6 R1 S" y' _
  5.         Tim_cnt++;
    ! G5 B, M! H5 o/ E5 h7 a& g
  6.         if(Tim_cnt <= 100){% W& B( ^1 s# H
  7.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,Tim_cnt*10);
    . j. u; `5 A. e
  8.               __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,Tim_cnt*10);
    9 V7 N  @$ W/ ?" O7 U
  9.             + ?- U5 x, O9 j' i* P1 P, z1 q( ^
  10.         }6 [7 |& b/ v  Q4 `% Z
  11.         else if(Tim_cnt > 100 && Tim_cnt <= 200){1 U( e, `' X6 ~! n; Y1 f, y* B
  12.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,(200-Tim_cnt)*10);
    0 h7 A$ P" p& h: b9 h2 d9 K
  13.                 __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,(200-Tim_cnt)*10);
    5 R/ b4 b; Z+ L
  14.         }   
    ( z3 Q0 v1 z2 s+ Q! w1 X, b( }
  15.         else if(Tim_cnt>=200)5 W4 z* a$ X- S* W- ?2 O
  16.             Tim_cnt = 0;
    5 [9 L( {) k' W) B" j
  17.     }
    - {& e1 R6 U$ n
  18. }
复制代码
     由于两个LED的控制方式不同,同频的控制实现了交替呼吸的效果:6 R0 [. _* w* w7 Y
呼吸灯测试 (1).gif
" s/ `8 L" n9 n/ }# e
( F! B: @% ]2 k( X) l. ?; T) j
4 Z1 ~& k' B' f8 S1 y0 u1 S: @+ J

0 Z+ N) s* Y$ J$ e' q0 U: D/ c, I0 z4 }" h$ l

$ w) a; E' I+ F8 Y" }8 Z3 u* ~+ Y0 ]* d8 e" z( r# ^
" [! k6 v8 o' i  k4 v
4 y2 x8 `6 c8 s+ _3 x; [  g3 Y4 y
收藏 评论0 发布时间:2025-5-2 21:23

举报

0个回答

所属标签

相似技术帖

官网相关资源

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