1、 物理与电子工程学院 嵌入式系统与应用 设计性实验报告 题目 基于 ARM7 的多通道仪表数据采集实验 系 别 物理与电子工程学院 年 级 07 级 专 业 电子信息工程 班 级 1 学 号 160407124 学生姓名 杨 小 军 指导教师 浦 炜 实验时间 2010 .12 1 目 录 引言 . 2 一 课题内容及目的 . 3 二 课题分析 . 3 三 系统设计 . 4 四 代码分析 . 8 五 实验结果 .10 六 实验总结 .10 参考文献 .12 附 录 .13 设计性实验报告 成绩: 指导教师签名: . 23 2 引言 在实际应用中 ,常常需要对现场的设备进行监测 ,通过采集设备的
2、运行参数随时了解、跟踪设备运行状态 ,进而对设备进行分析和诊断。传统的数据采集系统一般采用 PC 加数据采集卡 ,主要做法是将一块基于 IAS 或 PCI的板卡插入工业计算机或商用机上 ,将外部信号通过导线引至计算机 ,然后接入数据采集卡 ,通过定制的软件进行采集。但是采用数据采集卡的缺点是安装麻烦、易受机箱内 环境的干扰 ,而且由于受计算机插槽数量和位置、中断资源的限制 ,不可能挂接很多设备。从未来的发展方向上看 ,数据采集系统的数据采集部分应朝着强实时、多参数、高精度方向发展 ;数据存储部分朝着大容量、微型化、便携式方向发展 ;数据传输部分朝着多通讯方式、远距离数据传输方向发展。一般的基于
3、单任务顺序机制的单片机数据采集系统又很难胜任对于稳定性、实时性要求很高的场合。基于此,本设计了一种基于 ARM7 处理器,采用了串口、 USB、以太网 3 种与 PC 机的通讯方式 ,以适应不同场合的需要 。 采用多任务编程方法,每个任务监视一路 AD 转换, 每一路 AD 的转换结果在液晶屏上用一个条形图的长短来表示,直观地显示每路模拟输入电压的大小。可以通过文本框给每路 AD 设置警戒值,某路输入超出警戒线之后条形图中超出的部分会以闪动的方式显示。 3 一 课题内容及目的 采用多任务编程方法,每个任务监视一路 AD 转换, 每一路 AD 的转换结果在液晶屏上用一个条形图的长短来表示,直观地
4、显示每路模拟输入电压的大小。可以通过文本框给每路 AD 设置警戒值,某路输入超出警戒线之后条形图中超出的部分会以闪动的方式显示。并在数码管上对应的某通道的数值显示当超过警戒线数值 时,数字闪烁显示。 二 课题分析 数据采集系统置于被监控的设备处,通过传感器对设备的 电压 或者 电流 信号进行采样、保持,并送入 A/D 转换器变成数字信号,然后将该信号送到 FIFO 中。当 FIFO 中存放的数据到了一定数目时,由ARM7 从 FIFO 中读出,然后通过 ARM7 的以太网接口送给上位机。多路采集通道经过模拟开关后再进入 A/D 转换器。 CPLD 是整个系统的控制核心,它控制采集通道的切换、
5、A/D 转换器的启 /停、转换后的数据在 FIFO中的存放地址发生器、产生中断请求以通知 ARM7 读取存放在 FIFO中的数据等。 4 三 系统设计 1编写 OnKey()函数,响应键盘消息。流程图如图 1所示。 1) 这里设置了两个文本框,用来输入通道编号和该通道的警戒值,在键盘消息响应函数里针对两个文本框分别作出处理,只处理回车键和取消键,其他键由控件本身处理。程序里用 变量 EditNumber 指示当前要编辑的文本框控件;用变量 input 指示该文本框控件是否处于输入编辑状态。以此决定回车键应该执行的功能。 2)当文本框控件不是编辑状态时,回车将使其进入编辑状态,在程序里用 Set
6、WndCtrlFocus( )函数将焦点转移到该控件并用SetTextCtrlEdit() 函数设置为编辑状态;当文本框正处于编辑状态时,回车将使其退出编辑状态,并将要编辑的文本框切换到另一个文本框控件,取消键的处理和这种情况类似。 3) 如果当前要编辑的文本框是警戒值输入框,在编辑状态中回车 确定后,所输入的通道编号以及警戒值就会保存在数组WarnningData 中,代码如下: WarnningData Unicode2Int(pChannelTextCtrl-text)=Unicode2Int(pValueTe xtCtrl-text); 5 有 键 盘 消 息编 辑 通 道 文 本 框
7、 ?不 是 编 辑 状 态取 消 文 本 框 为 编 辑 状 态重 画 编 辑 文 本 框取 消 编 辑 标 志取 消 文 本 框 为 编 辑 状 态重 画 编 辑 文 本 框取 消 编 辑 标 志不 是 编 辑 状 态将 焦 点 移 到 文 本 框清 空 文 本 框置 文 本 框 为 编 辑 状 态重 画 文 本 框置 编 辑 标 志将 焦 点 移 到 文 本 框清 空 文 本 框置 文 本 框 为 编 辑 状 态重 画 文 本 框置 编 辑 标 志取 消 文 本 框 为 编 辑 状 态重 画 编 辑 文 本 框取 消 编 辑 标 志保 存 数 据取 消 文 本 框 为 编 辑 状 态重 画
8、 编 辑 文 本 框取 消 编 辑 标 志保 存 数 据返 回 T R U E 返 回 F A L S E 返 回 T R U E是 否否 否确 认 键 取 消 键 其 他 键 取 消 键 确 认 键是 是是是图 1 6 2 编写绘图显示任务 Display_Task, 绘制文本框和条形图等,并实现文本框编辑过程中和超过警戒值后的动画显示,其流程图为图2 所示。 绘 制 图 形 界 面c h a n n e l 处 于 编 辑 状 态v a l u e 处 于 编 辑 状 态c h a n n e l 闪 烁 显 示v a l u e 闪 烁 显 示超 出 警 戒 值 ?闪 烁 显 示 超 出
9、 部 分 显 示 采 样 值L C D 显 示 L E D 显 示否是否否是是图 2 7 1)程序中用 TextOut()函数显示文本框的提示信息,用数组edit 记录两个文本框是否处于编辑状态,用变量 IsEdit 指示提示信息是否显示。实际上, IsEdit这个变量在显示任务循环一次就改变一次状态,当 IsEdit=1 时将提示信息擦掉,否则保持显示不变。这就是闪烁显示的原理,表示 AD 转换结果的条形图超出警戒值的部分的闪烁也是这样实现的,随着任务的循环隔次的改变状态。 2)和变量 IsEdit 的作用类似, warnningx是条形图闪烁的指示变量。当某路 AD 转换的结果 resul
10、t_ADx 大于对应通道的警戒值 Warnni ngDatax时,根据 warnningx 的值决定条形图的长度是和 result_ADx 对应还是和 W arnningDatax对应,这样看起来条形图的长度是变化的,效果就是超过警戒线的那部分在闪烁。 3)这里条形图实际上是一个实心矩形,用 FillRect()函数填充。 5、编写 4 路 AD 采集任务 ADx_Task。 1)使用 GetADresult()函数即可得到某路 AD 输出的二进制代码。由于处理器的 8 路 10 位 AD 转换单元的最大输入电压是 2.50V,所以实际电压值就是 result_ADx=GetADresult(
11、x)*2.50/1024; 8 四 代码分析 增加数码管显示功能的代码如下: ZLG7289_ENABLE(); Delay(5); flah_flag=0xff; WriteSDIO(ZLG7289_CMD_DATA0|0); WriteSDIO(unsigned char)result_AD0%10); Delay(1); WriteSDIO(ZLG7289_CMD_DATA0|1); WriteSDIO(0x80|(unsigned char)result_AD0/10); Delay(1); if(warnning0=1) flah_flag WriteSDIO(ZLG7289_CMD
12、_DATA0|2); WriteSDIO(unsigned char)result_AD1%10); Delay(1); WriteSDIO(ZLG7289_CMD_DATA0|3); WriteSDIO(0x80|(unsigned char)result_AD1/10); Delay(1); if(warnning1=1) flah_flag 9 WriteSDIO(ZLG7289_CMD_DATA0|4); WriteSDIO(unsigned char)result_AD2%10); Delay(1); WriteSDIO(ZLG7289_CMD_DATA0|5); WriteSDIO
13、(0x80|(unsigned char)result_AD2/10); Delay(1); if(warnning2=1) flah_flag WriteSDIO(ZLG7289_CMD_DATA0|6); WriteSDIO(unsigned char)result_AD3%10); Delay(1); WriteSDIO(ZLG7289_CMD_DATA0|7); WriteSDIO(0x80|(unsigned char)result_AD3/10); Delay(1); if(warnning3=1) flah_flag WriteSDIO(ZLG7289_CMD_HIDE); WriteSDIO(255); Delay(1); WriteSDIO(ZLG7289_CMD_FLASH); WriteSDIO(flah_flag); Delay(1);