基于CAN总线的智能照明控制系统软件设计方案
- 格式:doc
- 大小:3.17 MB
- 文档页数:50
基于CAN总线的智能照明控制系统软件设计方案
1.1 系统软件结构
系统软件采用广泛流行的计算机高级语言C语言编写,它具有语言简洁、紧凑,生成目标代码质量高、程序执行效率高,容易阅读、具有很好的移植性,具有较强的结构性和便于模块化设计等优点。
在本系统软件设计中采用模块化的设计思想,按照系统的功能作用进行模块划分,再依次对各功能模块进行编程设计。这样使系统在添加新功能时变得非常容易,在建立复杂应用和提高代码的可读性、可重复利用性方面也是非常有益的。特别是在对后续的产品更新、程序维护、升级等有极其重要的意义。本系统软件结构主要包括主节点软件结构和从节点软件结构两部分。
1.1.1 主节点软件结构
主节点是整个CAN总线智能照明控制系统的核心单元,它管理了多达110个从节点灯设备,它要求具有强大的数据存储、运算处理能力和友好的人机界面。因此,主节点的软件结构设计的好坏以及其程序模块的划分是否得当,将会直接地影响着整个照明控制系统的性能优劣。因此,合理规划主节点的软件结构和模块划分是非常有意义的。
在本设计中,经过精心的设计规划,将主节点系统软件划分为七大模块,它们分别为:系统初始化模块、CAN协议模块、TFT液晶显示模块、SD卡驱动模块、UART驱动模块、触摸屏键盘扫描模块以及蜂鸣器驱动模块。主节点软件结构如图1.1所示:
图1.1 主节点软件结构
系统初始化
SD卡驱动模块
TFT液晶显示模块
CAN协议 UART驱动模块
触摸屏键盘扫描
蜂鸣器驱动模块 1.1.2 从节点软件结构
从节点是单个照明设备单元的控制中心,照明灯设备执行器的开关动作以及照明设备开关灯的时间长短完全取决于从节点的控制。因此,照明设备是否正常工作直接取决于从节点的软件设计。合理划分从节点的程序模块,能够有效提高软件的健壮性。经过仔细思考后将从节点软件划分为六大模块,它们分别为:系统初始化模块、CAN协议模块、照明控制信号数据处理模块、键盘扫描及处理模块、照明灯定时控制模块以及LCD液晶显示模块。从节点软件结构如图1.2所示:
图1.2 从节点软件结构 系统初始化模块
键盘扫描及处理模块
照明
控制信号数据
处理
CAN协议 照明灯定时控制模块
LCD液晶显示模块
1.2 系统程序模块设计
1.2.1 主节点程序模块设计
由图1.1可知,主节点系统程序主要由七大模块构成,它们分别是:系统初始化模块、CAN协议模块、TFT液晶显示模块、SD卡驱动模块、UART驱动模块、触摸屏键盘扫描模块以及蜂鸣器驱动模块。然而,节点主程序是这些程序模块的调用者,是实现主节点功能的途径,所以其他程序模块的设计,目的都是为了服务于主程序,以实现主节点监控从节点灯设备的功能。
如图1.3所示是主节点的主程序流程图。首先,初始化主节点硬件设备如:TFT彩屏、SD卡、CAN控制器、中断系统等,接着显示监控界面1,然后进入一个无限的工作循环。在工作循环中,处理如下工作,先判断当前模式是不是进入了灯设置模式,如果是则停止向从节点发送数据请求帧。若不处在灯设置模式,则依次向各个从节点发送数据请求帧,请求从节点返回其灯数据。接着,判断是否有触摸按键按下,若有则作出相应的按键处理并刷新显示,最后检测主节点的运行、通信状况和对从节点是否离线的检测。这样主节点就处理完成所有的从设备监测、设置、离线检测、运行指示、通信指示等主要功能。
程序开始系统初始化进入设置模式?向所有节点发送请求数据帧触摸屏键盘扫描并刷新显示运行和从节点离线检测YN显示监控界面1
图1.3 主节点主程序流程图
1.2.1.1 初始化模块程序设计
在主节点软件结构中,系统初始化程序是系统能够正常工作的基础,是系统在进入工作循环时首先执行的一段代码。通过系统初始化将主节点硬件设备设置成一个确定的状态,以等待后备的使用。其系统初始化模块主要包括5大部分:TFT液晶初始化、UART0初始化、CAN1初始化、SD卡初始化、触摸屏中断初始化。
(1)TFT液晶初始化:首先,将TFT液晶接口管脚配置好,由于液晶接口的数据线和控制线都是采用LPC2119控制器的GPIO口模拟的,故要将其数据线DATA0-DATA15、数据/命令线(LCD_RS),读/写控制线(LCD_RD/LCD_RW),使能控制线(LCD_CS)管脚配置为输出口。触摸屏SPI通信接口也采用IO口模拟操作,将与触摸屏控制器片选线T_CS、数据输出线T_MOSI、串行时钟信号线T_CLK相连的GPIO口设置为输出口。与数据输入线MISO相连的IO口设置为输入,并初始化触摸屏中断系统。紧接着开启彩屏内部时钟,配置彩屏电源,然后伽马校正并设置,最后开显示并清屏。具体的TFT液晶初始化程序流程图如图1.4所示。
(2)UART0初始化:先通过配置管脚连接寄存器,使LPC2119的P0.0、P0.1管脚连接到串口0模块。再设置串口的帧结构,设置为8bit每帧,采用奇校验方式,接着设置串口波特率为115200bps.具体串口初始化流程图如图1.5所示。
(3)CAN控制器初始化:首先,配置CAN1管脚功能,设置进入CAN控制器的复位模式,设置告警上限值为0x60,设置通信波特率为约400Kbps,允许CAN接收中断,并禁止验收滤波器,接着恢复到正常工作模式,最后初始化CAN接收中断。具体CAN1控制器初始化流程图如图1.6所示。 程序开始彩屏液晶接口配置开启彩屏内部时钟彩屏电源配置伽马校正并开显示清屏程序结束 程序开始串口0管脚配置配置帧格式如8位字节长度、奇校验等设置波特率为115200bps、关除数分频器程序结束
程序开始CAN1管脚配置,进入复位模式设置错误告警值为0x60,波特率为400Kbps允许CAN接收中断,禁止验收滤波恢复到正常工作模式,初始化CAN接收中断程序结束 图1.4 TFT液晶初始化 图1.5 UART0初始化
图1.6 CAN1控制器初始化
(4)SD卡初始化:首先,配置SD管脚功能,将SD卡片选信号置高,连续发送至少74个时钟,将片选拉低(CS=0),发送复位命令CM0,使SD进入SPI操作模式。确定SD卡正确响应后,发送激活SD卡初始化程序的命令CM1,到此则初始化SD卡完毕。具体SD卡初始化程序流程图如图1.7所示。
(5)触摸屏中断初始化:首先,设置LPC2119的P0.3为外部中断INT0,设置外部中断0(触摸屏中断)为IRQ中断,设置IRQ中断号、激活,设置外部中断INT0为下降沿触发,清零中断标志位并使能中断。具体触摸屏中断初始化程序流程图如图1.8所示。
程序开始SD卡管脚配置片选CS=0,发送复位命令CM0,进入SPI模式SD响应?发送激活SD初始化程序命令CM1程序结束发送74个时钟?向SD卡发送0xffNYNY 程序开始外部中断0功能配置设置触摸屏中断为IRQ中断选择IRQ中断号并激活设置下降沿触发,清零中断标志位设置中断服务程序地址并使能外部中断0程序结束
图1.7 SD卡初始化程序 图1.8
触摸屏中断程序
1.2.1.2 CAN协议模块设计
CAN协议模块是本设计的主要内容,也是设计中的重要内容。CAN协议程序模块设计的好坏对整个系统能否继续进行起着决定性作用。是关系到整个照明控制系统生死攸关的问题,是能否使系统健壮,通信可靠的关键。设计中,将CAN协议模块分成CAN驱动程序模块和CAN协议数据格式模块。下面我将分别详细介绍这两个部分。
(1) CAN协议数据格式:主要采用源/目的协议模式以一定的格式来对所要处理的数据进行填充和解释,然后发送给各个从节点。在CAN接收环节中CAN节点通过验收代码寄存器和验收屏蔽寄存器,采用双滤波方式确定该数据是否是本节点的数据或广播数据,从而对数据进行选择接收或丢弃,并将CAN接收缓冲区内的数据依照先前制定的协议规则进行解译接收。
下面首先介绍主从节点在应用层上共同的CAN协议规则。本系统采用的是CAN2.0B协议,该协议支持11位ID同时也支持29位ID,目的在于兼容CAN2.0A协议。而在本次运用中,由于系统规模还算比较小,我们采有11ID标识符已经能够满足设计上的要求。故,在本设计中采用的是标准帧格式(即11ID标识符的帧格式)。其帧结构如图1.9所示。 源节点号目的节点号数据类型RTR数据长度码时的十位时的个位分的十位分的个位开关状态ID28 - ID25ID24 - ID21ID20 - ID18DLC4bit4bit3bit4bit1Byte1Byte1Byte1Byte1Byte1bit灯设备状态数据11ID图1.9 CAN总线帧结构
11位ID分成三个域:源节点号、目的节点号、数据类型。其中,源节点号是发送者节点号,目的节点号是接收者的节点号或者是广播ID=0xF,数据类型分为5种,①强制型灯设置数据,在强制开关灯模式下使用,发送的数据全是灯状态,不含有灯时间字节,一帧数据中携带有多个灯设备的开关信号。②常规型灯设置数据,在常规设置模式下,每帧灯设置数据只包含一个从设备灯的控制信息,包括开关灯时间及开关状态信息。③确认信号,确认信号帧不带灯数据段,数据长度DLC=0x0,用于同步启动整个系统的灯设备。④数据请求帧,表示本帧数据是请求数据帧,也是没有灯数据段的,用于主节点向从节点请求灯数据。⑤灯状态数据帧,包含着一个从设备灯的剩余时间和开关信息。
RTR位是用于区别该帧是数据帧(RTR=0)还是远程帧(RTR=1)。DLC为数据长度码,用于表明数据域中含有的字节数。后面的灯设备状态数据含有5个字节,分别为时间和灯设备状态。灯设备状态有三种:开灯、关灯和离线。当开关状态字节为0表示节点关灯,1表示节点开灯,2表示节点离线。数据类型与ID20-ID18值的对照表如表格4-1.
表4-1 数据类型对照表
ID20-ID18 帧类型
000 强制型灯设置数据
001
常规型灯设置数据
010 确认信号帧
011
数据请求帧
101 灯状态数据帧
CAN协议数据格式实现主要由两个函数实现,分别为数据打包函数和数据解包函数。数据打包是将用户的数据,按照上述CAN协议数据规则,组装成数据帧发送出去。解包程序则相反,是将CAN接收缓冲区中的数据,按照CAN协议数据规则解压理解,并产生照明控制信号,控制照明设备。CAN数据打包程序流程图如图1.10所示。 程序开始设置源节点ID设置广播ID广播发送吗?设置目的节点号配置数据长度DLC=8,填充所有灯开关状态配置数据长度DLC=5,填充灯时间和状态配置数据长度DLC=0填充数据类型值配置数据长度DLC=0配置数据长度DLC=5,填充灯时间和状态发送缓冲区锁定吗?启动发送NY程序结束YN数据类型0数据类型1数据类型2数据类型3数据类型5
图1.10 CAN协议数据格式打包函数
CAN数据解包函数主要是将发送过来的数据按照CAN协议数据格式解析并接收。在主节点的数据解包中,由于在本