APP下载

基于CAN的分布式测控实验系统设计

2022-05-20索明何薛福霞刘琼琼马培真

物联网技术 2022年5期
关键词:小灯嵌入式软件测控

索明何,薛福霞,刘琼琼,马培真

(1.江苏电子信息职业学院,江苏 淮安 223003;2.南京航空航天大学 计算机科学与技术学院,江苏 南京 211106;3.国网(北京)综合能源规划设计研究院有限公司,北京 100052)

0 引 言

CAN是由德国Bosch公司针对汽车电子领域开发的符合国际标准的现场总线,具有很强的可靠性、安全性和实时性,被广泛应用于汽车电子、工业控制、农业控制、机电产品等领域的分布式测控系统中。利用CAN可以很方便地实现多机联网。为了使学习者能够直观地学习CAN的结构与网络测控原理,本文采用基于构件化的嵌入式系统设计方法设计了基于CAN的分布式测控实验系统。

1 系统硬件设计

1.1 系统硬件设计方案

系统硬件设计方案如图1所示,通过CAN总线将多个电控单元(简称为节点)组成局域网,每个节点包括:MCU硬件最小系统,开关、键盘、A/D采样、温度传感器等输入设备,小灯、液晶显示屏等输出设备,CAN接口电路。通过CAN可实现某个节点(如节点C)对其他节点(如节点A和节点B)的检测与控制功能。

图1 系统硬件设计方案

1.2 嵌入式硬件构件设计方法及使用方法

根据图1的方案,系统硬件设计主要包含两部分:嵌入式核心硬件构件(最小系统)设计和嵌入式应用外设硬件构件设计。现以图2给出的开关硬件构件为例,说明硬件构件的设计及使用方法。图2中SW为硬件构件的接口注释;PTC为硬件构件的接口网标,具有电气连接特性,表示硬件构件的接口与MCU的引脚相连接。硬件构件移植和复用在不同应用系统中时,仅须修改接口网标。

图2 开关硬件构件与MCU引脚的连接

2 系统软件设计

为了实现嵌入式软件的可移植和可复用,增强其可维护性,嵌入式软件采用“构件化”设计方法和软件分层的设计思想。

2.1 嵌入式软件最小系统设计

在嵌入式技术基础实践中,一般以MCU控制小灯闪烁作为入门实验,对应的程序框架称为“嵌入式软件最小系统”。表1给出了在Keil MDK集成开发环境下的KEA128控制小灯闪烁程序的工程组织框架。

从表1可以看出,系统是按照“分门别类、各有归处”的原则将文件进行工程组织的,其中的04_Driver(MCU底层驱动构件)、05_App(应用外设构件)、06_Soft(通用软件构件)、07_Source(应用层工程源程序构件)的文件都是由本构件的.h文件和.c文件组成的。在此框架下可通过添加其他构件和修改应用层程序来完成不同功能的软件设计。若采用其他型号的MCU芯片,只需要对02_Core、03_MCU、04_Driver中的文件进行相应的替换,其他文件基本不需要改动或做非常少量的改动即可,以此实现了嵌入式软件在不同MCU芯片之间的可移植和可复用。

表1 KEA128软件最小系统(工程组织)框架及说明表

2.2 嵌入式软件构件设计方法及使用方法

现以开关软件设计为例,说明嵌入式软件构件的设计方法及使用方法。图2所示的开关硬件构件对应的开关软件构件由sw.h头文件和sw.c源文件组成,若要使用开关软件构件,只须将这两个文件添加到所建工程的05_App(应用外设构件)文件夹中,即可实现对开关的操作。

(1)开关软件构件头文件sw.h

2.3 基于CAN的分布式测控功能的设计与实现

CAN只使用了物理层、数据链路层和应用层,从而提高了通信的实时性。其中数据链路层和物理层的协议分别由CAN控制器和CAN收发器硬件自动实现。因此,CAN应用系统软件设计的主要任务是对其应用层程序进行设计。

2.3.1 CAN的应用层协议制定

现以3个CAN节点(节点A、节点B和节点C)进行通信为例,介绍基于CAN的分布式测控功能的设计与实现方法。在此对节点预接收的帧ID、发送或接收数据段的含义做表2所列的约定。

表2 CAN通信约定

