STM32學習筆記之正交編碼器

2021-06-21 13:43:53 字數 932 閱讀 4722

**

最近做乙個專案,主控晶元用stm32rbt6,要用到光柵尺,本來帶乙個控制器的,通過控制器的232可以讀取光柵尺的資料,但這個控制器太大,裝置中放不下,於是,考慮自己做乙個,網上看到很多有用cpld的方案,後來無意間發現stm32的定時器可以配置成編碼器,甚喜

高興之餘,突然發現stm32的定時器是16位的,我的光柵尺的計數會超過65535,於是在21ic論壇上和幾位高手請教,最終確定的方案

工作過程是配置tim3為正交編碼器模式,並定乙個10ms的中斷,每10ms讀取一次計數值,10ms的前提是在10ms內計數器不溢位(這個思想要感謝21ic的

lxyppc

)以下是部分**:(這些**修改於st官方的例程,但我的工程用的是v3的韌體庫,他們的例程貌似是0.3的,所以有些地方有改動)

下面是初始化tim3為正交編碼器模式

voidenc_init(void)

以下為獲取一次計數值,此演算法來自

lxyppc

可以規避超過16位的情況,具體細節見的討論

s16enc_get_electrical_angle(void)

elseif(dangle < -max_count)

lastcount = curcount;

return(s16)dangle; 

}以下為系統滴答的初始化和中斷函式

voidtb_init(void)

}voidsystick_handler(void)

else

}以上**已通過測試,韌體庫版本為:v3.1.2

st官方例程和中文說明文件:

最後抱怨一句,st為啥不把定時器做成32位的呢,能增加1分錢成本嗎?

STM32正交編碼器介面

晶元型號 使用引腳及初始化程式原始碼 tim2埠重對映問題 與jtag介面衝突時的現象及解決方法 晶元型號 stm32f103ret6 使用定時器 tim2 tim3 tim4 tim5 使用引腳 tim2 pa15 pb3 remap tim3 pa6 pa7 tim4 pb6 pb7 tim5 ...

STM32正交編碼器測速

一 正交編碼解碼原理 二 解碼思路 1 方法一 使用定時器的輸入捕獲功能,配置好tim icinittypedef即可獲取一定時間內的脈衝個數,並可根據b相上公升沿時a相所處的電平判斷電機正轉還是反轉。中斷型別配置為更新事件和上公升沿觸發,更新事件的時間由定時器配置的引數計算出,在更新事件中斷中計算...

STM32定時器 正交編碼器模式詳解

原創2016年01月25日 17 11 09 編碼器分類 按工作原理 光電式 磁電式和觸點電刷式 按碼盤的刻孔方式 增量式和絕對式兩類 由於博主接觸面還不是很廣,一共就用過兩個種類的編碼器,都是屬於光電的 差分編碼器 一般由8根線連線 訊號線分別為 a a b b z z 以及vcc和gnd 這裡有...