新聞中心

EEPW首頁 > 物聯(lián)網(wǎng)與傳感器 > 設計應用 > 基礎知識之旋轉(zhuǎn)位置傳感器

基礎知識之旋轉(zhuǎn)位置傳感器

作者: 時間:2024-03-05 來源:電子森林 收藏

  是一種用于測量物體旋轉(zhuǎn)位置或角度的裝置。它可以檢測并測量物體相對于參考點的旋轉(zhuǎn)角度以及被測物的位置并轉(zhuǎn)換成可用輸出信號的傳感器。

本文引用地址:http://butianyuan.cn/article/202403/455994.htm

                       

  旋轉(zhuǎn)式位置傳感器是一種用于測量物體旋轉(zhuǎn)角度的傳感器,是許多機電設備中不可缺少的元器件。它的工作原理是利用磁性和電學性質(zhì)來測量旋轉(zhuǎn)角度,具有高精度、高可靠性等優(yōu)點。其中,最常用的技術(shù)是使用旋轉(zhuǎn)磁編碼盤和集線器,將旋轉(zhuǎn)角度轉(zhuǎn)換為數(shù)字信號輸出到控制器進行處理。

2.1 按傳感器的刻孔方式不同分

  • 增量型旋轉(zhuǎn)位置傳感器工作原理

  就是每轉(zhuǎn)過單位的角度就發(fā)出一個脈沖信號(也有發(fā)正余弦信號,然后對其進行細分,斬波出頻率更高的脈沖),通常為A相、B相、Z相輸出,A相、B相為相互延遲1/4周期的脈沖輸出,根據(jù)延遲關(guān)系可以區(qū)別正反轉(zhuǎn),而且通過取A相、B相的上升和下降沿可以進行2或4倍頻;Z相為單圈脈沖,即每圈發(fā)出一個脈沖。

  我們通常用的是增量型編碼器,可將旋轉(zhuǎn)編碼器的輸出脈沖信號直接輸入給PLC,利用PLC的高速計數(shù)器對其脈沖信號進行計數(shù),以獲得測量結(jié)果。不同型號的旋轉(zhuǎn)編碼器,其輸出脈沖的相數(shù)也不同,有的旋轉(zhuǎn)編碼器輸出A、B、Z三相脈沖,有的只有A、B相兩相,最簡單的只有A相。

  編碼器有5條引線,其中3條是脈沖輸出線,1條是COM端線,1條是電源線(OC門輸出型)。編碼器的電源可以是外接電源,也可直接使用PLC的DC24V電源。電源“-”端要與編碼器的COM端連接,“+ ”與編碼器的電源端連接。編碼器的COM端與PLC輸入COM端連接,A、B、Z兩相脈沖輸出線直接與PLC的輸入端連接,A、B為相差90度的脈沖,Z相信號在編碼器旋轉(zhuǎn)一圈只有一個脈沖,通常用來做零點的依據(jù),連接時要注意PLC輸入的響應時間。旋轉(zhuǎn)編碼器還有一條屏蔽線,使用時要將屏蔽線接地,提高抗干擾性。

  • 絕對值型旋轉(zhuǎn)位置傳感器工作原理

  就是對應一圈,每個基準的角度發(fā)出一個唯一與該角度對應二進制的數(shù)值,通過外部記圈器件可以進行多個位置的記錄和測量。

  由于A、B兩相相差90度,可通過比較A相在前還是B相在前,以判別編碼器的正轉(zhuǎn)與反轉(zhuǎn),通過零位脈沖,可獲得編碼器的零位參考位。編碼器碼盤的材料有玻璃、金屬、塑料,玻璃碼盤是在玻璃上沉積很薄的刻線,其熱穩(wěn)定性好,精度高,金屬碼盤直接以通和不通刻線,不易碎,但由于金屬有一定的厚度,精度就有限制,其熱穩(wěn)定性就要比玻璃的差一個數(shù)量級,塑料碼盤是經(jīng)濟型的,其成本低,但精度、熱穩(wěn)定性、壽命均要差一些。

  分辨率—編碼器以每旋轉(zhuǎn)360度提供多少的通或暗刻線稱為分辨率,也稱解析分度、或直接稱多少線,一般在每轉(zhuǎn)分度5~10000線

 

