RS-485接口在总线上是允许连接多达128个收发器(RS485芯片的驱动能力有限,因而在实际应用中其实只能驱动40多个收发器)。即具有多站能力,这样用户可以利用单一的RS-485接口方便地建立起设备网络。因RS-485接口具有良好的抗噪声干扰性,长的传输距离和多站能力等上述优点所以本次设计采用RS-485接口。 2.4无线模块的选择
方案一:采用nRF24L01无线收发芯片组成智能家庭安全系统的自适应无线传感和控制网络,网络拓扑图如图所示。nRF24L01是一款新型单片射频收发器件。工作于2.4 GHz~2。5 GHz ISM频段。内置频率合成器、功率放大器、晶体振荡器、调制器等功能模块,并融合了增强型ShockBurst技术,其中输出功率和通信频道通过程序进行配置。nRF24L01功耗低,在以一6 dBm的功率发射时,工作电流也只有9 mA;接收时,工作电流只有12.3 mA,多种低功率工模式(掉电模式和空闲模式)使节能设计更方便。而且nRF24L01价格在20元左右,性价比高。
方案二:CC1100 是原Chipcon 公司推出的一种低成本、真正单片的超高频无线收发器, 为低功耗无线应用而设计。整个应用电路的无线频率主要设定在 315MHz、433MHz、868MHz 和 915MHz 四个 ISM (工业、科学和医学) 频段上,也可以容易地设置为300MHz~348MHz、400MHz~ 464MHz 和800MHz~ 928MHz 的其它频率上。芯片低电压(217V~ 316V ) 供电并且功耗较低(接收数据时为1516mA、214kbo s、433MHz)、灵敏度高(112kbos 下为110dBm ) , 可编程控制的数据传输率最高可达500kbo s。CC1100 适用于电子消费产品、住宅、建筑的自动控制、无线警报和安全系统等诸多无线应用领域。
方案三:采用315m超外差无线收发模块。模块优点:成本低廉,频率稳定,接收灵敏度高。模块缺点:静态时会输出短暂针状干扰杂波,用于遥控没有问题,但用微处理器数传时要采取软件滤波;功耗较大,不适宜小容量电池供电应用。
综合各方面因素的考虑,我们选择方案一。 2.5 本章小结
本章介绍了本课题设计总体思路基本原理和框图及其要实现的功能,同时对框架的各个主要模块提出了明确的设计方案,为下文的硬件、软件设计奠定基础。
4
第3章 通讯系统实现的理论原理
3.1 MODBUS-RTU通讯协议内容简介
3.1.1物理层
⑴通讯协议类型:Modbus-RTU ⑵传输方式:RS485半双工
⑶通讯地址:理论上可能的设备地址(1~247) ⑷通讯波特率:300BPS~38400BPS ⑸通讯介质:双绞线
⑹通讯距离:大于 1000 米 3.1.2链路层
⑴传输方式:主从半双工方式。
首先,主机的信号寻址到一台唯一的终端设备软起动器(从机);然后,在相反的方向上终端设备 (软起动器)发出的应答信号传输给主机。协议只允许在主机和终端设备(软起动器)之间,而不允许独立的终端设备之间的数据交换。这就不会使它们在初始化时占据通讯线路,而仅限于相应到达终端设备本机的查询信号。 ⑵数据帧格式:一个数据帧格式包括:1位起始位,8位数据位,偶校验位, 1位停止位。
⑶数据包格式:
表3-1 数据包格式
地址 功能码 数据 校验码 8-Bits 8-Bits N × 8-Bits 16-Bits ⑷数据格式说明: 本协议详细定义了校验码、数据序列等,这些都是特定数据交换的必要内容。当数据帧到达终端设备时,它通过一个简单的“端口”进入寻址到的设备,该设备去掉数据帧的“信 封”(数据头),读取数据。如果没有错误,就执行数据所请求的任务。然后,它将自己生成的数据加入到取得的“信封”中,把数据帧返回给发送者。返回的响应数据中包含了以下内容:终端从机地址(Address)、被执行了的命令(Function)、执行命令生成的被请求数据(Data)和一个校验码(Check)。终端从机能对来自主机的错误通讯进行识别,并做出不同的错误响应。 3.1.3地址(Address)域
地址域在帧的开始部分,由 8 位组成,理论上可能的设备地址(1~247),这些位标明了用户指定的终端设备的地址,该设备将接收来自与之相连的主机数据。每个终端设备的地址必须是唯一的,仅仅被寻址到的终端会响应, 响应包含了该地址的查询应答。当终端发送回一个响应,响应中的从机地址数据便告诉了主机哪台终端正与之进行通讯。在本次设计中我们采用RS232转485这个接口实现通讯,而因为RS485芯片的驱动能力有限,在实际应用中其实只能驱动40多个从机而已。 3.1.4功能(Function)域
功能域代码告诉了被寻址到的终端执行何种功能操作。下表列出了所有本协议比较常用到的功能码、它们的意义及它们的初始功能。
5
表3-2 功能域 01 02 03 04 05 06 07 读取线圈状态 读取输入状态 读取保持寄存器 读取输入寄存器 强置单线圈 预置单寄存器 读取异常状态 08 回送诊断校验 09 编程(只用于484) 10 控询(只用于484) 11 读取事件计数 12 读取通信事件记录 13 编程(184/384 484 584) 14 探询(184/384 484 584) 取得一组逻辑线圈的当前状态(ON/OFF) 取得一组开关输入的当前状态(ON/OFF) 在一个或多个保持寄存器中取得当前的二进制值 在一个或多个输入寄存器中取得当前的二进制值 强置一个逻辑线圈的通断状态 把具体二进值装入一个保持寄存器 取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定 把诊断校验报文送从机,以对通信处理进行评鉴 使主机模拟编程器作用,修改PC从机逻辑 可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送 可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时 可是主机检索每台从机的Modbus事务处理通信事件记录。如果某项事务处理完成,记录会给出有关错误 可使主机模拟编程器功能修改PC从机逻辑 可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送 强置一串连续逻辑线圈的通断 15 强置多线圈 3.1.5数据域 数据域包含了终端执行特定功能所需要的数据或者终端响应查询时采集到的数据。这些数据的内容
可能是数值、参考地址或者极限值。例如:功能域码告诉终端读取一个寄存器,数据域则需要指明从哪
个寄存器开始读及读取多少个数据,内嵌的地址和数据依照类型和从机之间的不同能力而有所不同。 3.1.6错误校验域
该域允许主机和终端检查传输过程中的错误。有时,由于电噪声和其它干扰,一组数据在从一个设
备传输到另一个设备时在线路上可能会发生一些改变,出错校验能够保证主机或者终端不去响应那些传
输过程中发生了改变的数据,这就提高了系统的安全性和效率,出错校验使用了 16 位循环冗余的方法。 3.1.7错误检测
循环冗余校验(CRC)域占用两个字节,包含了一个 16 位的二进制值。CRC 值由传送设备计算出来, 然后附加到数据帧上,接收设备在接收数据时重新计算 CRC值,然后与接收到的 CRC域中的值进行比较,如果这两个值不相等,就发生了错误。CRC 运算时,首先将一个 16 位的寄存器预置为全 1,然后连续把数据帧中的 8 位
6
字节与该寄存器的 当前值进行运算,仅仅每个字节的 8 个数据位参与生成 CRC,起始位和终止位以及可能使用的奇偶位都不影响 CRC运算。在生成 CRC值时,每个 8位字节与寄存器中的内容进行异或,然后将结果向低位移位,高位则用“0”补充,最低位(LSB)移出并检测,如果是 1,该寄存器就与一个预设的固定值进行一次异或运算,如果最低位为 0,不作任何处理。
上述处理重复进行,直到执行完了 8 次移位操作,当最后一位(第 8 位)移完以后,下一个 8位字节与寄存器的当前值进行异或运算,同样进行上述的另一个 8 次移位异或操作,当数据帧中的所有字节都作了处理,生成的最终值就是 CRC 值。 生成一个 CRC 值的流程为:
⑴ 预置一个16 位寄存器为 0FFFFH(全 1),称之为 CRC 寄存器。
⑵ 把数据帧中的第一个 8 位字节与CRC 寄存器中的低字节进行异或运算,结果存回 CRC 寄存器。
⑶ 将 CRC 寄存器向右移一位,最高位填以 0,最低位移出并检测。 ⑷ 如果最低位为 0:重复第三步(下一次移位);
如果最低位为 1:将CRC寄存器与一个预设的固定值(0A001H)进行异或运算。 ⑸ 重复第3步和第 4 步直到 8 次移位,这样处理完了一个完整的八位。 ⑹ 重复第2步到第 5 步来处理下一个八位,直到所有的字节处理结束。 ⑺ 最终 CRC寄存器的值就是 CRC 的值。 3.2 RS-485接口简介
RS-485 标准理想地用于多分支(multi-drop )应用和远程接口中。它允许在一条数据线
上连接32 个发送器和接收器,非常适合于多分支应用。由于允许使用4000 英尺长的电缆,
RS-485 收发器可以使用一个宽(-7V~+12V)共模方式范围来调整零电位偏差。因为RS-485
是一个差分接口,所以传输数据时完全可以抑制来自发送线的干扰。
图3-1 RS485引脚说明
7
3.3 NRF24L01无线模块内容简介
无线收发单元采用2.4GHz单片高速2Mbps无线收发芯片nRF24L01,nRF2401是挪威NoRDIC SEMICONDUCTOR公司的产品,它把射频收发电路集成在一块芯片上,可以用MCU模拟SPI通信协议实现数字传输。通过编程,nRF2401芯片的射频工作频率和输出信号的功率等参量可以非常方便地调节。
无线收发芯片nRF2401具有以下功能:
⑴ 125个工作频道,工作频道之间的转换时间小于200us ⑵ 无线通信数据具有地址检测和循环冗余检查。 ⑶ 信号的调制方式为频移键控(FSK) ⑷ 最大数据传输速率1Mbps ⑸ 最大输出功率0dB
⑹ 独特的Shock Burst TM射频信号发射模式。该模式降低平均发射功率,降低对微控制器数据传输速率的要求。
⑺ 接收灵敏度—93dBm。
⑻ 独特的DuoCeiverT模式。该模式支持两个不同工作频道的信号同时接收。 ⑼ 工作电压范围:1.9V一3.6V;具有正常、旁路和掉电3种供电模式。
SPI 接口:SPI 接口是标准的 SPI 接口,其最大的数据传输率为 10Mbps。大多数寄存器是可读的。
SPI 指令设置:SPI 接口可能用到的指令在下面有所说明。CSN为低后 SPI 接口等待执行指令。每一条指令的执行都必须通过一次CSN 由高到低的变化。
表3-3 SPI指令格式
指令名称 指令操作 格式 R_REGISTER 000A 读配置寄存器。AAAAA 指出读操作的寄存器地址 AAAA W_REGISTER 001A 写配置寄存器。AAAAA 指出写操作的寄存器地址 AAAA 只有在掉电模式和待机模式下可操作。 R_RX_PAYLO0110 读RX 有效数据:1-32 字节。读操作全部从字节0 开始。当AD 0001 读RX有效数据完成后,FIFO 寄存器中有效数据被清除。应用于接收模式下。 W_RX_PAYLO1010 写TX 有效数据:1-32 字节。写操作从字节0 开始。应用于AD 0000 发射模式下 FLUSH_TX 1110 清除TX FIFO 寄存器,应用于发射模式下。 0001 FLUSH_RX 1110 清除RX FIFO 寄存器,应用于接收模式下在传输应答信号过0010 程中不应执行此指令。也就是说,若传输应答信号过程中执行此指令的话将使得应答信号不能被完整的传输。 REUSE_TX_P1110 重新使用上一包有效数据。当CE 为高过程中,数据包被不L 0011 断的重新发射。在发射数据包过程中必须禁止数据包重利用功能。 NOP 1111 空操作。可以用来读状态寄存器。 1111 R_REGISTER 和W_REGISTER 寄存器可能操作单字节或多字节寄存器。当访问多字节寄存器时首先 要读/写的是最低字节的高位。在所有多字节寄存器被写完之前可以
8