125kHzRFID读卡器研究报告书

(此文档为word格式,下载后您可任意编辑修改!)

海南师范大学第六届“挑战杯”作品编号:

大学生课外学术科技作品竞赛

参赛作品

作品题目:125kHz频段下RFID读卡器设计

二〇一三年三月二十日

目录

摘要

本系统使用Freescale半导体公司微控制芯片MC9S12XS128作为Manchester码解码和控制芯片。系统利用分立元件构成125kHz RFID读卡器,用于读取EM4100 ID卡,读卡距离可达5-10cm。

关键字:MC9S12XS128;Manchester码

RFID读卡器;EM4100 ID卡

Abstract

This system use Freescale semiconductor company micro control chip MC9S12XS128 as Manchester code decoding and control chip. System using discrete element composition 125 kHz RFID reader, for reading EM4100ID card, card read distance is up to 5-10 cm.

Key words: MC9S12XS128, Manchester code

RFID reader, EM4100 card

一、引言

射频识别(Radio Frequency Identification, RFID)是利用感应、电磁场或电磁波为传输手段,完成非接触式双向通信,获取相关数据的一种自动识别技术。

射频识别卡最大的优点就在于非接触,因此完成识别工作时无须人工干预,适于实现自动化且不易损坏,可识别高速运动物体并可同时识别多个射频卡,操作快捷方便。目前,射频识别技术己经广泛使用,准备接替目前许多人工完成的工作程序。RFID技术是一个崭新的技术应用领域,它不仅涵盖了射频技术,还包含了射频技术、密码学、通信原理和半导体集成电路技术,是一个多学科综合的新兴学科。因此,对RFID技术的认识和研究具有深远的理论意义。随着21世纪数字化时代的到来,基于远程信息化网络管理技术和移动商务的社会需求,RFID技术智能管理系统将在各个领域中发挥巨大的作用。

RFID 技术正在成为一个新的经济增长点,在全球范围内蔓延开

来,研究开发RFID技术有着巨大的经济效益和社会意义。一个典型的RFID系统一般由RFID标签、读写器以及计算机系统等部分组成。其中RFID标签中一般保存有约定格式的编码数据,用以惟一标识标签所附着的物体。与传统的识别方式相比,RFID技术无需直接接触、无需光学可视、无需人工干预即可完成信息输入和处理,且操作方便快捷。能够广泛应用于生产、物流、交通、运输、医疗、防伪、跟踪、设备和资产管理等需要收集和处理数据的应用领域,并且认为是条形码标签的未来代替品。RFID读卡器系统的工作原理如图1所示。

图1 RFID系统工作原理

读写器通过天线发送出一定频率的射频信号:当RFID标签进入读写器工作场时,其天线产生感应电流,从而RFID标签获得能量被激活并向读写器发出自身编码等信息;读写器接收到来自标签的载波信号,对接收的信号进行解调和解码后送至计算机主机进行处无线通信等。

计算机系统根据逻辑运算判断该标签的合法性,针对不同的设定

做出相应的处理和控制,发出指令信号,RFID标签的数据解调部分从接收到的射频脉冲中解调出数据并送到控制逻辑,控制逻辑接收指令完成存储、发送数据或其他操作。RFID针对常用的接触式识别系统的缺点加以改良,采用射频信号以无线方式传送数据资料,因此识别卡不必与读卡机接触就能读写数据资料。

二、系统电路设计

(一)、125KHz方波发生电路设计

1.125KHZ方波产生方案

方案一:采用555定时器产生125KHZ,占空比为50%的方波。

方案二:对MC9X12XS128单片机编写程序,通过单片机P口输出125KHZ,占空比为50%的方波。

2.方案比较与选择

方案一优点:通过硬件电路产生125KHZ方波,输出方波频率不受

输出电压影响。

方案一缺点:载波发射的原理是125KHZ方波使RLC并联发生谐振从而将载波信号发送出去,555定时器产生的方波频

率不稳定,会影响载波信号的发。

方案二优点:方案简单,易于实现。

方案二缺点:增加了程序的复杂性。

综合考虑,我们选择方案二。

(二)功率放大与检波电路设计

由单片机的P口产生标准125 kHz载波信号,经过限流电阻R1

后送入推挽式连接的三极管功率放大电路,放大后的载波信号通过天线发射出去。天线L1与电容C1构成串联谐振电路,谐振频率为125 kHz,谐振电路的作用是使天线上获得最大的电流,从而产生最大的磁通量,获得更大的读卡距离。检波电路用来去除125 kHz载波信号,还原出有用数据信号。R2,D1,R3,C2构成基本包络检波电路,C3为耦合电容,R4,C4为低通滤波电路,D2,D3为保护二极管,输出接到滤波放大电路。硬件电路如下图所示,

图2 功率放大与检波电路

(三)滤波放大电路

