SEI(Serial Encoder Interface)串行編碼器接口,是先楫半導體創新性設計的一個針對串行絕對值編碼器通信的外設。SEI支持同步通信模式與異步通信模式,既能做主機——從編碼器獲取數據,又能做從機——將位置信息以主機需要的串行協議發出。在電機類應用中大大的降低了編碼器相關開發任務的難度,同時以硬件編解碼的方式降低了CPU負載率,讓CPU有更多算力處理其他任務。
先楫半導體SDK1.10.0提供了諸多SEI應用的實例,包括Biss-c、Endat、Hiperface、Nikon、SSI、Tamagawa等串行協議的主站、從站配置源碼,開發者在sample實例的基礎上,簡單的進行修改即可應用到項目中。
本文以Biss-c和Endat協議為例,對SEI在同步通信中用法進行講解,使讀者對SEI的用法有進一步的認識與了解。
本文中,命令指協議中主站向從站發送的命令,從站需要根據命令內容進行回復或執行某些操作;指令指SEI引擎執行的動作。
1、SEI關鍵概念
1.1 數據寄存器
數據寄存器是SEI收發數據的數據存放單元。在通信的接收過程中,接收到的數據會被存放于數據寄存器中;在通信的發送過程中,需要向外發送的數據同樣存放在數據寄存器中。
SEI共有17組數據寄存器,每個寄存器寬度為32bit。當SEI工作在同步模式時,數據線上連續出現的數據會根據clock信號進行采樣,并將采樣后的數據按照SEI配置依次保存到數據寄存器中,不超過32bit的圈數/位置數據可以使用1個數據寄存器進行保存,超過32bit的數據使用2個數據寄存器進行保存——不過單圈精度超過32位以及圈數超過32位的編碼器比較少見,32bit寄存器可滿足絕大部分使用場景。
數據寄存器0用于忽略接收到的數據——某些通信協議的數據字段,如果開發者不關心,可以使用數據數據寄存器0進行接收;其概念與Linux系統下黑洞文件類似。
數據寄存器2~數據寄存器17為通用數據寄存器。可以工作在3種模式下:
數據模式:僅用于存儲數據。
檢查模式:可設定期待值,例如用戶期待接收到0x17,當接收到的寫入該數據寄存器的值不為0x17時,可產生傳輸錯誤提示。
CRC模式:用于收發數據過程中實時計算CRC值,可通過設置CRC多項式與CRC初始值來設計CRC算法,當接收數據的CRC計算結果與實時計算結果不符時,可產生錯誤傳輸提示。
1.2 命令寄存器
用于收發串行編碼器協議中的命令數據。例如ENDAT協議中Mode Command字段為命令,其含義如下圖:

可以看到,Mode Command字段內的M0~M3決定了通信的內容,根據該字段的不同,主機可以從編碼器中讀取位置數據、收發配置參數、復位等。
1.3 命令匹配表
命令寄存器接收到命令后,SEI引擎接收JUMP跳轉指令,會根據命令內容在命令匹配表內進行檢索。找到符合命令的表項后,則跳轉至該命令匹配表指向的指令開始執行。SEI共支持8張命令匹配表,SEI引擎會以順序方式對每張命令匹配表的命令進行對比,如果命令匹配表0~命令匹配表6都匹配失敗,則無條件執行命令匹配表7的預設指令(回復/不回復)。命令匹配表一般在做從機時使用。
1.4 指令
SEI引擎共支持8種指令,分為停止、等待、接收、發送、跳轉5大類指令,根據是否有超時保護拓展為8種指令。例如接收指令可分為時限內接收與無限時接收,時限內接收在規定的時間內未收到數據會進行報錯處理,無限時接收則會永遠等待下去。其它時限內發送與無限時發送等概念,請讀者自行理解。
SEI共支持預設128條指令。
1.5 狀態機
SEI狀態機包括4個狀態,狀態的切換只能以0-->1-->2-->3-->0的順序進行,每種狀態的切換條件可由開發者自行定義,例如設置執行完第10條指令后狀態機從狀態0切換到狀態1。狀態切換可向外發送事件信號,開發者可將該信號拉到其它外設進行觸發,實現硬件同步;或簡單的產生一次中斷或DMA事件,使用中斷或DMA進行一定的數據處理工作。
理解SEI工作的關鍵就在于以上5個概念的掌握。其它更多的技術細節需要讀者自行查閱UM手冊進行理解。
2、BISSC指令表解析
下面對SEI工作的流程進行直觀的舉例描述,時序如下圖所示,代碼參考samples\drivers\sei\master\bissc\src\sei.c:


