用单片机自制一款RFID读卡器
作者:樊文辉
这个制作中RFID读卡器的印制电路板装有集成电路EM4095(b)读卡器,其功能是将RFID标签的数据通过已经安装的电路板上一些SMD元器件传输到ATM18测试板。
也可以用微处理器ATtiny2313制作RFID读卡器,可以随意的从EM4102中读取数据,其中包括从软件下载的数据。这个制作更有趣的部分是向我们展示如何随心所欲的做你自己的RFID标签。我们接着看到如何将传感器连接到标签,并且与读卡器的传感器读卡器建立通信传递数据。这些传感器在电气上是绝缘的并且能在空间自由移动。
一、能量传递
EM41022型号的电子标签的能量获得是需要通过频率为125kHz时的电感耦合来实现的,作者认为这个设备能胜任的,自制RFID标签就不成问题。此外,通过EM4102提供的数据速率不是很高,简单的微型控制器都适用。
下图中电路是用来确定从接收线圈传递来的能力有多大。RFID读卡器适用下列推荐数据:电感L=750μH,直径为0.25mm,线圈匝数为85匝,漆包线直径为0.25mm,线圈直径为50mm。
接收线圈(L1)为95匝、1mH,并联于L1的谐振电容C1调谐与125KHz。发送和接收线圈的位置高于其他元件,且相距20mm。电流和电压的曲线通过调节R测出如下图示。下图(a)是测量电压与电流的函数关系,而下图(b)显示的是传输在负载上功率曲线。三条曲线分别显示调谐于200pF、远大于,远小于200pF的情况,以示失谐情况的影响。下图中可以看到在输出3V电压时它能耦合数十毫瓦的能量。一个ATtiny微型控制器在时钟频率为1MHz,电压为3V的情况下电流大概为2mA;在125kHz的情况下电流是低于O.1mA。因此看起来提供微型控制器运行所需的足够功率不是难题。
RFID集成电路EM4102通过调制读卡器负载来传送ID。每个数据位传递需要占据125kHz载波的64个时钟周期,折合为波特率为1953.125BPS。一个完整的数据包32.768ms内完成传输。使用125kHz信号作为RFID控制器的时钟是可以的。这种自动化确保位时钟与读卡器同步,由于上述时钟的慢摆动,电流消耗是非常低的。也意味着CPU只需要计数64个时钟周期才转移到下一位:这就是对CPU(ATtiny3)进行汇编编程的原因。
下图显示制作的电子标签的完整电路图。通过L1和C1形成的谐振回路提供微型控制器时钟。同时125kHz的AC信号经过二极管整流提供给CPU电源(或功率)。NMOS管T1的导通使谐振电路加上R3负载使振荡幅度减小,并且它通过调制信号实现微型控制器传输数据。但是,信号幅度必须不能过度减少,否则微型控制器因时钟失步而造成出错。
本制作的印制电路板的电路如下图(略)。线圈并联在C1,并且焊接在C1引线脚的两侧相邻近的焊点上。
AVR/GCC)嵌入。读卡器的最佳设计是元器件使用SMD封装,本制作使用C(AVR/GCC)编程并烧录芯片。
读卡器的电路如下下图示,是非常简单的并且很容易手工绘制电路板。但是按翻拍会使制作PCB更简单,装有EM4095的4号板与5号板通过接口K3连接。在电路板上连接点为ANT1和ANT2外接线圈,其电感量为750μH,这并不严格,由于EM4095内部有一个锁相环会自动调节频率。
从RFID标签的数据串是通过EM4095解码]然后以曼彻斯特码流方式传给微型控制器。微型控制器的第一项工作是提取数据位。这项工作是在中断服务程序中实施的,每秒要进行31250中断,(8MHz/256=31250)。1个完整的数据位占16个中断周期见下下图示。(注:一个数据位占64个125kHz/8μS脉冲,即512μS:定时器一个中断间隔为1S/31250=32μS,两者相除512/32=16。可见连续16个低电平则为数据O,连续16个高电平为数据1)。
以上为曼彻斯特码的代码片断。码长测量由接口PIND.4的电平实现:只有输入数据串的位数与原来的位数相同时电平是稳定的。当电平改变时,原有位数添入了一个或者两个半位。根据测量持续时间,一个或者两个半位储存在一个先进先出队列中供后续处理。
解码程序本身占FIFO队列的半位。第一个任务是识别数据包的起始位:为了实现这个目的,程序沿着移位寄存器逐个移动半位直到同步序列被找到。后续的数据串被解码并且在RS232端口输出(19200波特,8N1格式)。不断有新的半位数据到达并且在FIFO队列等待主程序处理,确保没有丢失数据。RFID读卡器能读取任何标准的RFID标签且与EM4102兼容。
二、线圈
RFID读写器与标签都采用最简单的自绕线圈,至少在非常少的数量下,特定规格现成的线圈无法购得。计算此类电感空芯线圈的公式如下:
电感其中d是导线的直径,D是线圈的直径,N是线圈的圈数。
下表的第4列是根据公式计算的电感量,第5列是用电感测量仪实测的电感量,可以看出,后者比前者偏小且不超过10%,实际制作时根据公式计算的值已经足以使用,也可以根据实测电感找出制作参数来。
三、RFID软件
根据时钟速率为125KHz,半个数据位持续32个时钟周期,为了避免复杂的计算,可以使用定时器0的PWM功能。
设置计时器O计数64就溢出,返回O重新计数,(通过软件设置OCROA为64-1=63),并设置了PWM值为50%(软件设置OCROB为32)。定时器0的PWM发生器每到计数值到达32时,可以安插在高至低的跳变(如图8最左边箭头示).也可以安插在低至高的跳变。上图中上面一排是5位曼彻斯特码流值,下右侧标注定时器计数值。
因此,只需通过改变PWM发生器的寄存器堆的一位,我们就可以产生符合曼彻斯特码编码的一个0或1。这一过程在中断服务程序实现。
寄存器IntBit包括了被传输的数据位,并且将IntMail设置为1作为应答,表示确认该位已被接收。主程序只是逐位传输数据及产生校验码,确保系统在一个不稳定的电源电压系统下能稳定工作,将欠压检测阈值设置为1.8V且启动看门狗。
四、数据包和有效载荷
一个完整的数据包,形成如下表所示。
数据包包括9个部分。前导的同步码连续9个1不能出现在数据包的其他地方,因此可以用来识别它的开始。正确的数据位和有效荷载在前同步码的后面。有效载荷由十组4位二进制数或半字节组成。前两个半字节是客户ID后面是8位半字节数据跟随。先发送一个半字节列校验位(每列10个二进制数中有奇数个1为1否则为0),紧随其后的是一个0。所以总的数据包包含9(起始)+10×(4+1)(有效载荷)+4(列校)+1(最后位0)=64bits。每位持续64位的125kHz的时钟周期,所以比特率是1935.125BPS。故一个完整的数据包需要32.768mS传输。
使用此协议的RFID标签,内部含有有8个半字节数据和两个半字节ID码,总共有10位十六进制数字或40位二进制数。这足以传输大量信息。如果需要进一步扩展,也可照此类推。
五、RFID标签的建设和扩展
为了使RFID标签更容易地调整谐振电路,电容器和线圈可以通过插头和插座相接,以便用不同的线圈来替代试用。经验表明,谐振电容的最佳值是理论计算值的110%左右。
因为本制作中RFID标签已经写入用户码,做一个新的RFID标签就需要修改程序重新写入。
在印制电路板上的插头Kl可以用来连接开关、电位器和通过读卡器进行无线访问的其它线圈。
线圈可旋转或移动尽可能实现读标签,同理还可以在高压环境进行电气隔离。在液态物质中线圈操作暂停,在干燥的情况下又可以恢复。
六、动态ID和状态请求
第一个例子,我们认为一个RFID标签可以经过编程在两个ID代码之间进行切换,这个思路可以用来制作来一把RFID钥匙开多把RFID锁。
第一个方案是使用一个开关在两种代码之间来选择。有两种实施办法:遥控改变开关的位置,或通过按钮改变标签的ID。此开关是连接接口B.4(ATtiny13的第3脚)和GND之间的端口。
第二个方案多数字输入量的采集。自从RFID标签使用了微控制器,实现这一目标有很宽范围的选项。设计者必须始终考虑电流消耗,因为标签所有的能量最终均来自传输线圈。一个简单的选项用移位寄存器来实现并行到串行的转换。如下图所示,8个开关的状态串行通过PB4经过K1接口连接到RFID的主板上。
七、带有两个模数转换器的RFID
ATtiny13有两个A/D转换器,设计者可以根据此性能来制作可以无线测量电压的RFID标签。
该软件包中包括实现两路A/D转换的程序,将模拟量转换为8位数字量,并且将这些数字量通过ID代码方式返回至读卡器。A/D转换的参考电压取自ATtiny13的供电的电压,这有一定的好处也有缺点:例如,如果有必要去读取的两个电位器的位置时,它们可以轻易地与ATtiny13的电源连接,滑动片接模拟输入端。其结果是,转换的结果与电源电压无关,被测电压高低只是与电源电压‘比例’在变化:称之为比例转换。所以被测传感器必需与ATtiny13同电源供电。如MMA7260加速度测量传感器。测量两路加速度经过比例转换,结果只与加速度有关而与电源电压无关。如果不是电位器而是独立电源的话,结果就不是这样。这种情况下,用Zener二极管或微型3.3V稳压器用来为微控制器和传感器提供电源稳压。用来测量绝对电压。也就是供应RFID标签的电压等于A/D转换参考电压,此电压一定要大于3.3V或更高。这就取决于标签与读卡器的距离。还有另一种设计方案是使用如LM385低功耗参考电压源(如2.5伏)给一路A/D转换器输入,另一路则是被测电压的比例转换,并以此来校准电源电压的影响。经过精确的测量和校准,然后才能算出被测电压。
八、RFID温度传感器
Dallas/MaximDS1820的温度传感器通过它的单总线接口的连接。这个接口很容易在软件中实现,尽管它速度相对缓慢。当访问DS1820的温度传感器时,RFID标签中的微控制器必须停止对读卡器的响应。
这对读卡器来说不是问题,因为它发送起始码期间通常需要等待片刻,经过与传感器IC通信完成,温度值转换为十进制值,然后被转为ID代码格式。因此,RFID传感器提供的温度值几乎为“纯文本”。下图显示了如何将DS1820连接至RFID主板。原则上,软件可以处理若干温度传感器或其他单总线集成电路。
九、RFID传感器调试
我们前面讨论的例子展示它是如何建立自己的RFID标签。当你测试自己的应用程序开发和调试必须始终牢记。最简单的方法是使用ISP接口技术。然而,靠来自线圈的能量不足以维持标签的微控制器编程需要,并为此开发了如下图的适配器接口。可以通过ISP的接口对包含了RFID和传感器的软件的ATtiny13进行编程,而且像RFID主板上的K1一样,同样的传感器可以连接到K3的这块板上。适配器上的插座K2与读卡器上的K4连接,然后读卡器提供给ATtiny13125KHz时钟,通过它在PB1口进行数据流输出。这种方法可以很方便的测试新的RFID传感器软件。
标签: ATtiny13 ATtiny2313 射频读卡电路图
相关文章
发表评论