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

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


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

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

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

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

ENDAT波形如下圖,可以看到發(fā)送Mode command時,數(shù)據(jù)在下降沿發(fā)送;接收數(shù)據(jù)時,數(shù)據(jù)在下降沿采樣:


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

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

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