2.2 按傳感器組成的材料分

  • 磁性旋轉(zhuǎn)位置傳感器的工作原理

  磁性旋轉(zhuǎn)傳感器是利用磁性元件實現(xiàn)測量的傳感器。其工作原理是將磁性元件固定在被測物體上,當被測物體旋轉(zhuǎn)時,磁性元件也跟隨旋轉(zhuǎn),產(chǎn)生磁場變化。傳感器內(nèi)部的磁敏電阻感應到這一磁場變化,并產(chǎn)生電壓信號輸出。通過測量電壓信號的大小和方向,就可以計算出被測物體的旋轉(zhuǎn)角度。

  • 霍爾效應式旋轉(zhuǎn)位置傳感器的工作原理

  霍爾效應式轉(zhuǎn)速傳感器和曲軸位置傳感器是一種利用霍爾效應的信號發(fā)生器?;魻栃盘柊l(fā)生器安裝在分電器內(nèi),與分火頭同軸,由封裝的霍爾芯片和永久磁鐵作成整體固定在分電器盤上。觸發(fā)葉輪上的缺口數(shù)和發(fā)動機氣缸數(shù)相同。當觸發(fā)葉輪上的葉片進入永久磁鐵與霍爾元件之間,霍爾觸發(fā)器的磁場被葉片旁路,這時不產(chǎn)生霍爾電壓,傳感器無輸出信號;當觸發(fā)葉輪上的缺口部分進入永久磁鐵和霍爾元件之間時,磁力線進入霍爾元件,霍爾電壓升高,傳感器輸出電壓信號。

  • 光電旋轉(zhuǎn)位置傳感器的工作原理

  光電旋轉(zhuǎn)傳感器是通過光電元件實現(xiàn)測量的傳感器。其工作原理是將旋轉(zhuǎn)物體上的刻度盤固定在光電元件上方,當旋轉(zhuǎn)物體旋轉(zhuǎn)時,刻度盤上的條紋或孔洞會使光束發(fā)生變化,光電元件感應到這一變化并產(chǎn)生電信號輸出。通過測量電信號的大小和方向,就可以計算出被測物體的旋轉(zhuǎn)角度。

  旋轉(zhuǎn)式位置傳感器廣泛應用于工業(yè)自動化、航空航天、汽車、醫(yī)療設備等領域。 例如,在機床中,旋轉(zhuǎn)式位置傳感器可以用于測量工件的旋轉(zhuǎn)角度,實現(xiàn)工件的定位和控制;在汽車中,旋轉(zhuǎn)式位置傳感器可以用于測量轉(zhuǎn)向角度和車速,實現(xiàn)車輛的穩(wěn)定性和安全性控制。 旋轉(zhuǎn)式位置傳感器是一種重要的傳感器元器件,可以實現(xiàn)物體旋轉(zhuǎn)位置角度的高精度測量。

3.1 應用領域

  1、工業(yè)機械、工程機械建筑設備、石化設備、醫(yī)療設備、航空航天儀器儀表、國防工業(yè)等旋轉(zhuǎn)速度和角度的測量;

  2、汽車電子腳踩油門角位移、方向盤位置、座椅位置、前大燈位置;

  3、自動化機器人、運動控制、旋轉(zhuǎn)電機轉(zhuǎn)動和控制。

3.2 電位位置傳感器的簡單應用

  所有“位置傳感器”中最常用的是電位器,因為它是一種便宜且易于使用的位置傳感器。它有一個與機械軸相連的觸點,該機械軸的運動可以是有角度的(旋轉(zhuǎn)的)或線性的(滑塊型),這會導致滑塊和兩個端部連接之間的電阻值發(fā)生變化,從而產(chǎn)生電信號輸出在電阻軌道上的實際抽頭位置與其電阻值之間具有比例關(guān)系。換句話說,阻力與位置成正比。

  電位器有多種設計和尺寸,例如常用的圓形旋轉(zhuǎn)類型或較長且扁平的線性滑塊類型。當用作位置傳感器時,可移動物體直接連接到電位計的旋轉(zhuǎn)軸或滑塊。

  直流參考電壓施加在形成電阻元件的兩個外部固定連接上。輸出電壓信號取自滑動觸點的抽頭端子,如下圖所示。