滤波放大电路采用集成运放LM358对检波后的信号进行滤波整形放大,放大后的信号送入单片机的定时/计数器T1的输入捕捉引脚T7口,由单片机对接收到的信号进行解码,从而得到ID卡的卡号。滤波放大电路原理图如下图所示:

图3 滤波放大电路

(四)系统供电电源设计

系统电源模块为控制系统、功率放大与检波电路、滤波放大电路提供5V电源。常用的电源有串联型线性稳压电源(LM2940、7805等)和开关型稳压电源(LM2596、LM2575等)两大类。前者具有纹波小、电路结构简单的优点,但是效率较低,功耗大;后者功耗小,效率高,但电路却比较复杂,电路的纹波大。对于单片机,需要提供稳定的5V电源,由于LM2940的稳压的线性度非常好,所以选用LM2940-5

单独对其进行供电。供电电源原理图如下:

图4 LM2940原理图

(五)控制电路设计

控制电路采用MC9S12XS128单片机,通过T7口的输入捕捉功能扑捉有滤波放大电路送过来的曼彻斯特码,单片机扑捉到曼彻斯特编码后通过软件解码,获取64位卡内信息,通过软件滤除不必要的信息,最终得到8位十进制编码的卡号信息,利用LCD1602显示读取的卡号。控制电路原理图如下:

图 5 控制电路

三、系统软件设计

系统软件设计包括两部分:125 kHz载波的发生和曼彻斯特解码。载波信号产生相对简单,可利用单片机的P口可得到125 kHz的方波。解码软件设计相对较复杂,要对ID卡进行解码,首先应掌握ID卡的存储格式和曼彻斯特编码方式,然后对解码后的数据进行计算。(一) EM4100数据存储格式

图6是EM4100的64位数据信息,它由5个区组成:9个引导位、10个行偶校验位“PO~P9’、4个列偶校验位“PC0~PC3”、40个数据位“D00~D93”和1个停止位S0。9个引导位是出厂时就已掩膜在导位,然后是10组由4个数据位和1个行偶校验位组成的数据串,其次是4个列偶校验位,最后是停止位“0”。“D00~D13”是一个8位的晶体版本号或ID识别码。“D20~D93”是8组32位的芯片信息,

即卡号。

图6 EM4100卡内部数据存储格式

每当EM4100将64个信息位传输完毕后,只要ID卡仍处于读卡器的工作区域内,它将再次按照图3顺序发送64位信息,如此重复,直至ID卡退出读卡器的有效工作区域。

(二) Manchester码编码方式

Manchester编码如图7所示:

图7 Manchester码编码方式

位数据“1”对应着电平下跳,位数据“0”对应着电平上跳。在一串数据传送的数据序列中,两个相邻的位数据传送跳变时间间隔应为1P。若相邻的位数据极性相同(相邻两位均为“0”或“1”),则在两次位数据传送的电平跳变之间,有一次非数据传送的、预备性的(电平)“空跳”。电平的上跳、下跳和空跳是确定位数据传送特征的

判据。在曼彻斯*调制方式下,EM4100每传送一位数据的时间是64个振荡周期,其值由RF/n决定。若载波频率为125 kHz,则每传送一位的时间为振荡周期的64分频,即位传送时间为:1P=64/125 kHz=512μs,则半个周期的时间为256us。

(三)Manchester码解码算法

利用MC9S12XS128单片机进行解码,MC9S12XS128的T口的输入捕捉单元可用于精确捕捉一个外部事件的发生,记录事件发生的时间印记。当一个输入捕捉事件发生时,T口的计数器TCNTl中的计数值被写入输入捕捉寄存器ICRl中,并置位输入捕获标志位ICFl,产生中断申请。可通过设置寄存器TCCRlB的第6位ICESl来设定输入捕捉信号触发方式。本系统利用单片机的输入捕捉功能进行解码。

由Manchester编码特点可知,每位数据都由半个周期的高电平和半个周期的低电平组成,因此可将一个位数据拆分为两位,即位数据“1”可视为“10”,位数据“0”可视为“01”,则64位数据可视为由128位组成。为了获得完整且连续存放的64位ID信息,在此接收两轮完整的64位数据,即接收256位。则上一轮接收到的停止位后紧跟着的必然是本轮接收到的起始位,据此找出起始同步头。再根据曼码特点获得ID卡的有效数据(“10”解码为“1”;“01”解码为“O”)并进行LCR校验,若校验无误,则将ID卡号输出至PC机,并准备下一次的解码;否则,直接准备下一次解码。另外,在程序中首先定义一个数组bit[256]用来存放接收到的数据;定义一个变量用来标记256位数据接收完成;定义一个变量用来标记校验有错误产

生。由于无ID卡靠近读卡器的有效工作区时,单片机输入捕捉引脚输入的是高电平,因此在主程序中先设定为下降沿触发,清零计数器TCNTl,打开T/C1的输入捕捉功能。

解码流程图如下:

图8 解码流程图

解码程序见附录4

