LCD人机交互功能的便携式高精度数据采集系统
在许多传统行业中,高精度温度数据采集系统是不可缺少的。近年来,随着高精度ADC价格的不断下降以及其功能的不断完善,研制廉价的多路、快速、高精度温度采集系统成为了可能。美国德州仪器公司(TI)推出的带24位ADC的微处理器MSC1210,特别适合于测量高精度温度、压力传感器等输出的微弱信号。本文以MSC1210作为测量、信号处理以及通讯的核心,设计了高精度温度采集系统模块。该系统测量通道易于扩充,测量精度高,可以快速地进行高精度数据测量。
系统总体方案设计
本系统的硬件部分主要由前端数据采集、处理电路和后端数据处理、LCD电路组成。两部分通过RS-232串行接口进行通信。系统的总体方案构图如图1所示。
数据采集部分的软硬件设计
硬件电路设计
数据采集部分的核心器件选用了MSC1210Y5。这主要是因为该微处理器具有24位的 ADC,其有效精度高于22位。其内部包含完整的前向通道(包括输入缓存器、模拟开关电路、可编程增益放大器和ADC以及数字滤波部分)和后向通道- DAC,这些都是完成测控系统的必须部分。此外,该处理器通过改变命令寄存器的方式对内部通道功能进行设置,用指令就可以选择输入缓存器、设置放大增益、控制通道开关切换、进行偏置校正等,使用非常方便。数据采集部分的电路结构原理图如图2所示。
本系统中两个核心芯片MSC1210Y5和 MAX3223的功耗都很低,因此,在设计中板上的电源(3.3V)由后端系统通过RS-232接口提供。除了RS-232接口的接线,以及接入J1、 J2插座的信号(8个AIN线、REF以及公共地)线外,本系统的硬件部分不再需要其它连接,使用非常方便。此外,设计时还在电路中预留了一部分接口线供以后扩展系统功能使用,包含了第二串行口以及四根可配置为SPI接口、中断输入和I/O端口的备用接口线。
软件设计
在基于此电路的高精度测温模块应用中,MSC1210Y5完成了微弱信号的多路切换、信号缓冲、编程放大、24位ADC、数字滤波、数据处理、信号校准以及串口通信等功能。MSC1210Y5包含2个串口,本设计中选取其中的一个串口用来与后端人机交互系统通信,负责接收后端发送的控制命令和控制参数以及发送前端采集、处理的数据。数据采集电路的程序主要任务是:控制内部的ADC的测量过程,读取转换的数据;与后端 (S3C44B0X系统)进行通信,读取上位机的命令和有关的控制参数,同时向上位机传送转换后的数据。数据采集电路的程序控制流程如图3所示。
串口开始接收上位机送过来的命令和数据时,将依次读到的后端系统的2字节串码(暂存在R6,R7)的控制字传送到MSC1210Y5内部寄存器ADCON1 和ADCON0,从而实现对ADC控制命令的写入。其后将ADCON3、ADCON2、ADMUX和PDCON寄存器的内部写入相应的命令和参数值,从而完成对MSC1210Y5内ADC的设置和启动。向后端系统发送数据时,由于ADC是24位精度,转换数据必须分为3个字节传送,即将寄存器1、2、3的 ADC转换结果依次通过送SBUF发送,同时在这个过程中还包含发送同步字符、CRC校验等过程。
嵌入式GUI应用系统概述
该系统后端的硬件部分主要由三大块构成:以S3C44B0X为核心的系统板,集JTAG调试电路、系统电源、LCD接口电路的辅助板,以及LCD屏。
后端的软件部分也由三个部分组成:系统启动加载程序,嵌入式实时多任务操作系统mC/OS-II,和基于mC/OS-II的应用程序。根据系统应用的需要,其中基于mC/OS-II的应用程序主要包括串行口通信程序和基于mC/GUI的图形用户接口程序。
系统中的串口用于S3C44B0X控制器向前端数据采集部分发送控制命令和控制参数,并实时接收前端发送的采集数据,送由控制器处理和进行LCD显示。当操作系统mC/OS-II启动时,自动初始化串行口。由于应用程序是多任务系统,为了实时监测串行口信息,设计时在系统中单开了一个串行口扫描任务,从而可保证信息不丢失。
由于mC/GUI提供了源代码,在开发应用程序时,用户可以首先将核心文件、LCD驱动文件和需要的字体文件包含在自己的工程里,然后再根据内存设备、输入设备、空间和窗口管理部分等硬件的实际需要来具体开发。开发步骤如下。
(1) 按照实际需要,定制自己的mC/GUI开发环境。其中包括对mC/GUI目录的筛选,以及目录中文件的筛选;
(2) 指定硬件设备的地址,编写接口驱动代码。这里需要修改LCDConf.h文件;
(3) 编译、连接、调试子程序;
(4)修改子程序并测试,增加需要的功能;
(5)若开发多任务应用,则需要修改GUI_MAXTASK和GUI_OS宏,实现mC/GUI与操作系统的结合;
(6)编写自己的应用程序。
由于mC/GUI不支持ARM7处理器S3C44B0X,因此,要把mC/GUI移植到系统平台上,需要自己完成mC/GUI在系统硬件平台上的各种驱动,具体包括S3C44B0X中内置的LCD控制器的正确初始化,以及画点、画线、填充等LCD驱动函数的编写等。
LCD 控制器初始化:S3C44B0X LCD控制器上的正确初始化包括各种控制寄存器的正确配置以及显存的正确设置与映射。其中显存的映射是将S3C44B0X专用LCD DMA的源地址设为显存起始地址值,该值是在rLCDSADDR1中配置。此外,LCD控制器还需对REGBANK中的其他可编程寄存器进行编程,以控制相应的寄存器值,并确定垂直/水平象素、数据接口的数据宽度、接口时间及刷新率等。
LCD驱动函数编程:在LCD的驱动函数中,最底层的驱动函数是画点函数和取点函数。在mC/GUI中显示字、图形都与这两个函数有关,它们直接与显存通话。为了显示出字符和位图,还须参考uC/GUI的 LCDMemC.c,写DrawBitLine1BPP、DrawBitLine2BPP和DrawBitLine4BPP函数,并配置 GUIConf.h和LCDConf.h中的常数。完成了上面的各个驱动函数后,就可以采用mC/GUI的Demo程序对所移植的mC/GUI进行测试了。
- 一种数字示波器的微处理器硬件设计(09-08)
- ADuC7128实现宽频带相位测量系统(08-18)
- 基于DS18B2O的测温系统设计 (09-24)
- 基于EFM32TG840F16 室内甲醛检测仪设计(03-20)
- 基于ARM的微伏信号在线监测系统(06-02)
- 宽带阻抗测量仪的设计——微处理器电路设计(01-20)