電位器結(jié)構(gòu)圖

  這種配置產(chǎn)生與軸位置成比例的電位或分壓器類型的電路輸出。然后,例如,如果在電位器的電阻元件上施加 10v 的電壓,則最大輸出電壓將等于 10 伏的電源電壓,最小輸出電壓等于 0 伏。

  然后電位器抽頭將輸出信號在 0 到 10 伏之間變化,其中 5 伏表示抽頭或滑塊處于其中間位置或中心位置。電位器的輸出信號 (Vout) 在沿電阻軌道移動時取自中心游標連接,并且與軸的角位置成正比。

簡單的位置檢測電路示例

  雖然電阻式電位器位置傳感器具有許多優(yōu)點:成本低、技術(shù)含量低、易于使用等,但作為位置傳感器,它們也有許多缺點:運動部件磨損、精度低、可重復性低和頻率響應有限。

3.3 旋轉(zhuǎn)位置傳感器在工業(yè)自動化、汽車、機器人、航空等領域的實際應用

  • 腳踏板位置感應

  在重載設備和其他車輛中,霍爾效應旋轉(zhuǎn)位置傳感器能夠取代腳踏板與發(fā)動機之間的機械電纜連接。機械電纜會抻拉或腐蝕,需要定期維護和重新校準。取代機械電纜,能改善發(fā)動機控制系統(tǒng)的響應和車輛排放,提高可靠性并減少超重。這種電子油門系統(tǒng)比電纜連接系統(tǒng)更安全,更經(jīng)濟。

  • 公交車和卡車懸架/自動門踏板感應

  霍爾效應旋轉(zhuǎn)位置傳感器也可用在公交車和重卡離地高度系統(tǒng)中,感應懸架系統(tǒng)的行程。公交車利用自動踏板可降低其離地高度,方便乘客上下車。在此應用的兩端都可使用霍爾效應旋轉(zhuǎn)位置傳感器:一個傳感器監(jiān)控控制桿的位置,第二個傳感器部署在懸架臂或連桿上來監(jiān)控離地高度。

  精確的位置感應可確認車輛是否處于適合應用系統(tǒng)要求的正確高度,從而改進車輛上下通行的便利性。大型拖車也可利用霍爾效應旋轉(zhuǎn)位置傳感器來監(jiān)測拖車高度,提高倉庫??繉拥男?。

廠商主營業(yè)務
泰科電子 TE Connectivity解決方案代理商,產(chǎn)品、服務
霍尼韋爾 Honeywell航空產(chǎn)品和服務、樓宇和工業(yè)控制技術(shù)、以及特性材料
百能云芯 Bourns電子元器件、芯片
森薩塔科技 Sensata傳感器的解決方案,關(guān)鍵型產(chǎn)品
力特Littelfuse模塊化產(chǎn)品、解決方案

diagram2.png

5.1 設計與方案分析

  本次設計需要通過RP2040模塊驅(qū)動一個旋轉(zhuǎn)位置傳感器,這里采用的是一個方向脈沖型信號的512線編碼器,RP2040通過脈沖捕獲,檢測編碼器輸出的信號,將編碼器輸出的信號顯示于0.96的顯示屏,同時12路LED燈用于記數(shù)編碼器的旋轉(zhuǎn)圈數(shù),此外通過串口通信的方式將編碼器數(shù)據(jù)發(fā)送至上位機,方便后續(xù)的數(shù)據(jù)處理與系統(tǒng)開發(fā),其本次設計的系統(tǒng)架構(gòu)框圖如圖所示。

5.2 系統(tǒng)硬件框圖及工作原理

  本次研究設計的傳感器模塊為512線旋轉(zhuǎn)位置傳感器-編碼器模塊,通過編碼器采集到的數(shù)據(jù)發(fā)送給RP2040模塊,RP2040通過外接OLED顯示屏與WS1812LED燈板。此外RP2040通過SPI硬件協(xié)議驅(qū)動OLED顯示屏用于實時顯示編碼器旋轉(zhuǎn)的位置、方向等數(shù)據(jù),LED燈板則用于統(tǒng)計編碼器旋轉(zhuǎn)的圈數(shù),同時將數(shù)據(jù)實時發(fā)送到上位機,便后后續(xù)的數(shù)據(jù)處理與系統(tǒng)開發(fā),其中系統(tǒng)硬件框圖如圖所示。

