国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

CAN 總線報文接收準(zhǔn)確率的優(yōu)化設(shè)計

2023-05-10 10:06:26吳同曄劉石馮進良黃偉
關(guān)鍵詞:低電平高電平寄存器

吳同曄,劉石,馮進良,黃偉

(長春理工大學(xué) 光電工程學(xué)院,長春 130022)

現(xiàn)場總線是由電氣行業(yè)發(fā)展而來的一種數(shù)據(jù)總線,目前常用的汽車總線技術(shù)主要有FlexRay、MOST、CAN 和LIN,而 其 中CAN(Controller Area Network)總線更是應(yīng)用十分廣泛。CAN 總線作為唯一一個被ISO(國際標(biāo)準(zhǔn)化)組織認證的總線,有多主方式同時操作、取消了對節(jié)點地址和通信模塊的編碼等優(yōu)秀性能。但CAN 總線同樣包含著許多缺點,如傳統(tǒng)CAN 總線以單片機STM32 為主,但STM32 已經(jīng)滿足不了現(xiàn)在高速率通信、高穩(wěn)定性的需求[1],并且由于取消了對節(jié)點地址和通信模塊的編碼,導(dǎo)致CAN 總線在發(fā)出報文后可能會被多個節(jié)點甚至全部節(jié)點接收,造成多次播報或錯誤播報,增加了接收報文的錯誤率。因此迫切需要一種高速率通信、高穩(wěn)定性、提高報文接收準(zhǔn)確率的新型的CAN 總線。

近年來,越來越多的學(xué)者投入到研究新型CAN 總線的設(shè)計中。例如,時旭等人[2]提出了一種基于FPGA 的CAN 總線通信系統(tǒng)的設(shè)計,將FPGA 芯片替換掉傳統(tǒng)的單片機STM32 芯片,提升了通信速度和穩(wěn)定性,但未提出提高報文接收準(zhǔn)確率的方法,并且占用FPGA 內(nèi)部資源過多;紀(jì)振平等人[3]提出一種新型的基于FPGA 的CAN 總線控制器設(shè)計,將傳統(tǒng)CAN 總線中的組合邏輯設(shè)計改為時序邏輯設(shè)計,減少了FPGA 內(nèi)部資源的占用,但仍未提出如何解決CAN 總線報文接收錯誤率過高的問題。

針對報文接收錯誤率高這一問題,本文設(shè)計了一個報文接收模塊,可以更準(zhǔn)確、更有效率地傳輸數(shù)據(jù)。當(dāng)一個節(jié)點發(fā)送報文時,首先被CAN總線接收,然后寫入緩存區(qū)中。當(dāng)狀態(tài)寄存器檢查完畢、緩存區(qū)釋放時[4],按照指令向緩存區(qū)讀取報文。如果發(fā)送報文的節(jié)點需要指定節(jié)點進行接收,則報文接收模塊不工作;如果發(fā)送報文的節(jié)點向任意節(jié)點發(fā)送報文時,報文接收模塊會任選三個節(jié)點,當(dāng)這三個節(jié)點其中的任意一個接收到發(fā)出的報文,那么報文接收模塊中的D觸發(fā)器就會向狀態(tài)寄存器發(fā)送已接收信號,使?fàn)顟B(tài)寄存器ALE 的狀態(tài)鎖存,緩存區(qū)關(guān)閉,之后不會再向其他節(jié)點發(fā)送已被接收的報文;反之如果三個節(jié)點沒有接收,就向狀態(tài)寄存器發(fā)送未接收信號,緩存區(qū)繼續(xù)處于釋放狀態(tài),重新選擇三個節(jié)點接收報文,直到此報文被接收。與傳統(tǒng)的CAN 總線接收報文相比,本設(shè)計具有準(zhǔn)確率更高、減少重復(fù)接收報文的次數(shù)、減少資源浪費、專用性與集成度更高等特點。

1 報文發(fā)送和接收模塊的原理

1.1 報文種類以及仲裁機制

CAN 總線之所以應(yīng)用如此廣泛,最大特點之一就是取消了對通信模塊和節(jié)點地址進行編碼,因此CAN 總線的節(jié)點可以有無數(shù)個,這也讓CAN 總線擁有非常高的靈活性以及可操作性[5]。CAN 總線以報文的形式進行數(shù)據(jù)傳輸,這些報文通常定義為具有特定格式的數(shù)據(jù)流,他們的格式可以不相同[6],但是有一定的限制。CAN 總線的報文傳輸種類有:過載幀、錯誤幀、遠程幀、幀間隔以及數(shù)據(jù)幀。其中數(shù)據(jù)幀是最常見的報文種類。

