单片机实例分享,自制数字示波器
示波器是最常用的电子测量仪器之一,它能把肉眼看不见的电信号变换成看得见的图像。为了携带方便,我曾经做过一台简易数字示波器(见图22.2),材料成本只有150元左右,这台数字示波器的设计思想是:简单实用,价格低廉,容易制作。
主要性能指标:
最高采样率:20MSa/s
模拟带宽:4MHz
输入阻抗:1MΩ
垂直灵敏度:0.01V/div~5V/div(按1-2-5方式递进,共9挡)
水平扫描速度:1.5µs/div~6ms/div(按1-2-5方式递进,共12挡)
垂直分辨率:8位
显示屏:2.4 英寸 TFT320×240(驱动控制芯片:ILI9325)
测量时能同时显示信号的频率、电压峰峰值,具有信号保持(HOLD)功能。
图22.2 自制的简易数字示波器
电路工作原理
图22.3 数字示波器结构框图
我们知道,模拟示波器是用阴极射线示波管(CRT)显示被测信号波形的,而数字示波器是采用LCM(LCD显示模块,含LCD及显示驱动控制芯片)显示被测信号波形。因为LCM的每一个显示像素都对应一个地址,地址要用数据表示,每一个像素的颜色也是用数据表示的。因此电路向LCM发送的是数据编码信号,这就决定了它和模拟示波器的电路结构不一样。
本文介绍的数字示波器的结构框图如图22.3所示。它由垂直输入电路、A/D转换电路、数字信号处理与控制电路、液晶屏显示电路、电源电路等部分组成。
图22.4 数字示波器电路原理图
输入的电压信号经垂直输入电路放大,以提高示波器的灵敏度和动态范围。对输出的信号取样后由 A/D 转换器实现数字化,模拟信号变成了数字形式存入存储器,微处理器对存储器中的数据根据需要进行处理,最终在显示屏上显示测量波形和相关的参数,这就是数字存储示波器的工作过程。
数字示波器的电路原理图如图22.4所示,下面分别对各单元电路进行介绍。
表22.1 垂直灵敏度和K1~K5的对应关系
1. 垂直输入电路垂直输入电路由双运算放大器LM6172和衰减电路等部分组成。对其有两个基本的要求:一是对放大倍数的控制,二是要有满足设计要求的足够的带宽。
示波器输入信号电压的动态范围很大,为了将输入信号电压调节到A/D转换电路的最佳采样范围,以便得到最合理的显示波形,在信号电压较小时要进行放大,在信号过大时要进行衰减。
示波器输入信号的频率范围也很宽,为了使垂直输入电路有较平坦的频率特性曲线,即对不同频率的信号放大电路的增益基本保持一致。为此选用了高速双运放LM6172,其带宽为100MHz,并在衰减电路中加了频率补偿电容。
电阻R1、R2、R3和继电器K1、K2、K3等组成衰减电路,衰减系数分3挡:1:1、1:10、1:100,由K1、K2、K3控制。第一级运算放大器接成电压跟随器的模式,主要起到缓冲的作用,提高输入阻抗,降低输出阻抗。第二级运算放大器接成电压串联负反馈电路的模式,其中电阻R6、R7、R8和继电器K4、K5等组成3挡增益调节电路,放大器的增益由K4、K5控制。当触点K4闭合时增益为(R6+R9)/R6;当触点K4开启、K5闭合时增益为(R6+R7+R9)/(R6+R7);当触点K4、K5均开启时增益为(R6+R7+R8+R9)/(R6+R7+R8)。按电路图中各电阻的取值,对应本级3挡的增益分别为25、12.5、5。
继电器K1~K5工作状态受单片机控制,所以垂直输入电路是一个程控放大器。垂直灵敏度和K1~K5工作状态的对应关系见表22.1(1表示闭合,0表示断开)。
2. A/D 转换电路我们知道,A/D转换电路的作用就是将模拟信号数字化。一般把实现连续信号到离散信号的过程叫采样。连续信号经过采样和量化后才能被单片机处理。通过测量等时间间隔波形的电压幅值,并把该电压值转化为用二进制代码表示的数字信息,这就是数字示波器的采样,采样的工作过程见图22.5。采样的时间间隔越小,重建出来的波形就越接近原始信号。采样率就是每秒采样的次数,例如,示波器的采样率是10MSa/s,即每秒采样10M次,则表示每 0.1μs进行一次采样。采样率是数字示波器最重要的一项指标。
根据Nyquist采样定理,当对一个最高频率为f的模拟信号进行采样时,采样率必须大于f的两倍以上才能确保从采样值完全重构原来的信号。对于正弦波,每个周期至少需要两次以上的采样才能保证根据采样数据恢复原始波形。在数字示波器中,为了减小显示波形的失真,采样率至少要取被测信号频率的5~8倍。本文介绍的数字示波器采样率取被测信号频率的5倍,因为最高采样率为20MSa/s,所以当被测信号的带宽在4MHz以内时有比较好的测量结果。
采样率的提高受制于A/D转换芯片的工作速度,本文电路中使用的单片机ATmega16内部虽然也有A/D转换器,但其工作频率太低,不能满足数字示波器的采样要求。因此我们用了一片高速A/D转换芯片ADS830E,其最高采样率可达60MSa/s。ADS830E的转换精度为8位二进制数,即垂直分辨率为256,因为选用的LCM的分辨率为320×240,对应垂直分辨率为240,所以ADS830E完全能满足分辨率的使用要求。
ADS830E的IN(17脚)是供采样的模拟信号的输入端,CLK(10脚)是采样时钟信号输入端。每输入一个时钟脉冲就进行一次A/D转换,转换后的8位二进制数据由D0~D7输出。ADS830E的输入电压幅度可以通过11脚进行控制,当11脚接高电平时,ADS830E的输入电压范围是1.5~3.5V;当11脚接低电平时,输入电压范围是2~3V。这里选用1.5~3.5V的输入电压范围,中点电压为2.5V,中点电压由电位器RP进行调节。当IN输入电压为1.5V时,D0~D7输出的转换数据是0x00,当IN输入电压为3.5V时,D0~D7输出的转换数据是0xff,即255。
图22.5 采样的工作过程
3. 数字信号处理与控制电路
数字信号处理与控制电路由单片机ATmega16、FIFO(先进先出)存储器IDT7205、4个2输入与非门74HC00等组成。
单片机ATmega16在电路中的主要作用是:(1)对A/D转换后的数字信号进行处理,转换成LCM能接受的数据格式,输出给它显示;(2)产生ADS830E、IDT7205工作所需要的时钟脉冲信号;(3)通过按键对示波器参数进行控制调节,输出继电器的控制信号。
图22.6 倍频电路及各点的脉冲
FIFO存储器IDT7205是一个双端口的存储缓冲芯片,具有控制端、标志端、扩展端和8192×9的内部RAM阵列,12ns的高速存取时间。内部读、写指针在先进先出的基础上可进行数据的自动写入和读出。当有数据输入到数据输入端口D0~D8时,可由控制端Wclk来控制数据的写入。为了防止数据的写溢出,可用标志端满FF、半满HF来标明数据的写入情况,写入时由内部写指针安排其写入的位置。由于内部RAM阵列的特殊设计,先存入的数据将被先读出。如果需要数据外读,则可由控制端Rclk来控制数据的读出。RST为复位端。Wclk、Rclk、RST均由单片机ATmega16提供控制脉冲。数据输出端口Q0~Q8是三态的,在无读信号时呈高阻态。输入数据位D0~D8和输出数据位Q0~Q8均为9位,这里输入和输出均只使用了8位,即只使用了D0~D7和Q0~Q7。
读到这里,有的读者可能会问:把ADS830E输出端口D0~D7输出的数据直接输入ATmega16的PA端口不就行了吗,为什么还要在中间加上一个IDT7205?这是因为ADS830E工作速度比ATmega16快得多,即ATmega16读取数据的速度比ADS830E输出数据的速度慢,如果直接相连ATmega16就拖了ADS830E的后腿。加上IDT7205后就起到了缓冲的作用,ADS830E转换的结果先存在IDT7205内,等到ATmega16需要时,再从IDT7205中读出来。
ADS830E的采样时钟与IDT7205的写信号时钟是同一个时钟源,以确保两者同步。时钟脉冲信号由ATmega16使用内部定时器产生,由于ATmega16外接晶体的频率为20MHz,所以产生的时钟信号最高频率只能达到10MHz,为了使采样率达到20MSa/s,使用了74HC00等构成的倍频电路。若ATmega16 PD7端输出的脉冲信号频率为f,则74HC00的F4输出的脉冲信号频率为2f,倍频电路的工作过程和各点脉冲信号时序关系如图22.6所示。
K1~K5是干簧继电器,干簧继电器特点是吸合和释放时噪声很小,功耗低。因其吸合电流较小,所以可直接用ATmega16的输出端口驱动。
SB1~SB5是示波器调节按钮。SB1、SB2是水平扫描速度调节按钮,按SB1时μs/div的值增加(水平扫描速度减小),按SB2时μs/div的值减小(水平扫描速度增加);SB3、SB4是垂直灵敏度调节按钮,按SB3时V/div的值增加(垂直灵敏度减小),按SB4时V/div的值减小(垂直灵敏度增加);SB5是波形保持(HOLD)按钮,按一下测量波形被冻结保持,同时在显示屏上显示字符“HOLD”,再按一下又恢复到正常测试状态。所有调节参数均显示在液晶屏上,调节好的参数将自动保存到ATmega16的EEPROM中,下次开机时有关参数将预设在上次关机前的设定值上。
4. 显示电路
LCM采用2.4英寸TFT彩色液晶屏,分辨率为320像素×240像素,驱动控制芯片为ILI9325,该芯片传递数据8/16接口位兼容,使用8位接口时能够节省单片机的输出端口,在8位接口工作状态时16位数据分两次传递,速度稍慢。数据端口D0~D15中的高8位D8~D15为8位接口使用的端口。8/16接口位的选择由端口IM0控制,IM0接高电平时为8位接口工作状态,IM0接低电平时为16位接口工作状态。
电路中ILI9325的工作电压是3V,ATmega16的工作电压是5V,两者高电平不一致,通信端口相连时要进行电平转换,因为这里只需要ATmega16向ILI9325单向传递数据,所以只需要将5V向3V电平转换,不需要将3V电平向5V电平转换,就不必使用专用的电平转换芯片,只要用电阻分压电路将5V高电平转换成3V高电平就行了。电路中R14~R35组成电阻分压电路,连接端口有8个数据端口和3个控制端口。
5. 电源电路
这个数字示波器使用了交流电源,提供+5V、−5V、+3V三种直流电压。
程序设计
设计好电路只是为数字示波器奠定基础,更重要的是单片机程序的设计。实际上在设计硬件时既要考虑到功能,也要考虑到程序设计的需要。比如对单片机的选型,主要考虑功能、工作速度、端口的数量、程序存储器Flash的容量、RAM的容量、有没有EEPROM等。综合考虑后选用AVR单片机ATmega16,它的程序存储器Flash为16KB,RAM为1KB,使用时将16MHz的时钟频率超频到20MHz,经过对其资源合理分配,完全可以满足设计要求。
程序的开发环境为ICC-AVR V6.31A,使用 C语言编写。程序采用了分时控制、顺序调度的工作方式,没有使用任何中断程序,程序流程图如图22.7所示。
图22.7 程序流程图
下面对主要部分进行分别介绍。
1. 垂直灵敏度控制
按钮SB3、SB4用来调节垂直灵敏度,按动后通过键盘扫描程序可以增加或减小程序中变量Key_ver的值,Key_ver取值范围为1~9,分别对应9挡垂直灵敏度,通过Key_ver的取值控制继电器K1~K5的工作状态,从而得到相应的灵敏度。
以K1为例,K1接ATmega16的PB0端口,有关宏定义为:
#define K1_ON PORTB &=~(1<
#define K1_OFF PORTB |= (1<
因此,K1_ON表示PB0输出低电平,K1闭合,触点接通;K1_OFF表示PB0输出高电平,K1释放,触点断开。
2. 水平扫描速度控制
水平扫描速度控制是通过改变A/D转换电路的采样率来实现的,按动SB1、SB2可以改变程序中变量Key_hor的值,Key_hor取值范围为1~12,分别对应12挡水平扫描速度。
A/D转换电路所需的采样时钟脉冲用ATmega16的8位定时器/计数器2-T/C2产生,选择CTC工作模式。其工作参数主要由控制寄存器TCCR2、计数寄存器TCNT2、输出比较寄存器OCR2决定。TCCR2中的位CS22、CS21、CS20的取值确定T/C2的时钟源的分频系数,OCR2中的数据用于同TCNT2中的计数值进行连续的匹配比较,一旦TCNT2计数值与OCR2的数据相等,单片机端口OC2的输出电平即取反,这样即可输出脉冲信号。脉冲信号的频率f由时钟源的分频系数和OCR2的预置值决定,计算公式为f=时钟源频率/(2×(1+OCR2)),OC2输出的脉冲信号经倍频后作为采样时钟信号,相关参数之间的关系见表22.2。
只要对寄存器TCCR2、OCR2的值进行设置,就可以获得我们所需频率的采样时钟信号。
3. 数据的存储和读取
ADS830E的采样数据存入IDT7205后达到一定数量就停止采样,再将IDT7205存储的数据读入ATmega16,程序中用一个数组RAM[650]来存储读取的数据,存储容量为650,即一次读取650个采样数据。
仔细看了电路图的读者可能会发现,IDT7205的满FF端口并没有使用,为什么不用呢?这是因为ATmega16的RAM容量只有1KB,只能分配约650个存储单元用来存储从IDT7205读取的数据,IDT7205存多了数据也没有用,ATmega16不能全部存储,多余的数据就丢弃了,还不如少读点数据节省时间,提高显示波形的刷新频率。这在采样时钟频率较低时效果尤为明显,因为采样时钟频率越低,采集一个数据所花的时间越长。以采样时钟频率5kHz为例,如果要将IDT7205存满8192个数据,所需要的时间为8192/5000≈1.6s, 显示波形1.6s以上才能刷新一次,这显然是不行的。如果存满700个就结束,则所需要的时间为700/5000=0.14s,刷新速度提高了很多。
从上面的分析可以看出,FIFO存储器其实使用IDT7202就够了,IDT7202有1024个存储单元。不过笔者只买到了DIP封装的IDT7205,虽然有点大材小用,但为以后数字示波器升级提供了空间。FIFO存储器存储数据的容量称为数字示波器的存储深度,也称记录长度,存储深度也是数字示波器的一个重要技术指标,适当存储深度便于对显示波形进行分析和处理。
不使用FF端口是如何控制IDT7205存储数量的呢?我在IDT7205存储数据时根据不同的采样时钟频率设置了不同的延时时间,在此时间内能存入多于700个数据即可。延时结束后即将IDT7205的存储数据读入ATmega16。
表22.2 相关参数之间的关系
由于ADS830E每次重新进入工作状态要有一个稳定的过程,开始采样的几个数据精度不高,因此在读取IDT7205数据时先空读50个数据,将这些数据丢弃,然后再将后面的数据读入ATmega16。
图22.8 显示区域
4. 数据计算处理
数据计算处理工作主要包括同步触发信号检测、信号电压峰峰值测量、信号频率测量。这部分程序设计的思路是:
先在650个数据的前350个数据中以显示屏的垂直中点对应数据120为基准,找到同步触发信号。之所以在前350个数据中找同步触发信号,是为保留后面至少有300个数据供显示波形用。找到同步触发信号后,则把对应该点数据为起点的连续300个数据作为显示数据。
然后找到650个数据中的最大值和最小值,求最大值和最小值的算术平均数,即可得到中点电压值,检测信号相邻两次向上穿过中点的时间差即可计算出信号的周期。
5. LCM的控制与显示
TFT-LCD显示屏的分辨率为320像素×240像素。显示屏的每一个像素都对应着驱动控制芯片ILI9325内部存储器唯一的一个地址(x,y),x为横坐标,寻址范围为0~319;y为纵坐标,寻址范围为0~239。在像素对应地址写入16位颜色数据就可以显示相应的颜色,如果某一点要清除,只要对该像素对应的地址写入背景色就可以了。由于这里ILI9325采用8位接口工作模式,因此传递16位数要分两次进行。
因为数字示波器既要显示被测信号的波形,也要显示有关的测量数据,如电压峰峰值、频率、水平扫描速度、垂直灵敏度等,所以必须对显示区域进行合理的划分,并对颜色进行规划设置,分配好的显示区域如图22.8所示。图中用来显示波形的区域为中间的300×200。在这个区域画了刻度线,将水平方向分成10格,垂直方向分成8格。其余区域用来显示各种数据。
对ILI9325最基本的操作有两种:发送命令和发送数据。无论是显示屏的初始化,还是设置显示地址和显示颜色,都要用到这两种基本操作。
显示被测信号波形的过程是:先清除上一帧显示波形,然后画刻度线(刻度线每次都要重画,因为有些和显示波形交叉的点也被清除了),最后画新的一帧信号波形,同时备份数据作下一次清除用。显示信号波形时,存储器地址(x,y)中的x代表水平扫描信号所处的位置,y代表信号电压的大小。每次刷新信号波形时,信号电压峰峰值和信号频率显示数据也同时刷新一次。水平扫描速度和垂直灵敏度的数据只有在重新调整后才刷新。
表22.3 主要元器件清单
元器件选择
主要元器件的清单见表22.3。
经过试验,我发现在工作电压为5V时,单片机ATmega16和ATmega16L在时钟频率为20MHz下均能正常工作。因此,如果你手头只有ATmega16L也可以使用。
IDT7205如果使用PLCC封装的芯片,请注意引脚编号不同。
干簧继电器也可以选用其他型号的,只要工作电压是5V,闭合电流小于20mA即可。
机箱我选用的是成品塑料机箱,你也可以用其他样式的,或者自己用有机玻璃DIY。
显示屏和ADS830E的两块转接板是必须要用的,不然无法在万能板上安装,可以设法和元器件一起采购。
图22.9 缓冲区对比图
图22.10 开关单独安装在小的万能板上
显示屏的品牌很多,你很难买到和我一样的品牌。但有一点要注意,驱动控制芯片一定要是ILI9325的,如果不是,你就要修改程序了,不同的芯片即使是同一系列,驱动程序也往往不兼容。即使驱动芯片一样,不同品牌的显示屏引脚编号也可能不一致,接线时要仔细对照。另外有一点提醒一下:我买的显示屏的4个背光二极管是并联的,我是把它们公共的阳极串接一个电阻(不知道模块内部有没有限流电阻,还是外接一个电阻保险)接到+5V电源,如果你买的显示屏的背光二极管是串联的,要求的工作电压就高了,接到+5V是不能发光的,可串连一个100Ω(电阻的取值使发光二极管工作电流不超过20mA为宜)接到LM7805的输入端,此处的电压约有10V,可以满足驱动要求。
安装
安装前先将目标文件dso.hex写入单片机ATmega16,特别提醒一下:用编程器将目标文件调入时要选择“缓冲区预先填充00”选项,否则在显示屏显示字符时会出现色块。如果你用下载线写入文件,则往往不提供该选项给你选,会直接把缓冲区都填入了FF,见图22.9上半部分,这时你可以手工编辑一下,把方框中的FF全部改为00,结果见图22.9下半部分。
5个按钮开关单独安装在小的万能板上,见图22.10。其余的元件除显示屏直接固定在机箱面板上外,都安装在大的万能板上。接线时注意同一单元要一点接地,数字地和模拟地要分开。三端稳压器LM7805要加一个小的散热片。
机箱的面板根据显示屏的大小、按钮开关和BNC插座的安装位置开孔,面板上的标记可打印在一张纸上,再用1~2mm的透明有机玻璃做一块尺寸一样的面板(对应显示屏的位置不开窗口,正好做防护屏),再把打印好的纸夹在两层中间,用螺丝固定好后,面板就做好了。
按钮开关电路板是直接用4个螺丝固定在面板上的,显示屏可用热熔玻璃胶固定,把显示屏在窗口摆正位置后,在4个角用热熔玻璃胶固定一下就可以了。
安装好的示波器内部结构见图22.11。
图22.11 安装完成的内部结构
调试
如果安装时没有接线错误,元器件没有质量问题,调试还是比较容易的。
调试分4步进行。
(1)各单元先不接电源,测量电源部分输出电压是否正常,正常后再接通各部分的电源。
图22.12 水平扫描线与中线未重合
图22.13 补偿电容与方波波形的关系
图22.14 调试好的示波器的使用效果
(2)检查显示屏工作是否正常,接通电源,显示屏初始化后先是全屏显示白色闪亮一下,然后显示刻度线和相关数据。如果开机后显示屏没有反应,先检查单片机有没有正常工作,如按动K3、K4继电器的工作状态应该有所改变。如正常再查显示屏的连线和供电是否正常,直至显示正常才能进入下一步。
(3)将示波器输入端信号线短接,调节电位器RP,使其中点电压为2.44V(注意不是1.5~3.5V的中点电压2.5V,因为显示屏垂直方向中点的值是120,120是2.44V电压经A/D转换后对应的值,对应2.5V电压的A/D转换值是255/2),这时候可以看到一条水平扫描线出现在水平中线附近,见图22.12,仔细调节RP,使得其和水平中线重合。
(4)对衰减器的频率补偿电容进行调整,将垂直灵敏度调到0.5V/div,输入 200kHz、幅度1V的方波,改变电容C2的容量,使示波器显示的方波波形最好;再将垂直灵敏度调到1V/div,输入200kHz、幅度2V的方波,改变电容C3的容量,使示波器显示的方波波形最好。频率补偿电容与方波波形的关系见图22.13。
装配调试好的数字示波器的使用效果见图22.14。
单片机实例分享,RFID卡读写器的设计
RFID(Radio Frequency Identification,射频识别)技术是一种非接触自动识别技术,利用射频信号通过空间耦合(电感或电磁耦合)实现无接触信息传递,并通过所传递的信息达到识别目的。
RFID卡技术成功地融合RFID技术和IC卡技术,解决了无源(卡中无电源)和免接触的难题,是电子信息技术领域的一大突破。由于RFID卡方便、耐用,且可高速通信、多卡操作,在门禁安防、身份识别、公共交通等众多领域正逐渐取代传统的接触式IC卡,在市场上所占的份额越来越大,应用日益广泛。高速公路、停车场、加油站收费,智能卡水表、电表、煤气表等应用,也可使用RFID卡。从长远角度看,RFID卡将会替换目前广泛使用的接触式IC卡。
RFID 卡的突出优点
与接触式IC卡相比,RFID卡具有以下优点。
(1)高可靠性:由于无触点,可最大限度地避免由接触读写而产生的各种故障,提高了抗静电和抗环境污染能力,因此提高了使用的可靠性,延长了读写设备和卡片的使用寿命。
(2)易用性:操作方便、快捷,无需插拔卡,完成一次操作只需0.1~0.3s。使用时,卡片可以任意方向掠过读写设备表面。
(3)高安全性:序列号是全球唯一的,出厂后不可更改。卡与读写设备之间采用双向互认验证机制,即读写器验证卡的合法性,同时卡验证读写器的合法性。通信过程中所有的数据都加密,卡片上不同分区的数据可用不同的密码和访问条件进行保护。
(4)高抗干扰性:对有防冲突电路的RFID卡,在多卡同时进入读写范围内时,读写设备可一一对卡进行处理,抗干扰性高。
(5)一卡多用:卡片上的数据分区管理,可以很方便地实现一卡多用。
(6)多种工作距离:作用距离从几厘米到几米,适应不同的应用场合。
RFID 卡读写器工作原理
RFID卡的结构如图15.1所示。
图15.1 RFID 卡的结构
RFID卡读写器是连接RFID卡与应用系统间的桥梁,RFID卡读写器的基本任务就是启动RFID卡,与RFID卡建立通信,在应用系统和卡片间传递数据。
RFID卡读写器将要发送的信息编码后加载到一固定频率的载波上,当RFID卡(卡片内有一个谐振电路,其频率与读写器发送的载波频率相同)进入读写器的工作区域后,谐振电路发生谐振并产生电荷积累,当电荷积累到一定数值时,就能为RFID卡内的电路提供工作电压,使卡内的芯片开始正常工作,处理读写器发送的数据信息。RFID卡系统的模型如图15.2所示。
一个完整的RFID卡读写器应包括以下几个部分(见图15.3):单片机、射频处理模块、天线、与PC的通信接口以及键盘、显示等部件。
图15.2 RFID卡系统模型图
图15.3 系统设计框图
单片机是读写设备的数据处理控制核心。它不仅要控制射频处理模块完成对RFID卡的读写,还要负责通过通信接口与PC进行通信,并对键盘、显示设备等其他外部设备进行控制。
射频处理模块负责射频信号的处理和数据的传输,完成对RFID卡的读写。
天线的作用有两个:一是产生电磁能量,为卡片提供电源;二是在读写设备和卡片之间传送信息。天线的有效电磁场范围就是系统的工作区域。
与PC的通信接口以及键盘、显示等部件主要实现与PC的通信,以及操作时的人机界面。
根据RFID卡与读写器之间能可靠交换数据的距离,RFID卡天线和读写器之间的耦合可以分为3类:密耦合系统、遥耦合系统和远距离系统。
密耦合系统的典型作用距离范围是0~1cm。在实际应用中,必须把卡插入阅读器中或者放置到阅读器的天线表面。密耦合系统的卡与阅读器之间是电感耦合,其工作频率一般在30MHz以下。密耦合系统适合于安全要求较高,但不要求作用距离的应用系统,如电子门锁等。
遥耦合系统的典型作用距离可以达到1m。遥耦合系统又可以细分为近耦合系统和疏耦合系统,前者的典型作用距离为15cm,后者为1m。所有遥耦合系统在卡和阅读器之间都是电感耦合,典型工作频率为13.56MHz,也有其他频率,如6.75MHz、27.125MHz或者135kHz以下。
远距离系统的典型作用距离是1~10m,个别系统也有更远的作用距离。所有的远距离系统的卡和阅读器之间都是电磁反向散射耦合,在微波范围内用电磁波工作,发送频率通常为2.45GHz,也有系统使用5.8GHz和24.125GHz的频率。
Philips公司的Mifare 卡
Philips公司是世界上最早研制RFID卡的公司之一,其Mifare技术已经被定为IS0/IEC14443 TYPE A国际标准。使用Mifare芯片的RFID卡占世界范围内同类智能卡销量的60%以上。这里简单介绍一下Mifare standard卡:MF 1 IC S50(简称Mifare 1卡)。
Mifare 1卡除了微型IC芯片及一个高效率天线外,无任何其他元器件。卡片电路不用任何电池供电,工作时的能量由读写器天线发送频率为13.56MHz无线电载波信号,以非接触方式耦合到卡片天线上产生电能,电压通常可达2V以上。标准操作距离可达10cm,卡与读写器之间的通信速率高达106kbit/s。芯片设计有增/减值的专项数学运算电路,适合公共交通、地铁车站等行业的检票/收费系统,其典型交易时间最长不超过100ms。
Mifare 1卡芯片内含1KB的EEPROM存储器,其空间被划分为可由用户单独使用的16个扇区。数据的擦写次数超过10万次,数据保存期大于10年,抗静电保护能力达2kV。
Mifare 1卡的芯片在制造时具有全球唯一的序列号,具有先进的数据通信加密和双向密码验证功能,还具有防冲突功能,可以在同一时间处理重叠在读写器天线有效工作距离内的多张卡片。
Mifare 1芯片内部结构较为复杂,可划分为射频接口、数字处理单元、EEPROM这3大部分,其中数字处理单元又分为若干小部分,如图15.4所示。
◆射频接口:在RF射频接口电路中,含有波形转换模块。它可接收读写器上的13.56MHz的无线电调制频率,一方面送调制/解调模块,另一方面进行波形转换,然后对其整流、滤波,接着对电压进行稳压等进一步处理,最终输出供给卡上的电路工作。
图15.4 Mifare 1 卡逻辑框图
◆防冲突模块:如有多张Mifare 1卡处在读写器的天线的工作范围之内时,防冲突模块的防冲突功能将被启动,根据卡片的序列号来选定一张卡片。被选中的卡片将直接与读写器进行数据交换,未被选中的卡片处于等待状态。
◆认证模块:在选中一张卡片后,任何对卡片上存储区的操作都必须经过认证,只有经过密码校验,才可对数据块进行访问。Mifare 1卡片上有16个扇区,每个扇区都可分别设置各自的密码,互不干涉。因此每个扇区可独立地应用于一个应用场合,整个卡片可以设计成“一卡通”形式来应用。
◆控制和算术运算单元:这一单元是整个卡片的控制中心,它主要对整个卡片的各个单位进行微操作控制,协调卡片的各个步骤,同时还对各种收/发的数据进行算术运算处理、CRC运算处理等。
◆EEPROM接口:连接到EEPROM。
◆加密单元:Mifare的CRYPTOL数据流加密算法将保证卡片与读写器通信时的数据安全。
表15.1 Mifare 1卡的存储器组织结构
◆EEPROM:容量为1KB,分16个扇区,每扇区有4个块,每块16字节。其组织结构如表15.1所示。每个扇区的块3也称作尾块,是扇区的控制块,其结构如表15.2所示。前6个字节为密码A(KeyA),永远不能被读出,但在满足一定条件下,可被改写;后6个字节为密码B(KeyB),当密钥使用时是不可读的,但用来存储数据时则是可读的;中间4个字节为权限位,存放本扇区的4个数据块的访问条件。控制块使用两个密码,是为了给用户提供多重控制方式。例如,用户可以用一个密码控制对数据块的读操作,用另一个密码控制对数据块的写操作。其余3个块是一般的数据块。扇区0中是特殊的块,包含了厂商代码信息,在生产卡片时写入,不可改写。其中第0~4字节为卡片的序列号,第5个字节为序列号的校验码,第6字节为卡片的容量“SIZE”字节,第7~8字节为卡片的类型号(Tagtype)字节,其他字节由厂商另加定义。
表15.2中,C1、C2、C3三个数据位表达各块的具体访问权限,下标0、1、2、3分别表示在扇区内的块号。“C13、C23、C33”即为扇区第3块(尾块)的访问权限。为了可靠,访问条件的每一位都同时用原码和反码存储,共存储了两遍。尾块的读写权限的意义如表15.3所示。
表15.2 尾块组成及访问权限字节结构
表15.3 尾块的权限代码与访问权限
(注:N表示不能,A表示KeyA,B表示KeyB,A/B表示KeyA或者KeyB)
在空卡状态下,每个扇区的尾块数据(16 进制)为:“0x 000000000000 FF078069 FFFFFFFFFFFF”。空卡时的密码A和密码 B 均为“0x FFFFFF”,由于密码A 不可读,读出的数据显示为“0x 000000”。在空卡默认读写权限下可以利用密码A对所有块进行读写操作,以及更改各块的读写权限,但不可以利用密码B进行读写操作(此时密码B可读)。
权限位为:“0x FF078069”,由表15.2,得:
C13=0 C12=0 C11=0 C10=0
C23=0 C22=0 C21=0 C20=0
C33=1 C32=0 C31=0 C30=0
C13C23C33=001,根据表15.3,密码A不可读,但通过密码A校验后,可改写密码A,权限字节及密码B的读写权限均可用密码A读写。
另外,由表15.3可知尾块的下列属性:密码A永远不可读,因此一旦设定就必须记住,不过在000、100、001、011几种情况下可以改写;访问权限字节仅在001、011、101三种状态下可写;密码B在000、100、001、011四种状态下可写,在000、010、001三种状态下可读(此时密码B的6个字节用于存储数据,不再作为密钥)。
数据块的读写权限如表15.4所示。对数据块的增值、减值操作,仅在状态“110”和“001”下可进行。而第0块(厂商数据块)虽然也属于数据块,但是它不受权限字节影响,永远只读。在空卡情况下,数据块的读写权限代码C1iC2iC3i=000,密码A和密码B的读写访问权均为“A/B”,表示可用密码A或者是密码B对各数据块进行读写,但实际上由于在空卡默认状态下密码B是可读的,所以不可用密码B读写数据。
表15.4 数据块(i=0、1、2)的权限代码与访问权限
电路设计
RFID卡读写器主板的电路原理图如图15.5所示,由单片机、与PC的通信接口、键盘、LCD显示等部分组成。RFID卡读写器射频处理模块及天线等的电路图如图15.6所示。
图15.5 RFID 卡读写器主板电路原理图
图15.6 RFID 卡读写器射频处理模块及天线电路图
射频处理模块(也称为射频基站模块)是射频卡读写器的关键部件,RFID卡读写器通过该模块与射频卡进行数据通信。射频处理模块的主要部件就是射频基站芯片,这里我们选用Philip公司的MFRC522。它是13.56MHz非接触式通信中高集成读卡IC系列中的一员,利用先进的调制和解调概念,完全整合了在13.56MHz下任何类型的被动非接触式通信方式和协议。它内部包括微控制器接口单元、模拟信号处理单元、IS014443A规定的协议处理单元,以及Mifare卡特殊的Cryptol安全密钥存储单元,可以与所有兼容Intel或Motorola总线的微控制器直接连接,其内部还具有64个字节的先入先出(FIFO)队列,可以和微控制器实现高速传输数据。
MFRC522内部的发送器部分无需增加有源电路就能够直接驱动近操作距离的天线(可达10cm),接收器部分提供一个高效的解调和解码电路,数字部分处理ISO14443A帧和错误检测。
天线部分主要包括低通滤波器、接收电路、天线匹配电路和天线线圈,天线拾取的信号经过天线匹配电路送到RX脚,MFRC522的内部接收器对信号进行检测和解调,并根据寄存器的设定进行处理。然后数据被发送到并行接口,由单片机进行读取。制作完成的实验样机如图15.7所示。
图15.7 制作完成的实验样机
软件设计及使用
程序采用结构化模块方式设计,条理清晰、结构完善,便于整个程序的装配。限于文章的篇幅,本文不对程序作详细介绍,这里只对相关的读写过程作简单介绍。
读写卡是一个非常复杂的程序执行过程,要执行一系列的操作指令,调用多个子函数,包括装载密码、询卡、防冲突、选卡、验证密码、读写卡、停卡等。这一系列的操作必须按固定的顺序进行。在没有Mifare 1卡片进入射频天线有效范围时,LCD显示“欢迎光临”;当有Mifare 1卡片进入到射频天线的有效范围时,读写器验证卡及密码成功后,将卡号、消费金额、充值金额和余额等数据作为一条记录存入EEPROM存储器中,并同时在LCD上显示出来。
1. 写(设置)RFID 卡
读卡器对卡进行数据的读写、密码的管理和功能的测试,可以进行寻卡、防冲突、选择和终止等功能。可对RFID卡的16个扇区进行密码的下载及A、B组密码的选择。可对每个扇区3个块的数据进行读写。块值操作包括初始化、读值、加值、减值、密码的修改等。
2. 读 RFID 卡
首先寻卡,进入卡处理程序,紧接着防冲突,成功之后,加载密码,之后便可对卡进行数据的读取和操作。完成之后等待卡的拿开,确保每次只读一次数据。
3. 读写器与射频通信程序
RFID卡与读写器间的通信流程如图15.8所示,各功能定义如下。
图15.8 RFID 卡与读写器间的通信流程
(1)复位应答:射频卡的通信协议和通信波特率是定义好的,当有射频卡进入读写器的操作范围时,读写器以特定的协议与它通信,验证卡片的卡型。
(2)防冲突机制:当有多张卡进入读写器操作范围时,防冲突机制会从其中选择一张进行操作,未选中的则处于空闲模式,等待下一次选卡,该过程会返回被选卡的序列号。
(3)选择卡片:选择被选中的卡的序列号,同时返回卡的容量代码。
(4)3次互相确认:选定要处理的卡片之后,读写器就确定要访问的扇区号,并对该扇区密码进行密码校验。在3次相互认证之后,就可以通过加密流进行通信。当选择另一扇区时,则必须进行另一次密码校验。
(5)对数据块的操作:读一个块、写一个块、对数值块进行加值、对数值块进行减值、将卡置于暂停工作状态。
进入等待状态时,RFID卡读写器的屏幕上显示“欢迎光临”(见图15.9)。图15.5中按键S1~S4的作用如下:按动S1后,读写器进入消费工作模式(见图15.10);按动S2后,读写器进入充值模式(见图15.11);按动S3后,读写器进入注册模式(见图15.12);按动S4后,读写器进入读卡工作模式(见图15.13)。
图15.9 进入等待状态
图15.10 消费工作模式
图15.11 充值模式
图15.12 注册模式照片
图15.13 读卡工作模式
相关问答
大学生学 单片机 ,可以只用软件仿真不做 实验 吗?为什么?我认为不可以。理论与实践相结合,才是最正确的学习方法。学习单片机,要分两步。第一步结合仿真软件,学习基本理论;第二步,买实验板,进行开发演练。两步缺...而...
51 单片机 按钮驱动试验 程序 中,void main(){P1|=0xE0;...} 他...单片机复位后P0=0xff;P1|=0xE0;等价于P1=P1|0xE0表示P0的低5位保持原来不变,其余都置高电平单片机上电时,P1口一般是0xffswitch(temp){temp=P...
51 单片机 的 实验 步骤?单片机实验步骤如下:1.准备工作:准备好单片机开发板、USB数据线、编程软件等工具。2.连接硬件:将单片机开发板与电脑通过USB数据线连接,确保连接稳固。3...
基于proteus的51系列 单片机 怎样运行仿真?你好!很高兴为你解答,下面给你仔细介绍!proteus是一个仿真软件,可以在proteus里面仿真51单片机的实验,这样解决了自己制作和焊接单片机的电路,把编写好多...
为什么在 单片机实验 板上点亮一个LED灯时,需要while(1)循环,要不然其他LED灯会微亮?任何单片机程序都要有一个死循环,否则程序执行到底了,然后怎么办。没有这个死循环,单片机从0地址重新运行,整个系统重新初始化,会导致IO口复位,运行的很快...
单片机 外部中断 实验 (急救车与交通灯)怎么延时闪烁?在单摆的中间放一个红外对管,这样单摆每过一次中间就会有一个脉冲信号。这个脉冲信号连接外部中断,通过中断来统计次数。再用定时器定时1秒,1秒后把中断次数输...
单片机[回答]单片机没有那么难。。你们学的课程。。基本上和正规本科生的课程差不多的。比他们的。或许更贴近实用一些。。如果你吧这些课程都学会,,单片机也就...
为什么自己 设计 不出来 单片机程序 ?该怎么做?设计编写单片机程序是一个渐进的过程不可一蹴而就,毕竟单片机程序是与硬件有密切关系的,我们一般称为单片机程序叫底层硬件驱动程序。编写程序不但要对软件要熟...
想学习 单片机 ,有什么好的书籍推荐?五年之前那是在大学期间,距离现在大约有4年了吧,教我们单片机的老师要离我们而去了,因为她要去她的城市教书去了。怎么形容她呢?那是一个风度翩翩,很有才华...2...
单片机 节日彩灯课程 设计 ,从两边向中间点亮依次循环不止。亮灭时间为0.25S,用一个开关控制彩灯的工作?/*程序详细功能介绍:*利用取表的方法,使端口P1做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0.2秒)。*在用表格进行程序设计的时候,要用以下的...OR...