使用STM32CubeIDE編寫(xiě)EC11 定時(shí)器中斷方式

0x01 > 授權(quán)信息

原貼地址 使用STM32CubeIDE編寫(xiě)EC11

0x02 >EC11 特性

EC11 特性

從上圖可以看出旋轉(zhuǎn)EC11時(shí),A相上升沿時(shí),B相高電平為順時(shí)針轉(zhuǎn)動(dòng),B相低電平則為逆時(shí)針轉(zhuǎn)動(dòng)。所以我們利用這一特性,使用STM32的定時(shí)器捕獲功能對(duì)A相進(jìn)行電平捕獲,然后與B相電平進(jìn)行比較從而判斷旋轉(zhuǎn)方向。

0x03 > 圖形化配置

IO配置

我們?cè)O(shè)定定時(shí)器TIM3_CH1通道為捕獲模式連接EC11的A相CLK引腳,PA7設(shè)置為IO輸入模式,連接EC11的B相DT引腳,PA5我設(shè)置為中斷模式連接SW引腳(如果不需要按下功能這個(gè)可以不進(jìn)行配置),
設(shè)置定時(shí)器通道——捕獲模式

配置定時(shí)器延時(shí)時(shí)間

配置一個(gè)1ms定時(shí)器,并設(shè)置為自動(dòng)清零模式,配置好后記得打開(kāi)定時(shí)器中斷。

0x04 > 代碼

首先要開(kāi)啟定時(shí)器TIM3,我們使用這個(gè) HAL_TIM_IC_Start_IT(htim, Channel);啟動(dòng)定時(shí)器。

MX_TIM3_Init();
HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_1);

使用定時(shí)器回調(diào)函數(shù)

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)

在里面編寫(xiě)上面的程序,因?yàn)槲覀儗相接在PA7引腳,所以我們使用switch case語(yǔ)句進(jìn)行判斷引腳電平,如果單片機(jī)檢測(cè)到A相為高電平就會(huì)進(jìn)入這個(gè)中斷判斷B相電平,低電平為反轉(zhuǎn),高電平極為正轉(zhuǎn)(程序中的cnt為計(jì)數(shù)作用)。

void  HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
   if(hitm == &htim3)
  {
    switch()
    {
      case 0:
        cnt-- ;//反轉(zhuǎn) 計(jì)數(shù)器減一
      break;
      case 1:
        cnt++ ;//正轉(zhuǎn) 計(jì)數(shù)器加一
      break;
    }
  }
}

0x05 > 測(cè)試

測(cè)試成功

經(jīng)測(cè)試通過(guò)串口打印數(shù)據(jù),EC11非常穩(wěn)定,也沒(méi)有出現(xiàn)丟步和亂跳的情況。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容