(1)數(shù)據(jù)幀:用于發(fā)送節(jié)點向接收節(jié)點傳送數(shù)據(jù)的幀。

(2)遠程幀:用于發(fā)送節(jié)點向具有相同ID 的接收節(jié)點發(fā)送數(shù)據(jù)的幀。

(3)錯誤幀:用于當(dāng)檢測出錯誤時向其他節(jié)點通知錯誤的幀。

(4)過載幀:用于通知尚未做好接收數(shù)據(jù)準(zhǔn)備的幀。

(5)幀間隔:用于將數(shù)據(jù)幀及遠程幀與之前傳輸?shù)臄?shù)據(jù)分隔開的幀。

圖1 為最常見的數(shù)據(jù)幀內(nèi)部結(jié)構(gòu)。

圖1 最常見的數(shù)據(jù)幀內(nèi)部結(jié)構(gòu)

如果總線處于閑置狀態(tài)[7],那么系統(tǒng)內(nèi)多個節(jié)點的發(fā)送和接收工作就可以正常進行。但如果總線上的多個節(jié)點同時發(fā)送報文,則優(yōu)先級標(biāo)識符較高的報文單元可以首先發(fā)送報文。在CAN 總線的報文當(dāng)中,二進制數(shù)值的高低決定了標(biāo)識符傳送的優(yōu)先級,數(shù)值越小,則優(yōu)先級越高。在解決總線上數(shù)據(jù)發(fā)送沖突問題時,采取的是非破壞性仲裁技術(shù)。當(dāng)報文的發(fā)送過程出現(xiàn)沖突時,在不影響其他模塊工作的前提下[8],逐一進行標(biāo)識符優(yōu)先級的確定。具有最低值標(biāo)識符的報文指定為優(yōu)先級最高。即有多個節(jié)點同時發(fā)出報文時,優(yōu)先級高的節(jié)點獲得仲裁資格,并繼續(xù)發(fā)送數(shù)據(jù),優(yōu)先級低的節(jié)點仲裁失敗放棄發(fā)送,先進行報文的接收工作。這種仲裁機制會顯著提高系統(tǒng)可靠性和穩(wěn)定性,節(jié)約仲裁時間。

1.2 發(fā)送和接收報文流程

在發(fā)送報文的時候,第一步首先要判斷緩存區(qū)(ALE)是否處于鎖定狀態(tài)[9]。當(dāng)ALE 處于低電平時,即為鎖存狀態(tài),此時的數(shù)據(jù)處于待命狀態(tài),無法被接收。當(dāng)緩存區(qū)釋放時,數(shù)據(jù)會以特定的格式發(fā)送到緩存區(qū)。發(fā)送報文流程圖如圖2 所示。

圖2 發(fā)送報文流程圖

接收報文的過程同樣需要判斷緩存區(qū)的狀態(tài),這是與發(fā)送過程一致的步驟。但接收的流程除了對報文進行接收之外還要進行其他情況的處理。接收流程比發(fā)送流程要復(fù)雜一些,因為在處理接收報文的過程中,同時要對諸如總線關(guān)閉、錯誤報警、接收溢出等情況進行處理。只有在總線正常,沒有錯誤報警,并且接收緩沖區(qū)中有新報文,才開始進行數(shù)據(jù)接收工作。對接收緩沖區(qū)的數(shù)據(jù)讀取完畢后關(guān)閉CAN 接收緩沖區(qū)。如圖3 為接收報文流程圖。

圖3 接收報文流程圖

2 整體結(jié)構(gòu)與報文接收模塊設(shè)計

