co测试仪软件设计(编辑修改稿)内容摘要:

的主要工作就是软件的设计, 在了解电路设计原理后,根据原理和目的画出 程序 流程图, 用汇编语言进行编程,如 A/D转换程序,报警程 序,显示程序及所用到的进制转换程序,即十六进制转换成十进制。 系统工作时,首先进行初始化等准备工作。 然后进行数据采集,经过硬件的放大滤波处理后,送至单片机进行数据的处理。 单片机根据输入的信号进行浓度计算,最后得到浓度值。 系统软件采取模块化结构,主程序分别调用初始化程序, A/D 采样程序, LED 显示程序(声光报警和外围控制程序),结果存储程序等,来完成整个传感器输出信号的智能量化过程。 设计中用到了 keil 编译软件,其作用是对编写好的程序进行编译,产生 HEX 文件,此格式的文件可以用于 proteus 环境中的仿真。 主要算法 初步考虑的算法 温度补偿方法 : CO 电化学传感器在其量程内输出为线性,所以在其工作温度范围内选取 2 个不同温度,每个温度下测量 2 个数据,就可以对输入输出特性进行标定。 表 21 标定数据 CO体积分数 电压 T=T1 电压 T=T2 P1 u(p1,T1) u(p1,T2) P2 u(p2,T1) u(p2,T2) 建立各个标定温度下输入输出特性的一次拟合方程, T1和 T2时多项式方程为 P1=A0 (T1) + A1 (T1).u (1) P2= A0 (T2) + A1 (T2).u 毕业设计 6 式中: A0(Ti) 为不同工作温度的零位值, i =1, 2。 A1 (Ti) 为不同工作温度的灵敏度,i=1, 2。 P1=A0(T1)+A1(T1).u(P1, T1) (2) P2=A0(T1)+A1(T1).u(P2, T1) (3) 解式 (2)、式 (3),求 T= T1 时的系数 A0(T1), A1(T1)。 P1=A0 (T2 ) +A1 (T2).u (P1, T2 ) (4) P2=A0 (T2) +A1 (T2).u (P2, T2) (5) 解式 (4)、式 (5),求 T=T2时的系数 A0(T2), A1(T2)。 系数 A0(T)与温度的关系可以用式 (6)表示: A0 (T) =a0+a1T (6) 将 A0(T1), T1和 A0(T2),T2带人式 (6),得到式 (7),式 (8) A0(T1)=a0+a1. T1 (7) A0(T2)=a0+a1. T2 (8) 解方程得到 a0, a1。 系数 A1(T)与温度的关系可以用式 (9)表示: A1 (T) =b0+ (9) 将 A1(T1), T1和 A1(T2), T2带人式 (9),得到式 (10)、式 (11) A1 (T1) =b0+b1T 1 (10) A1 (T2) =b0+b1T 2 (11) 解方程得到 b0, b1。 确定了系数 a0, a1, b0, b1后,可以确定温度系数 A0(T), A1(T),这样就可以根据测 量的电压值求出当前温度下的 CO体积分数值 [4]。 实际应用的算法 线性法 : 由于条件所限我们忽略了温度等因素对 CO浓度的影响,并且温度补偿方法比较复杂,软件编程及硬件电路都不易实现,因此我将采取一种比较简单且易于软硬件实现的方法来完成设计,即线性法 [5]。 CO气体电化学传感器输出为线性电流信号,电压和 CO气体体积分数为线性关系: P=K u。 式中: P为 CO体积分数,单位为 ppm; K为比例系数, K值约为 2; u为电压值,单位为 mV。 为便于实现仿真,我将 K值取作 2,即令 K=2。 毕业设计 7 第 3 章 软件 设计 主程序设计 主程序是软件的主体框架,它的主要任务是首先完成系统初始化,然后循环判断各个标志,一旦满足条件就进入相应的子功能模块中,当处理完后再返回到主循环中。 CO 检测的主程序流程如下图所示。 为了便于调试、连接和扩展,采用模块化程序设计技术,模块间任务划分明确、耦合清晰,避免了重复设计,彼此间具有相对的独立性。 系统上电后,首先对单片机自身初始化,包括设置堆栈指针、中断禁止及优先级的决定、设置各个定时器 /计数器的工作方式等,然后对 A/D 初始化。 A/D 初始化后系统开始工作,首先采样 CO 浓度并显示, 超过安全值报警。 超标准 ? 开始 初始化 开启 A/D 等待中断 转换完成 数据处理 声光报警 Y 结果存储 显示 N 图 31 主程序流程图 毕业设计 8 单片机初始化程序 : ORG 0000H AJMP MAIN ORG 0003H。 外部中断 0 地址入口 AJMP INTDATA ORG 000BH。 定时器 0 的中断向量地址 AJMP TINT0 ORG 0100H MAIN: MOV SP,70H。 把堆栈起始地址设在 70H MOV TMOD,11H。 设 T0、 T1 为 16 位定时器 MOV TH0,0FFH MOV TL0,0F7H。 T0 定时器初值 提供大约 250K HZ 的频率给 ADC0809 的 CLOCK SETB TR0。 开启 T0 定时器 SETB ET0。 允许 T0 中断 A/D 转换程序的设计 ADC0809 简介 ADC0809 是采样频率为 8 位的、以逐次逼近原理进行模数转换的器件。 其内部有一个 8 通道多路开关,它可以根据地址码锁存译码后的信号,只选通 8 个单段 模拟输入信号中的一个进行 A/D 转换 [6]。 : (1)8 路 8 位 A/D 转换 器,即分辨率 8 位。 (2)具有转换起停控制端。 (3)转换时间为 100μs。 (4)单个+ 5V电源供电。 (5)模拟输入电压范围 0~+ 5V,不需零点和满刻度校准。 (6)工作温度范围为 40~+ 85℃。 (7)低功耗,约 15mW。 : ADC0809 是 CMOS 单片型逐次逼近式 A/D 转换器,它由 8 路模拟开关、地址锁毕业设计 9 存与译码器、比较器、 8 位开关树型 A/D 转换器、逐次逼近。 (引脚功能 ): ADC0809 芯片有 28 条引脚,采用双列直插式封装。 下面说明各引脚功能。 IN0~ IN7: 8 路模拟量输入端。 OUT1~ OUT7: 8 位数字量输出端。 ADDA、 ADDB、 ADDC: 3 位地址输入线,用于选通 8 路模拟输入中的一路。 ALE:地址锁存允许信号,输入,高电平有效。 START: A/D 转换启动信号,输入,高电平有效。 EOC: A/D 转换结束信号,输出,当 A/D 转换结束时,此端输出一个高电平 (转换期间一直为低电平 )。 OE:数据输出允许信号,输入,高电平有效。 当 A/D 转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。 CLK:时钟脉冲输入端。 要求时钟频率范围是 101280kHz。 REF(+)、 REF():基准电压。 Vcc:电源,单一+ 5V。 GND:地。 ADC0809 的工作过程是:首先输入 3 位地址,并使 ALE=1,将地址存入地址锁存器中。 此地址经译码选通 8 路模拟输入之一到比较器。 START 上升沿将清除内部寄存器。 下降沿启动 A/D 转换,之后 EOC 输出信号变低,指示转换正在进行。 直到A/D 转换完成, EOC 变为高电平,指示 A/D 转换结束,结果数据已存入锁存器,这个信号可用作中断申请。 当 OE 输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线 上 [7]。 A/D 转换子程序 SETB EA。 开启总中断 CLR F0。 清 F0 MOV DPTR,6FF8H MOVX @DPTR,A。 启动 AD SETB IT0。 设为下降沿有效 SETB EX0。 开外中断 0 允许 CLR SETB SETB。 报警电路复位 毕业设计 10 LOOP: JNB F0,LOOP。 等待 AD 转换结束,电压值的十 六进制数读到 40H 里面 A/D 转换程序流程图 在启动 A/D转换时,由写信号 /WR和 ADC0809的地址锁存和转换启动。 在读取转换结果时,由读信号 /RD和 ADC0809的 OE信号。 令 =0, A0、A A2给出被选择的模拟通道的地址,令 A0A1A2=000,这时的 ADC0809的地址是6FF8H,且指向通道 0( IN0)。 开始 初始化 开启总中断 启动 AD 开外中断 0 循环等待 AD 转换完成 数据输出 图 32 A/D转换子程序流程图 N Y 毕业设计 11 报警子程序 程序流程图 : 报警程序 : ALARM: MOV A,40H。 当 40H 里面的电压值大于 53H 某个数时报警 SUBB A,53H JC OUT1 开始 40H 里的值赋给 A A大于 53H 里的值 清零 A大于 54H 里的值 清零 A大于 55H 里的值 置 返回 图 33 报警子程序流程图 N N N Y Y Y 毕业设计 12 CLR MOV A,40H。 当 40H 里面的电压值大于 54H 某个数时报警 SUBB A,54H JC OUT1 CLR MOV A,40H。 当 40H 里面的电压值大于 55H 某个数时报警 SUBB A,55H JC OUT1 SETB OUT1: RET 显示程 序设计 在单片机系统中,通常用 LED 数码显示器来显示各种数字或符号。 由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。 LED 显示是用发光二极管显示字段的显示器件,也可称为数码管,其外形结构如图所示,由图可见它由 8 个发光二极管构成,通过不同的组合可用来显示 0~ A~F 及小数点。 图 34 “8” 字型数码管 毕业设计 13 图 35 共阴极数码管与共阳极数码管 LED 显示器分为共阴极 和共阳极,共阴极是将 8 个发光二极管阴极连接在一起作为公共端,而共阳极是将 8 个发光二极管的阳极连接在一起作为公共端。 我们这次就是采用的共阳极 LED,所以这里要介绍共阳极数码管。 LED 显示器有静态和动态显示两种方式,静态显示是将共阴极联到一起接地,每位的显示段( adp)分别与一个 8 位的锁存器输出相连。 由于显示的各位可以相互独立,各位可以互相显示,只要在该位的段选线上保持段选码电平,该位就能保持相应的显示字符。 并且由于各位由一个 8 位锁存器控制段选线,故在同一时间内每一位显示的字符可以不同,这种方式占用锁存器较多。 动态显示是将所有位的段选线相应的并联在一起,由一个 8 位的 I/O口控制,形成段选线的多路复用。 而各位的阴极分别由相应的 I/O 口控制,实现各位的分时选通。 要 LED 能够显示相应的字符,就必须采用动态扫描方式,只要每位显示的时间足够短,则可造成多位同时显示的假象,达成显示的目的。 在数字电路中常常要把数据或运算结果通过半导体数码管、液晶数码和荧光数码管,用十进制数显示出来。 发光二极管的工作电压为 ,工作电流为几毫安到几十毫安,寿命很。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。