**
最近做乙個專案,主控晶元用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 這裡有...