本文采用“自上而下”的設(shè)計方法[10],將CAN總線劃分為三個主要模塊:寄存器模塊、數(shù)據(jù)處理模塊以及位時序邏輯模塊。寄存器模塊的主要功能是存儲數(shù)據(jù),比如CAN 總線控制器的命令、狀態(tài)、中斷等信息,同時與數(shù)據(jù)處理模塊和位時序邏輯模塊之間保持著數(shù)據(jù)傳輸以及交流,保證信息的實時性;位時序邏輯模塊主要是實現(xiàn)CAN 總線對位同步的控制,負責(zé)監(jiān)視串行CAN 總線輸入,并處理與總線有關(guān)的時序問題;數(shù)據(jù)處理模塊是一個控制數(shù)據(jù)流的序列發(fā)生器,與另兩個模塊相比更關(guān)鍵也更復(fù)雜,是三個模塊中最主要的部分。三個子模塊互相之間協(xié)調(diào)搭配,共同構(gòu)成CAN 總線。本文主要從數(shù)據(jù)處理模塊展開,數(shù)據(jù)處理模塊又劃分為六個子模塊,如圖4 所示為CAN 總線的控制器結(jié)構(gòu)。

圖4 CAN 總線的控制器結(jié)構(gòu)

數(shù)據(jù)處理模塊在進行數(shù)據(jù)傳輸?shù)耐瑫r還執(zhí)行仲裁、位填充、驗收濾波、出錯檢測和錯誤處理等功能。根據(jù)其功能,數(shù)據(jù)處理模塊又可以劃分為以下六個模塊:驗收濾波、接收模塊、發(fā)送模塊、錯誤管理、FIFO(First Input First Output)和CRC 校驗。各個模塊之間相互配合共同組成數(shù)據(jù)處理模塊。如圖5 所示為數(shù)據(jù)模塊處理的功能結(jié)構(gòu)。

圖5 數(shù)據(jù)模塊處理的功能結(jié)構(gòu)

數(shù)據(jù)處理模塊的主要特點之一就是采用多主方式工作。由于CAN 總線取消了對節(jié)點地址和通信模塊的編碼,從而任意一個節(jié)點都可以隨時向總線上的其他節(jié)點發(fā)送信息,所以很容易提高競爭冒險的風(fēng)險,這也導(dǎo)致一個報文可以被多個節(jié)點接收或者全部節(jié)點接收,本文基于這個缺陷設(shè)計了一個報文的接收模塊,當(dāng)緩存區(qū)中的報文被其他節(jié)點讀取時,按照條件選擇三個節(jié)點:如果發(fā)送報文的節(jié)點所發(fā)出的報文需要被指定節(jié)點接收,則報文接收模塊不工作,處于復(fù)位狀態(tài);如果發(fā)送報文的節(jié)點對接收報文的節(jié)點沒有指令,則報文接收模塊會任選三個節(jié)點,分別定義為寄存器node_1、寄存器node_2、寄存器node_3,如圖6 所示為報文接收模塊設(shè)計原理圖。

圖6 報文接收模塊設(shè)計原理圖

首先需要判斷狀態(tài)寄存器是否處于鎖存狀態(tài),SJA1000 的狀態(tài)寄存器為ALE,當(dāng)ALE 為低電平時[11],狀態(tài)寄存器鎖存,緩存區(qū)處于關(guān)閉狀態(tài);當(dāng)ALE 為高電平時,緩存區(qū)釋放。節(jié)點在讀取狀態(tài)寄存器的報文時,ALE 需要處于高電平狀態(tài),也就是使能端處于高電平。此時其他節(jié)點可以在緩存區(qū)中讀取到報文。

定義三個寄存器作為節(jié)點并設(shè)置高電平有效,將復(fù)位信號sys_rst_n 設(shè)置為高電平有效,同時設(shè)計一個D觸發(fā)器作為控制信號,當(dāng)D觸發(fā)器flag 信號為低電平時,輸出信號有效。如果此時發(fā)送報文的節(jié)點指定某個或多個節(jié)點接收,則整個模塊的狀態(tài)表現(xiàn)為復(fù)位信號sys_rst_n 低電平,即處于復(fù)位狀態(tài),報文接收模塊不工作;而當(dāng)寄存器狀態(tài)顯示為高電平時,表明已經(jīng)接收了這個報文。三個寄存器通過或門連接,之間有任意一個為高電平,則D觸發(fā)器輸出為低電平,即flag 信號顯示為低電平;如果三個寄存器沒有任何一個接收,則D觸發(fā)器為高電平,即flag信號顯示為高電平。當(dāng)報文被三個節(jié)點中的任意一個接收時,flag 就會向狀態(tài)寄存器發(fā)送關(guān)閉釋放信號,使?fàn)顟B(tài)寄存器ALE 鎖存處于低電平;當(dāng)三個節(jié)點都沒接收時,flag 會向狀態(tài)寄存器發(fā)送繼續(xù)釋放信號,重新選擇三個節(jié)點進行接收報文的工作。

