91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

單片機的增量編碼器正交解碼

增量式編碼器增量式編碼器也成為正交編碼器,是通過兩個信號線的脈沖輸出來進行數據處理,一個輸出脈沖信號就對應于一個增量位移,編碼器每轉動固定的位移,就會產生一個脈沖信號  通過讀取單位時間脈沖信號的數量,便可以達到測速的效果(v=s/t),通過對脈沖信號的累加,和編碼器的碼盤的周長(轉一圈對應距離)  便可以達到計算行走距離的效果(s=n*d)

看一下我用過的一種編碼器

編碼器信號: A 脈沖輸出 B 脈沖輸出 Z 零點信號 當編碼器旋轉到零點時,Z信號會發出一個脈沖表示現在是零位置 表示編碼器轉了1圈,可用來記錄編碼器轉了多少圈,從而知道運行距離VCC 電源線GND 地線

編碼器線數:編碼器的線數 ,是說編碼器轉一圈輸出多少個脈沖,,,如果一個編碼器是500線,說明這個編碼器轉一圈對應的信號線會輸出500個脈沖, A B兩相轉一圈發出的脈沖數一樣的,不過存在90°相位差

線數越高代表編碼器能夠反應的位置精度越高

編碼器原理:增量式編碼器有兩個脈沖輸出,A相和B相,并且兩個相位永遠存在90°相位差。 如果兩個信號相位差為90度,則這兩個信號稱為正交。由于兩個信號相差90度,因此可以根據兩個信號哪個先哪個后來判斷方向、并且可以根據AB相脈沖信號數量測得速度,位移等,

編碼器正反轉:

正轉的時候信號線A先輸出信號,信號線B后輸出  A相超前B相90度  證明是正轉

反轉的時候信號線B先輸出信號,信號線A后輸出 B相超前A相90度 證明是反轉

STM32定時器編碼器模式

   

STM32的編碼器模式共有三種:

 僅在TL1計數(A相) 僅在TL2計數(B相) 在TL1和TL2都計數(A相和B相都計數) 

僅在TL1計數(A相)                  

TI2(B相)為高電平時:

1時刻: TI1(A相)下降沿,  則向上計數(正轉)。

2時刻:TI1(A相)上升沿,   則向下計數(反轉)

TI2(B相)為低電平時:

3時刻: TI1(A相)上升沿,  則向上計數(正轉)。

4時刻:TI1(A相)下降沿,   則向下計數(反轉)

僅在TL2計數(B相)

TI1(A相)為高電平時:

1時刻: TI2(B相)上升沿,  則向上計數(正轉)。

2時刻:TI2(B相)下降沿,   則向下計數(反轉)

TI2(B相)為低電平時:

3時刻: TI2(B相)下降沿,  則向上計數(正轉)。

4時刻:TI2(B相)上升沿,   則向下計數(反轉)

在TL1和TL2都計數(A相和B相都計數)

一個脈沖信號周期完成4次跳變。精度提高

1時刻:TI2為低電平,TI1上升沿跳變,計數器向上計數;

2時刻:TI1為高電平,TI2上升沿跳變,計數器仍然向上計數;

3時刻:TI2為高電平,TI1下降沿跳變,計數器仍然向上計數;

4時刻:TI1為低電平,TI2下降沿跳變,計數器仍然向上計數。 

毛刺:只有一個相位脈沖   過濾掉 編碼器轉動過程中可能產生的毛刺過濾掉

計數器向下計數原理相同   看圖即可很好理解。

計數器向下計數:

A下降沿,B低電平B下降沿,A高電平B上升沿,A低電平A上升沿,B高電平

上升沿與下降沿參看 《外部中斷----高低電平觸發,(邊沿觸發)上升沿觸發和下降沿觸發區別》

注意事項:需要增加測量的精度時,可以采用4倍頻方式,即分別在A、B相波形的上升沿和下降沿計數,分辨率可以提高4倍,如果只是測速,不要求方向,那么只需要用單片機隨意選擇一個信號線就行了,,然后定時器邊沿觸發,檢測脈沖計數即可一般是定時器的通道1和2才能作為編碼器輸入口,對應編碼器輸出的兩相。GPIO配置為配置為上拉輸入模式一個定時器做一種工作,如果你配置了編碼器模式,那么剩下的通道就不能配置其他模式兩相計數模式下,  讀出來數需要/4          一個脈沖信號對應四次計數  

編碼器配置標準外設庫

TIM_EncoderInterfaceConfig,它就是編碼器接口的配置函數。簡單的只需要配置該函數,使能TIM,即可實現采集編碼器上面的信息

void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode,                                uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity)

TIMx參數就是使用哪個定時器作為編碼器接口的捕捉定時器。

TIM_EncoderMode參數是模式,是單相計數(僅在TL1計數或僅在TL2計數)還是兩相計數(在TL1和TL2都計數)。

TIM_IC1Polarity和TIM_IC2Polarity參數就是通道1、2的捕捉極性。

如果計數器只在TI2的邊沿計數,則置TIMx_SMCR寄存器中的SMS=001;如果只在TI1邊沿計數,則置SMS=010;如果計數器同時在TI1和TI2邊沿計數,則置SMS=011 

編碼器模式功能:  stm32f407中定時器1、2、3、4、5、8提供編碼器接口模式   可以對輸入信號TI1,TI2進行濾波處理,數字濾波器由事件器組成,每N個事件才視為一個有效邊沿,可以在TIMx_CCMR1、TIMx_CCMR2中的IC1F位域設置      也就是可以設置每產生幾次脈沖才視為1次有效  各個值的計算:轉速計算方法:用捕獲值(一秒內輸出的脈沖數)/編碼器線數(轉速一圈輸出脈沖數)/電機減數比(內部電機轉動圈數與電機輸出軸轉動圈數比,即減速齒輪比    沒有則不用除)

運動距離計算:輸出的總脈沖數 / 編碼器線數*編碼器齒輪周長

所轉角度計算:    輸出的總脈沖數 / 編碼器線數 *360     或    溢出中斷次數*360+當前計數值 

轉動方向: 方向在定時器CR1的DIR位里   dir=(TIMX->CR1 & 0x0010)>>4;     //取方向標志位if(dir > 0)  //向下計數     else     //向上計數

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關注 212
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 台南市| 碌曲县| 萍乡市| 宣汉县| 娱乐| 新竹县| 兴国县| 南华县| 射阳县| 彭山县| 新宁县| 巴南区| 稻城县| 大渡口区| 云浮市| 丰都县| 潢川县| 石棉县| 潍坊市| 杭锦旗| 蓬溪县| 神农架林区| 海伦市| 林芝县| 长葛市| 聂荣县| 娱乐| 丹凤县| 临西县| 穆棱市| 宁阳县| 泉州市| 东安县| 永修县| 米泉市| 怀化市| 梁平县| 陆川县| 澄江县| 车致| 阿拉尔市|