【沁恒 CH32V208 开发板免费试用】基于PWM的呼吸灯 - RISC-V MCU技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

[文章]

【沁恒 CH32V208 开发板免费试用】基于PWM的呼吸灯

PWM是常用的外设之一,比如呼吸灯,动态改变灯的亮度,舵机等等都需要用到PWM外设。今天驱动PWM来展示TIM的功能之一。

PWM通道选择

我这里选用的TIM1的通道1,从数据手册上看到该通道IO为PA8:

image.png

pwm设置需要设置的参数有三个,一个是pwm的频率,一个是脉宽,一个是占空比。
依据官方给出的示例M:\CH32V208\CH32V20xEVT\EVT\EXAM\TIM\PWM_Output
我们在他的基本上修改。
1、例程已经给了我们一个频率为96000000/4800=20KHz的PWM波,点定计数值为100。
2、我们只要运态修改占空比,就能实现实时对脉宽的控制,从而改变LED的亮度,形成呼吸灯的效果。
即我们使用函数 TIM_SetCompare1来动态更改点空比。

/*********************************************************************
 * @fn      TIM_SetCompare1
 *
 * [url=home.php?mod=space&uid=2666770]@Brief[/url]   Sets the TIMx Capture Compare1 Register value.
 *
 * [url=home.php?mod=space&uid=3142012]@param[/url]   TIMx - where x can be 1 to 4 select the TIM peripheral.
 *          Compare1 - specifies the Capture Compare1 register new value.
 *
 * [url=home.php?mod=space&uid=1141835]@Return[/url]  none
 */
void TIM_SetCompare1(TIM_TypeDef *TIMx, uint16_t Compare1)
{
    TIMx->CH1CVR = Compare1;
}

修改后的主函数如下:

while(1)
	{
	    if (t == 0) {
	        i = i+5;
	        if (i>=100) {
                t = 1;
                i=100;
            }

        }
	    else {
            i = i-5;
            if (i<=0) {
                i = 0;
                t = 0;
            }

        }
	    TIM_SetCompare1(TIM1, i);
	    printf("I:%d\r\n",i);
	    Delay_Ms(50);

	}

编译后,我们下到开发板,就可以实现呼吸灯的效果了,详细见视频。

pwm呼吸灯

更多回帖

×
发帖