STM32正交編碼器測速

2021-10-02 03:11:02 字數 1172 閱讀 7043

一、正交編碼解碼原理

二、解碼思路

(1)方法一:使用定時器的輸入捕獲功能,配置好tim_icinittypedef即可獲取一定時間內的脈衝個數,並可根據b相上公升沿時a相所處的電平判斷電機正轉還是反轉。中斷型別配置為更新事件和上公升沿觸發,更新事件的時間由定時器配置的引數計算出,在更新事件中斷中計算速度;在上公升沿中斷中計脈衝數。

void tim_icinit(tim_typedef* timx, tim_icinittypedef* tim_icinitstruct);
配置示例**:(後續新增注釋)

#include "dcmotor.h"		

struct dc_motor dc_information;

char temp[10];

void dcmotor_init(u16 per,u16 psc)

void tim3_irqhandler()

if(tim_getitstatus(tim3,tim_it_cc1))else if(dc_information.dc_angle>=99999)

tim_clearitpendingbit(tim3,tim_it_cc1);

} }

(2)方法二:使用定時器的編碼器模式

tim_encoderinte***ceconfig(tim3,tim_encodermode_ti12,tim_icpolarity_rising,tim_icpolarity_rising);	//編碼器模式
編碼器模式下,中斷事件的產生條件為計數達到,tim_initstructure.tim_period的值。需要注意的是,若計數模式選為,tim_encodermode_ti12,則對正交編碼器的a相和b相的上公升和下降沿都會計數,實際脈衝數應為tim_initstructure.tim_period的值除以4;而其他的兩種模式只對單相的上公升和下降沿計數,實際脈衝數應為tim_initstructure.tim_period的值除以2。

編碼器模式下未解決問題:暫時不知道中斷的週期如何確定,嘗試過再開乙個定時器,設定中斷週期,在這個定時器的中斷事件中計算速度,編碼器模式的定時器負責計脈衝,但是效果很差。(求解)

問題未解決,暫無**。

STM32正交編碼器介面

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

STM32學習筆記之正交編碼器

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

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

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