电子钟设计 模版Word文件下载.docx
《电子钟设计 模版Word文件下载.docx》由会员分享,可在线阅读,更多相关《电子钟设计 模版Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
参数
1.测温范围为0-1000º
C
2.测温误差<
±
5º
C
进度
要求
1.布置任务、方案设计,硬件设计(1天)
2.画电路图(1天)
3.软件设计,画流程图(1天)
4.程序设计和调试(6天)
5.设计验收、撰写报告(1天)
详见进度安排表
参考资料
1.程德福.智能义器.机械工业出版社.2009.9
2.胡文金.单片机系统实训教程.重庆:
重庆大学出版社,2005
其它
说明
1.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。
2.若填写内容较多可另纸附后。
3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。
系主任:
指导教师:
钟秉翔、柏俊杰
摘要
本系统是基于STC89C51单片机的温度控制系统,硬件系统主要包括单片机,DS18B20,独立按键模块,液晶显示模块,数模准换模块ADC0809,K分度热电偶传感器等组成。
它具有温度上、下限报警以及报警值设定,目标温度值设定,PWM手动与自动设定控制功能。
此系统中,K分度热电偶传感器获得温度的感应电压,转变成0~5V的标准电压信号,由ADC0809转换成数字信号与DS18B20数字温度传感器测得得室温一起送入单片机,DS18B20所测室温做补偿用,然后通过PID算法,采用模拟PWM控制电子开关的闭合时间,以实现控制的目的。
关键字:
单片机DS18B20PID算法PWM控制
1方案总体设计与论证
图1—1是基于单片机的温度控制系统基本组成方框。
主要由K分度温度传感器,DS18B20,信号调理电路,A/D0809转换器,80C51单片机,独立键盘输入,LCD显示器,发光二极管(指示工作状态)等组成。
K分度热电偶传感器把温度转换成电压的器件,温度传感器输出电压的大小随温度的高低变化而变化,在0℃—1000℃温度变化范围内,电压值的变化范围从0毫伏到41.276毫伏。
DS18B20采集到的室温作为补偿,信号调理电路的主要功能是把微弱的温度电压信号放大到0—5v伏的范围内,以适应AD0809输入的要求。
A/D转换器把放大后的模拟电压信号转换成对应的数字信号。
单片机8051是温度控制系统的核心部分,一方面控制A/D0809转换器实现模拟信号到数字信号的转换,另一方面将采集到温度的数字信号,通过滤波查表来显示实测温度,经过PID算法,由PWM来控制加热时间。
LCD显示器实测量的温、室温、设定温度等。
由MODE键选择不同模式,UP、DOWN键来修改各个值,来设定和修改报警的温度上、下限值、目标温度值设定,PWM手动/自动设定控制功能。
而软件设计是紧紧围绕系统的硬件结构展开的,软件主要是配合控制硬件完成预期的设计要求,软件的基本模块也是针对上述硬件结构进行相应操作的,来实现各个工作模式。
各个工作模式
模式一:
实测温度显示、室温显示、设定目标温度,PWM显示以及PWM自动调节。
模式二:
实测温度显示、室温显示、PWM显示,以及PWM手动调节控制。
模式三:
设定和修改上限温度。
模式四:
设定和修改下限温度。
图1.1系统总框图
2硬件电路设计与分析
2.1C51单片机最小系统
单片机最小系统由CUP芯片、时钟电路(外接11.0592HZ的的晶振),和复位电路组成。
图2.1C51单片机最小系统
2.2K分度热电偶测量处理电路
K分度热电偶的工作原理:
将两种不同的金属丝组成回路,如果二种金属丝的两个接点有温度差,在回路内就会产生热电势,这就是热电效应,热电偶就是利用这一原理制成的一种温差测量传感器,置于被测温度场的接点称为工作端,另一接点称为冷端(也称自由端),冷端可以是室温值也可以是经过补偿后的0℃、25℃的模拟温度场。
信号调理电路中包括滤波和放大部分。
将K分度传感器的测量值,可直接输出到运算放大器,电容滤波的反相放大电路,使得传感器感受0℃—1000℃的信号调理电路对应输出0—5V的电压值,通过查表求出温度值。
图2.2K分度热电偶处理电路
2.3DS18B20工作原理
由于温度测量系统处在室温中,用K型热电偶测量温度需要进行补偿,所以采用DALLAS公司生产的DS18B20数字温度传感器测量室温进行补偿,提高测量系统的精度。
温范围为-55℃~+125℃,在-10~+85℃时精度为±
0.5℃,独特的单线接口方式,与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温,在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。
DS18B20有三个引脚,GND为电源地、DQ为数字信号输入/输出端、VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
图2.3DS18B20工作原理图
图2.4DS18B20接口电路
2.4ADC0809转换电路
ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
是目前国内应用最广泛的8位通用A/D芯片。
其引脚功能如下:
IN0~IN7:
8路模拟量输入端。
D7~D0:
8位数字量输出端。
A0、A1、A2:
3位地址输入线,用于选通8路模拟输入中的一路
ALE:
地址锁存允许信号,输入,高电平有效。
START:
A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。
EOC:
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
REF(+)、REF(-):
基准电压。
Vcc:
电源,单一+5V。
GND:
地。
ADC0809工作过程:
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
图2.5ADC0809电路图
2.5LCD显示电路
本设计采用ST7920控制器的LCD液晶显示器,其具有低电压,字迹清晰、能够显示汉字和字符等特点,且编程方便,易于查看、修改。
ST7920控制器系列中文图形液晶模块的软件特性主要由ST7920控制驱动器决定的。
ST7920同时作为控制器和驱动器,它可提供33路com输出和64路seg输出。
在驱动器ST7920的配合下,最多可以驱动256×
32点阵液晶。
分别由单片机的P10、P11、P12来接液晶的CS、SID、SCLK。
图2.6液晶接口电路
2.6独立键盘
因为本设计中需要的按键不多,故设计采用独立式按键,分别占用P2.0,P2.1,P2.2和P2.3口。
它们分别实现设置模式的功能键,温度上限、下限设置修改,温度上限报警,温度下限报警。
目标温度设置键,以及自动或手动控制PWM,键盘的消抖动可有软件来实现。
图2.7独立按键
3软件设计与分析
3.1PID算法
PID算法由比例、积分、微分三部份组成,将实测温度和设定值进行比较,得到偏差,根据偏差值乘以比例系数(Kp)就确定比例项、积分项由累积偏差和乘以Ki和微分项由累积偏差差值乘以Kd,根据所的的值确定pwm值,程序如下:
voidPID(void)//PID算法{staticintSumerror=0,Lasterror=0;
intDerror=0,Error=0;
doublesum=0.0;
Error=mubiao-var;
//设定值-实时值
if(Error>
50){Pwm_sum=100;
return;
}
if(Error+50<
0){Pwm_sum=0;
return;
}
Sumerror=Sumerror+Error;
//积分
Derror=Error-Lasterror;
//微分
Lasterror=Error;
sum=Kp*Error;
sum=sum+Sumerror*Ki;
sum=sum+Derror*Kd;
if(sum>
0)sum=sum/100;
if(sum>
100)Pwm_sum=100;
elseif(sum<
0)Pwm_sum=0;
elsePwm_sum=(uint)sum;
VoidPID_Start(void)//PID入口{if(PID_time>
=20)//0.1s进入一次PID控制
{
PID_time=0;
PID();
3.2温度补偿
将DS18B20测得室温通过转化来查K分度热电偶表电压值,程序如下:
ucharwenshi;
uintx;
wenshi=temperature/10;
x=(K_TABLE[wenshi+1]-K_TABLE[wenshi])/10;
/*表中相邻两值对应温度相差10°
C*/
x=K_TABLE[wenshi]+x*(temperature%10);
//温度补偿
3.3查表滤波函数
由AD0809读取的十个数字分别赋给数组table[i],将得到的数组进行比较,得到最大值和最小值,将数组中的数据去掉最大值和最小值后求和,在求平均数,根据平均数得,再将得到数值转化为相应电压值程序如下:
voidLv_bo(void)//滤波
{unsignedcharmax,min,i;
unsignedintsum;
sum=table[0];
max=table[0];
min=table[0];
for(i=1;
i<
10;
i++)
if(table[i]>
max)
max=table[i];
elseif(min>
table[i])
min=table[i];
sum=table[i]+sum;
sum-=max;
sum-=min;
U1=(float)sum/8;
U1=((U1*5)/255);
//换成mv}
3.4模式转换
由判断MODE键按下才次数来,转换不同的模式,当MODE键按下时,count_mode++。
其里面还调用液晶显示函数来显示不同模式,如模式0:
显示室温、实测温度、PWM值。
voidmoshi()//模式
{uintaa=0;
if(Mode==0)
{delay(200);
{
count_mode++;
if(count_mode>
3)count_mode=0;
}
if(count_mode==0)
PID_Start();
Display(0,0,2,0,"
室温"
);
Display(0,4,4,0,"
自动调节"
if(time>
=4)
temperature=ReadTemperature();
//读温度
time=0;
view(temperature);
Display(0,3,2,1,disp_buf+2);
Display(1,0,4,0,"
实测温度"
view(var);
Display(1,5,4,1,disp_buf);
Display(2,0,4,0,"
设定温度"
mubiao=xiugai(mubiao);
if(mubiao>
=1000)
mubiao=1000;
view(mubiao);
Display(2,5,4,1,disp_buf);
view(Pwm_sum);
Display(3,0,4,1,"
PWM:
"
Display(3,3,3,1,disp_buf+1);
Display(3,5,1,1,"
%"
)
if(count_mode==1)
{
.................