STM32CubeMX学习——旋转编码器模块
前言
雨打燈難滅,風(fēng)吹色更明。
若飛天上去,定作月邊星?!畎住对佄灮稹?/p>
一、旋轉(zhuǎn)編碼器介紹
旋轉(zhuǎn)編碼器是一種可以左右旋轉(zhuǎn),同時也可以按下,也可以按下旋轉(zhuǎn)的器件,通過左右旋轉(zhuǎn)對應(yīng)著內(nèi)部不同開關(guān)的導(dǎo)通,同時按下也可以旋轉(zhuǎn),由此看來旋轉(zhuǎn)編碼器可以實現(xiàn)很復(fù)雜的功能,簡單的通過左右旋轉(zhuǎn)可以調(diào)節(jié)音量、亮暗等功能,按鍵可以發(fā)揮普通按鍵的作用,按下按鍵的同時左右旋轉(zhuǎn)又可以區(qū)別普通旋轉(zhuǎn)的按鍵,因此可以用一個旋轉(zhuǎn)編碼器同時調(diào)節(jié)音量和亮暗(舉例),同時也可以通過不同的轉(zhuǎn)速實現(xiàn)不同的功能,綜上所述,它的功能很復(fù)雜,用處也很多。
旋轉(zhuǎn)編碼器是用來測量轉(zhuǎn)速并配合 PWM 技術(shù)可以實現(xiàn)快速調(diào)速的裝置,光電式旋轉(zhuǎn)編碼器通過光電轉(zhuǎn)換,可將輸出軸的角位移、角速度等機械量轉(zhuǎn)換成相應(yīng)的電脈沖以數(shù)字量輸出(REP)。
- 按信號的輸出類型分為: 電壓輸出、集電極開路輸出、推拉互補輸出和長線驅(qū)動輸出。
- 形式分類:
有軸型:有軸型又可分為夾緊法蘭型、同步法蘭型和伺服安裝型等。
軸套型:軸套型又可分為半空型、全空型和大口徑型等。
以編碼器工作原理可分為: 光電式、磁電式和觸點電刷式。
按碼盤的刻孔方式不同分類編碼器可分為增量式和絕對式兩類。
旋轉(zhuǎn)編碼器的原理和特點
-
原理:
- 旋轉(zhuǎn)編碼器是集光機電技術(shù)于一體的速度位移傳感器。當旋轉(zhuǎn)編碼器軸帶動光柵盤旋轉(zhuǎn)時,經(jīng)發(fā)光元件發(fā)出的光被光柵盤狹縫切割成斷續(xù)光線,并被接收元件接收產(chǎn)生初始信號。該信號經(jīng)后繼電路處理后,輸出脈沖或代碼信號。
- 旋轉(zhuǎn)編碼器是由一個中心有軸的光電碼盤組成,其上有環(huán)形通、暗的刻線,有光電發(fā)射和接收器件讀取,獲得四組正弦波信號組合成A、B、C、D,每個正弦波相差90度相位差,將C、D信號反向,疊加在A、B兩相上,可以增強穩(wěn)定信號;另每轉(zhuǎn)輸出一個Z相脈沖以代表零位參考位。因為A、B兩相相差90度,可以通過比較A相在前還是B相在前,借此來判別編碼器的正轉(zhuǎn)與反轉(zhuǎn),通過零位脈沖,可獲得編碼器的零位參考位。
-
特點:
體積小、重量輕、品種多、功能全、頻響高、分辨能力高,力矩小,耗能低,性能穩(wěn)定,可靠使用壽命長等特點。
1、增量式編碼器
增量式編碼器是將位移轉(zhuǎn)換成周期性的電信號,再把這個電信號轉(zhuǎn)變成計數(shù)脈沖,用脈沖的個數(shù)表示位移的大小。增量式編碼器也稱為正交編碼器,是通過兩個信號線的脈沖輸出來進行數(shù)據(jù)處理,一個輸出脈沖就對應(yīng)于一個增量位移,編碼器每轉(zhuǎn)動一定的位移,就會產(chǎn)生一個脈沖信號。通過讀取單位時間脈沖信號的數(shù)量,達到測量速度的效果(v = s / t),通過對脈沖信號的累加,和編碼器的碼盤周長 (轉(zhuǎn)一圈對應(yīng)的距離) 便可以達到計算距離的效果(s = n * d)。
-
工作原理:
增量式旋轉(zhuǎn)編碼器通過兩個光敏接收管來轉(zhuǎn)化角度碼盤的時序和相位關(guān)系,得到角度碼盤角度位移量的增加(正方向)或減少(負方向)。
- 上圖A、B兩點間的距離為S2,A、B表示兩個相同的光敏接收管,下面的角度碼盤的光柵間距分別為S0(凹槽)和S1(凸起)。
- 當角度碼盤勻速轉(zhuǎn)動時,可知輸出波形圖中的S0:S1:S2比值與實際圖的S0:S1:S2比值相同,同理,當角度碼盤變速轉(zhuǎn)動時,輸出波形圖中的S0:S1:S2比值與實際圖的S0:S1:S2比值仍相同。
- 通過輸出波形圖可知每個運動周期:
| A B | A B |
| 1 1 | 1 1 |
| 0 1 | 1 0 |
| 0 0 | 0 0 |
| 1 0 | 0 1 |
-
我們把當前的A、B輸出值保存起來,與下一個到來的A、B輸出值做比較,就可以得出角度碼盤轉(zhuǎn)動的方向;
-
如果光柵格S0等于S1時,也就是S0和S1弧度夾角相同,且S2等于S0的1/2,那么可得到此次角度碼盤運動位移角度為S0弧度夾角的1/2,再除以所用的時間,就得到此次角度碼盤運動位移的角速度。
-
S0等于S1時,且S2等于S0的1/2時,1/4個運動周期就可以得到運動方向位和位移角度,如果S0不等于S1,S2不等于S0的1/2,那么要1個運動周期才可以得到運動方向位和位移角度了。
(我們用的鼠標的滾輪也是這個原理。)
-
實際使用的增量式編碼器輸出三組方波脈沖A、B和Z(有的叫C相)相。A、B兩組脈沖相位差90o,可以判斷出旋轉(zhuǎn)方向和旋轉(zhuǎn)速度。而Z相脈沖又叫做零位脈沖(有時也叫索引脈沖),為每轉(zhuǎn)一周輸出一個脈沖,Z相脈沖代表零位參考位,通過零位脈沖,可獲得編碼器的零位參考位,專門用于基準點定位,如下圖所示:
-
增量是編碼器轉(zhuǎn)軸旋轉(zhuǎn)時,有相應(yīng)的脈沖輸出,其計數(shù)起點可以任意設(shè)定,可實現(xiàn)多圈無限累加和測量。編碼器軸轉(zhuǎn)動一圈會輸出固定的脈沖數(shù),脈沖數(shù)由編碼器碼盤上面的光柵的線數(shù)所決定,編碼器以每旋轉(zhuǎn)360度提供多少通或暗的刻線稱為分辨率,也稱解析分度、或稱作多少線,一般在每轉(zhuǎn)5~10000線,當需要提高分辯率時,可利用90度相位差的A、B兩路信號進行倍頻或者更換高分辯率編碼器。
-
增量型編碼器精度取決于機械和電氣的因素,這些因素有:光柵分度誤差、光盤偏心、軸承偏心、電子讀數(shù)裝置引入的誤差以及光學(xué)部分的不精確性,誤差存在于任何編碼器中。
-
編碼器的信號輸出有正弦波(電流或電壓)、方波(TTL、HTL)等多種形式。并且都可以用差分驅(qū)動方式,含有對稱的A+/A-、B+/B-、Z+/Z-三相信號,由于帶有對稱負信號的連接,電流對于電纜貢獻的電磁場為0,信號穩(wěn)定衰減最小,抗干擾最佳,可傳輸較遠的距離,例如:對于TTL的帶有對稱負信號輸出的編碼器,信號傳輸距離可達150米。對于HTL的帶有對稱負信號輸出的編碼器,信號傳輸距離可達300米。
-
增量式編碼器軸旋轉(zhuǎn)時,有相應(yīng)的相位輸出。其旋轉(zhuǎn)方向的判別和脈沖數(shù)量的增減,需借助后部的判向電路和計數(shù)器來實現(xiàn)。其計數(shù)起點可任意設(shè)定,并可實現(xiàn)多圈的無限累加和測量。還可以把每轉(zhuǎn)發(fā)出一個脈沖的Z信號,作為參考機械零位。當脈沖已固定,而需要提高分辨率時,可利用帶90度相位差A(yù),B的兩路信號,對原脈沖數(shù)進行倍頻。
-
編碼器時序:
-
實物圖:
我使用的是下面這種比較簡單的五腳旋轉(zhuǎn)編碼器:
二、引腳配置
我使用的旋轉(zhuǎn)編碼器有五個引腳,可能還會有其他不同類型的會有不同的引腳,
這五個引腳分別為GND, VCC(+), SW, DT, CLK,具體的引腳已經(jīng)在簡介的圖中標明了。
- VCC:接電源正極 3.3~5V;
- GND:接地;
- SW(Switch:開關(guān)):PA7(TIM3_CH2)
- DT(DT:數(shù)據(jù)):PA6(TIM3_CH1)
- CLK(CLK:時鐘):PA5(任選一個引腳:配置為上拉輸入模式)
接線表:
| VCC | VCC(3.3V) | - |
| GND | GND | - |
| SW(Switch:開關(guān)) | PA7 | 定時器編碼模式 |
| DT(DT:數(shù)據(jù)) | PA6 | 定時器編碼模式 |
| CLK(CLK:時鐘) | PA5 | GPIO_Mode_IPU(上拉輸入模式) |
| - | PA9 | TX(USART1 串口1通信) |
| - | PA10 | RX(USART1 串口1通信) |
三、新建工程
1.打開STM32CubeMX軟件,點擊“新建工程”
2. 選擇 MCU 和封裝
3.配置時鐘
具體學(xué)習(xí)可以參考:博客網(wǎng)站-RCC學(xué)習(xí)
4.配置調(diào)試模式
5.串口(USART1)配置
6.定時器(TIM)配置
- 配置為編碼器模式:
7.生成代碼
輸入項目名稱和路徑。(注:路徑中不允許出現(xiàn)中文。)
選擇應(yīng)用的IDE,開發(fā)環(huán)境MDK-ARM V5
每個外設(shè)生成獨立的 ’.c/.h’ 文件
- 不勾: 所有初始化代碼都生成在 main.c
- 勾選: 初始化代碼生成在對應(yīng)的外設(shè)文件。 如 GPIO 初始化代碼生成在 gpio.c 中。
點擊 GENERATE CODE 生成代碼
8.構(gòu)建工程
DeBug的模式根據(jù)不同的芯片進行選擇:
四、編寫代碼
在main.c文件中,添加一下代碼:
- 重寫fget和fput函數(shù):勾選微庫(這個很重要),添加頭文件<stdio.h>;
- 添加代碼encoder文件對(.c/.h):
- 首先要新建文件,然后在添加到工程中去;
- 首先要新建文件,然后在添加到工程中去;
- 將新建的文件添加到工程中去;
- 返回上一級,尋找自己新建的文件:
- 此時,完成了添加encoder.c文件: 在encoder.c中添加如下代碼,即可將encoder.h添加進工程
- 在encoder.c中添加代碼:
- 在encoder.h中添加代碼:
- 在主函數(shù)main.c中添加代碼:
五、實驗結(jié)果
謝謝閱讀!!!
總結(jié)
以上是生活随笔為你收集整理的STM32CubeMX学习——旋转编码器模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 视频会议及流媒体十大开源项目
- 下一篇: Tencent SSL 数字证书安装部署