微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于RlTOS和ISP功能数字仪表系统设计实现

基于RlTOS和ISP功能数字仪表系统设计实现

时间:02-09 来源:互联网 点击:

引言

Atmel公司的控制器以其集成度高、在线调试方便等特点广泛应用于工程实践领域,文中以某武器系统的前期预研为背景,讨论了数字仪表系统的软硬件实现过程,其主要功能包含:实时采集配电箱系统的6路正负模拟电压值及作战环境温度,并通过MSl2232B型液晶模块动态式显示。

1 软件特性

随着C语言在嵌入式系统中的广泛运用,软件系统的实时性、复杂性设计要求也越来越高,用通常的单任务无限循环结构与中断服务子程序相配合的编程思想已难以完成相关的软件设计或实现较为困难,RTOS(多任务实时操作系统)是现阶段较为流行的处理方式。

RTOS的基本设计思想是将多种系统输入和处理要求,按功能做成不同的任务函数体,并分配适当的优先级,参考Windows系统的多线程处理机制,将 CPU执行时间划分成若干区段,每个任务函数体对应一个时间片段.在规定的时间内执行完后允许切换到另一个任务,因各时间段非常短,表现的是多任务实时处理特性。因为任务并非同时执行且具备跳转特性,所以整个项目管理文件内可以有多个无限循环结构,且省略了main入口函数,这是RTOS最大的特色。文中以Keil集成开发环境为平台,利用RTX5l Tiny版本来完成整个软件设计过程。

ISP(在系统可编程)是一种适合Atmel系列器件的Flash技术,通过PC的LPT标准并行接口,能实时地将Intel格式的源程序代码下载到微控制器的相应存储区域。ISP的最大特点是简化了调试过程,提高了软件系统的可维护性,使其具备了在线升级特性。而且整个开发过程省去了反复插拔电路的操作。

2 系统硬件构成

本系统硬件主要包括如下几个模块:AT89S52型主控制器、ADC0809型模/数转换、MSl2232B型液晶显示器、温度传感器及语音报警等。其中 AT89S52型微处理器主要完成外围器件的硬件控制及相关数据解算,ADC0809采集6路模拟信号并输入主控制器,MSl2232B完成数字及相关标识字符的显示,配电系统的电压波动超出预定指标时由语音模块给出相应的报警信息。

2.1主控制器模块

主控制器是Atmel公司生产的AT89S52型单片微控制器,与常规C51系列相比,其突出特点是具有8KB闪速式存储器(降低了对外扩存储器的要求)、256B RAM内存(可容纳更多局部变量)、8个中断源及ISP在线可编程特性。

2.2液晶显示模块

MSl2232B属于图形点阵系列的显示器件,具有双行显示功能,其点阵结构为122×32,通过AT89s52给出必要的数据和指令来操作 MSl2232B主、辅控制器,从而完成图形、字符等相关信息的显示。该液晶显示模块还具有较强的通用性.用户用少量元件就可以构成一个完整的LCD系统。电路连接如图1所示。

2.3 A/D数据采集模块

由于本系统涉及多路模拟信号,故选择了AD(20809型通用模/数转换器,它采用逐次逼近方式完成A/D转换过程,其片内带有8路模拟开关,能自动锁存信号,输入电压范围是0V~+5V,因为该器件的输出具有1TrL三态锁存缓冲器结构,所以可以直接连人单片微控制器的I/O口。相关的接口连接如图2所示。

需要说明的是,在本系统6路电源信号中只有一路负电源信号符合ADC0809 0V~5v的输入特性,因此必须配备相应的反相电路,则通过LM358型运算放大器来完成。利用LM358还可以扩展监测范围(以降低测量精度为前提),这对于精度要求不太高的场合是可行的。图2中PC817型光耦用于检测负电压信号,当IN4为低电平信号时对应负电压信号,此时在MSl2232B的相应行位置给出“-”号标志,这不仅解决了正负电压同行显示的兼容性问题,而且减少了软件设计量(由6路简化为3路),同时使系统实时性相应提升。

2.4温度传感器模块

DSl8820是Dallas公司推出的l—Wire式数字温度传感器,它能实时采集现场环境的温度数据,并将相应的值转换为数字量输出。该温度传感器与AT89S52的连接如图3所示。

2.5语音报警模块

该模块主要实现异常情况下告警信息的输出,只要配电箱电压信号的波动值超出一定的范围,音频告警装置即给出不同的频率信号使蜂鸣器发声,以提示相关操作人员注意。

3 系统软件设计

按RTOS系统的程序结构要求,软件工程主要由如下4部分组成:初始化、数据采集与A/D转换、显示子程序、温度监测与告警模块。

如果将初始化设置为任务0,那么除了要完成相应的硬件配置与变量赋初值外,还必须启动所有其他任务,另外,因为初始化过程只须进行一次,所以Task 0还应当删除其自身。具体的程序代码如下所示:

void Init(void)_task_Intial

{

variable=0;

LcdInitialO;

ClrScreenO;

0s_create_task(AI)C0809I)ata);

os_create_task(DSl8820Temperate);

0s_create_tas

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

网站地图

Top