基于CAN总线的智能照明控制系统软件设计方案.doc
《基于CAN总线的智能照明控制系统软件设计方案.doc》由会员分享,可在线阅读,更多相关《基于CAN总线的智能照明控制系统软件设计方案.doc(50页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、基于CAN总线的智能照明控制系统软件设计方案1.1 系统软件结构系统软件采用广泛流行的计算机高级语言C语言编写,它具有语言简洁、紧凑,生成目标代码质量高、程序执行效率高,容易阅读、具有很好的移植性,具有较强的结构性和便于模块化设计等优点。在本系统软件设计中采用模块化的设计思想,按照系统的功能作用进行模块划分,再依次对各功能模块进行编程设计。这样使系统在添加新功能时变得非常容易,在建立复杂应用和提高代码的可读性、可重复利用性方面也是非常有益的。特别是在对后续的产品更新、程序维护、升级等有极其重要的意义。本系统软件结构主要包括主节点软件结构和从节点软件结构两部分。1.1.1 主节点软件结构主节点是
2、整个CAN总线智能照明控制系统的核心单元,它管理了多达110个从节点灯设备,它要求具有强大的数据存储、运算处理能力和友好的人机界面。因此,主节点的软件结构设计的好坏以及其程序模块的划分是否得当,将会直接地影响着整个照明控制系统的性能优劣。因此,合理规划主节点的软件结构和模块划分是非常有意义的。在本设计中,经过精心的设计规划,将主节点系统软件划分为七大模块,它们分别为:系统初始化模块、CAN协议模块、TFT液晶显示模块、SD卡驱动模块、UART驱动模块、触摸屏键盘扫描模块以及蜂鸣器驱动模块。主节点软件结构如图1.1所示:系统初始化SD卡驱动模块TFT液晶显示模块 CAN协议UART驱动模块触摸屏
3、键盘扫描蜂鸣器驱动模块图1.1 主节点软件结构1.1.2 从节点软件结构从节点是单个照明设备单元的控制中心,照明灯设备执行器的开关动作以及照明设备开关灯的时间长短完全取决于从节点的控制。因此,照明设备是否正常工作直接取决于从节点的软件设计。合理划分从节点的程序模块,能够有效提高软件的健壮性。经过仔细思考后将从节点软件划分为六大模块,它们分别为:系统初始化模块、CAN协议模块、照明控制信号数据处理模块、键盘扫描及处理模块、照明灯定时控制模块以及LCD液晶显示模块。从节点软件结构如图1.2所示:系统初始化模块键盘扫描及处理模块照明控制信号数据处理 CAN协议照明灯定时控制模块LCD液晶显示模块图1
4、.2 从节点软件结构1.2 系统程序模块设计1.2.1 主节点程序模块设计由图1.1可知,主节点系统程序主要由七大模块构成,它们分别是:系统初始化模块、CAN协议模块、TFT液晶显示模块、SD卡驱动模块、UART驱动模块、触摸屏键盘扫描模块以及蜂鸣器驱动模块。然而,节点主程序是这些程序模块的调用者,是实现主节点功能的途径,所以其他程序模块的设计,目的都是为了服务于主程序,以实现主节点监控从节点灯设备的功能。如图1.3所示是主节点的主程序流程图。首先,初始化主节点硬件设备如:TFT彩屏、SD卡、CAN控制器、中断系统等,接着显示监控界面1,然后进入一个无限的工作循环。在工作循环中,处理如下工作,
5、先判断当前模式是不是进入了灯设置模式,如果是则停止向从节点发送数据请求帧。若不处在灯设置模式,则依次向各个从节点发送数据请求帧,请求从节点返回其灯数据。接着,判断是否有触摸按键按下,若有则作出相应的按键处理并刷新显示,最后检测主节点的运行、通信状况和对从节点是否离线的检测。这样主节点就处理完成所有的从设备监测、设置、离线检测、运行指示、通信指示等主要功能。图1.3 主节点主程序流程图1.2.1.1 初始化模块程序设计在主节点软件结构中,系统初始化程序是系统能够正常工作的基础,是系统在进入工作循环时首先执行的一段代码。通过系统初始化将主节点硬件设备设置成一个确定的状态,以等待后备的使用。其系统初
6、始化模块主要包括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口设置为输入,并
7、初始化触摸屏中断系统。紧接着开启彩屏内部时钟,配置彩屏电源,然后伽马校正并设置,最后开显示并清屏。具体的TFT液晶初始化程序流程图如图1.4所示。(2)UART0初始化:先通过配置管脚连接寄存器,使LPC2119的P0.0、P0.1管脚连接到串口0模块。再设置串口的帧结构,设置为8bit每帧,采用奇校验方式,接着设置串口波特率为115200bps.具体串口初始化流程图如图1.5所示。(3)CAN控制器初始化:首先,配置CAN1管脚功能,设置进入CAN控制器的复位模式,设置告警上限值为0x60,设置通信波特率为约400Kbps,允许CAN接收中断,并禁止验收滤波器,接着恢复到正常工作模式,最后初
8、始化CAN接收中断。具体CAN1控制器初始化流程图如图1.6所示。 图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中断号、激活,设置外部中断IN
9、T0为下降沿触发,清零中断标志位并使能中断。具体触摸屏中断初始化程序流程图如图1.8所示。 图1.7 SD卡初始化程序 图1.8 触摸屏中断程序1.2.1.2 CAN协议模块设计CAN协议模块是本设计的主要内容,也是设计中的重要内容。CAN协议程序模块设计的好坏对整个系统能否继续进行起着决定性作用。是关系到整个照明控制系统生死攸关的问题,是能否使系统健壮,通信可靠的关键。设计中,将CAN协议模块分成CAN驱动程序模块和CAN协议数据格式模块。下面我将分别详细介绍这两个部分。(1) CAN协议数据格式:主要采用源目的协议模式以一定的格式来对所要处理的数据进行填充和解释,然后发送给各个从节点。在C
10、AN接收环节中CAN节点通过验收代码寄存器和验收屏蔽寄存器,采用双滤波方式确定该数据是否是本节点的数据或广播数据,从而对数据进行选择接收或丢弃,并将CAN接收缓冲区内的数据依照先前制定的协议规则进行解译接收。下面首先介绍主从节点在应用层上共同的CAN协议规则。本系统采用的是CAN2.0B协议,该协议支持11位ID同时也支持29位ID,目的在于兼容CAN2.0A协议。而在本次运用中,由于系统规模还算比较小,我们采有11ID标识符已经能够满足设计上的要求。故,在本设计中采用的是标准帧格式(即11ID标识符的帧格式)。其帧结构如图1.9所示。图1.9 CAN总线帧结构11位ID分成三个域:源节点号、
11、目的节点号、数据类型。其中,源节点号是发送者节点号,目的节点号是接收者的节点号或者是广播ID=0xF,数据类型分为5种,强制型灯设置数据,在强制开关灯模式下使用,发送的数据全是灯状态,不含有灯时间字节,一帧数据中携带有多个灯设备的开关信号。常规型灯设置数据,在常规设置模式下,每帧灯设置数据只包含一个从设备灯的控制信息,包括开关灯时间及开关状态信息。确认信号,确认信号帧不带灯数据段,数据长度DLC=0x0,用于同步启动整个系统的灯设备。数据请求帧,表示本帧数据是请求数据帧,也是没有灯数据段的,用于主节点向从节点请求灯数据。灯状态数据帧,包含着一个从设备灯的剩余时间和开关信息。RTR位是用于区别该
12、帧是数据帧(RTR=0)还是远程帧(RTR=1)。DLC为数据长度码,用于表明数据域中含有的字节数。后面的灯设备状态数据含有5个字节,分别为时间和灯设备状态。灯设备状态有三种:开灯、关灯和离线。当开关状态字节为0表示节点关灯,1表示节点开灯,2表示节点离线。数据类型与ID20-ID18值的对照表如表格4-1.表4-1 数据类型对照表ID20-ID18帧类型000强制型灯设置数据001 常规型灯设置数据010 确认信号帧011 数据请求帧101 灯状态数据帧CAN协议数据格式实现主要由两个函数实现,分别为数据打包函数和数据解包函数。数据打包是将用户的数据,按照上述CAN协议数据规则,组装成数据帧
13、发送出去。解包程序则相反,是将CAN接收缓冲区中的数据,按照CAN协议数据规则解压理解,并产生照明控制信号,控制照明设备。CAN数据打包程序流程图如图1.10所示。图1.10 CAN协议数据格式打包函数CAN数据解包函数主要是将发送过来的数据按照CAN协议数据格式解析并接收。在主节点的数据解包中,由于在本设计中,从节点发送给主节点的数据只有一种即常规型灯数据,故在接收到数据后只要判断是不是该类数据即可。所以,它与数据打包函数并不完全对称,现给出CAN数据解包函数流程图如图1.11所示。图1.11 CAN数据解包程序流程图(2) CAN驱动程序模块:对CAN数据的发送和接收处理。对于主节点,发送
14、信息有三种:发送主节点设置信息。发送确定启动信号。发送数据请求帧。在主节点发送设置信息和确定信号后,接着发送数据请求帧,以请求从节点灯数据。从节点在接收到设置信息和确定信号后,按照CAN协议数据格式规则解译,产生灯控制信号,并启动定时器,开始控制从设备照明灯。CAN驱动程序模块主要包括帧发送函数与帧接收函数。在帧发送函数中,首先根据用户的入口参数(目的节点号/广播ID、数据类型等),调用数据打包函数,按照用户的要求,组装成CAN数据帧,并启动发送。而在帧接收函数中,先调用数据解包函数,提取源节点号、目的节点号、数据类型等,再根据数据类型提取数据段数据,最后释放CAN接收缓冲区,并标识接收完毕。
15、CAN帧发送程序流程图和CAN帧接收程序流程图分别如图1.12和图1.13所示。 图1.12 CAN帧发送程序流程图 图1.13 CAN帧接收程序流程图1.2.1.3 TFT液晶显示模块设计TFT液晶设备是一个输出设备,是用户与系统进行交流沟通的桥梁。而TFT液晶显示模块是实现人机接口界面,实现人机交流沟通功能的基础。因此,良好的TFT液晶显示模块,是实现友好人机界面的关键。设计中将TFT液晶显示模块划分为两层:TFT液晶驱动程序层和TFT液晶应用程序层。驱动层是最底层的程序,是直接与TFT硬件打交道的程序,需要对其硬件接口及操作时序有深刻的理解。所有的应用层函数都是基于该驱动层函数实现的。T
16、FT驱动层函数包括:TFT初始化函数、写字节数据函数、写字节命令函数、TFT读字节函数。下面分别讲解驱动程序函数的实现,TFT初始化函数已经在系统初始化模块中做过论述,在此就不再重复讲解了。写字节数据函数:打开TFT片选(LCD_CS=0),将数据/命令端口RS置高电平,以通知液晶控制器,发送的是普通数据而不是命令数据,接着给数据总线填入要写入的数据,TFT写控制端WR先拉低再拉高,形成一个上升沿,一个上升沿后数据就写入TFT液晶了,最后再关掉片选。写字节命令函数:打开片选,将数据/命令端口RS置低电平,以通知液晶控制器,发送的是命令数据而不是普通数据,接着给数据总线填入要写入的数据,TFT写
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 CAN 总线 智能 照明 控制系统 软件 设计方案
限制150内