智能仪器设计基础课程设计

来源:税务师 发布时间:2021-01-23 点击:

《智能仪器设计基础》
课 程 设 计 报 学 院:
专业班级:
自动化 姓 名:
学 号:
题 目 号:
27 题 目:27. 试设计智能仪表 实现智能数字显示仪表。要求8位数码管显示(4位显示测量值,4位显示设定值),4输入按钮(功能选择、数码管选择、数字增加、数字减少),可设定上下限报警(蜂鸣器报警)。适配PT100热电阻,测温范围为0℃~300℃。采用比例控制、并用晶闸管脉宽调制驱动1000W电加热器(电源电压为AC220V)。

摘要 运用单片机原理及应用-基于51与高速所学知识,做好智能仪器是含有微型计算机或者微型处理器的测量仪器,拥有对数据的存储运算逻辑判断及自动化操作等功能。它的出现,极大地扩充了传统仪器的应用范围。智能仪器凭借其体积小、功能强、功耗低等优势,迅速地在家用电器、科研单位和工业企业中得到了广泛的应用。

传感器取被测参量的信息并转换成电信号,经滤波去除干扰后送入多路模拟开关;
由单片机逐路选通模拟开关将各输入通道的信号逐一送入程控增益放大器,放大后的信号经A/D转换器转换成相应的脉冲信号后送入单片机中;
单片机根据仪器所设定的初值进行相应的数据运算和处理(如非线性校正等);
运算的结果被转换为相应的数据进行显示和打印;
同时单片机把运算结果与存储于片内FlashROM(闪速存储器)或EPROM(电可擦除存贮器)内的设定参数进行运算比较后,根据运算结果和控制要求,输出相应的控制信号(如报警装置触发、继电器触点等)。此外,智能仪器还可以与PC机组成分布式测控系统,由单片机作为下位机采集各种测量信号与数据,通过串行通信将信息传输给上位机——PC机,由PC机进行全局管理。

通过Keil软件编译,连接。

关键字:A/D转换器 EPROM PC机 STC89C51 铂金属电阻 目录 一 设计目的及原理 5 1.1设计题目和目的 5 1.1.1设计题目 5 1.1.2设计目的 5 1.2设计基本要求 5 1.3设计原理 6 二.硬件设计 7 1.1系统原理框图 7 1.1.1 STC89C51简介 8 1.2基本模块简介 11 1.2.1 Pt100温度测量接口技术 11 1.2.2热电阻PT100信号调理电路设计 12 1.2.3功率输出电路 12 1.2.4 4-20mA电流输出电路 13 1.2.5数码管显示及指示电路 13 1.2.6按键电路 15 1.2.7报警电路 15 当温度超过报警限时,单片机相应管脚输出一定频率的电平。蜂鸣器发出响声。1.2.8下载电路 15 1.2.9 通信电路 16 1.2.10输出驱动电路 16 1.2.11电源电路 17 1.2.12比例控制算法 17 1.1.13热非线性校正算法 18 1.3.1基于STC89C51单片机实现智能测温仪表软件设计 19 1.3.2基于STC89C51单片机的智能测温仪表程序框架 21 三.系统流程图 25 四.总电路图 26 五.体会心得 27 六.参考文献 27 软件c语言 28 一 设计目的及原理 1.1设计题目和目的 1.1.1设计题目 实现智能数字显示仪表。要求8位数码管显示(4位显示测量值,4位显示设定值),4输入按钮(功能选择、数码管选择、数字增加、数字减少),可设定上下限报警(蜂鸣器报警)。适配PT100热电阻,测温范围为0℃~300℃。采用比例控制、并用晶闸管脉宽调制驱动1000W电加热器(电源电压为AC220V)。

1.1.2设计目的 涉及智能仪表硬件与软件设计。智能仪器课程设计是智能仪器课程教学的重要环节,根据设计智能仪表产品的课程改革目的,特选择一些小型智能仪表产品作为课设题目,满足教学需求。单片机综合练习是一项综合性的专业实践活动,目的是让学生将所学的基础理论和专业知识运用到具体的工程实践中,以培养学生综合运用知识能力、实际动手能力和工程实践能力。

