Ⅰ 關于編碼器
編碼器的種類有很多,什么增量式編碼器、絕對值編碼器,有軸或者無軸編碼器,電壓輸出、推拉輸出、集電極開路輸出等等。但不管什么類型的編碼器,其目的都類似,得到轉動的角度,角速度、位移等。
本文講述常見的增量式編碼器,增量式編碼器也可以叫正交編碼器,也就是說可以通過其A、B的相位知道編碼器是正轉,還是反轉,還可以根據編碼器參數得出旋轉了多少角度等。
常見的增量式編碼器A、B、Z三根線代表什么意思呢?使用過編碼器的人不難理解,這里簡單給初學者講述一下:
A、B兩線提供相位相差90度的脈沖信號,用其來計算旋轉的角度;Z線為過零點線,也就是說每轉一轉,經過某一點都會輸出一個脈沖信號,主要用于“過零校正”,三線的信號大致如下圖(左邊):
有些編碼器出來的線有一個對應的“非”信號線(如上圖右邊),其實主要用于抗干擾的。
更多關于編碼器的描述,請網上搜索相關的知識進行了解,本文不再講述。
在STM32芯片中,都有這么一個定時器,叫通用定時器“General-purpose timers”,定時器里面存在這么一個模式,叫編碼器接口模式“Encoder interface mode”。當然,具體是哪一個TIM,可參看芯片對應的數據手冊,可以一目了然。
STM32提供的編碼器接口模式主要針對的就是“正交編碼器”,它可以利用定時器的“計數”功能,得出編碼器計了多少個脈沖;同時,它可以根據編碼器AB的相位得出編碼器是正轉,還是反轉。
(圖片來自STM32參考手冊)
1.計算脈沖個數
有點類似TIM的捕獲功能,捕獲A相、B相的脈沖信號;只是編碼器模式是捕獲A(TI1)、B(TI2)相的邊沿信號(如上圖),相當于一個周期內,計4個脈沖信號的值。
2.計數器的增減(方向)
STM32的計數器會根據方向(+ 或者 -)來進行計數,TI1和TI2相位相差90,4個階段的邊沿,對應TI1和TI2不同電平信號,從這個不同的信號,硬件自身可以判斷出其方向。在編碼器模式下,有個寄存器(TIMx_CR1)中有一個方向位(DIR),會隨著編碼器旋轉方向的改變而改變,我們可以通過讀取該位來判斷編碼器的正轉,還是反轉。
3.TIM時基
STM32編碼器接口模式,其實是通過利用AB相位TIM時基提供時鐘信號,使其計數。
Ⅲ 應用編程
相信看了上面的一些描述,大家應該對編碼器有所理解了。其實,在STM32中,可以通過配置編碼器模式對應的函數,就能實現獲取編碼器傳感器上面的信息了。
使用STM32提供的標準外設庫,或者使用STM32CubeMX工具很容易將TIM配置成編碼器模式。
1.標準外設庫配置編碼器
TIM_EncoderInterfaceConfig,它就是編碼器接口的配置函數。簡單的只需要配置該函數,使能TIM,即可實現采集編碼器上面的信息。(當然,需要復雜的操作,還需要做其他相應的配置)
void ENCODER_Configuration(void){ TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising); TIM_Cmd(TIM3, ENABLE);}
2.STM32CubeMX配置
STM32CubeMX是一套快速開發的工具,讓很多不了解STM32底層的朋友可以快速的在STM32上編寫應用程序。
本文說的配置編碼器接口,在某些TIM上存在一個“Combined Channel”配置,可以理解為“連接通道”,也算是TIM的一種復用模式。選擇里面的“Encoder Mode”即可。
Ⅳ 實例代碼
本文提供的代碼為一個使用標準外設庫編寫的簡單Demo工程,其中里面附帶一個工程(用于模擬編碼器AB相波形的工程),如下如:
該工程主要配置TIM的編碼器模式,通過定時讀取編碼器的方向(DIR),和計數(CNT),并通過串口打印出來。
下載地址:
百度網盤:
鏈接:https://pan.baidu.com/s/1jH8yOqM
密碼:t4kx
GitHub:
https://github.com/EmbeddDeveloper/STM32F4_TIM_Encoder
CSDN:
http://download.csdn.net/download/ybhuangfugui/10165086
-
編碼器
+關注
關注
45文章
3655瀏覽量
134952 -
接口
+關注
關注
33文章
8677瀏覽量
151574 -
STM32
+關注
關注
2270文章
10918瀏覽量
356849
發布評論請先 登錄
相關推薦
評論