智能仪器设计.docx

上传人:b****3 文档编号:5604771 上传时间:2023-05-08 格式:DOCX 页数:24 大小:454.99KB
下载 相关 举报
智能仪器设计.docx_第1页
第1页 / 共24页
智能仪器设计.docx_第2页
第2页 / 共24页
智能仪器设计.docx_第3页
第3页 / 共24页
智能仪器设计.docx_第4页
第4页 / 共24页
智能仪器设计.docx_第5页
第5页 / 共24页
智能仪器设计.docx_第6页
第6页 / 共24页
智能仪器设计.docx_第7页
第7页 / 共24页
智能仪器设计.docx_第8页
第8页 / 共24页
智能仪器设计.docx_第9页
第9页 / 共24页
智能仪器设计.docx_第10页
第10页 / 共24页
智能仪器设计.docx_第11页
第11页 / 共24页
智能仪器设计.docx_第12页
第12页 / 共24页
智能仪器设计.docx_第13页
第13页 / 共24页
智能仪器设计.docx_第14页
第14页 / 共24页
智能仪器设计.docx_第15页
第15页 / 共24页
智能仪器设计.docx_第16页
第16页 / 共24页
智能仪器设计.docx_第17页
第17页 / 共24页
智能仪器设计.docx_第18页
第18页 / 共24页
智能仪器设计.docx_第19页
第19页 / 共24页
智能仪器设计.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

智能仪器设计.docx

《智能仪器设计.docx》由会员分享,可在线阅读,更多相关《智能仪器设计.docx(24页珍藏版)》请在冰点文库上搜索。

智能仪器设计.docx

智能仪器设计

智能仪器课程设计

报告书

题目号:

22

题目:

智能数字显示仪表设计

班级:

自动化XXX

学号:

XXX

姓名:

XX

 

2012年12月

摘要

智能仪表是含有微型计算机或者微型处理器的测量仪器,拥有对数据的存储运算逻辑判断及自动化操作等功能。

它的出现,极大的扩充了传统仪器的应用范围。

智能仪器凭借其体积小、功能强、低功耗等优势,迅速的在家用电器、科研单位和工业企业中得到了广泛的使用。

智能电子系统,其单片机硬件部分都是相似的,一般是由如下硬件电路组成:

单片机最小系统(单片机、电源、晶振、复位、编程调试接口等)。

开关量输入与输出电路。

模数与数模转换电路。

通信接口(UART(SCI)、SPI、I2C(SMBus)、CAN、USB、TCP/IP、ZigBee等)。

显示电路(LED数码管、LCD等)。

控制电路(继电器、晶闸管等功率输出电路)。

而软件部分就是使单片机中运行的程序(算法),程序通过单片机与单片机的引脚指挥各个硬件电路部分,进而控制各种各样的对象,实现对象控制的自动化与智能化。

单片机技术的落脚点就是实现电子系统智能化,换句话说,就是开发控制各种对象的智能电子产品。

本课程设计以工业控制中使用的温度监测智能仪表为例,介绍单片机在电子系统智能化方面的应用。

一、设计的目的和原理

设计题目:

实现智能数字显示仪表。

要求8位数码管显示(4位显示测量值,4位显示设定值),4输入按钮(功能选择、数码管选择、数字增加、数字减少),可设定上下限报警(蜂鸣器报警)。

适配E型(镍铬-铜镍)热电偶,测温范围为0℃~700℃。

采用比例控制、并用晶闸管移相驱动1000W电加热器(电源电压为AC220V)。

设计目的:

单片机综合练习是一项综合性的专业实践,目的是让学生在所学知识的基础上,结合工程实际,加以消化和巩固,培养学生的综合运用知识的能力、动手实际的能力和工程实践能力,为以后的工作实践打好良好的基础。

设计原理:

由热电偶送来的电信号一方面通过AD转换成数字信号供单片机处理后进行数字显示,另一方面传输到调节器比较运算,输出一个需要的控制信号与给定匹配。

 

