D7D6D5D4D3D2符号尾数第一尾数第二尾数第三字节字节字节指数状态
由于有限的RAM空间,为了尽可能有效地应用每一个浮点数就某一个个别的浮点型数据而言,也可能有其他的意义,输出浮点型数据时,就把6个字节中的某几位用作表示浮点型数据所对应的数字串的ASCII码和小数点的位数等,但上述定义是最普遍的浮点型数据的代表含义。
在系统初始化的时侯,将ISP所指向的地址保存在变量SP当中,这样就将堆栈初值构造好了。每一次进行浮点数运算时,都将要进行运算的数据放到堆栈的栈顶或是放到寄存器ACC D当中,运算的结果一般放到堆栈栈顶。这样就可以大大的节省对RAM区的占用,当有浮点数运算需要时并不占用除堆栈以外的其他RAM空间。比如说当要计算二个浮点数的乘法时,先依次把2个数据压入浮点数堆栈,之后再调用浮点数乘法的子函数,最后把结果存放在栈顶。 本浮点数运算库涵盖了多元气体校准仪需求的各个方面。有应用于二次曲线校准的样本空间的常用统计量的计算和二次曲线校准的方法,具体算法参见具体的计算参见4.2.2的控制硬件部分原理部分,还有一些不是很常用的运算,如取自然对数或者常用对数等。
外围硬件接口控制模块
风扇控制与AD转换
在本多元气体校准仪系统里,用风扇调节机箱温度。在“风扇控制”菜单中对风扇开和关进行设置,具体参数如下:
风扇控制设置
风扇开:34 ℃
风扇关:32 ℃
主要的控制流程为:前台操作中有巡检风扇温度的操作,一旦发现风扇的温度低于阈值下限就关闭风扇;一旦发现温度高于阈值上限就打开风扇。具体的实现是在一个每隔一秒一次的定时中断来完成该前台操作。 本系统读取外部设备模拟输入的功能由统一的A/D接口实现。该接口不断的读取外部的模拟量并存放在约定好的存储区内,在后台操作中可以从这些存储单元直接得到想要的模拟量并进行处理。 还有,本系统通过PWM脉宽调制来控制MFC(质量流量控制器)。
多元气体校准仪中的外部参数是使用模拟传感器进行采集的,所以在进行处理之前必须将其进行数字化——变为数字量。我们采用的方案是使用DG128A本身携带的模数转换部件。
DG128A的模数转换部件由两个ATD模块ATD0和ATD1组成,我们只使用ATD0模块,它具有四个通道(PAD0—PAD3),我们采用的模式是对四个AD输入通道进行自动扫描(本多元气体校准仪中只使用了三个通道PAD0—PAD2)。其中机箱的温度通过热敏电阻由
20
输入通道PAD0采集,臭氧的温度由通道PAD1采集,标气的温度由通道PAD2采集。转换后的数字量存储在ADR0xH,ADR0xL(其中x=0,1,2)寄存器中,然后进行相应的处理。 在该应用中我们使用PB口作为控制信号,PA.2作为使能信号。
风扇控制机箱温度的程序代码如下:
BSR ADINIT ; 跳转到INIT 子程序初始化AD转换 BSR CONVERT ; 跳转到CONVERT 子程序进行转换 ;--------------初始化A/D---------------------------------------------- ADINIT: LDAA #$80
STAA ATD0CTL2 ;左调整,无符号结果 BSR DLAY ; 100 uS的延时 LDAA #$00 STAA ATD0CTL3
LDAA #$81 ; 10 位,采样时间2倍 A/D 时钟
STAA ATD0CTL4 ; 预分频 = Div by 4 (PRS4:0 = 1) LDAA #$FF STAA DDRA LDAA #$FF ;初始化B口使其为输出方式 STAA DDRB RTS
; -------------转换子程序---------------------------------------------- ; 模拟信号从 PORT AD0-2 中输入,结果分别保存在ADRxH和ADRxL中(其中x=0,1,2) CONVERT: LDAA #6
STAA ATD0CTL5 ;单个转换序列包括4个转换,
WTCONV: BRCLR ATD0STAT0,#$80,WTCONV ; 等待序列结束标志
LDD ADR02H ; 将转换结果放入到D寄存器中
;风扇控制程序,温度高于TMPH则转,低于TMPL则停
FAN: BSET PORTA,#04 ;风扇的使能信号
BRSET PORTB,#$20,SUB1
;---------------------------------------目前风扇处于停止状态 CPD TMPH ;判断是否高于启动风扇的温度 BPL CONVERT ; ;---------------------------------------高于需启动风扇的温度
BSET PORTB,#$20 ;启动风扇 BRA CONVERT
SUB1: ; 目前风扇处于转动状态 CPD TMPL ;判断是否低于停止风扇的温度 BMI CONVERT BCLR PORTB,#$20 BRA CONVERT
;为使AD转换器达到稳定,延时100 uSec DLAY: LDAA #$C8
21
DELAY: DECA BNE DELAY RTS
END
脉宽调制模块
多元气体校准仪中气体流量的控制是通过脉宽调制来实现的。
我们使用DG128A的输出比较功能,输出宽度可变的定周期连续脉冲,使用中断方式从OC5输出脉冲信号,脉冲宽度由TC5(定时输出比较寄存器5)决定,脉冲周期由TC7(定时输出比较寄存器)决定,可以修改TC5的值,改变输出脉冲的宽度。我们建立占空比与气体流速的对应关系表。通过改变占空比来实现对流量的控制。实现对气体流速的控制,从而获得所需浓度的样气。
PeriodHtimeHtime = Duty cycle
PWM 周期(Period)的计算 PERIOD=$1000(HEX) =4096(DEC) E-clock=8MHz, Prescaler=4 Frequency = (8 MHz)/(#Clocks_count*Prescaler)
= (8 MHz)/(4096*4) = 500 Hz 如果 PERIOD=($4096 Clocks) 则 Freq = 500 Hz
计算周期计数:
E-clock = 8 MHz, Prescaler = 4,IC/OC 分辨率 = 1/(E-clock/Prescaler) 那么输出比较的分辨率是0.5 uS 当频率为500Hz, 占空比为50% 时 计算: 频率为500Hz 周期T=1/F = 1/500 = 2mS
输出比较的频率F = E-clock /Prescaler/ = 2 MHz
clocks = F * D
clocks = (2 MHz)*(.5mS) = 1024 = $0400
脉宽调制的程序代码:
PWM: BSR TIMERINIT ;使用OC7和 OC5, OC7 = PERIOD , OC5 = HIGH TIME of PWM
22
BSR PWMINIT ;初始化定时器 TIMERINIT:
CLR TMSK1
MOVB #$0A,TMSK2 ; Prescaler = system clock / 4 MOVB #$88,TCTL1
MOVB #$A0,TIOS ; 选择通道5和7作输出比较 MOVB #$20,OC7M MOVB #$20,OC7D
MOVW #$1000,TC7H ; TC7 是 PWM的 \ MOVW #$0400,TC5H ; TC5 是PWM的\ MOVB #$80, TSCR RTS PWMINIT: CLEARFLG:
LDAA TFLG1 ; 要清OC5Flag, 首先读取它,然后写1 ORAA #$20 STAA TFLG1
WTFLG: BRCLR TFLG1,#$20,WTFLG ; 等待C5F Flag
LDD TC5H ; 从TC5中获取比较的值. ADDD #$0400 ; 增加500us 的High Time STD TC5H BRA CLEARFLG RTS
主控模块 由于本软件系统采用的是前后台的控制方式,前台操作即各种中断事件的响应完成了相当一部分的功能,所以使主控的流程非常简单。 该主控模块主要完成其他事实性操作上。 实时性操作包括:
检测定时校准序列或校准步骤的执行;
本多元气体校准仪的一大主要功能为可以自定义多个校准步骤(校准单一气体)和校准序列(按一定的顺序校准多种气体),并且还可以定时触发它们。这些操作完全可以在前台完成,但考虑到前后台的均衡性,我们把这部分操作放在了后台进行。
关于这部分的详细说明参见4.1.2的主程序说明。
23
4.1.2 主程序说明
主流程入口初始化浮点数堆栈初始化SCI1为接收状态初始化与上位机发来的点命令相关的变量初始化与定时模块相关的部分进行一些实时性的操作如检查是否有序列到期等开中断允许前台操作 图11程序主控流程图
主程序的简略结构如下:
main jsr maininit ;这里的初始化操作包括初始化SCI、A/D和PWN等 m2: cli ;应该随时打开中断允许各种前台操作 ;这里应该进行实时性的操作 bra m2 ;主流程是个死循环 rts ;
;下面是主程序的初始化部分 maininit call INTVSM,3
24
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库多元气体校准仪(5)在线全文阅读。
相关推荐: