传统型编码器测速方案
傳統型編碼器測速方案
編碼器,經常被用來測量速度或者顯示電機位置,大致分為絕對值式編碼器和增量式編碼器,顧名思義,相對應的是產生增量或者絕對信號。增量信號不表示特定位置,只表示位置已經更改;絕對信號是絕對值式編碼器對應每個位置使用不同的“字”,所以絕對值編碼器即可以顯示所處的位置,也可以計算相對應的速度。增量編碼器,一般用于測量速度居多。價格方面,一般來說增量編碼器也低于絕對值式編碼器。
此處,我們以增量編碼器為例進行相關說明。
原理:每轉過單位的角度就發出一個脈沖信號(或者是正弦信號),通常為對外輸出為A相、B相、Z相(有些特殊編碼器會輸出6相信號:A+、A-、B+、B-、Z+、Z-,正負信號為互補相反輸出)。A相和B相其相位相差一個相位,一般為1/4周期(或者90度)。A相和B相的先后順序決定編碼器是正轉或者反轉。
A相信號在前,表示右旋轉(從軸側看)
B相信號在前,表示左旋轉(從軸側看)
有的編碼器還有一個Z相,它表示的是0位,即檢測到0刻線即輸出高電平,也就是給增量式編碼器一個尋零的功能。
編碼器內部電路輸出分集電極開路輸出、互補輸出、電壓輸出、驅動器輸出
編碼器的輸入電壓范圍一般都比較大,從5V到24V不等,此處假設輸入電壓為12V,stm32單片機的IO口一般為3V,5 V tolerant。編碼器選擇集電極開路輸出,上拉電阻到3V(或者可以配置GPIO管腳為上拉模式,省去外部上拉),或者使用互補輸出,調整輸入電壓為5V或調整輸出電壓幅值。本試驗以集電極開路輸出為例。
1.2.2軟件實現方式(本實驗以野火指南者開發板stm32f103VET6為例)
STM32的定時器TIM1,2,3,5,8中有專門的編碼器模式,省去了我們讀脈沖和計數的操作。而且配置全面。
可以配置:
本例以編碼器模式為例來測試。
具體配置如下:
下載調試為SW模式。
時鐘選擇外部高速晶體震蕩時鐘。
使能TIM8為Encoder Mode,顯示通道1和通道2為灰色,表示這兩個通道已經被使用為編碼器模式了。
具體配置如下,重載值16bits,即計數器數到多少就清零,設置為0xffff ,Encoder Mode選擇Encoder Mode TI1 and TI2,表示在A相和B相的上升和下降沿都會計數,故最終計算的數據應該是計數值除以4。輸入濾波選擇15,為最大值,濾除干擾信號。
GPIO口模式選擇為輸入模式,Pull-up上拉,此處主要是為了兼容開漏模式的編碼器輸出(或者此處不配置為上拉模式,硬件上做上拉處理)配置如下
增開TIM6,配置如下,系統主頻為72M的配置,并使能中斷。
配置串口1用于打印輸出數據。配置如下:
系統72M時鐘配置如下。
此處以TS=1秒定時為例,每隔1秒清除編碼器所計數的數據。
CaptureNumber為4倍的編碼器的PWM數值。主程序串口輸出方向和上1秒計數值。
Stm32f103的Counter Period為16bits數據,最大為0xffff。在不清除CNT情況下,
左轉和右轉編碼器,計數方式不同。
左轉 從0x0000~0xffff,
右轉 從0xffff~0x0000
編碼器一圈劃分600格。
故:編碼器最快速度為TS情況下把計數器填滿。其速度為大:2^152PI /(6004TS)
最小速度為,當編碼器在TS時間內,最小要跑1個格:2PI/(600TS)
當TS為1S,速度范圍為:0.0104rad/S~81.64rad/S
按照目前拉絲速度換算成角速度為15.33 rad/S,滿足要求
如要測試更快速度,則把TS,即取樣時間縮小。
硬件連接:
A相:接PC6
B相:接PC7
串口使用串口PA9、PA10
備注:筆者是做硬件設計的,由于工作需求才研究編碼器的使用。文中難免有不合理的地方,還請見諒,且示例代碼也僅僅跑了這一個任務,實際的應用比這個復雜的多,筆者也不懂更深入的編碼。
總結
以上是生活随笔為你收集整理的传统型编码器测速方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jvisualvm启动提示“无法监视本地
- 下一篇: 录音转文字免费的软件有哪些?看完这篇文章