1

关于投票
用单片机软件实现传感器温度误差补偿
用单片机软件实现传感器温度误差补偿
徐 军

(江苏省淮海工贸学校淮安223001)

1 引言

对高精度传感器,温度误差已成为提高其性能的严重障碍,特别是在环境温度变化较大的应用场合更是如此。依靠传感器本身附加一些简单的硬件补偿措施是很困难的,目前对于一传感器测量系统已大量引入了单片机,实现自动检测和控制。因此用单片机自身的特点,利用软件来解决传感器温度误差难题是一条有效途径。

在一单片机传感器测量系统中,要解决传感器温度误差补偿问题,首先要测出传感器点的温度,该温度信号作为多路采样开关采集信号的一路送入单片机。测温元件通常是安装在传感器内靠近敏感元件的地方,用来测量传感器点的环境温度,测温元件的输出经放大及A/D转换送到单片机,单片机通过并行接口接收温度数据,并暂存温度数据。信号采样结束,单片机运行温度误差补偿程序,对传感器信号的温度误差进行补偿。对多个传感器,可用多个测温元件,常用的测温元件有半导体热敏电阻、AD950测温管、PN结二极管等。原理框图如图1。

2 建立温度误差的数学模型

温度变化给传感器实际测量带来误差,表现在传感器的输入输出特性曲线上产生非线性变化。为解决这样问题,必须使问题简单化,找出它们间的关系,建立对应的数学模型。

传感器特性曲线y=f(x),如图2所示。

我们可以把该曲线按一定要求分成若干段,在此设分成n段,然后把相邻两段点之间的曲线用直线近似,这样可以利用线性方法求出输入值x所对应的输出值,这就是线性插值法。设输入值在(xi, xi+1)之间,则其对应的输出值y可由下式求得:
从上式可知,只要n取得足够大就可获得良好的精度。

若传感器的输入和输出之间的特性曲线的斜率变化很大,采用线性插值法,误差就很大,这时可采用二次曲线插值法,即通过曲线上3个点A(x0、y0),B(x1、y1),C(x2、y2)做一抛物线,用此曲线代替原来的曲线,如图3所示。曲线方程为一元二次方程,一般形式为:

y=K0+K1x+K2x2

式中K0,K1,K2为待定系数,可用曲线y=f(x)的3个点A,B,C的二元一次方程组求解,这就需要解联立方程组,计算较复杂,列出的程序也较复杂,因此可以用另外一种型式:

由此可见,利用3个已知点A,B,C的数值求出系数m0,m1,m2后,存放在相应的内存单元,然后根据某点的x值代入式(1)即可求出被测值y。

以上是对传感器建立温度误差的数学模型,用此模型可实现传感器温度补偿。

3 实现温度误差补偿的方法

首先给定K个温度值(T0,T1,T2,…,TK-1),测出每个温度点上传感器静态特性曲线在u 轴上的截距(u0,u1,…,uK),每个温度点上传感器特性曲线的数据要精确,必要时应在恒温箱内进行,这需要较大的工作量,如图4所示。

图中y为被测物理量,u为输出电压,利用最小二乘法曲线拟合求出截距u的多项式:
将b0,b1,b2,…,bK和计算上式的子程序送入内存,温度值T0,T1,…,TK-1和传感器对应的输出电压值u0,u1,…, uK-1按顺序分配方式存入内存,构成一个线性表,采集数据时,CPU按线性查找对应温度的电压值u,并按下式计算对应的被测物理量y:

y =(u-U) tgα

式中U是温度直线在坐标上的截距,可用线性插值由输入的T求得,α是温度直线与纵坐标轴u的夹角。

按图5流程编制补偿程序,并作为子程序与监控程序一并使用,以便采集数据时按流程图自动温度补偿。

对温度特性曲线斜率变化大的传感器,一般采用分段线性插值法,在不同温度T(i=1,2,…,K)下测出下列数值:
式中: yij—温度Ti时第j次输入传感器的被测物理量;

uij—温度Ti时第j次测得的传感器输出电压。

用拟合法求出各温度上的传感器静态输出输出特性的拟合多项式:

将b0,b1,b2,…,bk和以上多项式的计算程序写入内存,数据采集过程按图6流程图进行温度补偿,即由输入T和u查找和计算y值,采用的分段线性插值方法,只要K足够大,其误差就足够小。

4 结语