1.2设计基本要求 (1)正确理解设计题目,经过查阅资料,给出正确设计方案,画出详细仪表原理框图(各个功能部分用方框表示,各块之间用实际信号线连接)。

在互连网上收集题目中所用到的器件资料,例如传感器(热偶分度表等)、信号调理电路、AD转换器、单片机、继电器、电源、显示器件等。

在互连网上收集相关单片机的显示、AD转换、显示、控制算法等程序。

在充分研究这些资料基础之上,给出设计方案(选择信号调理电路、单片机、显示、按键输入、继电器驱动、电源等,简要说明选择的理由)
(2)用Protel99SE软件设计仪表详细原理图。

要求正确标记元件序号、元件数值、封装名。

(3)设计PCB图 在画PCB前应该购买元件,因为有了元件才知道封装尺寸,但也可以不购买元件,只到元件商店测量实际元件尺寸后,画封装图。

(4)熟悉单片机内部资源,学会ADC、SPI接口、定时器、中断、串口、I/O引脚等模块的编程。

(5)采用C语言开发所设计仪表的程序。

按照题目要求,确定仪表需要完成的任务(功能),然后分别编制各任务的程序。程序应该有说明,并有详细注释。

1.3设计原理 由热电阻传感器送来的电信号在测量桥路进行冷端自动补偿后,送入放大器,一面把信号进行放大,同时把非线性信号校正为线性信号,经线性放大信号一路A/D转换电路把模拟量转换成数字信号进行数字显示,另一路传输到调节网络,进行规定的比较运算,同时输出一个需要的控制信号和进行工作状态指示。

二.硬件设计 1.1系统原理框图 STC89C51单片机 按 键 报 警 指示和显示 热电阻输入 下 载 通 信 本设计智能温度数显表由温度监测、信号处理、输出控制三部分组成。其系统框图如图1所示,它通过Pt100热电阻传感器获取绕组温度值,经信号调理电路处理后直接送入控制器的A/D转换输入端。微控制器根据信号数据及设定的各种控制参数,按照嵌入的软件控制规律执行计算与处理,自动显示智能仪表数显表可测的温度范围、并根据当前状态输出正常、设定上下线报警等。

1.1.1 STC89C51简介 STC89C51系列单片机是从引脚到内核都完全兼容标准8051的单片机,有PDIP-40、PLCC-44、PQFP-44三种封装形式。

Intel公司MCS-51单片机的基本结构如图1-4所示。该单片机具有如下资源:
(1)一个8位算术逻辑单元(CPU)。

(2)4组,共32个I/O口,每口8个引脚,可单独寻址,其中P0、P2口具有地址/数据总线功能。

(3)两个16位定时/计数器(简称为定时器)。

(4)全双工串行通信口。

(5)5个中断源,具有两个中断优先级。

(6)128B内置RAM。

(7)具有64KB可寻址数据和代码区。

(8)各个模块采用三总线(地址、数据和控制)连接。

(9)开放总线接口,P0口分时作为8位数据总线与8位地址总线,P2口作为地址总线高8位。

每个MCS-51单片机处理周期包括12个时钟周期(又称为一个机器周期),每12个时钟(一个机器)周期用来完成一个操作,例如取指令等,指令执行时间为时钟频率除以12后取倒数,如果系统时钟是12MHz,则相当于执行每条指令所需要的时间1μs。

1.I/O端口 I/O端口0、1、2、3驱动器与锁存器。

2.存储器部分 RAM:51单片机具有128字节的片内RAM, FLASH:片内ROM,用于保存代码等,片内ROM采用FLASH结构的存储器构成,具有ISP功能,容量随型号不同而不同,对于AT89S51单片机,FLASH容量为4KB。

SP:栈指针 3.算术与逻辑运算部分 寄存器B:用于乘除等操作的寄存器,常保存运算的第2操作数。

ACC:累加器, TMP1、TMP2:暂存器,用于暂时保存数据。

ALU:8位算术逻辑单元ALU, PSW:程序状态字, 4.指令处理部分 程序地址寄存器:用于保存程序地址。

缓冲器:缓冲总线数据。

PC+1:程序计数器加1处理模块。

PC:保存下一条指令地址的16位地址寄存器,可寻址范围为64K。

DPTR:双数据指针,DPTR为两个8位缓存器(DPH和DPL)组成的16位缓存器,。

5.时序控制与指令寄存部分 定时与控制单元:
指令寄存器:保存指令并指令译码后,在定时与控制单元的配合下,使CPU执行各种操作。

WDT:看门狗。用于程序不运行时,自动复位单片机。

OSC:时钟振荡器,与外接石英晶体一起组成时钟振荡器。

6.ISP部分 ISP端口:通过该端口与PC通信,实现在系统编程(ISP)。

编程逻辑:控制ISP操作。

7.外围模块部分 该单片机的外围模块包括两个定时器,串行接口、4个I/O口与外中断模块。

1.2基本模块简介 1.2.1 Pt100温度测量接口技术 (1)铂金属热电阻简介 铂金属电阻精度高,稳定性好,具有一定的非线性,温度越高电阻变化率越小;
最常用铂电阻按照0℃时的电阻值分为R0=10Ω、R0=100Ω和R0=1000Ω等几种,称为Pt10、Pt100、Pt1000;

铂电阻阻值与温度之间的关系呈非线性,即 Rt = R0 ( I +αt +βt2 ) (t在0~630℃之间) 式中: Rt是铂热电阻的电阻值,单位为Ω; R0是铂热电阻在0℃时的电阻值,对于PT100,R0 = 100Ω; α是一阶温度系数,α = 3.912 ×10 -3 (℃) β是二阶温度系数,β = 6.179 ×10 -7 (℃) 铂热电阻PT100的阻值与温度之间的关系称为分度表,分度表给出温度每变化10℃对应的阻值。

温度 ℃ PT100 阻值 Ω 传感两端电压 mV 0 100.00 124.38 1 100.39 124.8 50 119.40 147.79 100 138.51 170.64 150 157.33 192.93 200 175.86 214.68 250 194.10 235.90 300 212.05 256.59 1.2.2热电阻PT100信号调理电路设计 基于PT100传感器测温的智能测温仪表 试采用STC89C51单片机实现智能测温仪表。要求8位数码管显示(上排4位显示测量值,下排4位显示设定值),4输入按钮(功能选择、数码管选择、数值增加、数值减少),可设定上下限报警(蜂鸣器报警)值。传感器为PT100热电阻,测温范围为0℃~300℃。采用比例 控制、并用晶闸管过零驱动1000W电加热器(电源电压为220VAC)。还可以输出与温度成正比的4-20mA电流远传到其他仪表。

由题目可知,该测温仪表需要如下电路模块:
(1)单片机电路(包括单片机最小系统、ADC、数码显示、按键、LED灯、电源等)。

(2)热电阻PT100信号调理电路 (3)4~20mA输出电路与加热功率驱动电路。

1.2.3功率输出电路 晶闸管过零驱动电路 1.2.4 4-20mA电流输出电路 1.2.5数码管显示及指示电路 A:显示电路 SM1显示的是热电阻测的电加热器的实际温度值,SM2显示的是人工设计的电加热器的期望温度值。数码管是有HC595芯片来驱动的,HC595接在SPI通信的3个接口上。

B:指示电路 指示电路是指示按键的输入状态的。D1、D2、D3、D4与S1、S2、S3、S4一一对应,当某个按键按下时,单片机相应的引脚将置低电平,使该按键相对应的二极管发光。

1.2.6按键电路 4个按键与单片机的接线图及个按键的作用如上图所示;
当单片机的引脚输入为低电平时,表示该引脚所对应的按键按下,单片机实现相应的功能。

1.2.7报警电路 当温度超过报警限时,单片机相应管脚输出一定频率的电平。蜂鸣器发出响声。1.2.8下载电路 下载程序代码用的是SPI接口,用ISP电缆对单片机进行编程。

1.2.9 通信电路 该模块用到跳线,不通信时D0、D1口作为常规I/O口使用;
通信时其作为通信口使用,实现单片机与单片机或是其它上位机的通信。

1.2.10输出驱动电路 采用光控过零驱动晶闸管,进而控制电加热器的通断电。