1)主機SEI引擎使能后,對外發送clock信號,同時開始以指令0“等待”數據線上的ACK信號,ACK信號由編碼器發出(編碼器收到clock信號后會發出ACK表示應答),拉低數據總線電平,因此SEI收到ACK信號后會跳轉到指令1;
2)按照協議,ACK響應后編碼器發送1 bit高電平,代表開始數據傳輸,指令1“等待”數據線上的START信號,如SEI收到START信號,將繼續接收CDS數據,跳轉到指令2;
3)CDS和CDM是BISSC協議中用于主機與編碼器進行一些控制指令交互的手段,主機每一幀數據傳送1 bit CDM數據給編碼器,編碼器每幀數據傳輸1 bit CDS數據給主機完成交互。例程使用的編碼器型號,不存在控制數據交互功能,因此1 bit的CDS數據沒有意義,接收到數據后將其保存到數據寄存器0中,跳轉到指令3;
4)主機SEI引擎接收12bit多圈數據保存在DATA_2中,跳轉到指令4
5)主機SEI引擎接收12bit單圈數據保存在DATA_3中,跳轉到指令5
6)WARN和ERROR是BISSC協議中用于表示編碼器狀態的數據bit,當故障時會通過這兩個數據bit通知主機數據無效,例程使用DATA_4保存后,跳轉到指令6
7)接下來6個bit的數據是用于數據完整性校驗的CRC,CRC校驗正確數據才有效,否則會觸發SEI TRX中斷,接收完6 bit CRC數據后會跳轉到指令7
8)當數據發送完成后,Data 保持小于 10us 的低電平,這段時間被稱為 Timeout。該信號一直維持到 Data 被拉高,表明當前幀通信結束,可以開始下一幀通信。在此期間,SEI主機不再向外發送clock信號,并維持CLK數據線為高電平。當編碼器準備好下一幀數據傳輸,會釋放數據線將其拉高為高電平,即指令8配置的等待數據線為1
9)完成整個通信過程后,主機執行HALT指令,準備下一幀數據的傳輸,重新從指令0開始數據傳輸
可以看到,通過以上工作流程的描述,SEI就依靠硬件自動完成了clock的發送,從編碼器讀回來了數據。CPU只要在數據寄存器中讀取位置值和圈數值即可。
3、ENDAT指令表解析
與SEI類似,下面對ENDAT協議進行解析,時序如下圖所示,代碼參考samples\drivers\sei\master\endat\src\sei.c:

由以上時序圖可以看到,ENDAT協議,由以下幾個階段組成:
1)由主機發送2個周期的clock信號
2)由主機發送Mode command(參見1.2章節),Mode command共6 bit,后3 bit與前3 bit按位取反
3)由主機再發送2個周期的clock信號
4)主機持續輸出clock信號,開始等編碼器給出start信號,start信號即編碼器拉高數據線,
5)編碼器傳輸1 bit Error數據
6)編碼器傳輸n bit位置數據(n取決于編碼器規格)
7)編碼器傳輸5 bit CRC數據
8)一段時間的timeout,其概念與BISSC相似,區別在于編碼器會拉低數據線表示timeout結束,即可以開始下一幀數據傳輸。
參照以上對ENDAT編碼器協議的解讀,理解下圖所示例程的指令表設計,應該是毫無難度了。

4、同步通信其它技術點解析
4.1 采樣點
細心的讀者會注意到,SDK中BISSC與ENDAT兩個master例程,采樣點的設置不同,下面介紹一下采樣點的設置。
BISSC例程如下,接收采樣點為ck0 point,發送點為ck1 point:

ck0是指一個clock周期的第一個邊沿,ck1是指一個clock周期的第二個邊沿。結合BISSC協議的規定,idle狀態下clock為高電平,那么第一個邊沿就是下降沿,第二個邊沿就是上升沿。
即意味著,SEI引擎會在下降沿采樣接收信號線上的數據,在上升沿發送要發出的數據。BISSC協議主機不發送數據,只關注接收即可。
如下圖為BISSC標準協議,可以看到,數據確實在clock的下降沿采樣,上升沿數據發生變化。

ENDAT波形如下圖,可以看到發送Mode command時,數據在下降沿發送;接收數據時,數據在下降沿采樣:


所以ENDAT例程采樣點配置如上圖所示,clock信號線idle電平為高電平,那么接收采樣點為ck0 point,發送點也為ck0 point。
4.2 采樣點調整
當編碼器線纜長度比較長,電信號的傳輸時間會對信號的相位發生影響,當影響無法忽略時,需要對采樣點進行調整。
如下圖ENDAT協議中所示,主機發出的clock在信號線上傳輸到達編碼器,編碼器根據clock信號發送位置數據,位置數據傳輸到主機時,如果主機仍然在下降沿采樣,那么就會發生錯誤。

先楫SDK例程開發時充分考慮以上情況的發生,在SEI最初的通信過程中,會測量主機主動發出的clock信號下降沿與從機回復信號的start上升沿之間的時間差,來判斷電信號在線纜中傳輸造成的相位偏移影響,對采樣點進行調整,如下圖代碼:

調整的邏輯較簡單,請讀者自行分析,以便更好的理解整個通信過程。
5、小結
相信通過以上針對SEI的講解,及對BISSC、ENDAT例程代碼的分析,讀者對SEI有了更深的認識,希望開發者可以用好SEI模塊,加速項目開發與落地。
-
編碼器
+關注
關注
45文章
3953瀏覽量
142617 -
寄存器
+關注
關注
31文章
5608瀏覽量
129968 -
接口
+關注
關注
33文章
9519瀏覽量
157020 -
絕對值編碼器
+關注
關注
3文章
71瀏覽量
10620 -
先楫半導體
+關注
關注
12文章
284瀏覽量
3297
發布評論請先 登錄
SEI異步通訊—多摩川協議支持
用SPI模擬BISS-C協議,可以用定時器捕獲時鐘高電平持續時間判斷biss幀的開始嗎?
一個到電機位置編碼器的EMC兼容接口設計
電磁兼容(EMC)標準的電機位置編碼器接口講解
請問tms320f28377d連接多個ENDAT絕對值編碼器是否需要4個硬件SPI接口才行?
C2000 MCU的BiSS-C絕對編碼器主接口參考設計
PRU-ICSS的另一個應用概述
最近在使用TMS320F28379D用其CLB功能實現ENDAT2.2協議時與海德漢的編碼器進行通訊。程序初始化一直不成功?
詳解雙向/串行/同步(BiSS)位置編碼器的接口
經驗分享 | SEI同步通訊—BISS-C/ENDAT協議解讀
評論