实验4 基于stm32的RFID低频LF实验

实验4 基于stm32的RFID低频LF实验

  • 实验目的
    1. 了解ID卡内部存储结构
    2. 掌握符合ISO  18000-2标准的无源ID卡识别系统的工作原理
    3. 掌握符合ISO  18000-2标准的无源ID卡识别系统的工作流程
    4.  掌握本平台ID模块的操作过程
  • 实验设备

硬件:RFID实验箱套件,电脑等。

软件:Keil,串口调试助手。

  • 实验原理

1 低频RFID系统与ID卡

低频RFID系统读卡器的工作频率范围一般从120KHz到134KHz。该频段的波长大约为2500m,除了金属材料影响外,一般低频能够穿过任意材料的物品而不降低它的读取距离。低频RFID系统使用ID卡,全称为身份识别卡(Identification Card),作为其电子标签。ID卡是一种不可写入的感应卡,其内部唯一存储的数据是一个固定的ID卡编号,其记录内容(卡号)是由芯片生产厂商封卡出厂前一次性写入,封卡后不能更改,开发商只可读出卡号加以利用。ID卡与我们通常使用磁卡一样,仅仅使用了“卡的号码”而已,卡内除了卡号外,无任何保密功能,其“卡号”是公开、裸露的。目前市场上主要有台湾SYRIS的EM、美国HID、TI、MOTOROLA等各类ID卡。本实验平台使用EM系列ID卡,它符合ISO 18000-2标准,工作频率为125KHZ,后续的讲解也围绕这种标签展开。

ID 标签中保存的唯一数据——标签标识符(UID)以 64 位唯一识别符来识别。UID 由标签制造商永久设置,符合 ISO/IEC DTR15693。UID 使每一个标签都拥有唯一、独立的编号。UID 包含(图1.1):

固定的8位分配级“EO”

根据ISO/IEC 7816-6/AM1定义的8位IC制造商代码

由IC制造商指定的唯一48位制造商序列号MSN

 

1.1 UID结构图

 

2 ISO18000-2 标准

实验平台的低频ID模块符合ISO18000-2标准。询问器载波频率为125KHZ。ISO18000-2标准中规定了基本的空中接口的基本标准:

询问器到标签之间的通信采用脉冲间隔编码;

标签与询问器之间通过电感性耦合进行通信,当询问器以标准指令的形式访问标签时载波需加载一个4K位/秒曼彻斯特编码数据信号;

调制采用ASK调制,调制指数100%;

在实际通信系统中,很多系统都不能直接传送基带信号,必须用基带信号对载波波形的某些参量进行控制,是载波的这些参量随基带信号的变化而变化。由于正弦信号形式简单,

便于产生和接收,大多数数字通信系统中都采用正弦信号作为载波,即正弦波调制。数字调制技术是用载波信号的某些离散状态来表示所传送的信息,在接收端也只要对载波信号的离散调制参量进行检测。数字调制方式,一般有振幅键控(ASK)、移频键控(FSK)和移相键控(PSK)三种基本调制方式,如图1.2所示:

 

 

实验4 基于stm32的RFID低频LF实验_第1张图片

1.2 数字调试方式

 

在二进制振幅键控(ASK)方式下,当基带信号的值为1时,载波幅度为u1;当基带信号的值为0时,载波幅度为u2。定义调制系数为  M=(u1-u2)/(u1+u2),当u2为0时,调制系数m=100%。

实验4 基于stm32的RFID低频LF实验_第2张图片

1.3 振幅键控调制

射频工作区的载波频率125KHz

工作频率精度0.1kHz之内;

标签以64位唯一识别符来唯一识别;

更多内容参考ISO 18000-2

 

3 低频RFID系统读卡器

本实验平台使用EM系列ID卡,符合ISO 18000-2标准,工作频率为125KHZ,经读卡器译码后输出其十位十进制卡号。

图1.4是ID卡及其读卡器的工作原理框图,其中上半部分是ID卡的内部组成结构;下半部分是ID读卡器的组成结构。

ID卡的天线与其读卡器的天线之间构成空间耦合“变压器”,读卡器天线作为“变压器”初级线圈向空间发射125KHz的交变电磁场,进入该电磁场的ID卡通过其天线(“变压器”的次级线圈)获取能量,为其内部各功能部件提供工作电压。由于ID卡为只读型RFID卡,读卡器无须向ID卡发送任何数据或指令,一旦ID卡进入读卡器有效的工作区域内,其内部功能部件就开始工作,时序发生器部件控制存储器阵列和数据编码单元将其内部的64位信息调制后按顺序发送给读卡器,其中调制方式为ASK(移幅键控)调制。

 

 

实验4 基于stm32的RFID低频LF实验_第3张图片

图1.4  ID卡及读卡器的组成结构

 

读卡器中的4MHz振荡源经过32分频后得到125kHz的基准频率信号,该频率一方面为读卡器发射125kHz的交变电磁场提供工作时钟,另一方面为读卡器中微控制器解码提供基准时钟.当读卡器的工作区域内没有ID卡时,读卡器的检波电路没有输出,一旦有ID卡进入交变电磁场并将其曼彻斯特编码的数据信息调制后发送出来,读卡器的滤波电路、解调电路、检波电路和整形单元将调制在125kHz频率信号中的采用曼彻斯特编码的数据信息解调还原,微控制器接收到曼彻斯特编码数据信息后利用软件解码,从而读取ID卡的64位数据信息。

