基于CAN总线的隧道环境监控系统的研究
分配相应的优先级。系统启动流程图如图3所示。

硬件初始化程序负责初始化芯片的系统时钟、中断向量、I/O配置、CAN配置等。操作系统初始化程序负责初始化任务的空闲链表和使用链表、时钟管理等。在启动任务调度之前需利用OSTaskCreate()函数创建需要使用的任务,设置不同任务的堆栈区和优先级。然后使用OSStart()函数开始多任务调度。多个任务之间需要共享环境参数,因此在任务创建之前分配一块共享内存以供任务间数据通信。以下重点介绍环境参数采集任务和控制设备任务的软件实现。
环境参数采集任务和控制设备任务中CAN总线使用CAN 2.0B协议,波特率设置为250 kb/s。STM32F105RCT6的CAN控制器中包含28个共享的可配置标识符过滤器组。通过过滤器组的设置,配合使用不同的接收FIFO寄存器,可以在硬件上设置区分不同标识符的报文。每收到一帧报文,首先与过滤器组中设置的报文ID进行比较。报文如果与过滤器组中设置的环境参数报文的ID匹配则将报文送入接收FIFO0寄存器,如果与过滤器组中控制报文的ID匹配则将报文送入接收FIFO1寄存器,如果都不匹配,则认定此报文为垃圾报文,直接丢弃。
环境参数采集采用轮询的方式,由区域控制模块轮询请求各数据采集点的数据,轮询时间间隔为1 s,轮询由任务延时函数OSTimeDLY()实现。在接收到所有环境参数采集点的数据后,这些参数将被存入共享内存。接着通过OSTimeDLY()函数的调用,实现将当前任务挂起,并延时时钟节拍1 s,然后调用OSSched()进行任务重新调度。在指定的时钟节拍到来之后,当前任务会被恢复为就绪状态。环境参数采集任务流程图如图4所示。

控制设备任务的优先级仅次于环境参数采集任务,在环境参数采集任务被挂起后运行。控制设备任务首先访问读取共享内存区的环境参数,根据阈值判断是否对各控制设备做出动作。在结束动作之后,本任务也会调用OSTimeDLY()函数挂起自己以实现下一优先级任务的运行。
接收本地控制中心调度任务和按键控制任务在创建之后就通过调用OSTaskSuspend()函数进入挂起状态,当接收到调度命令和按键中断以后,才会通过调用OSTaskResume()函数恢复任务,实现任务的执行。
本文给出了基于CAN总线的隧道环境监控系统的软硬件设计方法。系统中区域控制模块采用高性能嵌入式微处理器和嵌入式实时操作系统为核心,并使用稳定的工业现场总线,保证了系统的高可靠性和高实时性,满足了隧道环境的监控需求。
- 对TTCAN的分析(05-26)
- 嵌入式Win CE中CAN总线控制器的驱动设计与实现(05-01)
- μC/OS-II的多任务信息流与CAN总线驱动(07-11)
- 采用CAN总线实现DSP芯片程序的受控加载(11-08)
- 基于DSP的电动汽车CAN总线通讯技术设计(10-08)
- 基于DSP的CANopen通讯协议的实现(01-18)
