1、资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 无线传感组网技术 时间: -07-22 来源: 21ic 作者: zhao3462910 关键字: 无线传感 组网技术 【整体设计概述】: 主要是设计一套无线传输设备产品, 负责压力、 温度、 液位、 角度、 速度值的传输与处理。 输入是4-20mA的标准电流信号, 所要设计的产品把这种模拟信号转换成数字信号, 并处理成相应的标准数值, 经过无线传输把其发送至PLC的CAN总线上。 采用先进安全的无线射频技术, 无线射频技术(RF)是一种可经过无线电讯号识别特定目标并读写相关数据,而无需经过在系统
2、与特定目标之间建立机械或光学接触来识别信号的通信技术。射频识别技术是一项利用射频信号经过空间耦合(交变磁场或电磁场)实现无接触信息传递并经过所传递的信息达到识别目的的技术。本产品就是利用这种先进的技术实行数据传输。 传输协议采用自主研发的传输协议, 可靠性高, 经加密处理, 能够防止数据被监听。 【系统流程图】: 【原理设计说明】: 本产品主要是由ATMEGA16L单片机、 CAN控制器SJA1000、 CAN收发器TJA1050、 VM1100M无线模块、 LM2596-5、 AS1117-3.3稳压电源以及一些基本的外围电路构成。 1、 电源部分 本产品外接电源采用D
3、C+24V供电, 经过LM2596-5到5.0V, AS1117-3.3稳压电源至3.3V达到各部分所需供电电压。 2、 CAN发送接收 经过ATMEGA16L单片机发送给CAN控制器SJA1000, 经过TJA1050收发器发送到CAN总线上。 3、 各数据无线发送 各无线数据经过VM1100M无线模块433MHZ频段将无线数据传送至无线收发控制器。 【功能说明书】: 1、 写入串口ID功能 连接硬件学码设备, 打开串口ID下载器, 打开串口, 填入需下载的ID号, 点击”写入”, 会显示”下载成功”。 2、 指示灯状态功能 左起第一个红灯D1为电源灯, 当电源正常接通时,
4、 该灯会长亮。 中间的D2灯为CAN数据发送指示灯, 该灯有两个功能: (1)、 该灯闪烁代表CAN数据正在发送。 (2)、 灯的闪烁频率代表CAN数据上报的频率。 最后一个指示灯闪烁表示给节点下发频点。 【部分原理图】: CC1101RF电路 SJA1000CAN电路 mega16MCU电路 【主要程序文件】: //******************************SJA1000初始化*********************************** void SJA1000_Init(void) { uchar i,a,b,i_t
5、emp=0,TempData,j_temp=0; CLI(); SJA100HardWareRest(); //硬件复位 //Read_SJA1000(CAN_IR); //读中断寄存器, 清除中断位 SJAEntryResetMode(); //进入复位模式 DelayUs(5); SR_status = Read_SJA1000(CAN_SR); //读状态 //进入Pelican模式 Write_SJA1000(CAN_C
6、DR,0xc0); //选择Pelican模式, CBP=1, 激活RX0; 关闭TX1中断与时钟输出。 SR_status = Read_SJA1000(CAN_SR); //读状态 DelayUs(5); //自检模式, 自发自收检测 //Write_SJA1000(CAN_MOD,0x04); //配置模式寄存器, 双滤波, 自发自收 //接收所有报文 Write_SJA1000(CAN_AMR0,0xff); //配置验收屏蔽AMR0=0FFH Write_SJA1000(CAN_AMR1,
7、0xff); //配置验收屏蔽AMR1=0FFH Write_SJA1000(CAN_AMR2,0xff); //配置验收屏蔽AMR2=0FFH Write_SJA1000(CAN_AMR3,0xff); //配置验收屏蔽AMR3=0FFH Write_SJA1000(CAN_ACR0,0x00); //配置验收代码ACR1=0: Write_SJA1000(CAN_ACR1,0x00); //配置验收代码ACR1=0: Write_SJA1000(CAN_ACR2,0x00); //配置验收代码ACR1=0:
8、 Write_SJA1000(CAN_ACR3,0x00); //配置验收代码ACR3=0; Write_SJA1000(CAN_TXERR,0x00); Write_SJA1000(CAN_RXERR,0x00); Write_SJA1000(CAN_ECC,0x00); Write_SJA1000(CAN_RBSA,0x00); //设置波特率(16MHZ晶振, 125Kb) Write_SJA1000(CAN_BTR0,0x03); //配置总线定时--1255kbps 0x6e 03 Write_SJA1000(CA
9、N_BTR1,0x1C); // 0xff af Write_SJA1000(CAN_OCR,0xaa); //配置输出控制 Write_SJA1000(CAN_EWLR,0xff); //配置错误报警限制为255 Write_SJA1000(CAN_CMR,0x0c); // 清楚数据溢出和释放接收缓冲器 // 退出复位模式, 进入工作模式 SJAQuitResetMode(); SR_status = Read_SJA1000(CAN_SR); //读状态
10、 //Write_SJA1000(CAN_TXB+4,ID3); //配置发送缓冲区的ID3- // Write_SJA1000(CAN_IER,0x01); //配置SJA10000中断-错误报警/发送/接收中断 0x07 Write_SJA1000(CAN_IER,0x81); //使能SJA1000接收中断位,和总线错误中断位 SEI(); } //******************************SJA1000发送程序*********************
11、 void send_sja1000(void) { uchar s,i,canstatus,canstatus1,canstatus2,canstatus3,canstatus4; //CLI(); canstatus = Read_SJA1000(CAN_SR); //读状态 canstatus1 = Read_SJA1000(CAN_MOD); //读模式 canstatus2 = Read_SJA1000(15); //TX错误计数 canstatus3 = Read_SJ
12、A1000(14); //RX错误计数 canstatus4 = Read_SJA1000(12); //错误代码捕捉 for( i=0;i<5;i++ ); { canstatus = Read_SJA1000(CAN_SR); } if((canstatus & 0x0C)== 0x0C) //查询SJA1000是否处于接收状态, 当SJA1000不处于接收状态时才可继续执行 { //SR.3=0,发送请求未处理完, 等待直到SR.
13、3=1 goto SJA1000; //SR.2=0,发送缓冲器被锁 } else { LEDSysMode = 0; return; } SJA1000: //发送数据写进发送缓冲区中 WriteSJARegBlock(16,Send_CAN_Info_ID,5); //扩展帧, 向发送缓冲区写入5个识别码 Write_SJA1000(21,DataText[0]); //扩展帧, 向发送缓冲区写入8个数据 Write_SJ
14、A1000(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]); // 启动发送 Write_SJA1000(CAN_CMR,0x01);//使能发送请求, 发送数据。(0x03,单次发送, 有错误
15、不重新发送; 0x01发送请求命令,当错误时可重发; 0x10产生一次自接收性质的报文发送) SEI(); DataText[7]=0x00; while((canstatus&0x08) ==0) // 检测是否发送完毕 { canstatus = Read_SJA1000(CAN_SR); //读状态 } LEDSysMode = 1; } 【总结】: 本系统主要是RF无线和CAN总线两大块, 功能都能实现。部分代码如上所示, 若网友希望进一步了解, 能够站内信联系。