四、系统测试

(一)波形测试

利用数字示波器检测各个测试点,波形均输出成功,但数字示波器无法截图,因此我们用虚拟示波器来测量各个点的波形,利用上位机的截图功能,保存各个测试点的截图。

测试点TP1:125KHz波形如下:

测试点TP2:谐振波形如下:

测试点TP3 :Manchester码输出波形如下:

(二)卡片识别测试

测试方法::阅读器固定,应答器与识别器线圈正对,从远处向阅读器方向水平推进,推进速度适中。

测试数据及正确率如下表:

识别率测试结果分析:

测试次数:50 次;识别正确率 100%;识别距离在5-8CM之间,当应答器太近了时,阅读器反而无法识别出应答器。

误码率:测试数据及正确率如下表:

误码率测试结果分析:

误码率和编码发送数据有关,编码为0000 的误码率最高,编码为1111 ,的误码率最低,同时在 2组编码中,1 的个数相同的情况下 1位于首位出比位于中间处的误码率低,例:编码 1001 的误码率低于 0110 。

误码率和应答器的移动速率成正比。相同应答编码时,移动速度快的应答器产生的误码率较大。

误码率和阅读器的功率成反比,当加大阅读器的功率后,误码率会有所下降,但不明显。

误码率和应答器接近阅读器的方向没有太大关系,只要最后应答器的线圈和阅读器的线圈正对即可。

五:总结与不足

本设计硬件电路中功放和检波部分采用分立元件构成,能实现对

EM4100卡的读取。并将八位卡号以十进制数的形式显示在LCD1602显示屏。系统还存在许多不足,曼码输出波形的稳定和清晰度还有待改进,读取卡号的速度和距离还可以进一步提高,本系统对发挥部分的功能尚不能完全完成,对不同卡片刷卡的次数尚不能记录。在以后的学习中我们还要慢慢改进系统设计。

附录1:参考文献

[1] 彭力《无线射频识别(RFID)技术基础》北京航空航天大学出版社,2012

[2] 敖华《基于AVR单片机的125 kHz简易RFID阅读器设计》《现代电子技术》2010年第7期总第318期,2010

[3] 王宜怀、曹金华《嵌入式系统设计实战——基于飞思卡尔S12X 微控制器》北京航空航天大学出版社,2011

附录2:元件清单

MC9S12XS128单片机最小系统 1块

LCD1602液晶 1块

LM2940稳压芯片 4片

LM358集成运算放大器 1片

S8050三极管 1只

S8550三极管 1只

二极管1N4148 3只

电阻:

100R、680R、1K、100K、470K、2.2M

电容

104、472、222、102、103,100uf 附录3:系统电路板PCB截图

滤波放大电路:

供电电源电路:

功率放大与检波电路:

系统控制模块电路:

附录4:系统代码

#include /* common defines and macros */ #include /* derivative information */ #pragma LINK_INFO DERIVATIVE "mc9s12xs128"

#define Max_1bit 201 // 1bit 误差上限值

#define Min_1bit 181 // 1bit 误差下限值

#define Max_halfbit 105 // 1/2bit 误差上限值

#define Min_halfbit 85 // 1/2bit 误差下限值

#define Max_ttbit 297 // 3/2bit 误差上限

#define Min_ttbit 277 // 3/2bit 误差下限

#define Data_length 55 //有效数据长度(64位数据-9位数据头)

#define LCD_RS PORTB_PB4

#define LCD_RW PORTB_PB2

#define LCD_EN PORTB_PB0

#define LCD_DAT PORTA

#define SHD PORTB_PB1

void PLL_Init();

void ECT0_Init();

void Pluse_calculate(); //脉宽计算

void Head_check(); //数据头检测

void M_decode(); //解码

void Data_check(); //数据校验

void Data_processing(); //数据处理(显示或发送到PC)

void ID_recognize();

void delay_ms(unsigned int ms); //延时函数

void write_com(unsigned int com);

void write_date(unsigned int dat);

void Lcd_init();

void Display_init();

void Write_string(unsigned char x,unsigned char y,unsigned char *s);

void Write_char(unsigned char x,unsigned char y,unsigned char dat);

int mmm=0;

int mmmm=0;

int s;

int t;

int ii=0;

int xx=0;

int D2,D3,D4,D5,D6,D7,D8,D9; //存放解码后的十进制

int Times_1=0;

int Times_2=0;

int Times_3=0;

unsigned char i=0;

unsigned char Head_start=0; //数据头标志位

unsigned char Decode_error=0; //出错标志位

unsigned char Decode_over=0; //解码完成标志位

unsigned char Decode_success=0; //解码成功标志位

unsigned char Data_char[8]={'a','b','c','d','e','f','g','h'}; //存放解码后的十六进制字符

unsigned char Input_Num=0; //记录进入中断次数,偶数记录上升沿时间,奇数记录下降沿时间

相关文档
最新文档