二、硬件设计

本设计采用STC89C51单片机实现智能测温仪表。

由题目可知,该测温仪表需要如下电路模块:

(1)单片机电路(包括单片机最小系统、ADC、数码显示、按键、LED灯、电源等)。

(2)E型(镍铬-铜镍)热电偶信号调理电路

(3)加热功率驱动电路。

原理框图:

智能仪表单片机电路由STC89C51单片机电路、按钮、数码管、LED显示、串行通讯口、电源、ADC、DAC、E2PROM、热电偶、功率输出等电路组成。

控制板面图:

上排数码管显示设定值,下排数码管显示测量值。

第一个按钮选择功能设置,第二个数码管选择,第三个数值加,第四个数值减。

四个LED显示灯显示系统的各个运行状态。

基本电路模块:

总框图

单片机最小系统:

STC89C51单片机最小系统包含51单片机、晶振电路、复位电路、电源电路。

单片机可采用11.0592MHz或12MHz的晶振,外置电源可以采用市售开关电源12V直流,稳压模块采用7805芯片,采用单片机上电复位的方式,还有上电指示灯。

蜂鸣器电路:

NPN型三极管驱动蜂鸣器产生报警提示,单片机P1.6口控制

串行存储器电路:

串行存储器芯片24C02用于保存设定值。

该芯片具有I2C接口,连接单片机P0.0与P0.1引脚,采用软件方法模拟I2C接口。

数码管电路:

具有两排各四个数码管显示,采用四位一体数码管,分别显示测量值和设定值,数码管由2块74HC595串入并出锁存器驱动,因此只需要3个单片机引脚,采用动态扫描数码管驱动法。

按键电路:

根据需要接按键于单片机相关引脚上,低电平有效。

可用作功能选择按钮、数值加一按钮、数值减一按钮等。

LED电路:

LED显示灯用于显示报警、动作等,直接连接到单片机相关引脚,低电平有效。

ADC电路:

由于51单片机内部没有AD资源,因此扩展了10位ADC芯片TLC1549,TLC1549与单片机的P1.0、P1.1、P1.2引脚连接,连接器J1用于模拟信号的输入。

DAC电路:

同样,系统扩展了DAC芯片TLC5615,该芯片采用+5V模拟电压分压作为参考电压,DAC输出范围可达0.25~4.75V,单片机采用3个引脚与该芯片连接,软件模拟芯片时序,将数据输出到TLC5615.

 

通讯电路:

使用MAX232组成电平变换电路,可以实现在系统编程(ISP)或实现单片机与PC机之间的通讯。

P3.0与P3.1连接有交叉开关,可以实现端口复用。

热电偶调理电路:

E型热电偶信号调理电路如上图所示。

镍铬—铜镍热电偶、压簧固定式热电偶,工业用装配式热电偶作为测量温度的传感器,通常和显示仪表、记录仪表和电子调节器配套使用。

它可以直接测量各种生产过程中从0℃~1800℃范围内的液体、蒸汽和气体介质以及固体的表面温度。

分度表:

该电路利用1N4148的负温度系数实现热电偶冷端补偿。

为保证0℃时输出电压为0V,电路中采用了负电源。

第一个运放组成的电路实现冷端温度补偿,其中RP0调节电路零点,由于二极管在反馈通路中,运放输出电压随温度升高而上升,温度系数为2mV/℃,经过R5与R6分压后的温度系数为0.017mV/℃,正好与R13热电偶温度系数近似。

第二个运放用于信号方法,发达倍数约为160。

74HC14组成的多谐振荡器、二极管和电容构成负电源电路,该电路向LM258提供负电源。

0℃~700℃对应线性输出0~1.9V。

电加热器电路:

单片机引脚为低电平时,在交流220V电压移相时,MOC3022触发双向晶闸管接通1000W电加热电源。

