編碼器?是一種傳感器,主要用于測量旋轉(zhuǎn)運動的角度、角速度和位移等參數(shù)。常見的編碼器類型包括增量式編碼器和絕對值編碼器,前者通過檢測脈沖的增加或減少來測量旋轉(zhuǎn)方向和距離,后者則直接輸出當前的絕對位置信息?。
STM32編碼器接口
在STM32微控制器中,編碼器接口是一種特殊的定時器模式,稱為“編碼器接口模式”。這種模式主要用于接收增量式編碼器的信號,通過檢測A、B兩相信號的相位差來判定旋轉(zhuǎn)方向,并計數(shù)脈沖數(shù)量以確定旋轉(zhuǎn)角度和速度。STM32的通用定時器和高級定時器都支持編碼器接口模式,通過輸入捕獲單元的CH1和CH2引腳接收編碼器的A、B相信號?。
STM32編碼器接口的應用編程
在STM32中實現(xiàn)編碼器接口的具體步驟如下:
?配置定時器?:選擇一個通用或高級定時器,并配置其為編碼器接口模式。設(shè)置輸入捕獲單元的CH1和CH2引腳為編碼器的A、B相信號輸入。
?初始化編碼器接口?:設(shè)置濾波器和邊沿檢測器,確保信號的穩(wěn)定和準確捕獲。
?讀取數(shù)據(jù)?:通過定時器的計數(shù)器(CNT)讀取旋轉(zhuǎn)的角度和位置,通過計數(shù)器的增減判斷旋轉(zhuǎn)方向??梢酝ㄟ^定時器的預分頻器和計數(shù)方向控制寄存器進一步優(yōu)化計數(shù)的精度和方向判斷。
編碼器是一種比較常見的產(chǎn)品(也可以理解為傳感器),最常見的就是配合電機一起工作,那么,你對編碼器有多了解呢?
一、關(guān)于編碼器
編碼器的種類有很多:增量式編碼器、絕對值編碼器,有軸或者無軸編碼器,電壓輸出、推拉輸出、集電極開路輸出等等。但不管什么類型的編碼器,其目的都類似,得到轉(zhuǎn)動的角度,角速度、位移等。
先說說編碼器接口是干啥的。它就像一個超級“翻譯官”,專門負責接收增量(正交)編碼器傳來的信號。在電機控制場景中,電機一轉(zhuǎn),編碼器就會輸出正交信號脈沖,這個接口接到信號后,能自動控制計數(shù)器(CNT)自增或自減。通過CNT數(shù)值的變化,我們就能知道電機轉(zhuǎn)軸的位置、轉(zhuǎn)動方向和速度,給精確控制電機提供關(guān)鍵依據(jù)。而且每個高級定時器和通用定時器都自帶1個編碼器接口,不過它的兩個輸入引腳借用了輸入捕獲的通道1和2,所以在進行硬件設(shè)計和軟件配置時,一定要小心,別讓資源“打架”了。
正交編碼器也很有意思。它正轉(zhuǎn)和反轉(zhuǎn)時,A、B相的電平狀態(tài)截然不同。正轉(zhuǎn)的時候,A相上升沿,B相是低電平;A相下降沿,B相就變成高電平了,B相和A相的關(guān)系也是如此。反轉(zhuǎn)時則完全相反,A相上升沿,B相為高電平。這些電平變化規(guī)律,就像是編碼器給我們的“小暗號”,讓我們能輕松判斷它的旋轉(zhuǎn)方向,在工業(yè)自動化、機器人控制這些領(lǐng)域,通過監(jiān)測A、B相電平,就能精準把控設(shè)備的運動狀態(tài)。
再看看編碼器接口的基本結(jié)構(gòu)。它從硬件輸入到計數(shù)器控制,有著一套嚴謹?shù)男盘柼幚砹鞒獭J紫仁禽斎氩糠?,兩個GPIO引腳負責接收外部編碼器信號,就像兩個小耳朵。不過信號里可能有噪聲,這時濾波器就派上用場了,它能把噪聲過濾掉,保證輸入信號“干干凈凈”。接著信號進入邊沿檢測極性選擇模塊,這個模塊就像信號的“質(zhì)檢員”,會檢測信號的上升沿和下降沿,還能根據(jù)設(shè)定的極性規(guī)則處理信號,處理完的信號TI1FP1和TI2FP2就會被送到編碼器接口模塊。編碼器接口模塊可是核心部件,它能根據(jù)正交信號脈沖,自動控制時基單元里的CNT計數(shù)。時基單元也不簡單,預分頻器能調(diào)整計數(shù)頻率,自動重裝載器會在CNT達到上限時讓它重新開始計數(shù),而CNT的計數(shù)值就反映了編碼器的各種關(guān)鍵信息。
配置編碼器接口模式也有講究。要是想讓計數(shù)器只在TI2的邊沿計數(shù),就把TIMx_SMCR寄存器里的SMS設(shè)成001;偏愛TI1的話,設(shè)成010;要是想讓計數(shù)器在TI1和TI2邊沿都計數(shù),那就設(shè)成011。通過設(shè)置TIMx_CCER寄存器里的CC1P和CC2P位,還能給TI1和TI2選擇極性,要是需要,還能給輸入濾波器編程,就像給接口“升級裝備”一樣。
給大家舉個例子,在配置TIM2為編碼器接口模式時,代碼要這么寫。先通過RCC開啟GPIO和定時器的時鐘,這就像是給設(shè)備“通電”;然后把PA6和PA7配置成輸入模式;配置時基單元,一般預分頻器選不分頻,自動重裝給最大的65535,讓CNT專心計數(shù);接著配置輸入捕獲單元,主要設(shè)置濾波器和極性;最后調(diào)用TIM_Cmd啟動定時器。這里有個TIM_EncoderInterfaceConfig函數(shù)很關(guān)鍵,它能設(shè)置定時器工作在編碼器接口模式,還能配置輸入通道、極性、濾波,以及定時器的計數(shù)模式、預分頻值等。
在實際應用中,還會遇到一些問題,比如抖動。這就好比走路時踩到石子,編碼器信號可能會“晃”一下。不過別擔心,選擇雙邊沿等配置就能抑制抖動,就像給計數(shù)器穿上了“穩(wěn)定鞋”。而且,當定時器配置成編碼器接口模式后,它就像個貼心的小秘書,能提供傳感器當前位置信息。要是再搭配一個配置在捕獲模式的定時器,還能測量兩個編碼器事件的間隔,得到速度、加速度這些動態(tài)信息,給系統(tǒng)來個全面的“體檢”。
編碼器,英文名稱“encoder”,是一種將角位移或者角速度轉(zhuǎn)換成一連串電數(shù)字脈沖的旋轉(zhuǎn)式傳感器,我們可以通過編碼器測量出位移或者速度信息。編碼器從輸出數(shù)據(jù)類型上分,可以分為增量式編碼器和絕對式編碼器。增量型:就是每轉(zhuǎn)過單位的角度就發(fā)出一個脈沖信號;絕對值型:就是對應一圈,每個基準的角度發(fā)出一個唯一與該角度對應二進制的數(shù)值,通過外部記圈器件可以進行多個位置的記錄和測量。
從編碼器檢測原理上來分,還可以分為光學式、磁式、感應式,電容式。常見的是光電編碼器(光學式)和霍爾編碼器(磁式)。
二、光電編碼器工作原理
連接軸與碼盤相連,并與被測物體相連,隨著被測物體(如電機)的轉(zhuǎn)動,碼盤也跟著轉(zhuǎn)動,通過碼盤的光會發(fā)生明暗相間的變化,接收端的光敏元件會檢測到這種變化,并轉(zhuǎn)化成電信號進行輸出。
1.計算脈沖個數(shù)
有點類似TIM的捕獲功能,捕獲A相、B相的脈沖信號;只是編碼器模式是捕獲A(TI1)、B(TI2)相的邊沿信號,相當于一個周期內(nèi),計4個脈沖信號的值。
2.計數(shù)器的增減(方向)
STM32的計數(shù)器會根據(jù)方向(+ 或者 -)來進行計數(shù),TI1和TI2相位相差90,4個階段的邊沿,對應TI1和TI2不同電平信號,從著編碼器旋轉(zhuǎn)方向的改變而改變,我們可以通過讀取該位來判斷編碼器的正轉(zhuǎn),還是反轉(zhuǎn)。
3.TIM時基
STM32編碼器接口模式,其實是通過利用AB相位TIM時基提供時鐘信號,使其計數(shù)。
三、應用編程
相信看了上面的一些描述,大家應該對編碼器有所理解了。其實,在STM32中,可以通過配置編碼器模式對應的函數(shù),就能實現(xiàn)獲取編碼器傳感器上面的信息了。
使用STM32提供的標準外設(shè)庫,或者使用STM32CubeMX工具很容易將TIM配置成編碼器模式。
1.標準外設(shè)庫配置編碼器
TIM_EncoderInterfaceConfig,它就是編碼器接口的配置函數(shù)。簡單的只需要配置該函數(shù),使能TIM,即可實現(xiàn)采集編碼器上面的信息。(當然,需要復雜的操作,還需要做其他相應的配置)
2.STM32CubeMX配置
STM32CubeMX是一套快速開發(fā)的工具,讓很多不了解STM32底層的朋友可以快速的在STM32上編寫應用程序。
本文說的配置編碼器接口,在某些TIM上存在一個“Combined Channel”配置,可以理解為“連接通道”,也算是TIM的一種復用模式。選擇里面的“Encoder Mode”即可。