1.2.11电源电路 1.2.12比例控制算法 比例控制(P)是一种控制算法,其输出量out与温度偏差e=SV-PV成比例关系,写成数学公式是:
out= kp * e+out0 式中,e是测量温度值PV与设定温度值SV之间的偏差,Kp是比例系数。out是输出量。out0是对应e=0时的控制量,可由人工确定,通常取输出控制量 不同比例系数Kp下对象温度变化示意图 若是假设比例带为pb,控制量为out,设最大偏差值就是温度设置值。则有如下的伪代码如下:
e=PV-SV; kp=1/pb; out=kp*e+out0; if(out>outm) out=outm; if(out<0) out=0; 1.1.13热非线性校正算法 温度范围0~200℃的热电阻PT100的表格如下:
unsigned char code R_TABLE[21]={100, 119.40, 138.51, 157.33, 175.86,194.10,212.05}; 若是对于热电阻,有如下方法计算测得量RX。

假设Ri代表对应温度Ti的热电阻,测量得到的热电阻值为Rx,查表可知它位于(Ri,Ti)和[R(i+1),T(i+1)]两个标定点之间,则热电阻Rx所对应的温度值Tx可由下式求得,其算法示意如图10-2所示。

两相邻电阻之间差50℃,则(Ri+1-Ri)/50为直线斜率。

可以得到Ri到RX的温度差为:
T(Rx-Ri)=(50/(Ri+1-Ri))*(Rx-Ri)
线性标度变换的前提条件是传感器的输出信号与被测参数之间呈线性关系 Ax 实际测量值(工程量) A0 一次测量仪表的下限(测量范围最小值)。

Am 一次测量仪表的上限(测量范围最大值)。

N0 仪表下限所对应的数字量。

Nm仪表上限所对应的数字量。

Nx 实际测量值所对应的数字量。

1.3.1基于STC89C51单片机实现智能测温仪表软件设计 (1)初始化任务 I/O引脚初始化(按钮、LED灯、ADC、DAC、E2PROM和SPI用引脚初始化)。

定时器0初始化。

中断初始化。

(2)按钮任务:检测按钮并执行按钮动作,需要软件消除抖动。

功能选择按钮:循环选择功能,例如,正常运行、设置报警上限值、设置报警下限值、设置温度给定值、设置比例控制回差值等功能。在数值设置状态,每按一次按钮,上排4位数码管显示功能码,下排显示设置值;
在正常运行状态,上排显示测量值,下排显示设定温度值。

数码管选择按钮:选择需要设置数值的数码管。

数值增加按钮:用于设置数值的增加,每按下一次,数值加1。

数值减少按钮:用于设置数值的减少,每按下一次,数值减1。

按钮设置值应该随时保存到24C02中。

(3)扫描显示任务:数码管位选择与段码输出,就是将显示缓冲区的内容发送到数码管显示,将要显示的数据,组合成数组,再转换成十进制数字,发送到74HC595。不需要每个主程序循环都发送显示任务,因此可在定时器0中断中设置显示任务执行标记,当标记为1时,执行显示任务。由于显示内容随按钮选择的功能不同而不同,因此功能选择按钮任务中应该给出显示控制标记,控制显示内容。

(4)TLC1549数据获取任务,需要将读TLC1549的程序写成函数。在定时器0中设置ADC任务执行标记,当该标记为1时,执行ADC数据获取任务。要求连续读取8个数据,然后取平均值。并将完成滤波后的数据存入显示数组。

(5)24C02读写任务,需要编制读写24C02的函数。单片机用软件控制引脚实现I2C接口,在上电时,应该读出所有保存在24C02中的数据到数组中;
在设置各种数据时,应该随时将设置的数据字节写入24C02。

(6)TLC5615任务,该任务是把温度转换成的代表电流的数字写入TLC5615,实现电流输出。该任务在定时器0给出的标记控制下执行。

(7)定时器0中断任务,该任务是产生间隔的定时信号,ADC转换、扫描显示、DAC输出以及采样周期、数据计算等都需要定时器0给出标记,在标记为1时,才能执行任务。

(8)数据处理任务 ①将TLC1549输出的数字通过标度变换转成温度值。因为PT100的电阻值与温度之间呈非线性,因此需要查表法矫正。