控制器方案:

比例控制(P)是一种控制算法,其输出量out与温度偏差e=SV-PV成比例关系,写成数学公式是:

out=kp*e+out0

式中,e是测量温度值PV与设定温度值SV之间的偏差,Kp是比例系数。

out是输出量。

out0是对应e=0时的控制量,可由人工确定,通常取输出控制量的1/2。

三、软件设计及注释

软件流程图:

描述了软件算法的执行过程。

有开始、有结束,有条件分支选择,有正常判断。

下图只是列出执行的整体框架:

程序详单:

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineWDA0x00//定义器件在IIC总线中的地址

ucharduan[]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,

0x83,0xc6,0xa1,0x86,0x8e};

//段码

ucharwei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位码

uintcodevalue[]={32,64,128,256,384,512,640,768,896,1023};//数字量

sbitDOUT=P2^5;//数码管引脚定义

sbitCLK=P2^7;

sbitLATCH=P2^6;

sbitAD_CS=P1^2;//TLC1549的引脚

sbitAD_CLK=P1^1;

sbitAD_DAT=P1^0;

sbitfunction=P3^4;//功能选择按钮

sbitshuma=P3^5;//数码管选择按钮

sbitplus=P3^6;//数值增加按钮

sbitsubs=P3^7;//数值减少按钮

sbitled0=P0^2;//LED

sbitled1=P0^3;

sbitled2=P0^4;

sbitled3=P0^5;

sbitbeep=P1^6;//蜂鸣器

sbitcs=P1^5;//TLC5615引脚

sbitdin=P1^3;

sbitclk=P1^4;

sbitSCL=P0^0;//24c02引脚

sbitSDA=P0^1;

ucharxs[8];//数码管显示缓存区

uchardisplay_time;//相关控制变量

ucharsample_time;

ucharsample_time;

ucharcontrol_time;

ucharDAC_time;

 

uchardisplay_time0=5;

ucharsample_time0=5;

ucharcontrol_time0=5;

ucharDAC_time0=5;

ucharhigh;//定义其它变量

ucharlow;

uchargiven;

ucharK;

voidLED(ucharX);//数码管函数声明

voiddelay()//延时函数

{

uchari=4,j=0;

for(i=10;i>0;i--)

for(j=248;j>0;j--);

}

voidset()

{

uinti,j;

if(shuma==0)//数码管选择按钮按下

delay();

if(shuma==0)

{

LED(wei[i++]);

if(i==8)

i=4;

}

if(plus==0)//增加按钮按下

delay();

if(plus==0)

{

LED(duan[j++]);

if(j==10)

j=0;

}

if(subs==0)//减小按钮按下

delay();

if(subs==0)

{

LED(duan[j--]);

if(j==-1)

j=9;

}

}

voidset_high()

{

set();

}

voidset_low()

{

set();

}

voidset_given()

{

set();

}

voidset_K()

{

set();

}

voidLED(ucharX)//数码管显示函数

{

uchari;

for(i=8;i>=1;i--)

{

//if(X&0x80)P2_5=1;elseP2_5=0;//先输出高位

//X<<=1;

if(X&0x01)DOUT=1;elseDOUT=0;//先输出低位

X>>=1;

CLK=0;

CLK=1;

}}

adc()//读取ADC数据的函数

{

uintu=0;

uchari;

cs=1;

delay();

cs=0;

for(i=0;i<10;i++)

{clk=0;

u=(u<<1)|DOUT;

clk=1;

delay();

}

cs=1;

}

voiddac(uintda)//写入DAC数据的函数

{

uchari;

da<<=6;

cs=0;

clk=0;

for(i=0;i<12;i++)

{

din=(bit)(da&0x80000);

clk=1;

da<<=1;

clk=0;

}

cs=1;

clk=0;

}

voidstart()//启用总线

{

SDA=1;

SCL=1;

SDA=0;

SCL=0;

}