用单片机的软件实现传感器温度误差补偿,是一种简便、有效的方法。它可以大大提高传感器的测量精度,降低测量系统电路的复杂程度,提高可靠性,降低成本。特别是如硅阻、应变片、电容式等传感器受温度影响大,使用该方法可以提高它们测量精度。目前单片机广泛使用在自动检测仪表中,使用该方法实现传感器温度误差补偿,是一条行之有效的途径。


 
本文摘自《现代电子技术》
系统分类: 单片机
用户分类: 单片机
标签: 温度误差补偿
来源: 无分类
发表评论 阅读全文(1525) | 回复(1)

2

关于投票
远程自动报警系统的设计与实现
远程自动报警系统的设计与实现
毛钱萍

(南京工业大学信息科学与工程学院,江苏省南京市210007)

O 引 言

随着国家智能化小区建设的推广,防盗系统已成为智能小区的必备设备,特别是近几年,安全防范的迫切需要给家庭防盗报警系统提供了越来越广泛的市场。从国内来看,比较高档的防盗报警装置一般为进口产品,价格昂贵,且大多为有线连接方式。国内产品尽管不少,但大多为模拟电路形式,且结构和功能简单,可靠性差,难以联网。

在已普及的公共电话网基础上研制一种新型家用自动报警系统,这对于保障居民的生命财产安全,提高公安、消防、医疗、保安等部门的快速反应能力,有着十分重要的意义。为此,设计这个多功能远程自动报警系统装置,它可以监测火灾、盗贼入室行窃和老年人发出的呼救信号。整个系统以单片机AT89C51为核心,结合DTMF(双音多频)远程数据传输技术,采用无线数据传输方式,不需重新布线,特别适用于已装修用户及布线不方便的场合。

1系统工作原理

该系统主要通过一个单片机控制中心与电话网相连接。在正常情况下一直处在等待状态,监视是否有紧急情况发生。一旦有意外情况发生,通过发送中断信号驱动单片机,让它从等待状态进入报警过程,从而实现远程报警。具体工作过程如下:当传感器检测到有温度的异常、气体浓度的巨大变化、红外扫描到人的红外波以及老人按下了求救按键时,通过无线收发电路传给单片机的INI1引脚,引起单片机产生中断;然后开始执行中断程序,启动拨号电路,模拟摘机,收到了交换机反馈的拨号音后,开始拨打事先设定好的电话号码,若占线则自动重拨;检测到对方已经摘机后,启动语音电路,播放事先录制好的话音,播放完毕后挂机,整个系统的功能便已完成。

2电路设计方案

整个系统分成无线发射和接收、单片机控制中心、DTMF收发电路、语音电路等5大模块。系统框图如图1所示。

2.1无线收发装置

对于类似火灾这类意外,报警系统与现场需要有一定的安全距离。所以,当现场的传感器监测到有意外情况发生时,采用无线收发装置来给整个控制系统提供发生意外的种类、地点等具体信息。该模块可分为发射和接收两部分电路。

发射部分主要由编址电路、编码电路、无线电发射电路组成。电路通过CD40147、PT2262、MAX2608这3个集成芯片实现。首先,CD40147将不同的探测器编为不同的二进制代码,使单片机可以通过程序来判断报警的种类与地点;然后,通过PT2262编码,将不能直接调频发射的数字信号转化为中频,再通过调频发射芯片将报警信号发送出去。具体电路如图2所示。
接收部分由接收和解码两部分组成。接收部分的功能主要由调频接收芯片MAXl470来完成接收功能,该芯片只需要较少的元件,使用较为方便。解码部分由PT2272完成功能,解码出来的数据送到单片机中。具体电路如图3所示。
2.2单片机控制中心

本系统采用单片机AT89C51作为系统的控制中心。AT89C51是一种低功耗、高性能的8位单片机,片内有一个4 kB Flash PEROM(可编程可擦除的读存储器)。单片机接收到由FM接收机发送来的信号,通过固化在内部ROM中的应用软件来判断是什么地方发生了情况,然后转到相应的中断处理过程。系统中,89C51要控制语音芯片的开启、结束以及地址信息,实现芯片中存放的语音可以有选择地送到电话线上。它还要控制拨号芯片产生正确的DTMF信号,完成对远处电话机的呼叫。另外,还要能有效地判断当前线路的状态,如果遇到线路忙等情况时可以有相应的等待机制。在长时间不通的情况下可以更换不同的号码多次尝试,直到有人获得报警信息为止。如果是火警、匪警,在此呼叫期问,本地的警笛可以发出连续、刺耳的声音,起到提示或者威慑的作用。具体电路见图4。

2.3 DTMF收发电路