diagram1.png

  此外其中通過查閱各類資料與相關(guān)數(shù)據(jù)手冊后得出編碼器在旋轉(zhuǎn)過程中,POUT將產(chǎn)生特定的脈沖信號,DIR端口將輸出0或1的高低電瓶以表示旋轉(zhuǎn)的方向,PR2040通過IO口中斷形式捕獲脈沖信號,其中編碼器工作原理及信號如下圖所示。

           

  實際編碼器上電后,通過示波器測試模塊的DIR引腳輸出和OUT輸出信號,觀測到的現(xiàn)象與數(shù)據(jù)手冊一致,實際測試表明該編碼器在上電后能正常工作,其中示波器測試編碼器輸出信號波形如下圖所示。

5.3 系統(tǒng)軟件設計

  首先在上電后對OLED顯示屏、WS2812以及串口進行初始化化配置,使其具有基礎的數(shù)據(jù)顯示與發(fā)送功能,其次開啟IO口中斷模式,使其通過中斷的方式快速檢測編碼器產(chǎn)生的脈沖信號并進行捕獲,通過中斷的次數(shù)計算編碼器的當前位置與轉(zhuǎn)過的圈數(shù)以及旋轉(zhuǎn)方向,檢測完成后用過SPI圖像協(xié)議以及RP2040特帶的PIO口將數(shù)據(jù)顯示于OLED顯示屏與LED燈板,此外將數(shù)據(jù)通過串口的新式發(fā)送到上位機便于數(shù)據(jù)查看,其中系統(tǒng)軟件工作流程圖如圖所示。

5.4 系統(tǒng)功能測試及總結(jié)

  通過對系統(tǒng)硬件模塊的組成、軟件代碼的編寫,以及系統(tǒng)的調(diào)試,初步完成對編碼器數(shù)據(jù)的采集,實時的將編碼器的旋轉(zhuǎn)位置,方向以及旋轉(zhuǎn)的圈數(shù)顯示與OLED顯示屏,同時將數(shù)據(jù)發(fā)送至上位機串口調(diào)試助手,其中串口調(diào)制助手界面以及實物OLED顯示屏顯示數(shù)據(jù)如下圖所示。

        

    

  通過對編碼器的研究與數(shù)據(jù)采集,初步了解了編碼器的工作原理與實際應用,在日常生活中,可將編碼器應用與智能小車等一系列智能運動的控制中,通過車輪的轉(zhuǎn)動帶動編碼器的來捕獲小車的運動方向以及更加精確的控制小車的速度,以下為編碼器在大學生智能汽車競賽中的實際圖片,當然編碼器的應用遠不止如此,更是涉及到身邊的工業(yè)機械、工程機械建筑設備、石化設備、醫(yī)療設備、航空航天儀器儀表、國防工業(yè)等旋轉(zhuǎn)速度和角度的測量。

     

          

5.5 附件程序

from machine import Pin, SPI, ADC, UART
from ssd1306 import SSD1306_SPI
from astronaut import frames
from board import pin_cfg
import framebuf
import _thread
import time
import array
import rp2
 
 #常量定義NUM_LEDS = 12       #LED number
 wsLedDegree = 30   #LED light Degree
 #pasoberry image
 buffer = bytearray(b"x00x00x00x00x00x00x00x00x00x00x00x00x00|?x00x01x86@x80x01x01x80x80x01x11x88x80x01x05xa0x80x00x83xc1x00x00Cxe3x00x00~xfcx00x00L'x00x00x9cx11x00x00xbfxfdx00x00xe1x87x00x01xc1x83x80x02Ax82@x02Ax82@x02xc1xc2@x02xf6>xc0x01xfc=x80x01x18x18x80x01x88x10x80x00x8c!x00x00x87xf1x00x00x7fxf6x00x008x1cx00x00x0c x00x00x03xc0x00x00x00x00x00x00x00x00x00x00x00x00x00") 
 #記數(shù)變量定義
