無線傳感組網(wǎng)技術(shù)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
【整體設(shè)計(jì)概述】:
主要是設(shè)計(jì)一套無線傳輸設(shè)備產(chǎn)品,負(fù)責(zé)壓力、溫度、液位、角度、速度值的傳輸與處理。
輸入是4-20mA的標(biāo)準(zhǔn)電流信號,所要設(shè)計(jì)的產(chǎn)品把這種模擬信號轉(zhuǎn)換成數(shù)字信號,并處理成相應(yīng)的標(biāo)準(zhǔn)數(shù)值,通過無線傳輸把其發(fā)送至PLC的CAN總線上。
采用先進(jìn)安全的無線射頻技術(shù),無線射頻技術(shù)(RF)是一種可通過無線電訊號識別特定目標(biāo)并讀寫相關(guān)數(shù)據(jù),而無需通過在系統(tǒng)與特定目標(biāo)之間建立機(jī)械或光學(xué)接觸來識別信號的通信技術(shù)。射頻識別技術(shù)是一項(xiàng)利用射頻信號通過空間耦合(交變磁場或電磁場)實(shí)現(xiàn)無接觸信息傳遞并通過所傳遞的信息達(dá)到識別目的的技術(shù)。本產(chǎn)品就是利用這種先進(jìn)的技術(shù)實(shí)行數(shù)據(jù)傳輸。
傳輸協(xié)議采用自主研發(fā)的傳輸協(xié)議,可靠性高,經(jīng)加密處理,可以防止數(shù)據(jù)被監(jiān)聽。
【系統(tǒng)流程圖】:
【原理設(shè)計(jì)說明】:
本產(chǎn)品主要是由ATMEGA16L單片機(jī)、CAN控制器SJA1000、CAN收發(fā)器TJA1050、VM1100M無線模塊、LM2596-5、AS1117-3.3穩(wěn)壓電源以及一些基本的外圍電路構(gòu)成。
1、電源部分
本產(chǎn)品外接電源采用DC+24V供電,通過LM2596-5到5.0V,AS1117-3.3穩(wěn)壓電源至3.3V達(dá)到各部分所需供電電壓。
2、CAN發(fā)送接收
通過ATMEGA16L單片機(jī)發(fā)送給CAN控制器SJA1000,經(jīng)過TJA1050收發(fā)器發(fā)送到CAN總線上。
3、各數(shù)據(jù)無線發(fā)送
各無線數(shù)據(jù)通過VM1100M無線模塊433MHZ頻段將無線數(shù)據(jù)傳送至無線收發(fā)控制器。
【功能說明書】:
1、寫入串口ID功能
連接硬件學(xué)碼設(shè)備,打開串口ID下載器,打開串口,填入需下載的ID號,點(diǎn)擊“寫入”,會顯示“下載成功”。
2、指示燈狀態(tài)功能
左起第一個(gè)紅燈D1為電源燈,當(dāng)電源正常接通時(shí),該燈會長亮。
中間的D2燈為CAN數(shù)據(jù)發(fā)送指示燈,該燈有兩個(gè)功能:
(1)、該燈閃爍代表CAN數(shù)據(jù)正在發(fā)送。
(2)、燈的閃爍頻率代表CAN數(shù)據(jù)上報(bào)的頻率。
最后一個(gè)指示燈閃爍表示給節(jié)點(diǎn)下發(fā)頻點(diǎn)。
【部分原理圖】:
CC1101RF電路 SJA1000CAN電路 mega16MCU電路
【主要程序文件】:
//******************************SJA1000初始化***********************************
void SJA1000_Init(void)
{
uchar i,a,b,i_temp=0,TempData,j_temp=0;
CLI();
SJA100HardWareRest(); //硬件復(fù)位
//Read_SJA1000(CAN_IR); //讀中斷寄存器,清除中斷位
SJAEntryResetMode(); //進(jìn)入復(fù)位模式
DelayUs(5);
SR_status = Read_SJA1000(CAN_SR); //讀狀態(tài)
//進(jìn)入Pelican模式
Write_SJA1000(CAN_CDR,0xc0); //選擇Pelican模式,CBP=1,激活RX0; 關(guān)閉TX1中斷與時(shí)鐘輸出。
SR_status = Read_SJA1000(CAN_SR); //讀狀態(tài)
DelayUs(5);
//自檢模式,自發(fā)自收檢測
//Write_SJA1000(CAN_MOD,0x04); //配置模式寄存器,雙濾波,自發(fā)自收
//接收所有報(bào)文
Write_SJA1000(CAN_AMR0,0xff); //配置驗(yàn)收屏蔽AMR0=0FFH
Write_SJA1000(CAN_AMR1,0xff); //配置驗(yàn)收屏蔽AMR1=0FFH
Write_SJA1000(CAN_AMR2,0xff); //配置驗(yàn)收屏蔽AMR2=0FFH
Write_SJA1000(CAN_AMR3,0xff); //配置驗(yàn)收屏蔽AMR3=0FFH
Write_SJA1000(CAN_ACR0,0x00); //配置驗(yàn)收代碼ACR1=0:
Write_SJA1000(CAN_ACR1,0x00); //配置驗(yàn)收代碼ACR1=0:
Write_SJA1000(CAN_ACR2,0x00); //配置驗(yàn)收代碼ACR1=0:
Write_SJA1000(CAN_ACR3,0x00); //配置驗(yàn)收代碼ACR3=0;
Write_SJA1000(CAN_TXERR,0x00);
Write_SJA1000(CAN_RXERR,0x00);
Write_SJA1000(CAN_ECC,0x00);
Write_SJA1000(CAN_RBSA,0x00);
//設(shè)置波特率(16MHZ晶振,125Kb)
Write_SJA1000(CAN_BTR0,0x03); //配置總線定時(shí)--1255kbps 0x6e 03
Write_SJA1000(CAN_BTR1,0x1C); // 0xff af
Write_SJA1000(CAN_OCR,0xaa); //配置輸出控制
Write_SJA1000(CAN_EWLR,0xff); //配置錯(cuò)誤報(bào)警限制為255
Write_SJA1000(CAN_CMR,0x0c); // 清楚數(shù)據(jù)溢出和釋放接收緩沖器
// 退出復(fù)位模式,進(jìn)入工作模式
SJAQuitResetMode();
SR_status = Read_SJA1000(CAN_SR); //讀狀態(tài)
//Write_SJA1000(CAN_TXB+4,ID3); //配置發(fā)送緩沖區(qū)的ID3-
// Write_SJA1000(CAN_IER,0x01); //配置SJA10000中斷-錯(cuò)誤報(bào)警/發(fā)送/接收中斷 0x07
Write_SJA1000(CAN_IER,0x81); //使能SJA1000接收中斷位,和總線錯(cuò)誤中斷位
SEI();
}
//******************************SJA1000發(fā)送程序*********************************
void send_sja1000(void)
{
uchar s,i,canstatus,canstatus1,canstatus2,canstatus3,canstatus4;
//CLI();
canstatus = Read_SJA1000(CAN_SR); //讀狀態(tài)
canstatus1 = Read_SJA1000(CAN_MOD); //讀模式
canstatus2 = Read_SJA1000(15); //TX錯(cuò)誤計(jì)數(shù)
canstatus3 = Read_SJA1000(14); //RX錯(cuò)誤計(jì)數(shù)
canstatus4 = Read_SJA1000(12); //錯(cuò)誤代碼捕捉
for( i=0;i<5;i++ );
{
canstatus = Read_SJA1000(CAN_SR);
}
if((canstatus & 0x0C)== 0x0C) //查詢SJA1000是否處于接收狀態(tài),當(dāng)SJA1000不處于接收狀態(tài)時(shí)才可繼續(xù)執(zhí)行
{ //SR.3=0,發(fā)送請求未處理完,等待直到SR.3=1
goto SJA1000; //SR.2=0,發(fā)送緩沖器被鎖
}
else
{
LEDSysMode = 0;
return;
}
SJA1000:
//發(fā)送數(shù)據(jù)寫進(jìn)發(fā)送緩沖區(qū)中
WriteSJARegBlock(16,Send_CAN_Info_ID,5); //擴(kuò)展幀,向發(fā)送緩沖區(qū)寫入5個(gè)識別碼
Write_SJA1000(21,DataText[0]); //擴(kuò)展幀,向發(fā)送緩沖區(qū)寫入8個(gè)數(shù)據(jù)
Write_SJA1000(22,DataText[1]);
Write_SJA1000(23,DataText[2]);
Write_SJA1000(24,DataText[3]);
Write_SJA1000(25,DataText[4]);
Write_SJA1000(27,DataText[6]);
Write_SJA1000(26,DataText[5]);
Write_SJA1000(28,DataText[7]);
// 啟動發(fā)送
Write_SJA1000(CAN_CMR,0x01);//使能發(fā)送請求,發(fā)送數(shù)據(jù)。(0x03,單次發(fā)送,有錯(cuò)誤不重新發(fā)送;0x01發(fā)送請求命令,當(dāng)錯(cuò)誤時(shí)可重發(fā);0x10產(chǎn)生一次自接收性質(zhì)的報(bào)文發(fā)送)
SEI();
DataText[7]=0x00;
while((canstatus&0x08) ==0) // 檢測是否發(fā)送完畢
{
canstatus = Read_SJA1000(CAN_SR); //讀狀態(tài)
}
LEDSysMode = 1;
}
【總結(jié)】:
本系統(tǒng)主要是RF無線和CAN總線兩大塊,功能都能實(shí)現(xiàn)。部分代碼如上所示,若網(wǎng)友希望進(jìn)一步了解,可以站內(nèi)信聯(lián)系。