DTMF收发电路是实现电话线远程通信的关键部分。它需实现自动拨号、忙音识别、铃声识别、远程按键数字信号识别等功能。

系统选用INTEL微处理器接口功能较强的DTMF发送和接收器件MT8888。

MT8888与单片机及音频放大电路组合,实现各种信号音的检测及DTMF信号的产生,并将DTMF信号送到电话线上,实现报警和打电话共用一条线。具体电路如图4所示。图中,MT8888的DO~D3分别与AT89C51的P0.0~P0.3相连,RD、WR分别与AT89C51的RD、WR相连,IRQ/CP接至INT0,CS、RS0接至地址线P2.1、P2.0。

MT8888共有6种工作模式:DTMF模式、CALL(呼叫处理)模式、BURST(突发)模式、TEST(测试)模式以及中断模式。DTMF模式可以发送和接收DTMF信号,完成拨号的功能;CALL模式可以检测交换机反馈回来的各种信号音,该电路由单片机通过RS0、WR、RD、D0~D3等引脚进行控制;在中断模式,当接收或发送了有效的音频信号后,IRQ/CP引脚输出低电平,产生中断信号供给CPU,在延迟控制电压的跳变缘将数据锁存至输出端;在CALL模式,只能接收250 Hz~550 Hz的信号音,在拒收或无输入时,IRQ/CP引脚输出低电平。

电话线开关接口电路必须满足电话入网的条件,为此采用了电话线匹配变压器与电话线交流耦合,这样可以大大地减少电话线上的支流成分对后面电路产生的影响。同时,为了能够达到模拟摘机挂机的功能,在变压器与电话线之间接入了电磁继电器作为控制开关。

2.4语音电路

为了便于通信,系统在呼叫用户成功时需启动播放事先录制好的报警话音电路,也就是说,整个电路还需采用语音芯片来实现语音提示和报警功能。本系统中的语音电路采用美国ISD公司的优质集成语音芯片ISD1420来实现。

ISD1420芯片为单片语音记录、回放一体化芯片,记录时长为20 s,可划分为160小段,每段125 ms。可进行连续录音,也可进行分段录音。通过分段录音和放音,可以发出不同的警报声。当REC引脚为低电平时,实现录音功能;PLAYE引脚或PLAYL引脚为低时可实现放音。

具体电路如图4所示。语音电路的具体设置主要包括分段录音和分段放音。

3系统的软件设计与实现

3.1主程序

本程序初始地址为0000H,因此开机后自动运行,大部分工作都是在中断后完成的,所以主程序比较短,仅对MT8888进行初始化,同时写IE使得中断可以进行,然后就处于等待状态,直至INT0收到信号。

3.2中断子程序

系统功能的实现全部在中断子程序中,因此中断子程序是最重要的,它主要由拨号子程序、拨号音判断子程序、语音播放子程序、延时子程序以及电话号码表组成,其流程如图5所示。

3.2.1拨号音检测子程序

信号音的判断方法是:对T0引脚信号计数5 s,若计数值位于2175~2357范围内,则为拨号音;若计数值位于1041~1212范围内,则为忙音;若计数值位于425~475范围内,则为回铃音。在实际编程中,考虑到计数的误差以及程序的简化,可将范围适当放宽,但不能重叠。

3.2.2拨号子程序

拨号子程序是实现功能最主要的程序。在程序的执行中,80C51通过MT8888将DTMF信号发送出去,即完成拨号功能,同时又应用MT8888的DTMF接收功能判断电话是否被接通。在拨号子程序中要用到其他几个子程序,其总的结构是两个循环,同一号码不同位的选择循环嵌在不同号码的选择中,整个循环只有一个出口,就是接通电话播送了警报,否则就不停地循环拨号,这与系统的功能也是相适应的。

3.2.3其他程序

其他程序包括语音播放子程序、延时子程序以及电话号码表,都较为简单。其中语音播放程序先向ISD1420的地址引脚写入在中断开始时收到的报警数据,以此数据对应相应的报警录音段(其对应的形成应该在录音时人为设定,非本部分内容),然后向PLAYL引脚先后写入高、低电平,并维持低电平状态,ISD1420就自动将音频信号向电话接口播放。

4结束语

运用单片机控制技术和双向DTMF数据通信技术,设计出基于公共电话网的远程自动报警系统,与其他一些自动报警系统相比,具有多功能、低成本、易普及、高可靠性等突出优点,具有广泛的市场发展前景。


本文摘自《电子工程师》
系统分类: 单片机
用户分类: 单片机
标签: 报警系统
来源: 无分类
发表评论 阅读全文(1853) | 回复(1)

2

关于投票
单片机系统与标准PC键盘的接口模块设计
单片机系统与标准PC键盘的接口模块设计
刘元盛 李哲英 李维敏

概述
 
在单片机系统中,当输入按键较多时,在硬件设计和软件编程之间总存在着矛盾。对于不同的单片机系统需要进行专用的键盘硬件设计和编程调试,通用性差,使项目开发复杂化。标准PC键盘在工艺与技术上都已相当成熟,而且工作稳定,价格低廉。本设计实现了一个接口模块,它将标准PC键盘发出的位置扫描码,变换为标准的ASCII码和OEM扫描码或Windows虚拟键代码,再以并行或串行方式传送给上位单片机。

接口模块的特点

该模块在PC键盘与上位单片机之间起转换作用,它屏蔽了与PC键盘进行数据和命令交互的复杂过程,大大简化了上位单片机系统的输入设计;它实现了类似DOS操作系统中键盘中断服务程序的功能,使设计人员只需关心接收按键的结果,并可使用标准的键盘编码进行编程;它要求上位单片机通过8位并行接口与其相接,对于不能提供并行接口的系统,可使用SPI兼容的同步串行接口与其相接,特别是对于那些希望占用单片机的系统资源少而需要扩展的键数较多、仪器整体需要美观大方的应用场合,其性能价格比更具优势。该模块与单片机系统的连接关系如图1所示,在图中也给出与上位单片机相接的20脚接插件的信号定义。

计算机中标准PC机键盘的工作原理


图1 该模块与上位单片机系统的连接关系及信号定义

图2 键盘接口时序(a) 键盘发送时序;(b) 键盘接收时序

图3 单片机系统与标准PC键盘接口模块原理框图
键盘与主机通过键盘插头相接,键盘插头有5芯大插头和6芯小插头(PS/2接口)两种。接口信号有:电源、地、键盘时钟KB_CLK、键盘数据KB_DAT。正常工作时,键盘电路不断地扫描键盘矩阵。若有键按下,则以串行方式发送按键的位置扫描码给主板键盘接口电路。按下键时,发送接通扫描码,松开键时,发送该键的断开扫描码。断开扫描码一般是在接通扫描码前加一个断开标志字节F0H。若某键一直按下,则以按键重复率连续发送该键的接通扫描码。扫描码与按键的位置有关,与该键的ASCII码并无对应关系。表1第二列给出经实际测试得到的若干按键的位置扫描码。由表1可见,根据键的按下或释放及所按键的不同,这个序列可以是1、2、3、4、6、或8字节,可称之为位置扫描码序列。

标准键盘与主机的通信是双向的,并采用11位的串行异步通信格式,这11位数据包括:起始位0、8位数据位(LSB在先)、奇校验位P、停止位1。图2(a)给出了键盘发送时序。数据(KB_DAT)在时钟(KB_CLK)的上升沿改变,下降沿时有效,可被主机读取。图2(b)给出键盘接收时序。主机发送前,先将KB_CLK拉低,以抑制键盘发送,再将KB_DAT拉低发送起始位,然后释放KB_CLK线,键盘接管KB_CLK并产生时钟信号,主机在KB_CLK信号同步下发送其他位。

标准PC键盘接口模块的工作原理

基本工作原理概述

该模块的原理框图如图3所示。PC键盘与该模块通过专用插座相连,数据KB_DAT接到AT89C2051的P3.0引脚,时钟KB_CLK接到引脚。在PC键盘有键按下时,KB_CLK信号会引起AT89C2051的连续中断,通过定时器T0与外中断的协同工作,可将PC键盘发出的位置扫描码序列接收至缓冲区中。然后,在主程序中将位置扫描码解码、查表换算,再编码成一字节的WINDOWS虚拟键代码或两字节的OEM扫描码与ASCII码,并存入系统中FIFO栈。在上位单片机可以接收新键值时,将FIFO栈中编码数据以并行或串行方式传送给上位单片机。 为了能更清楚地指示系统当前的工作状态,在硬件上加装了电源、正在解码、FIFO栈溢出、码值准备好等指示灯。

中断解码的工作原理

