(轉)stm32cubeMx配置使用encoder編碼器


 增量式編碼器在實際應用中還是很常見。stm32的定時器帶的也有編碼器模式。所用的編碼器是有ABZ三相,其中ab相是用來計數,z相輸出零點信號。AB相根據旋轉的方向不同,輸出的波形如下圖所示:

   stm32cubeMx配置使用encoder編碼器

      從圖上可以看出來,cw方向A相會超前B相90度左右,相反CCW方向,B相會超前A相90度左右。不過方向判斷stm32自己是可以完成的。下面裂下使用stm32cubeMx配置的過程。

     軟件:stm32cubemx   mdk

     芯片型號:stm32F407IGH6

     使用的是定時器2

     首先打開timer2的encoder模式:

     stm32cubeMx配置使用encoder編碼器

    配置系統時鍾為168mhz。

    stm32cubeMx配置使用encoder編碼器

 

    下面才是重點,配置具體定時器的參數:

    選擇的encoderMode是  TI1和TI2模式。這種模式下,AB兩相的上升沿和下降沿都會計數,所以計數值是實際值的4倍,需要做分頻。也就是第一個參數,分頻值設為3,實際上是3+1=4分頻。

    還有個地方需要解釋一下,我剛開始的時候就是把這里的設置沒搞清楚,看Polarity參數設置的是Rising Edge。這個參數的意思是在檢測到上升沿的時候就觸發encoder捕獲AB相的值,而並不是這里設置的是上升沿就只檢測AB相的上升沿,下降沿還是同樣會計數的。

   Input Filter濾波值是從1-15,看情況設定,是用來濾除一些雜波的。

    stm32cubeMx配置使用encoder編碼器

    這樣基本就配置好了,生成mdk工程。

    然后就是添加應用代碼了。

    在初始化中添加打開定時器的encoder模式:   

 

HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL);

 

    然后定期調用下面這一句函數就可以獲取到encoder編碼器的計數值:

 

enc1 = (uint32_t)(__HAL_TIM_GET_COUNTER(&htim2));//獲取定時器的值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM