无线传感组网技术
扫描二维码
随时随地手机看文章
【整体设计概述】:
主要是设计一套无线传输设备产品,负责压力、温度、液位、角度、速度值的传输与处理。
输入是4-20mA的标准电流信号,所要设计的产品把这种模拟信号转换成数字信号,并处理成相应的标准数值,通过无线传输把其发送至PLC的CAN总线上。
采用先进安全的无线射频技术,无线射频技术(RF)是一种可通过无线电讯号识别特定目标并读写相关数据,而无需通过在系统与特定目标之间建立机械或光学接触来识别信号的通信技术。射频识别技术是一项利用射频信号通过空间耦合(交变磁场或电磁场)实现无接触信息传递并通过所传递的信息达到识别目的的技术。本产品就是利用这种先进的技术实行数据传输。
传输协议采用自主研发的传输协议,可靠性高,经加密处理,可以防止数据被监听。
【系统流程图】:
【原理设计说明】:
本产品主要是由ATMEGA16L单片机、CAN控制器SJA1000、CAN收发器TJA1050、VM1100M无线模块、LM2596-5、AS1117-3.3稳压电源以及一些基本的外围电路构成。
1、电源部分
本产品外接电源采用DC+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为电源灯,当电源正常接通时,该灯会长亮。
中间的D2灯为CAN数据发送指示灯,该灯有两个功能:
(1)、该灯闪烁代表CAN数据正在发送。
(2)、灯的闪烁频率代表CAN数据上报的频率。
最后一个指示灯闪烁表示给节点下发频点。
【部分原理图】:
CC1101RF电路 SJA1000CAN电路 mega16MCU电路
【主要程序文件】:
//******************************SJA1000初始化***********************************
void SJA1000_Init(void)
{
uchar i,a,b,i_temp=0,TempData,j_temp=0;
CLI();
SJA100HardWareRest(); //硬件复位
//Read_SJA1000(CAN_IR); //读中断寄存器,清除中断位
SJAEntryResetMode(); //进入复位模式
DelayUs(5);
SR_status = Read_SJA1000(CAN_SR); //读状态
//进入Pelican模式
Write_SJA1000(CAN_CDR,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,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:
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(CAN_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); //读状态
//Write_SJA1000(CAN_TXB+4,ID3); //配置发送缓冲区的ID3-
// Write_SJA1000(CAN_IER,0x01); //配置SJA10000中断-错误报警/发送/接收中断 0x07
Write_SJA1000(CAN_IER,0x81); //使能SJA1000接收中断位,和总线错误中断位
SEI();
}
//******************************SJA1000发送程序*********************************
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_SJA1000(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.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_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]);
// 启动发送
Write_SJA1000(CAN_CMR,0x01);//使能发送请求,发送数据。(0x03,单次发送,有错误不重新发送;0x01发送请求命令,当错误时可重发;0x10产生一次自接收性质的报文发送)
SEI();
DataText[7]=0x00;
while((canstatus&0x08) ==0) // 检测是否发送完毕
{
canstatus = Read_SJA1000(CAN_SR); //读状态
}
LEDSysMode = 1;
}
【总结】:
本系统主要是RF无线和CAN总线两大块,功能都能实现。部分代码如上所示,若网友希望进一步了解,可以站内信联系。