②具有回差比例控制算法实现。根据温度值控制晶闸管使接触器得电或失电,使加热器加热或是不加热。所谓回差比例控制就是当温度达到并超过设定值时,停止加热;
当温度低于设定值时,开始加热。而有回差比例控制就是有两个设定值,当所测温度高于上设定值时停止加热;
当低于下设定值时,开始加热,上下设定值之间的温度差称为回差。回差比例控制可以防止接触器频繁动作。

③实现报警算法。上限报警与下限报警分别给出不同的报警声。

④计算TLC5615需要的数字,就是将温度值转换成电流值。

1.3.2基于STC89C51单片机的智能测温仪表程序框架 基于STC89C51单片机的智能测温仪表程序框架如下。

#include <AT89X51.H> //51单片机头文件 定义数码管译码数组;

定义数码管位选数组;

定义保存在24C02中数据的数组;

定义时间标记变量;

//display_time,sample_time,control_time,DAC_time等 定义其他全局数组与变量;

声明函数原型;
(TLC1549,TLC5615、24C02等函数)
void main(void) { 定时器初始化;

引脚初始化;

//按钮、LED灯、ADC、DAC、E2PROM和软件SPI用引脚初始化 其他初始化语句;

从24C02读数组语句;
//将保存的数据读到数组,每次单片机上电后,就使用该数组中的数据 while(1) { 按键处理语句;

{ 功能选择,控制周期、设定值、回差值、报警值等输入;

将数组写入24C02语句;

//将按键输入的数据保存到数组 } //数码管显示语句:
if(display_time= =1) //如果显示标记display_time=1,则执行显示任务,完成一位数码管显示 { 数码管扫描显示语句;
//采用两片74HC595扫描数码管 display_time= =0;

} //ADC转换与数字滤波语句:
if(sample_time= =1) //如果数据采样标记sample_time=1,执行ADC转换任务 { TLC1549转换、数字滤波与非线性校正程序;

sample_time= =0; } //ADC输出数值判断、报警、比例算法运算与控制量输出:
if (control_time= =1) //如果控制周期标记control_time=1,则实现控制算法 { 温度值判断与报警语句;

比例算法运算语句;

控制量输出语句;
(引脚赋值语句)
control_time=0; } //DAC转换语句:
if (DAC_time= =1) //如果DAC转换标记DAC_time=1,将数据写入DAC { TLC5615数据输出语句;

DAC_time=0; } } //定时器0中断服务程序,用于产生显示、ADC转换与控制周期标记 void Timer0() interrupt 1 { static unsigned char n,m,k,h; n++; m++,k++;
h++; if(n= = display_time0) //display_time0为显示周期 {n=0; display_time=1; } if(m= = sample_time0) //sample_time0为ADC转换周期 {m=0; sample_time=1; } if(k= = control_time0) //control_time0为控制周期 {k=0; control_time=1; } if(h= = DAC_time0) //DAC_time0为DAC转换周期 {h=0; DAC_time=1; } } 三.系统流程图 初始化 开始 A/D转换程序 滤波程序 数值转换 报警 数码输出 控制输出 数码转换 四.总电路图 五.体会心得 本设计实现了温度的测量,在达到设计要求的同时也具备一定的扩展性,通过简单的软件修改,即可实现温度上下限控制和越限报警功能。本次设计使我更加深刻的认知到智能仪表控制的在现代仪表控制中的实用性,重要性。在以后的学习中我将加大智能仪表设计的学习。在课设中认知到了整个系统结构紧凑、简单可靠、操作灵活、功能强、性能价格比高,较好地满足现代生产和科研的需要。

六.参考文献 《单片机原理及应用》
夏路易 《单片机初级教程》
张迎新,杜小平,樊桂花等 《智能仪器设计基础》
赵新民,王祈 《传感器与单片机接口实例》
来清民 《微型计算机原理及应用》
侯晓霞,王建宇,戴跃伟 《测控电路设计》
周严 软件c语言 #include < AT89X51.h > //Atmega16单片机头文件 #include <macros.h> Flash unsigned char SHUMA[]={0xC0,0xF9,0xA4,0XB0,0x99,0x92 0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,};//定义数码管译码数组 定义数码管位选数组;