3 測試結(jié)果與比較

3.1 CAN 總線通信的功能驗證

信號傳輸原理:

(1)發(fā)送過程:CAN 控制器將CPU 發(fā)送來的報文轉(zhuǎn)換為邏輯電平(包括邏輯0 顯性電平和邏輯1 隱形電平),通過TX 腳傳遞給CAN 收發(fā)器。CAN 收發(fā)器接收邏輯電平之后,再將其轉(zhuǎn)換為差分電平傳送到CAN 總線上。

(2)接 收 過 程:CAN 收 發(fā) 器 將CAN_H 和CAN_L 線[12]上傳來的差分電平轉(zhuǎn)換為邏輯電平傳送回CAN 控制器的RX 腳,CAN 控制器再把該邏輯電平轉(zhuǎn)化為相應(yīng)報文發(fā)送到CPU 上。

加入報文接收模塊后,CAN 總線能否正常發(fā)送和接收數(shù)據(jù),對整體CAN 總線的數(shù)據(jù)傳輸是否造成影響,需要進行測試[13]。本文采用軟件canutils 對后續(xù)CAN 總線進行測試。canutils 包內(nèi)含5 個獨立的程序:cansend、candump、canconfig、canecho、cansequence。

cansend:往指定的CAN 總線接口發(fā)送指定的數(shù)據(jù)。

candump:從CAN 總線接口接收數(shù)據(jù)并以十六進制形式打印到標(biāo)準(zhǔn)輸出,也可以輸出到指定文件。

canconfig:用于配置CAN 總線接口的參數(shù),主要是波特率和模式。

canecho:把從CAN 總線接口接收到的所有數(shù)據(jù)重新發(fā)送到CAN 總線接口。

cansequence:往指定的CAN 總線接口自動重復(fù)遞增數(shù)字,也可以指定接收模式并校驗檢查接收的遞增數(shù)字。

首先設(shè)置模式為停止,然后設(shè)置再啟動。一般系統(tǒng)起來后都需要先配置canutils,后續(xù)幾個程序才能正常使用,如圖7 所示為配置canutils。

圖7 配置canutils

打開兩個終端,一個進行CAN0 設(shè)備的發(fā)送,一個進行CAN1 設(shè)備的接收。在CAN1 終端命令行輸入candump can1,意義是CAN1 設(shè)備開始進行接收,進程為阻塞型,CAN1 設(shè)備將會一直接收發(fā)來的CAN0 消息直到用戶終止,圖8 所示為CAN1 設(shè)備開始接收。

圖8 CAN1 設(shè)備開始接收

在CAN0 發(fā)送終端中進行數(shù)據(jù)發(fā)送,使用cansend 命令,其格式為cansend <設(shè)備號> <要發(fā)送的消息>。而發(fā)送的數(shù)據(jù)只能發(fā)送16 進制,并且每次發(fā)送的數(shù)據(jù)為8 個字節(jié)。任選ID 為123的CAN 標(biāo)準(zhǔn)幀進行發(fā)送測試,波特率為1 M,內(nèi)容為11 22 33 44 55 66 77 88。如果數(shù)據(jù)傳輸無誤,則會在CAN1 接收終端接收到發(fā)送端發(fā)出的標(biāo)準(zhǔn)數(shù)據(jù)幀。

結(jié)果表明,加入報文接收模塊后的設(shè)計可以正常地進行發(fā)送接收信號,并且發(fā)送和接收之間并未發(fā)生錯誤,驗證了此模塊設(shè)計通信的可行性。圖9 為CAN0 設(shè)備發(fā)送數(shù)據(jù)進行測試,圖10 為CAN1 設(shè)備接收數(shù)據(jù)成功。

圖9 CAN0 設(shè)備發(fā)送數(shù)據(jù)進行測試

圖10 CAN1 設(shè)備接收數(shù)據(jù)成功

3.2 報文接收模塊的驗證與資源占用

本文采用FPGA 所用經(jīng)典軟件vivado 來進行仿真驗證。將報文接收模塊視為頂層文件,寫入top 模塊中,并寫好與之相對應(yīng)的仿真文件。Run simulation 通過之后,觀察波形數(shù)據(jù),如圖11所示為vivado 驗證數(shù)據(jù)的波形圖。