pcnt = 0        #脈沖計數(shù)器,用于計算脈沖數(shù)量
ledCnt = 0      
circle = 0
message=''
cirLed = 0
global direction
global dircnt
dircnt = 1 
#引腳定義并初始化
dire = Pin(2, Pin.IN, Pin.PULL_UP)
pout = Pin(3, Pin.IN, Pin.PULL_UP)
led1 = Pin(20, Pin.OUT)    
led2 = Pin(26, Pin.OUT)
led3 = Pin(22, Pin.OUT)
led4 = Pin(21, Pin.OUT) 
uart = UART(0, baudrate=115200, tx=Pin(0), rx=Pin(1), bits=8, parity=None, stop=1) 
led1.off()
led2.off()
led3.off()
led4.off() 
 #WS1812初始化
@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
def ws2812():
   T1 = 2
   T2 = 5
   T3 = 3
   wrap_target()
   label("bitloop")
   out(x, 1)               .side(0)    [T3 - 1]
   jmp(not_x, "do_zero")   .side(1)    [T1 - 1]
   jmp("bitloop")          .side(1)    [T2 - 1]
   label("do_zero")
   nop()                   .side(0)    [T2 - 1]
   wrap()
# Create the StateMachine with the ws2812 program, outputting on Pin(18).
sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(18))
# Start the StateMachine, it will wait for data on its FIFO.
sm.active(1)
# Display a pattern on the LEDs via an array of LED RGB values.
ar = array.array("I", [0 for _ in range(NUM_LEDS)])
# 8 blue   16  red   24  green 
#oled初始化
spi1 = SPI(1, 100000, mosi=Pin(pin_cfg.spi1_mosi), sck=Pin(pin_cfg.spi1_sck))
oled = SSD1306_SPI(128, 64, spi1, Pin(pin_cfg.spi1_dc),Pin(pin_cfg.spi1_rstn), Pin(pin_cfg.spi1_cs))
oled.rotate(1)
oled.fill(0)
oled.show() 
fb = framebuf.FrameBuffer(buffer, 32, 32, framebuf.MONO_HLSB) 
global flag
flag = 0 
 for j in range(NUM_LEDS):
   ar[j] = 0sm.put(ar, 16) 
 def dirIRQHandler(pin):    global dircnt
   dircnt += 1 
 #脈沖捕獲中斷函數(shù)def poutIQHandler(pin):    
 global pcnt    
 global ledCnt    
 global circle
 
   pcnt += 1     
   if pcnt > 512:
       pcnt = 0
       circle += 1
       ledCnt += 1     
       if ledCnt == 0:        
       pass     
       elif ledCnt == 13:
       ledCnt =1
       for j in range(NUM_LEDS):
           ar[j] = 0
       sm.put(ar, 16)     
       else:
       ar[ledCnt-1]  = wsLedDegree
       sm.put(ar, 16) 
 def oled_thread():    
 global direction    
 while True:
       oled.fill(0)
       #oled.blit(fb, 96, 0) 
       oled.text("Raspberry Pi",5,5)
       oled.text("Pcnt: ",5,20)
       oled.text("Cnum: ",5,35)
       oled.text("Dire: ",5,50)
       oled.text(str(pcnt),50,20)
       oled.text(str(circle),50,35)
       oled.text(str(direction),50,50)
       oled.show()
       time.sleep_ms(100) 
       #設置脈沖捕獲
       _thread.start_new_thread(oled_thread, ())
       pout.irq(trigger=Pin.IRQ_RISING,handler=poutIQHandler)
       dire.irq(trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING,handler=dirIRQHandler) 
i=0
while True:    
#pass
   direction = dire.value()     time.sleep_ms(50)
   uart.write('pcnt: '+str(pcnt))
   uart.write('  circle: '+str(circle))
   uart.write('  direction: '+str(direction))


關(guān)鍵詞: 旋轉(zhuǎn)位置傳感器

評論


技術(shù)專區(qū)

關(guān)閉