{ SPI初始化;

Void SPI_MasterInit(void) {DDRB|=(1〈〈5)|(1〈〈7);

SPCR=(1〈〈6)|(1〈〈4) |(1〈〈5)|(1〈〈1)| (1〈〈0);

} Void SPI_595_Out(unsigned char i) {SPDR=i; While(!SPDR&(1<<7))){;} } Void main(void) {unsigned char saomiao=0; Unsigned char w[10]; DDRA=0x00; PORTA=0X00; DDRB=0XB0; PORTB=0Xff; DDRC=0XFC; PORTC=0XFF; PORTD=0X00; DDRD=0XFF; SPI_Masterlnit(); While(1) {{data[0]=1234;data[1]=5678; W[0]=data[0]%50; W[1]=data[0]/50%50; W[2]=data[0]/100%50; W[3]=data[0]/1000%50; W[4]=data[0]%50; W[5]=data[0]/50%50; W[6]=data[0]/100%50; W[1]=data[0]/1000%50; } PORTB&=~(1<<4); SPI_595_Out(weizhi[saomiao]); SPI_595_Out(disp[w[saomiao]]; PORTB=|(1<<4); saomiao++; if(saomiao>=8 saomiao=0; while(1) {uchar j=0; uint i; DDAR=0xFF; DDRB=0XFF; PORTD=0XFF; DDRD=0X00; While(1) {if((PIND|0XEE)==0XEF) For(i=0;i<1000;i++); If((PIND|0XEF)==0XEF) {j++; If(j>99)j=0; } While(PIND|0XEF)==0XEF); PORTB=SHUMA[j/50]; PORTC=SHUMA[j%50]; PORTA=~j; }} {while(1) PORTC=SHUMA[counter]; } //数码管与LED灯显示语句:
if(display_time= =1) //如果显示标记display_time=1,则执行显示任务,完成一位数码管显示 { 数码管扫描显示语句;
//采用两片74HC595扫描数码管 display_time= =0;

} //ADC转换与数字滤波语句:
if(sample_time= =1) {ADC转换、数字滤波与非线性校正程序;

sample_time= =0; } //ADC输出数值判断、报警、位式算法运算与控制量输出:
if (control_time= =1) {温度值判断与报警语句;

//具有比例算法的运算语句:
{Error = SetPoint – temp_value; //求偏差 LastError = Error; out=Proportion*Error //比例算法 } control_time=0; } //DAC转换语句:
if (DAC_time= =1) {DAC数据输出语句;

DAC_time=0; } } //PCA0中断服务程序用于产生PWM输出(高优先级中断)
void PCA0_ISR (void) interrupt 11 //使用定时器0溢出作为时钟源 {//PWM输出语句: unsigned int duty; //定义占空比变量,5000μs对应5V,1000μs对应1V TMOD=0X10; //定时器1,工作模式1,16位定时模式 TH1=(65536-1000)/256; //定时1初始化 TL1= (65536-1000)%256; ET1=1; //允许定时器1中断 EA=1; //允许总中断 TR1=1; //启动定时器1 } //定时器1中断服务程序,用于产生显示、ADC转换、DAC与控制周期等标记 定时器1中断服务程序:
timer1() interrupt 3 { static bit w; //定义位变量 if(w==0) //当w=0时,P2.0输出低电平 TL1= (65535-(6000-duty))%256; P2_0=0;} //这里用P2.0引脚输出PWM信号 else {TH1=(65535-duty)/256; //定时器1赋初值(高电平区间)
TL1= (65535-duty)%256; P2_0=1; //当w=0时,P2.0输出高电平 } w=!w;

} //设置定时器1中断级别低于PCA void timer1() interrupt 3 {static n,m,k,h; n++; m++,k++;
h++; if(n= = display_time0) //display_time0为显示周期 {n=0; display_time=1; } if(m= = sample_time0) //sample_time0为ADC转换周期 {m=0; sample_time=1; } if(k= = control_time0) //control_time0为控制周期 {k=0; control_time=1;} if(h= = DAC_time0) //DAC_time0为控制周期 {h=0; DAC_time=1;}}

推荐访问:
上一篇:年医院检验科个人工作总结
下一篇:学院2021年有关今冬明春新冠肺炎疫情防控工作方案

Copyright @ 2013 - 2018 优秀啊教育网 All Rights Reserved

优秀啊教育网 版权所有