原創2023年01月25日 17:11:09
編碼器分類:
按工作原理:光電式、磁電式和觸點電刷式
按碼盤的刻孔方式:增量式和絕對式兩類
由於博主接觸面還不是很廣,一共就用過兩個種類的編碼器,都是屬於光電的
差分編碼器:一般由8根線連線 訊號線分別為 a+ a- b+ b- z+ z- 以及vcc和gnd
這裡有一種不需要z訊號的,6線差分a+ a- b+ b- vcc 和gnd
正交編碼器:一般是5根線連線,訊號線分別為a b z vcc和gnd
編碼器線數: 就是旋轉一圈你的a(b)會輸出多少個脈衝 ,這裡的a b就是上面的輸出脈衝訊號線,它們轉一圈發出的脈衝數一樣的,不過存在90°相位差 通常都是360線的 線數越高代表編碼器能夠反應的位置精度越高
相位差為90° 通過判斷哪個訊號在前 哪個訊號在後 來決定tim->count是++ 還是 –
360線 ab一圈各為360個,z訊號為一圈乙個
編碼器訊號:
a 脈衝輸出
b 脈衝輸出
z 零點訊號 當編碼器旋轉到零點時,z訊號會發出乙個脈衝表示現在是零位置 這個零點位置是固定,廠商指定的
vcc 電源通常分為24v的和5v的
gnd 地線
這裡需要注意:
1.這裡的正交編碼器是如果是24v的工作電壓還需要用光耦隔離,24v轉為3v3在接到stm32的定時器兩個通道上
2.脈衝輸出是oc門輸出,需要上拉電阻
3.z訊號接到stm32的外部中斷口上,很容易受到干擾 ,通常需要接乙個電容到gnd
這裡給出乙個24v轉3.3v的隔離電路,用到的是6n136光耦
硬體連線(這裡使用的stm32f103zet6的tim4的ch1和ch2):
**詳解:
tim4初始化**如下:
#include "stm32f10x.h"
#include "encode.h"
#include "misc.h"
#include "nvic.h"
#include "sys.h"
#include "delay.h"
void tim4_mode_config(void)
/*
void tim3_mode_config(void)
*/void tim4_init(void)
這裡的nvic_config(2)是我個人寫的一種多種中斷配置的方法單獨放在nvic.c中需要了解的可以自己看看工程
這裡通常要問的是兩點
1.tim_timebasestructure.tim_period = 359*4
2.tim_encoderinte***ceconfig(tim4, tim_encodermode_ti12, tim_icpolarity_bothedge ,tim_icpolarity_bothedge);//使用編碼器模式3,上公升下降都計數
很多人不理解為要360線的編碼器為什麼這裡的重灌值乘以4 讀出來的為什麼又要/4,其實這兩個要結合起來解釋
首先看看這個函式tim_encoderinte***ceconfig,它有4個引數
1.選擇哪個定時器 即tim4
2.編碼器模式有三種 見下圖
3.tim_ic1的極性
4.tim_ic2的極性
這裡設定的是編碼器模式3,且ti1和ti2都是雙邊沿觸發–即上下邊沿都計數
還有乙個大家不是很懂的圖,我來分析一下
1.有效邊沿 其實就是對應上面設定的編碼器的三種模式
2.相對訊號的電平,這裡沒有理解手冊意思,我把它理解為於它的高低電平意味著將pb6和pb7介面對換,pb7接a pb6接b 這樣一來就意味著原來的正轉變成反轉 計數上公升變為下降
tix 就相當於輸入訊號的 tim4->ch1 tim4->ch2
tixf 濾波後訊號
tixfpx經過帶極性選擇的邊緣檢測器過後的產生的訊號
3.至於ti1fp1和ti2fp2訊號在上身沿計數還是下降沿計數受兩點影響 極性(是否反向) 邊緣檢測(上公升沿還是下降沿)
我們這裡設定的是不反向 在雙邊沿計數,即在a上公升下降 b的上身下降都計數
而計數為什麼是x4倍 ,下圖結合上面的配置詳細說明了
由此完成了編碼器的配置
至於讀取編碼器角度的時間,要根據實際需要來設定
編碼器線數為 w線/圈
轉速為 v 圈/min
讀取間隔時間 t(線間隔時間)
t <= 60/wv 單位為秒
還有z訊號歸零,在遇到z訊號的時候,將定時器的cnt=0,這樣就能保證位置與cnt實際對應上了
中斷**如下
//外部中斷1,編碼器z相歸零 優先順序--① 0 0
void exti1_irqhandler(void)
//編碼器介面模式 優先順序--2 1 1
void tim4_irqhandler(void)
tim4->sr&=~(1
<<
0);//清除中斷標誌位
}
csdn: 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學習筆記之正交編碼器
最近做乙個專案,主控晶元用stm32rbt6,要用到光柵尺,本來帶乙個控制器的,通過控制器的232可以讀取光柵尺的資料,但這個控制器太大,裝置中放不下,於是,考慮自己做乙個,網上看到很多有用cpld的方案,後來無意間發現stm32的定時器可以配置成編碼器,甚喜 高興之餘,突然發現stm32的定時器是...