关于编码器脉冲距离获取存在简单问题的处理方案
以下為本人自學時摸索的簡單原理,可能缺乏一些專業性,一些地方可能存在問題,僅供查考,如果可以請多多指教,麻煩指出告知。
此文主要針對編碼器脈沖位置比對存在的一個簡單問題進行探討。此處的編碼器相當于一個脈沖發生器,旋轉一定角度,就產生一定數量的脈沖。編碼值即獲取到的脈沖數。
編碼器脈沖距離獲取,主要是對于前后兩次或多次讀取的編碼脈沖值進行比較,從而獲取相應物體運動的距離,目前已知應用在物體編碼定位等方面。
編碼器脈沖距離獲取(假定兩次獲取),前后對同一物體獲取編碼值,當從原理上將我們第二次獲取編碼值必定大于第一次編碼值,所以
編碼距離 = 第二次編碼值 – 第一次編碼值
這個理論在理想上是成立的,成立的條件就是第二次獲取值必定大于第一次獲取編碼值,而實際編碼器計數是有最大值(這里可以理解為我們設定一個編程上的變量,它有能表示的最大值,超過了就會出bug,即我們不期望的情況),超過最大值應做對應處理。最小值同理。
當編碼計數值達到最大值(預設定值)時,再次增加編碼值變為0;
當編碼計數值為零時,再次減少,編碼值為最大值(預設定值)。
問題點:存在一種可能,當第一次取值接近缺不超過最大值,第二次取值可能會取到不大于第一次的值。這會導致理論上的公式不能使用。
解決方案:引入前后圈的概念,擴大可表示范圍并標記。
分析:問題的發生主要是我們對于值超過最值后,都進行相應處理,形成一個輪回,如圖一個圓圈。
所以,遇到上訴問題時,第一次取值可以看成在第一圈取到編碼值,第二次取值看成第二圈取到編碼值,公式為
編碼距離 = 第二次編碼值 + 編碼器一圈值 – 第一次編碼值
這樣第二次編碼值小于第一次編碼值也可以獲取出編碼距離,當然如果是正常情況,直接套用原公式
編碼距離 = 第二次編碼值 – 第一次編碼值
注意這里的編碼器一圈值指代的不是硬件編碼器上標注的走一圈編碼值,而是軟件上我們對于其編碼計數變量預設定值,所謂圈的概念指的是輪回一次軟件編碼值。
接下來,是對于這個預設值進行探討。
MAX:目前發現而言理論上,這個值沒有最大值,而且值越大,對前后圈的需求會越低(指使用次數),實際上是根據記錄編碼值的變量決定,就比如編程上,設定存儲編碼值的變量是unsigned char型的,那他就不能超過unsigned char型的最大能表示的值,否則存在bug。
MIN:從圖中也許大概能明白大概了。因為引入了前后圈的概念,所以能表示的最大距離就是兩倍的編碼器一圈值。所以理論上我們能設定的最小值就是兩次取值之間間隔編碼值的一半。(實際最好大一些,編碼器會有一些波動)如果小于的話,就會需要引入第三圈的概念,在前后圈這里就無法判斷,認為是第一圈(出現錯誤)。
擴展
不難發現,其實圈數不一定是兩圈,也就是說前后圈的概念是局限的,應該是引入一個圈數的概念。知道第二次取到圈數以及對應當前編碼值,我們不難得出編碼值距離。公式為:
編碼距離 = 第二次編碼值 + 編碼器一圈值 * 編碼值圈數 – 第一次編碼值
編碼器一圈值的選取
MAX:根據具體存儲空間設定。
MIN:大于(兩次取值間隙/編碼值圈數)。
選取前后圈原因:
1.首先根據需求,編碼值兩圈足夠使用,建議優先,把編碼器一圈值盡可能調到最大(略小與存儲空間最大值)。
2.如果使用兩圈以上,那么需要在算法中增加一個乘法的處理,相對效率下降(并沒有多大下降)。
3.實際圈數也是一個存儲變量,也是有最大值,所以建議也不要設置太多圈數。
謝謝閱讀。
歡迎各位大牛指導。
總結
以上是生活随笔為你收集整理的关于编码器脉冲距离获取存在简单问题的处理方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS ul li:nth-child的
- 下一篇: 500人的DELPHI2009 超级QQ