-
當前位置:首頁 > 創(chuàng)意學院 > 營銷推廣 > 專題列表 > 正文
CAN模塊發(fā)送流程(CAN模塊發(fā)送流程)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于CAN模塊發(fā)送流程的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關鍵詞,就能返回你想要的內容,有小程序、在線網頁版、PC客戶端和批量生成器
本文目錄:
can總線工作原理
can總線工作原理如下。CAN總線使用串行數據傳輸方式,可以1Mb/s的速率在40m的雙絞線上運行,也可以使用光纜連接,而且在這種總線上總線協議支持多主控制器。CAN與I2C總線的許多細節(jié)很類似,但也有一些明顯的區(qū)別。
當CAN總線上的一個節(jié)點(站)發(fā)送數據時,它以報文形式廣播給網絡中所有節(jié)點。對每個節(jié)點來說,無論數據是否是發(fā)給自己的,都對其進行接收。每組報文開頭的11位字符為標識符,定義了報文的優(yōu)先級,這種報文格式稱為面向內容的編址方案。在同一系統(tǒng)中標識符是唯一的,不可能有兩個站發(fā)送具有相同標識符的報文。當幾個站同時競爭總線讀取時,這種配置十分重要。
當一個站要向其它站發(fā)送數據時,該站的CPU將要發(fā)送的數據和自己的標識符傳送給本站的CAN芯片,并處于準備狀態(tài);當它收到總線分配時,轉為發(fā)送報文狀態(tài)。CAN芯片將數據根據協議組織成一定的報文格式發(fā)出,這時網上的其它站處于接收狀態(tài)。每個處于接收狀態(tài)的站對接收到的報文進行檢測,判斷這些報文是否是發(fā)給自己的,以確定是否接收它。
由于CAN總線是一種面向內容的編址方案,因此很容易建立高水準的控制系統(tǒng)并靈活地進行配置。我們可以很容易地在CAN總線中加進一些新站而無需在硬件或軟件上進行修改。當所提供的新站是純數據接收設備時,數據傳輸協議不要求獨立的部分有物理目的地址。它允許分布過程同步化,即總線上控制器需要測量數據時,可由網上獲得,而無須每個控制器都有自己獨立的傳感器。
CAN總線的特點:1、具有實時性強、傳輸距離較遠、抗電磁干擾能力強、成本低等優(yōu)點
2、采用雙線串行通信方式,檢錯能力強,可在高噪聲干擾環(huán)境中工作;
3、具有優(yōu)先權和仲裁功能,多個控制模塊通過CAN控制器掛到CAN-bus上,形成多主機局部網絡;
4、可根據報文的ID決定接收或屏蔽該報文;
5、可靠的錯誤處理和檢錯機制;
6、發(fā)送的信息遭到破壞后,可自動重發(fā);
7、節(jié)點在錯誤嚴重的情況下具有自動退出總線的功能;
8、報文不包含源地址或目標地址,僅用標志符來指示功能信息、優(yōu)先級信息。
can照明控制模塊,怎么控制呀,有明白的嗎,求教
CAN照明控制模塊通常是作為照明控制系統(tǒng)中的一個節(jié)點,可以通過CAN總線與其他節(jié)點進行通訊。要控制某一路開關,通常需要遵循以下步驟:
首先,需要確認CAN照明控制模塊所使用的CAN協議和通訊格式。不同的CAN協議和通訊格式可能有所不同,需要根據實際情況進行配置。
然后,需要使用CAN總線發(fā)送控制命令。具體的控制命令格式和內容需要參照CAN照明控制模塊的協議說明進行設置。一般來說,控制命令中需要包含控制某一路開關的指令,并指定相應的開關狀態(tài)(如開或關)。
發(fā)送控制命令后,CAN照明控制模塊會接收到命令并進行處理。如果命令格式正確,模塊會按照命令指定的開關狀態(tài)來控制對應的照明設備。
需要注意的是,CAN照明控制模塊的控制命令和協議需要根據具體的型號和品牌進行設置,如果您不熟悉CAN協議和通訊格式,可以查閱相關的文檔和參考資料,或者咨詢廠家的技術支持人員。
汽車CAN總線的傳輸原理?
總線(CAN,Controller Area Network)是一種用于實時應用的串行通訊協議總線,它可以使用雙絞線來傳輸信號,是世界上應用最廣泛的現場總線之一。CAN協議由德國的Robert Bosch公司開發(fā),用于汽車中各種不同元件之間的通信,以此取代昂貴而笨重的配電線束。該協議的健壯性使其用途延伸到其他自動化和工業(yè)應用。CAN協議的特性包括完整性的串行數據通訊、提供實時支持、傳輸速率高達1Mb/s、同時具有11位的尋址以及檢錯能力。
CAN總線是一種多主方式的串行通訊總線,基本設計規(guī)范要求有高的位速率,高抗電子干擾性,并且能夠檢測出產生的任何錯誤。CAN總線可以應用于汽車電控制系統(tǒng)、電梯控制系統(tǒng)、安全監(jiān)測系統(tǒng)、醫(yī)療儀器、紡織機械、船舶運輸等領域。
一、CAN總線的特點:
1、具有實時性強、傳輸距離較遠、抗電磁干擾能力強、成本低等優(yōu)點;
2、采用雙線串行通信方式,檢錯能力強,可在高噪聲干擾環(huán)境中工作;
3、具有優(yōu)先權和仲裁功能,多個控制模塊通過CAN 控制器掛到CAN-bus 上,形成多主機局部網絡;
4、可根據報文的ID決定接收或屏蔽該報文;
5、可靠的錯誤處理和檢錯機制;
6、發(fā)送的信息遭到破壞后,可自動重發(fā);
7、節(jié)點在錯誤嚴重的情況下具有自動退出總線的功能;
8、報文不包含源地址或目標地址,僅用標志符來指示功能信息、優(yōu)先級信息。
二、CAN總線的應用
CAN總線在組網和通信功能上的優(yōu)點以及其高性價比據定了它在許多領域有廣闊的應用前景和發(fā)展?jié)摿?。這些應用有些共同之處:CAN實際就是在現場起一個總線拓撲的計算機局域網的作用。不管在什么場合,它負擔的是任一節(jié)點之間的實時通信,但是它具備結構簡單、高速、抗干擾、可靠、價位低等優(yōu)勢。CAN總線最初是為汽車的電子控制系統(tǒng)而設計的,目前在歐洲生產的汽車中CAN的應用已非常普遍,不僅如此,這項技術已推廣到火車、輪船等交通工具中。
1、汽車制造中的應用
應用CAN總線,可以減少車身布線,進一步節(jié)省了成本,由于采用總線技術,模塊之間的信號傳遞僅需要兩條信號線。布線局部化,車上除掉總線外其他所有橫貫車身的線都不再需要了,節(jié)省了布線成本。CAN總線系統(tǒng)數據穩(wěn)定可靠,CAN總線具有線間干擾小、抗干擾能力強的特點。CAN總線專為汽車量身定做,充分考慮到了汽車上惡劣工作環(huán)境,比如點火線圈點火時產生的強大的反充電壓,電渦流緩沖器切斷時產生的浪涌電流及汽車發(fā)動機倉100℃左右的高溫。
2、大型儀器設備中的應用
大型儀器設備是一種參照一定步驟對多種信息采集、處理、控制、輸出等操作的復雜系統(tǒng)。過去這類儀器設備的電子系統(tǒng)往往是在結構和成本方面占據相當大的部分,而且可靠性不高。采用CAN總線技術后,在這方面有了明顯改觀。
3、工業(yè)控制中的應用
隨著計算機技術、通信技術和控制技術的發(fā)展,傳統(tǒng)的工業(yè)控制領域正經歷著一場前所未有的變革,而工業(yè)控制的網絡化,更拓展了工業(yè)控制領域的發(fā)展空間,帶來新的發(fā)展機遇。在廣泛的工業(yè)領域,CAN總線可作為現場設備級的通信總線,而且與其他的總線相比,具有很高的可靠性和性能價格比。這將是CAN技術開發(fā)應用的一個主要的方向。
跪求!DSP 2812 的CAN的發(fā)送和接受程序
這是我從書上拷下來的程序,我自己試過是可以的,就是CAN的自測試,有發(fā)送和接收,你可以仿照著根據自己想要的結果來改。端口隨便定義就行了。不知道符不符合你的要求。/**************************************************************************
**功能描述: ECAN自測試程序,CAN模塊工作在自測試模式。MBX0發(fā)送到MBX16***
**MBX1發(fā)送到MBX17。該程序不停地高速背靠背傳輸數據,檢查接數據的正確性**
**************************************************************************/
#include "DSP28_Device.h"
void mailbox_check(int32 T1, int32 T2, int32 T3);
void mailbox_read(int16 i);
////////////////////////////////////
Uint32 ErrorCount = 0;
Uint32 MessageReceivedCount = 0;
Uint32 TestMbox1 = 0;
Uint32 TestMbox2 = 0;
Uint32 TestMbox3 = 0;
void CAN_INIT()
{
struct ECAN_REGS ECanaShadow;
EALLOW;
GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6 = 1; // 設置GPIOF6為CANTX
GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7 = 1; // 設置GPIOF7為CANRX
EDIS;
/*eCAN 控制寄存器需要32位訪問。如果想向一個單獨位進行寫操作,編譯器可能會使其進入16位訪問。這兒引用了一種解決方法,就是用影子寄存器迫使進行32位訪問。 把整個寄存器讀入一個影子寄存器。 這個訪問將是32位的。用32位寫操作改變需要改的位,然后把該值拷貝回eCAN寄存器*/
EALLOW;
ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all; // 把CANTIOC讀入影子寄存器
ECanaShadow.CANTIOC.bit.TXFUNC = 1; // 外部引腳I/O使能標志位。
// TXFUNC=1 CANTX引腳被用于CAN發(fā)送功能。
// TXFUNC=0 CANTX引腳被作為通用I/O引腳被使用
ECanaRegs.CANTIOC.all = ECanaShadow.CANTIOC.all; // 把配置好的寄存器值回寫
ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all; // 把CANRIOC讀影子寄存器
ECanaShadow.CANRIOC.bit.RXFUNC = 1; // 外部引腳I/O使能標志位。
// RXFUNC=1 CANRX引腳被用于CAN接收功能。
// RXFUNC=0 CANRX引腳被作為通用I/O引腳被使用。
ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all; // 把配置好的寄存器值回寫
EDIS;
// 在配置郵箱ID值之前,CANME對應的位必須復位,
// 如果CANME寄存器中對應的位被置位,則ID寫入操作無效。
ECanaRegs.CANME.all = 0; // 復位所有的郵箱
ECanaMboxes.MBOX0.MID.all = 0x9555AAA0; // 配置發(fā)送郵箱0的ID:擴展標識符29位
ECanaMboxes.MBOX1.MID.all = 0x9555AAA1; // 配置發(fā)送郵箱1的ID:擴展標識符29位
ECanaMboxes.MBOX16.MID.all = 0x9555AAA0; // 確定接收郵箱16的ID
ECanaMboxes.MBOX17.MID.all = 0x9555AAA1; // 確定接收郵箱17的ID
// 把郵箱0~15 配置為發(fā)送郵箱 , 把郵箱16~31 配置為接收郵箱
ECanaRegs.CANMD.all = 0xFFFF0000;
ECanaRegs.CANME.all = 0xFFFFFFFF; // CAN模塊使能對應的郵箱,
ECanaMboxes.MBOX0.MCF.bit.DLC = 8;
ECanaMboxes.MBOX1.MCF.bit.DLC = 8; // 把發(fā)送,接收數據的長度定義為8位
ECanaMboxes.MBOX0.MCF.bit.RTR = 0; // 無遠程幀請求
// 因為RTR位在復位后狀態(tài)不定,因此在程序進行初始化的時候必須對該位賦值。
ECanaMboxes.MBOX1.MCF.bit.RTR = 0;
// 把待發(fā)送的數據寫入發(fā)送郵箱
ECanaMboxes.MBOX0.MDRL.all = 0x00112233;
ECanaMboxes.MBOX0.MDRH.all = 0x44556677;
ECanaMboxes.MBOX1.MDRL.all = 0x8899AABB;
ECanaMboxes.MBOX1.MDRH.all = 0xCCDDEEFF;
EALLOW;
// 郵箱中斷屏蔽寄存器。上電后所有的中斷屏蔽位都清零且停止中斷使能。
// 這些位允許獨立屏蔽任何郵箱中斷。
ECanaRegs.CANMIM.all = 0xFFFFFFFF;
// CANMIM .BIT.X=1 郵箱中斷被使能(X=1~31)
// CANMIM .BIT.X=0 郵箱中斷被禁止(X=1~31)
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; // 把CANMC讀入影子寄存器
ECanaShadow.CANMC.bit.CCR = 1; // 改變配置請求位
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; // 把配置好的寄存器值回寫
EDIS;
/*CPU要求對配置寄存器CANBTC和SCC的接收屏蔽寄存器(CANGAM,LAM[0]和LAM[3])進行寫操作。對該位置位后,CPU必須等待,直到CANES寄存器的CCE標志位在送入CANBTC寄存器之前為1 */
do
{
ECanaShadow.CANES.all = ECanaRegs.CANES.all;
} while(ECanaShadow.CANES.bit.CCE != 1 ); // 當CCE=1時可以對CANBTC進行操作。
// 配置波特率
EALLOW;
ECanaShadow.CANBTC.all = ECanaRegs.CANBTC.all; // 把CANBTC讀入影子寄存器
ECanaShadow.CANBTC.bit.BRP = 149; // (BRP+1)=150, 最小時間單位TQ=1us
ECanaShadow.CANBTC.bit.TSEG2 = 2; // 位定時bit-time=(TSEG1+1)+(TSEG1+1)+1
ECanaShadow.CANBTC.bit.TSEG1 = 3; // bit-time=8us, 所以波特率為125Kpbs
ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all; // 把配置好的寄存器值回寫
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; // 把CANMC讀入影子寄存器
ECanaShadow.CANMC.bit.CCR = 0 ; // 設置CCR=0, CPU請求正常模式
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; // 把配置好的寄存器值回寫
EDIS;
do
{
ECanaShadow.CANES.all = ECanaRegs.CANES.all;
} while(ECanaShadow.CANES.bit.CCE != 0 ); // 等待 CCE 位被清零
// 配置eCAN為自測試模式,使能eCAN的增強特性
EALLOW;
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.STM = 1; // 配置CAN 為自測試模式
// CANMC.bit.STM=0,正常模式,CANMC.bit.STM=1,自測試模式
ECanaShadow.CANMC.bit.SCM = 1; // 選擇HECC工作模式
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
EDIS;
}
void main(void)
{
Uint16 j;
InitSysCtrl(); // 系統(tǒng)初始化程序,該子程序在DSP28_sysctrl.c中
DINT; // 關閉總中斷
IER = 0x0000; // 關閉外設中斷
IFR = 0x0000; // 請中斷標志
CAN_INIT();
// 開始循環(huán)發(fā)送數據
while(1)
{
ECanaRegs.CANTRS.all = 0x00000003;
while(ECanaRegs.CANTA.all != 0x00000003 ) {};
ECanaRegs.CANTA.all = 0x0000FFFF;
MessageReceivedCount++;
for(j = 0; j<32;)
{
mailbox_read(j); // 把郵箱j(j=0~31)的數據讀出來
j++;
// mailbox_check(TestMbox1,TestMbox2,TestMbox3); // 測試程序是否正確
}
}
}
// 該函數讀出郵箱序號(MBXnbr)指示的郵箱內容.
void mailbox_read(int16 MBXnbr)
{
volatile struct MBOX *Mailbox;
Mailbox = &ECanaMboxes.MBOX0 + MBXnbr;
TestMbox1 = Mailbox->MDRL.all; // 讀出當前郵箱數據低4字節(jié)
TestMbox2 = Mailbox->MDRH.all; // 讀出當前郵箱數據高4字節(jié)
TestMbox3 = Mailbox->MID.all; // 讀出當前郵箱ID
}
// 接收郵箱MBX的 MID作為MDRL 數據傳輸data
void mailbox_check(int32 T1,int32 T2,int32 T3)
{
if((T1 != T3) || ( T2 != 0x89ABCDEF))
ErrorCount++;
}
以上就是關于CAN模塊發(fā)送流程相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內容。
推薦閱讀: