RGB呼吸灯 =============================== 操作原理 ------------------------------- 通过逐渐增大和减小PWM信号的占空比,使得被驱动的LED的亮度也逐渐增大和减少,实现呼吸效果。 实现方法 ------------------------------- SPV1x的PWM自带呼吸模式,整个呼吸过程可以不需要软件参与。 在PWM的呼吸模式下,PWM模块以256个输入时钟为一个PWM周期。整个呼吸周期由4个阶段组成: .. image:: ../../_static/kiwi-pwm-breath.png :align: center 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模块的输出信号从不同的引脚输出,甚至同时从多个引脚输出。