ID卡内部的曼彻斯特编码和原始数据信息关系见图1.5。曼彻斯特编码采用下降沿表示‘1’采用上升沿表示‘0’。读卡器的微控制器软件的主要功能就是对从ID卡接收到的曼彻斯特编码进行解码,得到ID卡内部的64位数据信息,然后进行CRC校验,如果校验成功,那么就完成了一次读卡过程。

 

实验4 基于stm32的RFID低频LF实验_第4张图片

1.5 曼彻斯特编码和原始数据信息关系

 

低频RFID系统工作流程如下:

1)   读卡器将载波信号经天线向外发送;

2)   标签中的电感线圈和电容组成的谐振回路接收读卡器发射的载波信号,标签中芯片的射频接口模块由此信号产生出电源电压、复位信号及系统时钟,使芯片“激活”;

3)   标签中的芯片将标签内存储的数据经曼彻斯特编码后,控制调制器上的开关电流调制到载波上,通过标签上天线回送给阅读器;

4)   阅读器对接收到的标签回送信号进行进行ASK解调、解码后就得到了标签的UID号,然后应用系统利用该UID号完成相关的操作。

简述上面的过程,我们可以把低频RFID读卡器的功能减单描述为:读取相关ID卡卡号,并把该卡号发送到应用系统上层,由上层系统完成相关数据信息的处理。由于ID卡卡内无内容,故其卡片持有者的权限、系统功能操作要完全依赖于上层计算机网络平台数据库的支持。

 

  • 实验过程

实验相关的工程代码文件地址:…\配套光盘\源代码\上位机开发\APP\

 

4.1 打开\光盘\源代码\上位机开发\APP工程目录,编译并烧写到实验箱,将实验箱上的UART-STM串口与PC机相连,打开电源, 进入应用主界面,如图1.6所示。点击LF按钮选择低频模块,此时低频模块的电源指示灯会点亮,如图1.7所示。

实验4 基于stm32的RFID低频LF实验_第5张图片

图1.6 应用主界面

实验4 基于stm32的RFID低频LF实验_第6张图片

图1.7 电源指示灯亮

 

4.2 打开串口助手(\光盘\应用程序\串口助手),按图1.8所示信息配置串口参数。

 

实验4 基于stm32的RFID低频LF实验_第7张图片

图 1.8 串口参数配置

4.3 将串口助手软件的发送区选择为十六进制发送,将ID卡置于低频模块区的线圈上方进行读卡操作,串口助手软件将会返回正确信息如图1.9所示。

实验4 基于stm32的RFID低频LF实验_第8张图片

图 1.9 串口返回ID卡号

 

4.4 固件程序功能及源码解析。

在该工程中,STM单片机内的固件程序有两个作用:

      1. RFID模块选择功能。
      2. 上位机和射频模块之间通信数据的转发。

    如电路原理图1.10、1.11所示。STM单片机的PA2和PA3管脚(即UART2)和一个链路选择开关芯片组(实验箱PCB板上标示为SWITCH)相连,然后通过PD12和PD13两路管脚进行链路选择。链路选择示意表如表1所示:

PD12

PD13

通路描述

低电平

低电平

UART2与RXD3TXD3形成通路,单片机与低频模块实现通信。

低电平

高电平

UART2与RXD4TXD4形成通路,单片机与高频模块实现通信。

高电平

低电平

UART2与RXD5TXD5形成通路,单片机与超高频模块实现通信。

高电平

高电平

UART2与RXD6TXD6形成通路,单片机与2.4GHz模块实现通信。

表1

实验4 基于stm32的RFID低频LF实验_第9张图片

图1.10

实验4 基于stm32的RFID低频LF实验_第10张图片

图1.11

代码段代码1描述了如何实现的链路选择。

 

bsp.c

//低频模块选择函数

void LF_Select(void)

{

    uart_init(9600);    //串口1初始化

    uart2_init(9600);   //串口2初始化

    GPIO_ResetBits(GPIOD, GPIO_Pin_13 );  //拉低PD13

    GPIO_ResetBits(GPIOD, GPIO_Pin_12 );  //拉低PD12

}

 

建立了STM的UART2和低频读卡器模块的通路同时,选择链路芯片组为低频模块供电,使其处于主动监听的工作状态,此时只需从UART2端口接收数据并且发送至UART1(与STM_UART相连)最终传送给上位机,这一过程是在中断函数中完成的,代码如下:

Stm32f10x_it.c

/*******************************************************************************

* Function Name  : USART1_IRQHandler

* Description    : This function handles USART1 global interrupt request.

* Input          : None

* Output         : None

* Return         : None

*******************************************************************************/

void USART1_IRQHandler(void)

{

    uint8_t tmp;

    if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)

    {

        tmp = USART_ReceiveData(USART1);

   

        while((USART2 -> SR & 0x40) == 0); //从串口2输出

        USART2 -> DR = tmp;

    }          

   

}

 

/*******************************************************************************

* Function Name  : USART2_IRQHandler

* Description    : This function handles USART2 global interrupt request.

* Input          : None

* Output         : None

* Return         : None

*******************************************************************************/

void USART2_IRQHandler(void)

{

    uint8_t tmp;

    if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)      //判断读寄存器是否非空

    {          

        tmp = USART_ReceiveData(USART2);

 

        while((USART1->SR&0X40)==0);    //从串口1输出 

                                         //循环发送,直到发送完毕  

        USART1->DR = tmp;

    }

}

4.5仔细阅读和理解该工程中的相关代码,理解并联系链路选择芯片组的使用和串口通信管脚的使用。

你可能感兴趣的:(stm32)