3个节点通信均传输标准格式的数据帧,各节点通过验收过滤机制接收对应ID的数据包:节点A和节点B向节点C发送本节点的检测信息(被按下键的键名、电压值、温度值),并根据节点C的开关状态控制本节点的小灯状态;节点C接收来自节点A和节点B的检测信息,并向节点A和节点B发送开关状态。3个节点均通过中断方式接收来自CAN总线上的数据,接收到对应的数据包后,解析其数据段中的数据,并执行相应的功能程序。

2.3.2 CAN节点的应用层程序设计流程

节点A或节点B的主程序流程如图3所示。在主循环中,节点A或节点B向CAN总线上发送各自节点的检测信息(被按下键的键名、A/D转换的电压值、温度传感器DS18B20的温度值);然后通过查询CAN接收标志判断是否接收到CAN数据,若接收到CAN数据(对应节点C的开关状态),则节点A或节点B解析收到的CAN数据,并根据节点C的开关状态控制本节点的小灯状态。

图3 节点A和节点B的主程序流程

节点A或节点B的定时中断服务程序和CAN接收中断服务程序流程分别如图4(a)和图4(b)所示。其中,在定时(10 ms)中断服务程序中,每隔10 ms扫描一次键盘,这样做既可有效消除按键抖动带来的影响,又能有效防止按键连击现象,即1次按键只进行1次解释执行。在CAN接收中断服务程序中,接收CAN数据,并更新CAN接收标志,供主程序查询。节点C的主程序流程如图5所示。在主循环中,查询开关的状态,并分别向节点A和节点B发送其开关状态;然后通过查询CAN接收标志判断是否接收到CAN数据,若接收到CAN数据(对应节点A或节点B的检测信息),则节点C解析收到的CAN数据,并控制液晶屏实时显示节点A和节点B的检测信息。节点C的CAN接收中断服务程序流程与图4(b)相同,此处不再重述。

图4 节点A和节点B的中断服务程序流程

图5 节点C的主程序流程

3 系统功能测试

系统测试时,首先要将3个节点对应的程序分别下载至对应的MCU中,然后需要通过导线分别将3个节点的CAN-H和CAN-L连接,组成基于CAN的局域网,并将节点A和节点C作为终端节点,对其设置终端电阻,以防止反射波干扰。

如图6所示,给3个节点通电后,在节点C的液晶屏上实时显示节点A和节点B的A/D转换的电压值及DS18B20的温度。在转动节点A或节点B的ADC电位器的转柄时,节点C的液晶屏上将实时显示随之变化的电压值。在改变节点A或节点B的DS18B20的温度时,节点C的液晶屏上也将实时显示随之变化的温度值。分别按节点A的键盘中的2号键和节点B的键盘中的6号键时,节点C的液晶屏上将实时显示节点A和节点B中被按下键的键名。

图6 系统功能测试结果

以上结果说明节点A和节点B的ADC和DS18B20数据采集成功,同时说明节点A和节点B与节点C之间的CAN通信成功,实现了节点C对节点A和节点B的检测功能。

由图6可以看出,将节点C的开关SW1断开、SW2闭合时,节点A的小灯LIGHT1熄灭、LIGHT2点亮;将节点C的开关SW3闭合、SW4断开时,节点B的小灯LIGHT3点亮、LIGHT4熄灭。此结果说明系统实现了节点C对节点A和节点B的控制功能。

4 结 语

针对CAN技术抽象、原理难懂、学习难度大的问题,设计了基于CAN的分布式测控实验系统。通过该系统,可以直观地学习CAN的结构与网络测控原理。为了实现嵌入式系统设计在不同MCU和不同应用场合中的可移植和可复用,嵌入式硬件和软件均采用了“构件化”设计,同时嵌入式软件采用了分层设计,大大降低了嵌入式技术的学习难度和嵌入式系统的开发难度。经过反复的实践证明,该系统运行可靠,其关键技术可广泛应用于现场分布式测控领域。

猜你喜欢

小灯嵌入式软件测控
我的小灯
《测控电路》实践教学改革探讨
实时嵌入式软件的测试技术
全景相机遥控器嵌入式软件V1.0 相关操作分析
欧曼GTL牵引车小灯电路及控制逻辑
基于现代测控技术及其应用分析
向着新航程进发——远望7号测控船首航记录
无线电力小灯的制作
基于Eclipse的航天嵌入式软件集成开发环境设计与实现
航天嵌入式软件浮点运算误差分析与控制