基于 BPS LKS32MC45X 的呼吸灯控制

日期2024-12-23

       最近在做一个便携式储能的 BMS 项目,使用的主控芯片是晶丰明源的 LKS32MC45x 系列 MCU。由于要做一个 LED 的呼吸灯控制,涉及到的外设有 GPIO 和通用定时器 UTimer。以下是关于LED 呼吸灯控制的驱动说明。

一、模块初始化配置

PWM 的配置主要有:GPIO 的初始化配置、UTimer 模块的初始化配置。

1、GPIO 的初始化配置

        以 P2_12(Timer4-CH1) 为例,LKS32MC45x 系列 MCU 要求将 IO 配置为输出(OUTPUT)。

   GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;

         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;

         GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;

         GPIO_InitStruct.GPIO_PODEna = DISABLE;

         GPIO_InitStruct.GPIO_PFLT = DISABLE;

 

         GPIO_Init(GPIO2,&GPIO_InitStruct);



接着要把 P2_12(Timer4-CH1) 管脚配置成复用 TIMER4 模式。

    GPIO_PinAFConfig(GPIO2, GPIO_PinSource_12, GPIO_AF_TIMER4); // P2.12复用为Timer4CH1的输出模式



2
、UTimer 模块的初始化配置

UTimer4 模块的初始化配置如下。这些参数中要注意系统时钟频率为 192MHz。参数配置如下:

  • 将系统时钟频率(CLK_DIV) 8 分频,得到 UTimer4 的工作频率为 24MHz。
  • 将计数器门限(TH)设为 24000,即每 1ms 计数器清零,也就是 PWM 的频率是 1kHz。
  • 将 Timer4 的通道 1 工作模式(CH1_MODE)设为比较模式,输出极性(CH1_POL)为 1。
  • 开启 Timer4 的回零中断(UTIMER_IE_ZERO)。

    TIM_InitStruct.EN       = ENABLE;                         // Timer 模块整体使能,高有效

    TIM_InitStruct.ETON     = 0;                              // Timer 计数器计数使能配置 0:自动运行 1:等待外部事件触发计数

    TIM_InitStruct.CLK_DIV  = UTIMER_Clk_Div8;                // Timer 计数器分频设置,192000 000/8=24000 000Hz;

    TIM_InitStruct.CLK_SRC  = UTIMER_CLK_SRC_MCLK;            // Timer 时钟源

    TIM_InitStruct.CH1_POL  = 1;                              // Timer通道1在比较模式下的输出极性控制,当计数器计数值回零时的输出值

    TIM_InitStruct.CH1_MODE = UTIMER_MODE_CMP;                // Timer通道1的工作模式选择,默认值为0

    TIM_InitStruct.TH       = 24000;                     // Timer 计数器计数门限。

    TIM_InitStruct.CMP1     = 24000;                     // Timer 通道1工作在比较模式时,当计数器计数值等于CMP1时,发生比较事件。

    TIM_InitStruct.FLT      = 0;                          // 通道0/1信号滤波宽度选择。取值范围0~255

    TIM_InitStruct.IE       = UTIMER_IE_ZERO;            // 开启Timer模块回零中断

 

    UTIMER_Init(UTIMER4, &TIM_InitStruct);



3
、中断的初始化配置

由于需要用到中断功能,所以需要开启 UART 中断,并设置其中断优先级,比如:

NVIC_SetPriority(TIMER4_IRQn, 1);  // 设置 UTimer4 中断优先级

NVIC_EnableIRQ(TIMER4_IRQn);   // 使能 UTimer4 中断

二、呼吸灯的实现

1、开启呼吸灯

开启呼吸灯,需要打开 UTimer4,并把 IO 管脚配置为复用 TIMER 模式。

        对 Timer4 的通道 1 来说,在计数器回零时,输出一个电平到 TIMER4_CH1,当计数到 UTIMER4_CMP1 即比较事件发生时,电平翻转,输出另一个电平到 IO 口 TIMER4_CH1。所以在UTimer4 的中断处理函数中,改变 CMP1 的值,即可改变 PWM 的占空比。

中断处理函数内容如下:

void TIMER4_IRQHandler(void)

{

    static int Timer_flag = 0;

    if (UTIMER4_IF & BIT2)              // 判断UTimer4是否发生回零中断

    {

        UTIMER4_IF = BIT2;              // 清除UTimer中断标志位

                            if(LED_PWM_UpDown)

                            {

                                   LED_PWM_CMP += LED_PWM_Step;  // 占空比增大

                                   if(LED_PWM_CMP>LED_PWM_TH)    // 当占空比达到 100%,则开始减小占空比

                                   {

                                          LED_PWM_CMP=LED_PWM_TH;

                                          LED_PWM_UpDown=0;

                                   }

                            }

                            else

                            {                                 

                                   if(LED_PWM_CMP>LED_PWM_Low)

                                   {

                                          LED_PWM_CMP -= LED_PWM_Step; // 占空比减小

                                   }

                                   else                           // 当占空比太小时,则开始增大占空比

                                   {

                                          LED_PWM_UpDown=1;

                                   }

                            }

                            UTIMER4_CMP1 =  LED_PWM_CMP; // 赋值 CMP1

    }

}



2
、关闭呼吸灯

       关闭呼吸灯,需要关闭 UTimer4 的时钟,并且将 IO 管脚配置为普通 IO。最后将 IO 管脚设置为 LED 熄灭的电平。

       UTIMER_Disable(UTIMER4);

       GPIO_PinAFConfig(GPIO2, GPIO_PinSource_12, GPIO_AF_GPIO); // P2.12设置为 GPIO 的模式

       GPIO_ResetBits(GPIO2, GPIO_Pin_12);

 
三、总结

       以上是关于晶丰明源的 LKS32MC45x 的 UTimer 模块配置,控制一个呼吸灯的软件驱动的说明。如果想了解更多,可以在下方评论区留言,或者发邮件给我们:atu.sh@wpi-group.com

四、参考资料

  1. LKS32M45x 用户手册:LKS32MC45x_UM_v1.52.pdf。
  2. LKS32M45x 外设示例工程:lks32mc45x_demo_prj_v2.9。


欢迎在博文下方留言评论,我们会及时回复您的问题。

如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com   
作者:五月小姐姐

更多资讯,请扫码关注我们!


★方案内容均由个人提供,与平台无关,如有违法或侵权,请联系大大芯方案专属信箱