【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-题目需求
【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-题目需求
广东职业技术学院 欧浩源
一、引用
不管是简单的单片机应用,还是复杂的嵌入式系统,在我看来它们的本质结构是差不多的,都离不开“内核+外设”的典型架构,它们之间的区别更多是在内核性能高低和外设丰富程度上。
在前面的《CC2530入门教材》系列的6个课程中简述了该微控制器最常用的五大基础模块。目前关于CC2530的教材书籍对各个单一功能模块的简述有很多,但将各个模块融合成为一个综合性的实训案例分析的却很不多见。 因此,在本综合实训案例中,会将前面讲述的五大基础技能模块融合在一起,结合实际的应用场景,进行一个系统性的整体设计,既可以锻炼各个外设模块的开发能力,又能培养物联网整体项目设计的基本思维。
二、案例应用背景与功能
本案案例模拟一个仓库照明设备的数据采集系统,由一个现场测控终端和一个上位机应用软件组成,两者通过串口建立数据交互通道。
测控终端上电后,首先对照明设备逐一进行检测,然后向上位机发送一个终端上线命令帧,告诉上位机终端已正常上线;然后开始以每0.2秒采样一次的频率采集现场的光照数据和设备状态,并对现场光照度进行判断,如果光照低于已设置好的阈值,则自动打开应急灯,否则自动关闭应急灯。当终端收到到上位机的数据采集命令帧后,会以每0.2秒一帧的频率向上位机传送现场的光照度数值和两个照明设备的开关状态。当现场报警被触发后,终端将停止所有的工作,并向上位机发送现场报警命令帧,同时四个灯同时闪烁,以示现场发送报警。只有在收到上位机的解除报警命令帧后,测控终端才恢复初始状态,并重新向上位机发送一个终端上线命令帧,然后进入正常工作状态。
在上位机应用软件中,首先设置好串口参数并建立串口数据通道,然后根据案例的功能需求开始采集终端数据,然后将各种信息和数据可视化,并实现照明设备远程控制和现场报警解除等功能。
三、测控终端的设计
测控终端是一个以CC2530微控制器为核心的光照度数据采集和现场照明设备测控的设备。该终端的硬件电路以TI官方推荐的评估板为蓝本,市面上大部分的开发板都是这样的结构,有4个指示灯和2个按钮,具体引脚安排如下:
LED5:手动照明灯。
LED6:自动应急灯。
LED3:数据采集指示灯。
LED4:秒闪指示灯。
SW1:照明灯开关按钮。
SW2:现场报警按钮。
按照案例应用的功能需求,测控终端应该实现如下功能:
<1> 上电后,通过一个跑马灯程序实现各个照明设备的检测。
<2> 初始化和设备检测完成后,按照通信规约向上位机发送一个终端上线命令帧,表示测控终端已经进入正常工作状态。
<3> 利用定时器1实现0.2秒的定时和1秒的定时,在0.2秒的时候,进行光照度传感器的电压数据采集,并进行阈值比较从而决定自动应急灯的开和关;当到达1秒的时候,更换秒闪灯的开关状态,实现秒闪功能。
<4> 通过外部按键检测程序,实现手动控制照明灯。
<5> 设计外部中断程序,在中断服务函数中实现现场报警功能。现场报警触发后,停止定时器功能、光照数据采集和按键响应功能,四个灯同时闪烁,但保持串口通信连接,随时准备接收上位机的报警解除命令帧。
<6> 最重要的是串口通信功能,特别是各种命令帧的完整接收、正确解析和顺利执行。这是整个测控终端的核心部分,也是整个设计最难的部分,更是最容易出现BUG的部分。
<7> 当收到上位机启动数据采集命令帧后,点亮数据采集指示灯,以每0.2秒一帧的频率向上位机发送系统数据帧;当收到关闭上数据采集命令帧后,关闭设局采集指示灯,停止向上位机传送系统数据帧。
<8> 主函数的设计不行以前的那么简单,除了前面的设备初始化之外,在死循环中还有分析终端的各种运行状态,外部按键响应以及远程命令执行等功能。
四、上位机软件的设计
上位机通过串口与测控终端连接,模拟远程监控现场作业以及控制现场的重要设备。
打开上位机软件,将出现下面的界面,主要有串口连接和现场测控两个版面。首先,上位机软件对串口的参数进行设置,然后打开串口,建立上位机和测控终端的数据交互通道。这时候实际的工作还没有开始。
串口打开后,将测控终端复位,这时候上位机软件收到一个终端上线命令帧,识别出终端的ID号后,激活“远程控制”中的“开始采集数据”按钮。在“现场数据监测”中,有一个只读的文本框,在这里会显示上位机收到的每一帧的原始数据。
点击“开始采集数据”按钮,测控终端会收到一个启动数据采集命令帧,然后会以每0.2秒一帧的频率向上位机发送系统数据帧,报告现场的光照数据和照明设备状态。同时,上位机软件的“打开照明灯”按钮也可以使用了。这个按钮除了可以远程对现场的照明灯进行开关之外,还会根据现场照明灯的工作状态自动切换开关功能。
现场报警被触发后测控终端会向上位机发送报警命令帧,上位机收到报警命令后,立即显示现场报警信息,禁止“远程控制”中的两个按钮,并激活“解除报警”按钮。 在上位机软件中按下“解除报警”按钮后,会向测控终端发送一个解除报警命令帧。终端收到该命令后立即解除现场报警,并重新发送终端上线命令帧。上位机收到该命令帧后,将恢复初始的终端上线工作工作状态。
五、通信规约的设计
通信规约的设计往往容易被忽视,然而它却是是系统设计的核心内容,也是设计者对系统功能需求的理解,更是上位机和测控终端数据交互的法则。
本案例的通信规约比较简单,主要规定数据帧的结构和功能。系统的命令数据帧的长度固定,为8个字节,由帧头、地址域、命令域、数据域、和校验与帧尾这六个部分组成,具体格式如下:
<1> 帧头和帧尾为固定的两个数值:0xAF 0xFA。
<2> 每个测控终端都有自己独一的ID号,地址域为终端的ID号,其中0xFF的为广播地址,所有终端响应该命令帧。
<3> 和校验为前面6个字节相加256取模。
<4> 在数据域中,前面两个字节表示关照数据,第三个字节表示照明设备的开关状态。
<5> 命令域中的含义,详见下面的“具体命令操作”。
六、具体命令操作
<1> 终端上线命令帧。
在测控终端上电初始化完成后,由终端向上位机发送该命令帧。上位机通过该命令帧可以知道下行下行测控终端的ID号及在线状态。
<2> 启动数据采集命令帧。
终端收到该命令帧后以5Hz的频率向上位机传送光照电压数据及照明设备状态。该命令帧由上位机向终端发送。
<3> 关闭数据采集命令帧。
终端收到该命令帧后停止向上位机传送光照电压数据及照明设备状态。该命令帧由上位机向终端发送。
<4> 系统数据帧。
将测控终端的光照数据和设备状态上传致上位机,该数据帧由终端向上位机发送。
data1:表示电压数据的高8位。
data2:表示电压数据的低8位。
data3:每一位表示一种照明设备,0表示关闭,1表示开启。
bit0--表示照明灯的开关状态。
bit1--表示应急灯的开关状态。
<5> 远程打开照明灯。
测控终端接收到该命令帧,打开照明灯。该命令帧由上位机向终端发送。
<6> 远程关闭照明灯。
测控终端接收到该命令帧,关闭照明灯。该命令帧由上位机向终端发送。
<7> 现场报警命令帧。
测控终端的报警按钮被触发时发送报警命令帧。该命令帧由终端向上位机发送。
<8> 解除报警命令帧。
现场情况处理完毕,由上位机发送命令解除报警。该命令帧由上位机向终端发送。
七、结语
虽然这个测控终端的功能不算复杂,在程序设计上有些地方也进行了简化,但是五脏俱全,一个实际应用项目中该涉及的关键部分都涉及到了。就单一功能来看,每一个都没有难点。难是难在怎么把这个单一的功能串联起来形成一个完成特定业务逻辑的系统,而且还有应对外部事件相应和远程信息交互。有兴趣的朋友不妨自己设计一个完整的程序,这个对你个人的开发能力是一个有力的提高哦。
不管是CC2530还是其他的微处理器,它们都是解决问题的工具而已。掌握微处理器中每个功能模块固然重要,而然灵活应用微控制器中的功能外设解决实际的项目需求才是最终目的。而要达到这个水平,没有其他办法,只有亲力亲为,不断开发实践,不断积累经验。作为一个合格的嵌入式系统设计师,除了精通嵌入式开发之外,掌握常见的上位机应用开发也是非常有必要的。