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