基於 BPS LKS32MC45X 的呼吸燈控制

       最近在做一個便攜式儲能的 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   
作者:五月小姐姐

更多資訊,請掃碼關注我們!


★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

參考來源

評論