爱板网论坛

查看: 82|回复: 0

[分享] 【涂鸦TYDE3.0开发板试用体验】定时器PWM呼吸灯

[复制链接]

16

主题

2

好友

402

积分

秀才

Rank: 3Rank: 3

  • TA的每日心情
    开心
    2017-6-14 23:30
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 6 天前 |显示全部楼层
    本帖最后由 donatello1996 于 2018-2-14 16:03 编辑

        官方APP中的彩灯例程就是用户控制开发板彩灯的不同颜色,而彩灯发出不同颜色的光就是调节红绿蓝三个颜色的亮度比例,当三个颜色光的比例相同时,发出的光就是白光。开发板上的RGB LED彩灯连着的引脚是PB7、PB8、PB9,对应STM32定时器4的PWM通道2、3、4,也就是可以通过修改定时器PWM通道的比较值来控制三个颜色光的亮度。值得注意的是,RGB灯的另一端是VCC而非GND,也就是说,RGB灯的点亮方式是灌电流法点亮,PB7、PB8、PB9输出低电平会亮灯,输出高电平会灭灯,那么按照这个逻辑代入到PWM通道上面,在输出比较极性为低的前提下,占空比越高,一个周期内输出低电平的时间越长,灯就越亮,占空比和灯的亮度是正相关的(如果输出比较极性为高的话就反过来)
    12.JPG

    代码如下,STM32中CCR寄存器是修改PWM通道的比较值,设置向上计数模式之后,比较值和占空比就是正相关关系:
    1. TIM_HandleTypeDef TIM4_Handler;
    2. TIM_OC_InitTypeDef TIM4_CH2Handler,TIM4_CH3Handler,TIM4_CH4Handler;
    3. GPIO_InitTypeDef GPIO_Initure;

    4. void TIM4_PWM_Init(int arr,int psc)
    5. {
    6.         __HAL_RCC_TIM4_CLK_ENABLE();
    7.         __HAL_RCC_GPIOB_CLK_ENABLE();
    8.         TIM4_Handler.Instance=TIM4;
    9.   TIM4_Handler.Init.Prescaler=psc;//分频数
    10.   TIM4_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//向上计数模式
    11.   TIM4_Handler.Init.Period=arr;//自动重装载值
    12.   TIM4_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
    13.   HAL_TIM_PWM_Init(&TIM4_Handler);
    14.    
    15.   TIM4_CH3Handler.OCMode=TIM_OCMODE_PWM1; //选择PWM1模式
    16.   TIM4_CH3Handler.Pulse=arr/2;//设置比较值为重装载值一半
    17.   TIM4_CH3Handler.OCPolarity=TIM_OCPOLARITY_LOW; //输出比较极性为低
    18.   HAL_TIM_PWM_ConfigChannel(&TIM4_Handler,&TIM4_CH3Handler,TIM_CHANNEL_2);
    19.   HAL_TIM_PWM_Start(&TIM4_Handler,TIM_CHANNEL_2);
    20.         
    21.         HAL_TIM_PWM_ConfigChannel(&TIM4_Handler,&TIM4_CH3Handler,TIM_CHANNEL_3);
    22.   HAL_TIM_PWM_Start(&TIM4_Handler,TIM_CHANNEL_3);
    23.         
    24.         HAL_TIM_PWM_ConfigChannel(&TIM4_Handler,&TIM4_CH3Handler,TIM_CHANNEL_4);
    25.   HAL_TIM_PWM_Start(&TIM4_Handler,TIM_CHANNEL_4);
    26.         
    27.         GPIO_Initure.Mode=GPIO_MODE_AF_PP;
    28.         GPIO_Initure.Pull=GPIO_PULLUP;
    29.         GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;
    30.         GPIO_Initure.Pin=GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
    31.         HAL_GPIO_Init(GPIOB,&GPIO_Initure);
    32. }

    33. inline void TIM_SetTIM4Compare2(int compare)
    34. {
    35.         TIM4->CCR2=compare;
    36. }

    37. inline void TIM_SetTIM4Compare3(int compare)
    38. {
    39.         TIM4->CCR3=compare;
    40. }

    41. inline void TIM_SetTIM4Compare4(int compare)
    42. {
    43.         TIM4->CCR4=compare;
    44. }
    复制代码
    1.   while (1)
    2.   {
    3.                 TIM_SetTIM4Compare2(0);
    4.                 TIM_SetTIM4Compare3(0);
    5.                 TIM_SetTIM4Compare4(0);
    6.                
    7.                 for(i=0;i<=100;i++)
    8.                 {
    9.                         TIM_SetTIM4Compare2(i);
    10.                         Delay_ms(5);
    11.                 }
    12.                 Delay_ms(500);
    13.                 for(i=100;i>=0;i--)
    14.                 {
    15.                         TIM_SetTIM4Compare2(i);
    16.                         Delay_ms(5);
    17.                 }
    18.                
    19.                 for(i=0;i<=100;i++)
    20.                 {
    21.                         TIM_SetTIM4Compare3(i);
    22.                         Delay_ms(5);
    23.                 }
    24.                 Delay_ms(500);
    25.                 for(i=100;i>=0;i--)
    26.                 {
    27.                         TIM_SetTIM4Compare3(i);
    28.                         Delay_ms(5);
    29.                 }
    30.                
    31.                 for(i=0;i<=100;i++)
    32.                 {
    33.                         TIM_SetTIM4Compare4(i);
    34.                         Delay_ms(5);
    35.                 }
    36.                 Delay_ms(500);
    37.                 for(i=100;i>=0;i--)
    38.                 {
    39.                         TIM_SetTIM4Compare4(i);
    40.                         Delay_ms(5);
    41.                 }

    42.   }
    复制代码
    来看看呼吸灯的效果:

    1.gif

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /4 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2018-2-20 11:56 , Processed in 0.153447 second(s), 11 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部