驗證一下模塊的可行性。先給三個寄存器低電平處于復(fù)位狀態(tài),即延遲20 ns,寄存器node_1、寄存器node_2、寄存器node_3 均處于低電平狀態(tài),D觸發(fā)器flag 信號處于高電平狀態(tài),此時三個寄存器都處于未接收的狀態(tài),等待信號的傳輸。

若延遲40 ns,給了一個輸入信號,在時鐘信號的作用下傳入進寄存器中被node_1 接收,寄存器node_1 處于高電平狀態(tài),寄存器node_2、寄存器node_3 均處于低電平狀態(tài),則flag 信號此時處于低電平狀態(tài),狀態(tài)寄存器ALE 拉低,處于鎖存狀態(tài),等待下一信號的到來。

再延遲40 ns,此時結(jié)束上一個狀態(tài),將節(jié)點node_1 重新拉低,可以看到D觸發(fā)器flag 隨之拉高,重新回到復(fù)位的狀態(tài)。

仿真驗證通過之后,檢查一下報文接收模塊的資源占用情況。具體占用資源包括:查找表、寄存器、F7 選擇器。從總體看報文接收模塊在FPGA 消耗的資源都不是很高,說明該模塊資源占用率低。FPGA 資源占用結(jié)果如表1 所示。

由表1 可見,報文接收模塊查找表占用兩個,僅占CAN 總線的0.527 7%,報文接收模塊的寄存器占用4 個,僅占CAN 總線的0.570 6%,所以加入報文接收模塊并不會影響整體CAN 總線的資源利用。

3.3 報文接收成功率對比結(jié)果

均發(fā)送10 000 組報文,將加入報文接收模塊前后的成功率進行對比,成功率對比結(jié)果如表2所示。

表2 成功率對比結(jié)果

由表2 可見,發(fā)送10 000 組報文時,加入報文接收模塊之后的成功組數(shù)比加入之前多900組,成功率比加入模塊前要高9%,成功率從90%提升到99%,多次播報從479 組降到34 組,降低了92.89%,錯誤播報從522 組降到66 組,降低了87.36%,驗證了報文接收模塊的可行性。

4 結(jié)論

本文對基于FPGA 的CAN 總線控制器,通過在數(shù)據(jù)處理中加入一段報文接收模塊的代碼進行設(shè)計。本設(shè)計的優(yōu)點在于,相對于所有節(jié)點都可以接收,選擇三個節(jié)點能大大減少資源的利用與消耗,節(jié)省成本。綜合數(shù)據(jù)結(jié)果,CAN 總線報文多播或錯播的問題得到了解決。加入這部分針對報文接收的模塊后,雖然會增加查找表0.527 7%的占用和寄存器0.570 6%的占用,但加入此模塊后會提高9%的報文接收準(zhǔn)確率,同時降低了92.89%的多次播報率和87.36%的錯誤播報率,驗證設(shè)計可行。

猜你喜歡
低電平高電平寄存器
數(shù)字電路中“邏輯非”的用法辨析
一種基于FPGA的PWM防錯輸出控制電路
鐵道車輛高/低電平信號智能發(fā)生器設(shè)計
Lite寄存器模型的設(shè)計與實現(xiàn)
TS-03C全固態(tài)PDM中波發(fā)射機開關(guān)機控制電路原理及故障分析
科技傳播(2019年15期)2019-08-22 08:07:44
2017款凱迪拉克2.8L/3.0L/3.2L/3.6L車型低電平參考電壓總線電路圖
分簇結(jié)構(gòu)向量寄存器分配策略研究*
DM 50KW中波廣播發(fā)射機欠推動故障分析
PDM 1kW中波廣播發(fā)射機保護電路分析
集成電路靜態(tài)參數(shù)測試
微處理機(2012年5期)2012-07-25 03:21:06
巴中市| 邯郸县| 定陶县| 始兴县| 绿春县| 上虞市| 敦煌市| 丘北县| 旅游| 睢宁县| 礼泉县| 平泉县| 郴州市| 梁平县| 九龙城区| 阿鲁科尔沁旗| 昭觉县| 泌阳县| 德化县| 和平区| 桓仁| 凯里市| 谷城县| 句容市| 思南县| 北票市| 遵义市| 黑河市| 潼南县| 唐海县| 南澳县| 麟游县| 盐城市| 澄迈县| 苗栗县| 饶河县| 会泽县| 宜兴市| 东台市| 体育| 芦山县|