voidstop()//停用总线

{

SCL=0;

SDA=0;

SCL=1;

SDA=1;

}

voidNoAck()//发送应答信号ACK

{

SDA=1;

SCL=1;

SCL=0;

}

bitTestAck()//测试应答信号ACK

{

bitEB;

SDA=1;

SCL=1;

EB=SDA;

SCL=0;

return(EB);

}

write8Bit(ucharinput)//写入8个二进制位到24C02

{uchartemp;

for(temp=8;temp!

=0;temp--)

{SDA=(bit)(input&0x80);

SCL=1;

SCL=0;

input=input<<1;

}

}

voidwrite24c02(ucharch,ucharaddress)//写入一个字节到24C02中字节地址的函数

{

start();

write8Bit(WDA);//发送器件地址的函数

TestAck();

write8Bit(address);//发送写入字节地址到24C02的函数

TestAck();

write8Bit(ch);//发送写入数据到24C02的函数

TestAck();

stop();

delay();

}

voidmain()

{

uintcount,adc_value,error,lasterror,out,gg=0;

TMOD=0x01;//定时器初始化

TH0=0x3C;

TL0=0xB0;

ET0=1;

EA=0;

TR0=1;

while

(1)

{

//按键处理语句

if(function==0)//功能选择按钮按下

delay();

if(function==0)

{

gg++;

if(gg==5)

gg=0;

switch(gg)

{

case0:

EA=1;break;//正常运行

case1:

EA=0;set_high();break;//设置上限值

case2:

EA=0;set_low();break;//设置下限值

case3:

EA=0;set_given();break;//设置给定值

case4:

EA=0;set_K();break;//设置比例系数值

}

}

set();

write24c02(value[0],0x01);

//数码管显示语句

if(display_time==1)

{

adc_value=adc();

xs[0]=adc_value%10;

xs[1]=adc_value/10%10;

xs[2]=adc_value/100%10;

xs[3]=adc_value/1000;//右面4位显示ADC输出值测量值

xs[4]=5;//左面4位备用设定值

xs[5]=6;

xs[6]=7;

xs[7]=8;

LED(wei[count]);//发送位码

LED(duan[xs[count]]);//发送段码

LATCH=0;//HC595锁存数据

LATCH=1;

count++;

if(count==8)

count=0;

display_time=0;

}

//ADC转换与数字滤波语句

if(sample_time==1)

{

adc();

sample_time==0;

}

//ADC输出数值判断、报警、比例算法与控制量输出

if(control_time==1)

{

if(adc_value>high||adc_value

{

beep=0;

}

error=given-adc_value;

lasterror=error;

out=K*error;

control_time==0;

}

//DAC转换语句

if(DAC_time==1)

{

dac();

DAC_time==0;

}

}

}

voidtimer0()interrupt1

{

staticucharn,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为控制周期T

{

k=0;

control_time=1;

}

if(h==DAC_time0)//DAC_time0为控制周期T

{

h=0;

DAC_time=1;

}

}

四、设计总结

这次课程设计用了好长时间,经过这次设计,使我认识到了设计中的细节问题对整体的影响。

从中我学到了很多,首先同学间以及老师的帮助使我增进不少,查阅资料使我视野开阔了。

并且我从中认识到了自己的弱点,细节问题不够清晰。

这次制作的成功经历,我收获不小,使我掌握了单片机的开发流程,明白了单片机的工作过程,在实际硬件中是怎样读取指令,提取数据的。

也提高了我软硬件调试的能力。

再加上主任看了我的作品后的一番鼓励,越发激起了我的自信心!

五、参考资料

1、《单片机原理及应用——基于51与高速SoC51》夏路易主编电子工业出版社

2、《微型计算机控制技术》潘新民王燕主编清华大学出版社

3、《传感器与检测技术》徐科军主编电子工业出版社

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 卡通动漫

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2