无线识别装置001.docx
《无线识别装置001.docx》由会员分享,可在线阅读,更多相关《无线识别装置001.docx(16页珍藏版)》请在冰点文库上搜索。
![无线识别装置001.docx](https://file1.bingdoc.com/fileroot1/2023-5/16/95dadb23-a415-4310-b1e0-af2bbd15ee51/95dadb23-a415-4310-b1e0-af2bbd15ee511.gif)
无线识别装置001
无线识别装置系统(B题)
作者:
李勤勇刘玺李建龙
指导老师:
邓彬伟
摘要
本系统在阅读器和应答器两方都采用了低功耗单片机MSP430对数据进行编码和解码。
在应答器方,拨码开关产生的数据经过MSP430编码后由UART1的TX端口发送到发射头的信号输入端;发射头以高频发射C1815为核心,采用ASK调制方式把编码信息通过耦合线圈发射出去。
在阅读器方,阅读器耦合线圈把从应答器耦合线圈感应到的信号通过9014解调后送LM3558进行整形放大,放大后的信号,通过MSP430单片机UART1的RX端口把数据输入单片机进行解码并显示。
本系统具有能同时达到高识别率、短响应时间和大距离通信。
Abstract
Thesystemresponseinthereader-andthetwosideshaveadoptedalow-powerMCUMSP430dataencodinganddecoding.Intransponderside,switchingcodeforthedataaftertheMSP430codingTXportsbyUART1thefirstsenttothelaunchofsignalinputterminal;thefirsttolaunchhigh-frequencyemissionC1815atthecore,usingASKmodulationcodinginformationthroughthecouplingcoillaunchingout.Thereaderside,thereadercouplingcoilfromthetranspondercoilsensorscoupledtothesignalthrough9014demodulationevacuationLM3558shapingamplification,thesignalafteramplification,throughMSP430UART1theRX-portinputdataontothesinglechipMachinedecodeanddisplay.Thissystemiscapableofsimultaneouslyachievehighrecognitionrate,shortresponsetimeandthedistancecommunications.
一、方案论证与比较
1.调制方式和载波频率的选择与论证
方案一:
采用PSK调制方式调制。
这种调制方式的信号在信道上传输时,抗干扰能力强,但是其调制、解调的设备很复杂,也很昂贵,成本较高,故不采用。
方案二:
采用FSK调制方式调制。
这种调制方式的信号在信道上传输时,与ASK、PSK方式相比,抗干扰能力居中,比ASK强,比PSK弱;设备复杂程度也较大,故不采用此方案。
方案三:
综合以上两种方案,虽然ASK调制方式的抗干扰能力差,但由于信号采用近距离线圈耦合传输方式,而且结构简单,较容易实现,功耗低,故采用ASK调制方式。
根据实验验证,我们选取6.00MHz作为载波频率。
信号通过线圈耦合传输性能好。
2.编码与解码电路的选择与论证
方案一:
采用专用的4位数据编码、解码集成电路。
该电路较容易实现,价格便宜;但考虑到它可能是专用的识别芯片,我们不采用。
方案二:
采用单片机作为编码、解码电路。
根据题目要求可知,应答器端应采用低功耗的单片机作为编码电路,我们选取MSP430。
解码单片机也选取MSP430。
二、系统总体方安设计
我们设计的无线收发装置系统的总体方框图和主要流程图如下图B-1,B-2所示.
图B-1总体方框图
这里我们对调制,耦合,解调电路的工作原理说明如下:
调制、解调电路采用的是ASK调制方式即振幅键控方式。
这种调制方式是根据信号的不同,调节正弦波的幅度
载波在数字信号1或0的控制下通或断,在信号为1的状态载波接通,此时传输信道上有载波出现;在信号为0的状态下,载波被关断,此时传输信道上无载波传送。
那么在接收端我们就可以根据载波的有无还原出数字信号的1和0。
对于二进制幅度键控信号的频带宽度为二进制基带信号宽度的两倍。
中间采用高频耦合电路,具有选频作用,能够很准确的将载波信号送到阅读器。
三、主要单元电路设计
1.应答器电路分析及设计计算
图B-3
本单元电路由中心频率
=6.00MHz振荡器和LC选频网络组成,实现对数字信号的幅度调制。
调制信号从线圈耦合给阅读器,实现信号的无线传输。
令LC网络的选频频率
=1/(
)=
,我们实际测量耦合线圈的电感值约为12uH,得出
50P,故选取51P的电容实现匹配。
2.阅读器电路分析及设计计算
图B-4
阅读器接收装置由LC串联谐振网络、滤波电路、波形放大整形电路构成,从而实现对信号的解调。
LC串联谐振频率
=1/(
),要实现对耦合信号的最佳接收,必须实现线圈的耦合匹配,即
=
。
计算可得
=50P,故选取51P的电容实现线圈耦合匹配。
3.无电池下应答器的工作原理
阅读器向应答器发一组固定频率的电磁波,应答器内有LC串联谐振电路,其频率与阅读器发射频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有—个单向导通的电子泵,将电容内的电荷送到另—个电容内储存,当所积累的电荷达到2V时,此电容可做为电源为其它电路提供工作电压,将应答器的数据发射出去或接取阅读器的数据
四、系统的软件设计
本系统的软件部分分应答器编码和串口发送及阅读器解码、显示。
由于整个系统功能较少,只有键识别和串口发送部分,单片机资源使用少,而MSP430作为十六位处理器运行速度快,CPU有大量时间空闲,所以拨码开关数据采集使用循环方式,具有程序设计方便,便于调试等特点。
串行发送使用MSP430单片机的UART1串口收发模块,其波特率设为1200bps,由系统的数据传输量小,为保证很好的识别率和正确率,所以选用了1200bps传输速率。
采用串口来发送和接收,可利用串口的硬件特点:
来保证在数据的正确率,或在此基础上进行相应处理则可以达到较好的抗干扰能力。
使用I/O模拟时序实现协议来收发程序,具有收发可控,使用只有I/O口的低功耗单片机如MSP430F2121可实现更低功耗,但实现起来较复杂。
因而选择了基于硬件的串行通讯来做为发送和接收硬件协议部分。
I/O显示程序:
由于I/O口引脚有冗余,我们用一I/O的高低电平来控制一个显示灯。
便于调试和程序编写。
软件设计流程图如下图B-5所示:
图B-5
五、系统的测试方法与测试结果
1.测试仪器:
秒表,直尺,示波器
2.识别率测试
测试方法:
固定阅读器,在其前方Xcm处划一刻度。
将应答器从侧面水平匀速移至.此刻度附近,当两线圈正对时,记录实验结果。
实验数据如表B-1-1所示:
表B-1-1
次数
距离
1
2
3
4
5
6
7
8
9
10
5cm
√
√
√
√
√
√
√
√
√
√
15cm
√
√
√
√
√
√
√
√
√
√
√表示能识别,×表示没有识别
由上表可知,系统的识别率在5cm-达100%。
3.编码识别率测试
测试方法与识别率测试相同。
实验数据如表B-1-2所示:
表B-1-2
次数
编码
1
2
3
4
5
6
7
8
9
10
0000
√
√
×
√
√
√
√
√
√
√
0001
√
√
√
√
√
×
√
√
√
√
0110
√
√
√
×
√
√
√
√
√
√
0011
√
×
√
√
√
√
√
√
√
√
0111
×
√
√
×
√
√
√
√
√
√
1000
√
√
√
√
√
√
√
√
√
×
1001
√
√
√
√
×
√
√
×
√
√
1111
√
√
√
√
√
√
√
√
√
√
√表示正确识别,×表示错误识别。
根据实验结果可知,识别正确率均达到80%以上,达到题所要求的指标。
误码率测试结果分析:
误码率和编码发送数据有关,编码为0000的误码率最高,编码为1111,的误码率最低,同时在2组编码中,1的个数相同的情况下1位于首位出比位于中间处的误码率低,例:
编码1001的误码率低于0110
误码率和应答器的移动速率成正比.相同应答编码时,移动速度快的应答器产生的误码率较大..
误码率和阅读器的功率成反比,当加大阅读器的功率后,误码率会有所下降,但不明显.
误码率和应答器接近阅读器的方向没有太大关系,只要最后应答器的线圈和阅读器的线圈正对即可.
附录
/***************************************************************
基于msp430x16x单片机的发送程序。
函数功能:
通过串口发送从I/O采集来的数据。
调用函数:
PortInit();serialinit();
完成日期:
2007.9.5
****************************************************************/
#include"serial.h"
#include"Port_1.h"
chari,j;
voidmain()
{
unsignedchargetch;
unsignedcharputch;//发送拨号值,4位的是,发两个相同的4位,拼成8位
WDTCTL=WDTPW+WDTHOLD;
PortInit();
serialinit();
j=0;
putch=0;
while
(1)
{
if((P1IN&BIT0)!
=BIT0)putch=0;//P2OUT|=BIT0
elseputch=1;//P2OUT&=~BIT0;
delay(15);
if((P1IN&BIT1)!
=BIT1)putch=putch;//P2OUT|=BIT0
elseputch=putch+2;//P2OUT&=~BIT0;
delay(15);
if((P1IN&BIT2)!
=BIT2)putch=putch;//P2OUT|=BIT0;
elseputch=putch+4;//P2OUT&=~BIT0;
delay(15);
if((P1IN&BIT3)!
=BIT3)putch=putch;//P2OUT|=BIT0;
elseputch=putch+8;//;P2OUT&=~BIT0;
delay(15);
putch=putch*16+putch;
delay(500);
putch=0;//发送完后重新设为0
}
}
/***************************************************************
基于msp430x16x单片机的接收程序。
函数功能:
通过串口接收数据,并在串口上显示出来。
调用函数:
PortInit();serialinit();
完成日期:
2007.9.5
****************************************************************/
#include"serial.h"
#include"Port_1.h"
#include"msp430x16x.h"
chari;
voidmain()
{
unsignedchargetch,temp;
unsignedintj=0;
WDTCTL=WDTPW+WDTHOLD;
PortInit();serialinit();
P1OUT=0xff;
delay(17);
while
(1)
{P1DIR=0Xff;
if(GetCommChar(&getch)==1)
{
if(getch==0)
{
temp=0xcf;//有信号无编码,P1.0-P1.3对应码的1,2,3,4,P1.4黄灯(应答灯),P1.5是红灯(亮表示无编码)
}
else{
temp=getch&0x0f;
temp=(~temp)&0xdf;
}
P1OUT=temp;
}
j++;
if(j>=4000)//确保应答器离开
{
P1OUT=0xff;
j=0;
}
}
}
/***************************************************************
基于msp430x16x单片机I/O口初始化程序
函数名称:
voidPortInit(void)
函数功能:
初始化I/O口
调用函数:
无
入口参数:
无
出口参数:
无
完成日期:
2007.9.5
****************************************************************/
#include"msp430x16x.h"
#include"Port_1.h"
voidPortInit(void)
{
P1SEL=0X00;
P1DIR=0X00;
}
/***************************************************************
基于msp430x16x单片机初始化程序
函数名称:
voiddelay(unsignedintv)
函数功能:
延时
调用函数:
无
入口参数:
unsignedintv
出口参数:
无
完成日期:
2007.9.5
****************************************************************/
voiddelay(unsignedintv)
{
while(v--!
=0);
}
/****************************************************************
针对MSP430F169-MPS430-TEST16X外部时钟为32768HZ,
所以只有选ACLK,所以只能选SSEL0
而9600为最高UART的速度(要快需换8MHZOSC)
******************************************************************/
#include"msp430x16x.h"//StandardEquations
#include"in430.h"
#include"serial.h"
volatilecharFLAG=0;
charCommRecDataOverflowFlag,FlagRecComm;
unsignedcharCommRecBufferHead,CommRecBufferTail;
unsignedcharCommRecBuffer[DB_RECMAXSIZE];
unsignedchargetch;
charcount=0;
voidserialinit(void)
{
ClearCommRecBuffer();
P5SEL=0x00;
P5DIR|=0x20;
P5OUT|=0x20;
P3SEL=0xC0;
P3DIR=0x40;
UCTL1&=~SWRST;
UCTL1|=CHAR;//8-bitchar,SWRST=1
UTCTL1|=SSEL0;//UCLK=SMCLK
UBR01=0x1b;//1200//0x0d;//;24000x03;//9600
UBR11=0x00;
UMCTL1=0x03;//0x6b;//;0x4A;
ME2|=UTXE1+URXE1;//EnabledUART1TXD
IE2=URXIE1;//Enableinterrupts
_EINT();
}
#pragmavector=UART1TX_VECTOR
__interruptvoiduartT1(void)
{
if((UTCTL1&TXEPT)==TXEPT)
{
U1TXBUF=0x55;
}
}
#pragmavector=UART1RX_VECTOR
__interruptvoiduartR1(void)
{
if(CommRecBufferTail==CommRecBufferHead)
{
CommRecDataOverflowFlag=1;//接收缓冲区溢出
}
CommRecBuffer[CommRecBufferTail]=U1RXBUF;//receivedata
CommRecBufferTail++;
if(CommRecBufferTail==DB_RECMAXSIZE)
{
CommRecBufferTail=0;
}
FlagRecComm=1;
}
charGetCommChar(unsignedchar*ch)
{
if(CommRecBufferTail==CommRecBufferHead)return0;
*ch=CommRecBuffer[CommRecBufferHead];
CommRecBufferHead++;
if(CommRecBufferHead==DB_RECMAXSIZE)
{
CommRecBufferHead=0;
}
if(CommRecBufferTail==CommRecBufferHead)FlagRecComm=0;
return1;
}
voidClearCommRecBuffer(void)
{
unsignedchari;
CommRecBufferHead=CommRecBufferTail=0;
for(i=0;i{
CommRecBuffer[i]=0;
}
}