由于键盘的按键输入是随机的,为了能实时地响应,在程序中使用定时器T0中断和中断协同工作,将位置扫描码序列恢复至键盘接收缓冲区中。中断服务程序用来将码值的一位移入缓冲区中,T0溢出的中断服务程序主要用来判断一次按键所发出的码是否已全部接收。系统设置T0的定时间隔为5ms,并在系统启动后就开始定时。由于在正常接收每个按键的码值序列过程中,键盘发送的每位数据间隔不会大于5ms,因此在每次中断服务中,首先要判断T0是否溢出过,若曾经溢出,则认为该次中断是一次新码值接收的开始,需将位计数器清零,否则只需移入一位数据即可,然后重新启动定时器,退出中断服务程序。在新按键码值序列接收完成后,设置blnDataValid标志,以通知主程序。

主程序的工作原理

主程序主要有四个任务:①将键盘接收缓冲区的位置扫描码通过查表等算法换成统一编码的一个字节Windows虚拟键代码或两个字节的OEM扫描码与ASCII码;②根据系统中CAPS LOCK键、NUM LOCK键及SCROLL LOCK键的状态信息控制键盘上三个指示灯的亮灭;③系统中设立的FIFO栈的维护;④与上位单片机码值传送的握手交互过程。主程序的流程图如图4所示。

在主程序中检测到blnDataValid标志后,即说明在键盘接收缓冲区中已接收到一个新的位置扫描码序列,程序根据这个序列的不同特点做不同的处理,最后再根据硬件跳线的设置得到相应按键的Windows虚拟键代码或ASCII码与OEM扫描码,图4中的跳线接至“W”位时,编码为Windows虚拟键代码。虚拟键代码是Windows系统中引入的一组按键编码常量,每一个按键都有惟一的码值与之对应。ASCII码与OEM扫描码则是在DOS系统定义的,但在Windows系统中沿用的按键码值定义,每一个按键都有两个码值与之对应,对于功能键,例如F1、HOME、UP等,只存在OEM扫描码,其ASCII码为0,参见表1。

FIFO栈是程序中设置的发送缓冲区,它是按“先进先出”原则建立的32字节循环队列,有一个队列头指针和一个队列尾指针。进队列时,编码数据进入由队列尾指针所指单元,同时队列尾指针增量,指向下一个单元,当数据不断进入队列,使尾指针指向队列末端时,尾指针循环重新绕回队列始端;出队列时,编码数据从队列头指针所指的单元取出,同时队列头指针增量,指向下一个单元,在头指针指向队列末端时,也要重新绕回队列始端,但头指针始终不能“超过”尾指针。如果按键速度快于上位单片机接收码值的速度,有可能尾指针绕回后与头指针再次相等,这时表明队列已满,不能再存入数据,如果此时再有键按下,那么栈溢出指示灯将点亮。 在系统中设立了三个标志分别对应于CAPS LOCK键、NUM LOCK键及SCROLL LOCK键的状态,每次有这三个键按下时,程序都要翻转相应标志,然后向键盘发送EDH命令,命令键盘对其上的三个LED指示灯做相应激励。

在向上位单片机发送FIFO栈首的码值之前要先检测ACK信号状态以确定上位单片机是否已取走上次码值。若ACK信号有效,则将码值锁存在P1口上,然后由P3.7产生模拟的时钟脉冲信号,一方面将8位并行码值置入串-并转换芯片(74LS165)中,另一方面将触发器(74LS74)置为1,使端变为0,为上位单片机提供码值准备好(PS_READY#)的状态信号,并点亮指示灯。在上位单片机中,可查询此状态信号也可利用此状态信号申请中断。上位单片机若采用并行接口方法,则发出读缓冲器信号(P_RD#)和片选信号(P_CS#),便可通过三态缓冲器(74LS244)取得键值;若采用串行接口方法,则需发出串行时钟(S_CLK),从74LS165的串行数据端(S_DAT)读回8位码值。在上位单片机读取完当前的键值后,ACK信号将由握手逻辑自动置为有效,系统可通过检测ACK信号的状态以发送下一个码值。


图4 主程序流程图
结语

实践证明应用该模块不但可大大地简化键盘输入电路及程序设计,而且在使用高级语言书写程序时更加方便。该模块可识别标准PC键盘上的所有按键,并能自动考虑SHIFT、NUMLOCK及CAPLOCK键对编码的影响。对于DOS系统中CRTL+按键、ALT+按键等组合键,该模块并未考虑,但相对上位的单片机系统而言,目前所提供的按键数量已足够用了。


 
系统分类: 单片机
用户分类: 单片机
标签: 单片机 PC键盘
来源: 无分类
发表评论 阅读全文(1289) | 回复(0)
总共 , 当前 /