3 软件系统设计
在初始化单片机程序中,子系统A 外部中断设置为低电平触发,子系统A 的中断信号源由nRF24L01提供,当nRF24L01 收到数据后产生中断信号,通知MCU 来读取数据。子系统B 不使用中断功能。
在初始化nRF24L01 程序中,子系统B 配置为发送模式,使用16 位CRC 校验。使用自动应答功能,数据通道0 被设置为接收应答信号,其数据通道0 的接收地址必须与发送端的地址相等,以此来保证能正确的收到应答信号。一个系统最多可以有六个子系统A 组成,这6 个子系统的发送地址不能重复。子系统A 配置为接收模式,使用16 位CRC 校验,最多接收6 个通道的数据。这6 个接收地址和各子系统B 中的发送地址相等。
在初试化SJA1000 中,使用PliCAN 模式,波特率125Kbps,禁止接受和发送中断;输出控制寄存器配置如下:正常模式,TX 下拉,输出控制极性。此外,需正确配置验收代码寄存器和验收屏蔽寄存器,此配置用于CAN 总线仲裁功能的实现。
在初始化MF RC500 中,其主要设置如下:TX1和TX2 的输出配置为13.56MHz 能量载波;解码器的输入源为内部解调器;使用Q 时钟作为接收器时钟;禁止发送和接收中断;设置RxThreshold 寄存器值为0xFF,BitPhase 寄存器值为0xAD 等。
复位请求函数将在天线的有效范围内搜索Mifare1 卡,如果有卡存在,将建立通信连接并读取卡上的卡片类型号TAGTYPE.防碰撞函数使MF RC500 在多张Mifare 1 卡选择其中的一张。卡选择函数能够和已知序列号的卡进行通信。认证函数将Mifare 1 卡上的密码和MF RC500 的EEPROM 中的密钥进行匹配。
只有匹配正确后,才能进行对卡的读写操作。发送停机指令设置Mifare 1 卡为HALT MODE.
CAN 函数用于将有关数据发送至PC 机。本次设计采用查询方式以确保数据已经发送。通过查询状态寄存器中的标志位TBS、TCS 和TS 即可确认是否数据发送完毕。类似的,在无线函数中为确保数据已经发送,通过查询状态寄存器中的TX_DS 即可。
图7 子系统A 软件流程
图8 子系统B 软件流程图
4 系统测试
首先,对RFID 模块进行了测试。将MIFARE 1卡放入天线有效范围内,对该卡进行读写操作,并将相关数据显示在液晶屏上。经过该测试,RFID 模块读写正常。 随后,测试该系统传输网络的实时性,本文以温度数据的无线传输进行测试。测量温度的装置为DS18B20 单线温度传感器。将该温度传感器连接至子系统B 中,温度传感器每隔一秒对室内温度采样一次,微控制器读取温度数据并通过无线网络发送给A 子系统,A 子系统接收数据并通过CAN 总线发送至PC 端。
PC 端使用Visual Basic 6.0 编写上位机程序,上位机将温度数据绘制成曲线并写入文本。温度曲线如图8 所示,其中温度值的精度为1 摄氏度。通过对温度曲线图和文本数据的对比观察,发现温度数据无异常, 数据没有出现丢失情况。
图9 温度曲线图
5 结语
本文利用了CAN 总线取代RS-485 总线,克服了后者存在的缺点。同时还使用了无线威廉希尔官方网站 ,在减少大量布线工作的同时,充分利用了nRF24L01 多点通讯的功能。在系统搭建完成后,笔者对系统进行了长时间测试。测试结果表明:数据传输稳定,可靠,实时性高,克服了传统基于RS485 总线设计的RFID 收费系统的缺陷,具有较强的使用价值。
评论
查看更多