RGB呼吸灯

操作原理

通过逐渐增大和减小PWM信号的占空比,使得被驱动的LED的亮度也逐渐增大和减少,实现呼吸效果。

实现方法

SPV1x的PWM自带呼吸模式,整个呼吸过程可以不需要软件参与。

在PWM的呼吸模式下,PWM模块以256个输入时钟为一个PWM周期。整个呼吸周期由4个阶段组成:

../../_images/kiwi-pwm-breath.png
  1. 熄灭阶段

    熄灭阶段的时间由PWMn_CTL.LNUM决定,实际时间为(PWMn_CTL.LNUM+1)*PWM周期。

  2. 上升阶段

    上升阶段的时间由PWMn_CTL.QNUM决定,实际时间为(PWMn_CTL. QNUM+1)*32*PWM周期。

  3. 最大亮度阶段

    最大亮度阶段的时间由PWMn_CTL.HNUM来定,实际时间为(PWMn_CTL.HNUM+1)*PWM周期。

  4. 下降阶段

    下降阶段时间与上升阶段共用一组参数。

PWM的呼吸模式配置较为简单,主要步骤如下:

  1. 在CMU_PWMnCLK寄存器中配置PWM模块使用的时钟源和分频值。

  2. 在PWMn_CTL寄存器中配置HNUM,LNUM,QNUM,PWM模式选择呼吸模式,使能PWM_OE和EN。

  3. 如果需要使用中断(完成一次呼吸周期后,可以触发呼吸中断),则在PWM_IE中配置对应的BTH_END中断。

注意事项

  1. 如果呼吸的速度过快,尝试增大HNUM,LNUM,QNUM的值,如仍不能满足,则需要在CMU_PWMnCLK中增加时钟分频值。

  2. PWM0~3都支持呼吸模式,可以各自同时运行不同的呼吸参数,根据实际需要选取。

  3. 通过灵活地配置引脚复用,可以让1个PWM模块的输出信号从不同的引脚输出,甚至同时从多个引脚输出。