本應用筆記描述了一個SLG46140V設計,該設計實現(xiàn)了一個帶有正交編碼器輸入的16位加/減計數(shù)器。GreenPAK設備減輕了主機的實時輸入要求,并允許輕松連接多個編碼器。
旋轉(zhuǎn)編碼器廣泛用于感測軸和機器零件的方向,以及作為用戶界面輸入設備。大多數(shù)旋轉(zhuǎn)編碼器輸出一對正交信號,將軸運動編碼為一系列脈沖。
為了跟蹤編碼器位置,必須對每個脈沖進行計數(shù)。通常,中斷引腳用于此目的,計數(shù)在軟件中實現(xiàn)。許多微控制器包括專門的外設來讀取正交信號。然而,基于中斷的計數(shù)限制了最大脈沖速率并占用了CPU時間,而專用外設限制了可連接到單個微控制器的編碼器數(shù)量。此外,在非實時平臺(例如PC)上,這兩個選項都不可用。
本應用筆記演示了SLG46140VGreenPAK器件如何實現(xiàn)具有16位向上/向下計數(shù)器和SPI總線接口的正交編碼器接口。主機應用程序可以按所需的時間間隔讀取編碼器的當前位置,而輔助設備會跟蹤每個輸入脈沖。此外,SPI總線允許鏈接多個設備以將靈活數(shù)量的編碼器連接到單個處理器。
高級設計
本應用筆記設計具有來自編碼器的三個輸入信號:A、B和Z。信號A和B是正交信號,它們以00、10、11、01格雷碼序列交替切換狀態(tài)。信號Z是一個可選的編碼器零索引輸入,它將計數(shù)器復位到零位置。
圖1.一個編碼器設備的系統(tǒng)連接。
所描述的SPI由nCS片選信號、SCK串行時鐘和MISO(主機輸入,從機輸出)串行輸出組成。片選低電平有效,當nCS為高電平時,總線可以被其他SPI設備使用。本應用筆記中使用的SPI傳輸格式為CPOL=0,CPHA=1,這意味著SCK在空閑時處于低電平狀態(tài),并且在下降沿采樣數(shù)據(jù)。
圖2.具有多個編碼器的系統(tǒng)連接。
使用Chain_IN和Chain_OUT信號可以將多個設備鏈接在同一總線上,這些信號在內(nèi)部延遲16個SCK時鐘周期的數(shù)據(jù)。因此,主機接收的前16位將來自第一個編碼器,接下來的16位來自第二個編碼器,依此類推。所有編碼器將在第一個SCK時鐘沿同時進行采樣。
GreenPAK設備內(nèi)部的實現(xiàn)由三部分組成:
正交編碼器輸入模塊:將正交信號轉(zhuǎn)換為計數(shù)器的KEEP/UP信號對,并將信號與內(nèi)部時鐘同步。
16位向上/向下計數(shù)器:兩個鏈接的8位計數(shù)器對編碼器脈沖進行計數(shù)并向SPI模塊提供并行數(shù)據(jù)。
SPI總線:SPI鎖存并行數(shù)據(jù),并在nCS有效時串行輸出。
正交輸入模塊和計數(shù)器由內(nèi)部環(huán)形振蕩器時鐘運行,而SPI由SPI主控從外部提供時鐘。以下部分包含每個組件的詳細說明。
正交編碼器輸入模塊
來自編碼器的信號最初進入一對延遲塊。它們既可用作毛刺濾波器又可用作同步器,確保其輸出信號僅在時鐘上升沿發(fā)生變化。延遲值設置為最小值,給出2個時鐘周期的延遲??蛇x地,對于噪聲信號,可以增加延遲以濾除來自輸入的任何毛刺脈沖,但這種過濾也會限制最大脈沖速率。
延遲塊的輸出被傳遞到一對D觸發(fā)器,它們保留前一個時鐘周期的信號狀態(tài)。然后將當前狀態(tài)和先前狀態(tài)與4輸入XNOR門進行比較。如果任一信號發(fā)生變化,XNOR門將為KEEP信號輸出0值,使計數(shù)器模塊開始計數(shù)。
圖3.正交信號輸入模塊
通過比較當前狀態(tài)At和Bt與先前狀態(tài)Bt-1來檢測編碼器方向,如表1所示。檢測邏輯已編程到3位LUT0組件,該組件向計數(shù)器輸出UP信號。
表1.信號狀態(tài)的方向檢測
一些編碼器有一個額外的零位傳感器,可用于在重新啟動后找到系統(tǒng)的絕對位置。此Z信號上的高電平會將計數(shù)器重置為零。如果不需要此功能,可以不連接信號,因為輸入引腳已配置下拉電阻。
16位加/減計數(shù)器
SLG46140V器件包含兩個計數(shù)器/有限狀態(tài)機模塊,具有與SPI模塊的并行數(shù)據(jù)連接。它們中的每一個都可以輸出一個8位的計數(shù),并且通過鏈接兩個計數(shù)器可以制成一個16位的計數(shù)器。計數(shù)器在任一方向從0x0000環(huán)繞到0xFFFF。
圖4.Z輸入信號的邏輯
默認情況下,CNT3塊從可配置的起始值向下計數(shù)到0或向上到255,然后以配置的值重新啟動。通過將起始值設置為255可以實現(xiàn)向下計數(shù)的回繞,但要同時獲得向上計數(shù)的回繞,則需要額外的邏輯。
圖5.低8位計數(shù)器的執(zhí)行和環(huán)繞邏輯
當計數(shù)器處于其極值時,計數(shù)器的OUT信號激活。當KEEP=0和OUT=1時,LUT0輸出一個進位脈沖到下一個計數(shù)器以增加它的計數(shù)。同時,如果UP=1,LUT1將激活復位信號。DFF2對復位信號進行采樣,以便計數(shù)器在時鐘上升沿同步復位。
來自編碼器Z輸入的CLEAR信號連接到DFF2的異步置位輸入,這會導致計數(shù)器立即復位。計數(shù)器在下一個時鐘上升沿繼續(xù)計數(shù)。
圖6.高8位計數(shù)器的環(huán)繞邏輯
第二個計數(shù)器級的連接方式類似,因為該級不需要單獨的進位信號。這三個信號都連接到一個LUT組件。當UP=1、KEEP=0和OUT=1時,它將計數(shù)器重置為零。
SPI總線
SLG46140和SLG46620中的并串轉(zhuǎn)換器接口作為現(xiàn)成的功能塊提供。在nCS變低后,該塊在第一個SCK邊沿鎖存來自兩個計數(shù)器的并行數(shù)據(jù),然后逐位移出數(shù)據(jù)。
外部產(chǎn)生的SCK信號與計數(shù)器使用的內(nèi)部時鐘不同步,因此兩個模塊需要以某種方式同步,以便在它們之間可靠地傳輸數(shù)據(jù)。SPI模塊提供了一個內(nèi)置選擇,用于在發(fā)生數(shù)據(jù)傳輸時將FSM時鐘門控兩個時鐘周期。在此應用中,不希望對FSM時鐘進行門控,因為它可能會在時鐘被禁用時導致脈沖丟失。相反,DFF5用于將外部SCK信號與內(nèi)部環(huán)形振蕩器時鐘同步。這確保了當FSM數(shù)據(jù)穩(wěn)定時,SPI模塊看到的SCK時鐘沿發(fā)生在環(huán)形振蕩器時鐘沿。
在本應用筆記中,基本SPI通過數(shù)據(jù)鏈接邏輯進行了擴展。這允許在同一SPI總線上輕松連接多個編碼器,并同時對它們的計數(shù)器值進行采樣。
鏈接功能基于管道延遲功能塊。這個塊有一個由16個觸發(fā)器組成的鏈,它們將在時鐘信號的每個上升沿移入和移出一位。來自鏈中前一個設備的MISO信號連接到輸入,輸出到下一個設備。
由于MISO信號直接連接到硬件的12號引腳,Chain_OUT必須在外部與其并聯(lián)。輸出使能邏輯確保一次只有一個引腳處于活動狀態(tài)。
圖7.SPI和數(shù)據(jù)鏈邏輯
對于前16個時鐘周期,在nCS變?yōu)榈碗娖胶?,每個設備保持MISO啟用并輸出其計數(shù)器值。同時,管道延遲模塊存儲從鏈中第N-1個設備接收到的信號。
16個時鐘周期后,SPIINTR輸出變?yōu)楦唠娖揭灾甘緜鬏斀Y束。LUT2或門然后使DFF4觸發(fā)器變高,禁用PIN12并啟用PIN13。PipeDelay模塊移出第N-1個值,同時移入第N-2個值。這一直持續(xù)到所有值都被讀取并且主機產(chǎn)生一個nCS信號,這將DFF4重置回其初始狀態(tài)。
圖8.使用兩個設備捕獲SPI信號
圖8顯示了一個SPI通信示例,其中設備首先發(fā)送自己的16位數(shù)據(jù)值,然后從鏈中的下一個設備轉(zhuǎn)發(fā)16位值。
時鐘速率限制
延遲和計數(shù)器模塊由內(nèi)部環(huán)形振蕩器提供時鐘,該振蕩器以大約27MHz的頻率運行,具有1、4、8或16的可選分頻器。最大時鐘速率取決于邏輯元件的延遲,并隨電源電壓。
設計中最長的邏輯鏈從輸入DLY0/1塊通過4位LUT0變化檢測器、2位LUT0執(zhí)行邏輯和3位LUT1環(huán)繞邏輯到FSM塊。這些模塊的延遲值在SLG46140數(shù)據(jù)表中定義,并在表2中進行了總結。由于布線延遲和部件差異,理論上可能的6.8MHz頻率不適用于GreenPAK輸入電壓范圍的最低端(VDD=1.8V),而使用3.4MHz時鐘。
表2.模塊延遲和最大工作頻率
工作頻率將限制正交輸入的最小脈沖寬度。輸入毛刺濾波器通過至少三個時鐘周期長的脈沖并過濾掉任何低于兩個時鐘周期的脈沖。
測試結果
以兩種方式測試功能。使用AMT203旋轉(zhuǎn)編碼器的正交輸出進行手動測試,以驗證兩個方向的計數(shù)是否按預期工作并跟隨編碼器運動。
使用模擬正交信號的微控制器生成的信號源驗證了最大脈沖率和計數(shù)可靠性。微控制器被配置為以給定的步進頻率輸出8000步。正交信號中的脈沖寬度是步距的兩倍,因為一次只有一個信號改變狀態(tài)。當通過SPI總線讀取數(shù)據(jù)時,該步驟系列重復了幾次。僅當每次都正確計算所有步驟時,才將測試用例標記為成功。
表3總結了測試結果。正如預期的那樣,短于兩個時鐘周期的脈沖會被毛刺濾波器拒絕并導致計數(shù)為零。當在每個電壓下接近最小脈沖寬度工作時,會有一些丟失的步驟。這可能是由不對稱的上升/下降延遲引起的,這可能會在某些脈沖通過邏輯時稍微縮短一些脈沖。
結論
介紹了一種將正交編碼器連接到SPI總線的設計。該設計可以按原樣使用,也可以將各個組件重新用于不同的應用。正交輸入部分可以修改為直接輸出適合不同設備的信號,例如步進驅(qū)動器。16位加/減計數(shù)器模塊為測量多種脈沖源提供了有用的工具??涉溄拥腟PI可用于同時從多個GreenPAK設備進行采樣和讀取,數(shù)據(jù)源可以來自計數(shù)器或ADC。
-
計數(shù)器
+關注
關注
32文章
2290瀏覽量
96226 -
SPI
+關注
關注
17文章
1791瀏覽量
95243 -
SPI總線
+關注
關注
4文章
104瀏覽量
27986
發(fā)布評論請先 登錄
請問有沒有計數(shù)器輸出的計數(shù)值是串行數(shù)據(jù)(最好是SCI總線
基于dsPIC單片機的正交計數(shù)器設計 求大神給思路
【數(shù)據(jù)采集分享】怎樣將正交編碼器和數(shù)據(jù)采集卡配合使用
LS7366R 32 位正交編碼脈沖計數(shù)器模塊
正交編碼器原理碼盤
正交編碼器原理什么是正交?
正交編碼器測速的方法
基于VHDL的正交編碼脈沖電路解碼計數(shù)器設計
開關高速脈沖計數(shù)器Modbus RTU編碼器模塊IBF150

轉(zhuǎn)速DI計數(shù)器編碼器AB解碼轉(zhuǎn)換rs485/232ModbusRTU

評論