微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM9和μC/OSII的多频道数据采集系统设计

基于ARM9和μC/OSII的多频道数据采集系统设计

时间:07-09 来源:21ic 点击:

引言

随着IT技术、电子技术、通信技术、以及自动控制技术的飞速发展,对工业现场数据的高速实时采集就成为电子产品和工业控制技术发展不可避免的一个环节。

本文针对高速实时多任务数据采集中的多任务实现算法以及实时性、实效性和高速性的要求,提出了基于ARM9和μC/OSII操作系统的智能化设计方案,实现了任务优先级动态调度、系统工作参数动态设定、系统内部软件智能化设计,针对低速外围设备进行了系统优化,并提高了系统可靠性改善了内部任务同步性。

  1 整体电路设计

整个采集系统的硬件电路如图1所示。首先利用多路调制电路对12路信号进行调制,这部分包含相应的信号转换、抗干扰、以及初步的信号处理等,使得各路采集信号能够达到ARM9内核对信号采集的要求。经多路选择和ADC采样后进入ARM9内核。为了实现对整个系统工作状态的实时监视、实时控制和实时调节,设置了上位机监视器和现场显示触摸屏,将用户所有要求显示的信息在上位机显示输出或者在现场LCD同步显示输出。采样按照采样频段分为高频段(300~200 ksps)、中频段(200~100 ksps)、和低频段(小于100 ksps)3个频段,每个频段由4个外部采样通道组成。ARM9内核与上位机的通信利用UART和RS232转换电路来实现。系统工作电源由统一的电源供给,在实现电压转换后对PC机和ARM9内核以及相应的工作电路提供电源支持。


图1 数据采集系统硬件电路

  2 系统总体软件设计思路

系统的软件设计原理如图2所示。12路采集信号经调制电路多路选择和ADC采样后进入各个采集任务内部通道。每一路采集通道都设计独立的数据采集、数据存储、数据处理以及数据提交任务。也就是说,每一路外部采集通道都对应一个独立的内部数据通道,而且本通道数据只在本通道内进行存储、处理和传递。各个内部数据通道任务之间只有在系统调度时执行时间上的先后关系、优先级关系,没有数据耦合关系。


图2 系统软件设计原理图

命令扫描部分由独立的上位机和下位机扫描任务完成对上位机监视器和下位机触摸屏的实时监控,一旦检测到用户命令,立即将其发送给命令解析和处理任务,由该任务对用户命令进行分析处理。命令处理完后将提取的结果发送给用户要操作的采样通道,使之按照用户要求运行。

各个频段的各个通道采集任务均设置两个数据缓冲区。双数据缓冲区为采样任务顺利存储提供了双重保证,使得采样工作一旦结束就有可用缓冲区,就可立即将数据存储而后进行下一次采集。也使得后续的数据处理任务减少数据等待时间,能迅速得到当前采样通道需要处理的数据,并在最短的时间内处理发送给下一级任务。

采样、数据显示、命令扫描都涉及外围设备,是整个系统所有任务里面运行速度最慢的,针对采样任务设置双数据缓冲区可以很大幅度地改善由于采样速度慢而造成的系统速率下降问题,显示和命令扫描部分的优化设计将在下文中详细说明。

  3 内部软件调度算法

系统内部各个频段命令如图3所示。命令扫描函数捕捉到用户命令后,对用户命令进行验证、分析、提取,而后将提取结果以广播的方式发送至各个频段的命令等待队列。该队列如得到新的命令,将用户命令发送给本队列下辖的各个采样任务函数,用户命令将立即得到执行,包括通道切换、变换采样周期、改变当前任务优先级、显示特定通道数据等。如没有得到新的命令,等待超时后采样任务按照原有方式继续工作。这也是一种智能化设计,以很简单的方式实现了按照用户命令随时对任何通道的查看、监督、操作、工作状态切换、通道切换、由单通道到所有通道并行实时采集切换等所有功能的任意切换。


图3 各个频段内部命令

3.1 任务优先级设置及采样任务优先级动态调度

μC/OSII操作系统是基于优先级的抢占式操作系统,所有任务必须有各自独立且唯一的优先级[1]。命令扫描和数据显示分别设置为最高优先级和最低优先级。扫描函数的最高优先级可以确保随时对用户命令进行响应,而显示任务由于其运行速速慢,将其设置为最低优先级。只要系统设计合理,适当避免低优先级任务的饥饿现象,即可实现将用户有效信息显示输出。

内部优先级设置规则是,低频段、中频段、高频段3个频段的任务之间优先级依次递减。低频段的采样周期明显比高频段长,在低频段数据采集的空闲时间里系统可以顺利地将CPU使用权切换给其他任务,使其他任务得到CPU使用权并执行。每个频段内部的各个任务的优先级从采样到数据存储、数据处理、数据提交依次递减。

为了使得整个系统实现优先级动态调度也可以修改其他采样参数,在软件设计时将所有频段采样任务的优先级、采样周期以全局变量的形式在进入操作系统之前进行设置,并将其定义为volatile格式分配独立的变量存储地址。而后设立独立的扫描任务,来专门完成这些参数的判断、修改、存储和动态更新。这样便使得系统除了可以按照根据采样周期设计的初始化优先级和初始化参数运行外,还可以依据用户自身需要对各个频段、各个通道的采样任务优先级以及采样频率进行设置和修改。修改完并确认后,修改任务会保存、更新当前系统工作参数并退出操作系统,而后重新启动并初始化,整个采集系统将按照全新的状态开始工作。当然,在这里用户优先级和采样周期设置是受限的,必须符合上文提及的优先级规则及各个频段对采样周期的要求。

3.2 任务时限设置

为了对整个系统的时间调度进行优化,首先说明几个内部工作时间。i386体系和Linux2.5内核中操作系统节拍率都设置为1000 Hz[2]。在这里将μC/OSII操作系统调度时间OS_TICKS_PER_SEC也设置为1000,也就是说操作系统的任务调度以ms为单位。ARM9内核CPU工作频率设置为400 MHz,即CPU机械周期以ns为单位。外设包括上位机命令扫描和上位机、下位机显示部分工作都以s为单位。μC/OSII系统中任务切换、调度及延时都以系统节拍率为单位,而内部代码的运行是以机械周期为单位。内部任务时限可以以节拍律为单位,也可以以实时时间为基准,获得一个绝对时间差。

单个采样任务通道内部只有采样任务需要时限设置。为了达到智能化,用消息队列的等待延时替代了采样任务时限,而该延时便是本通道的采样周期。其他的后续任务包括内存开辟、数据处理、数据发送,都依次等待上一级任务消息,受上一级任务钳制不设置任务时限。显示任务时限按ms设置为绝对时间差。

3.3 针对外设的时间优化

针对命令扫描和解析任务,将其设置为中断方式,在检测到有用户命令输入时发生中断,在中断里对用户命令进行解析、分析、提取和处理。在中断下半部分对命令进行广播式发布,发布到各个采样任务函数使其立即刷新执行。因为用户工作方式改变,命令刷新频率并不高而且任务量不大,所以完全可以利用中断的快速处理来实现这种功能。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top