课程设计---生物培养液微机温度控制系统设计.doc_第1页
课程设计---生物培养液微机温度控制系统设计.doc_第2页
课程设计---生物培养液微机温度控制系统设计.doc_第3页
课程设计---生物培养液微机温度控制系统设计.doc_第4页
课程设计---生物培养液微机温度控制系统设计.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录1设计要求21.1 初始条件21.2要求完成的主要任务22设计原理33 硬件设计43.1 单片机选择43.2温度检测电路63.2.1温度传感器电路63.2.2 信号放大电路73.2.3 a/d转换短路83.3 加热控制电路设计93.4 降温控制电路设计103.5 报警电路113.6 键盘(温度设置)模块113.7 led温度显示模块124 改进pid控制算法144.1 simulink 仿真144.2结果分析155 系统软件设计175.1 程序流程图175.2程序代码186 总结体会25参考文献2628生物培养液微机温度控制系统设计1设计要求1.1 初始条件设计一个生物培养液微型计算机温度控制系统,系统为一阶惯性纯滞后特性,温度在1525范围内连续可控,温度控制精度为 0.5;通过led 显示温度。1.2要求完成的主要任务 1. 输入通道及输出通道设计(温度传感器,a/d转换,pwm输出控制和温度调节驱动电路); 2. 键盘(温度设置)与led(温度显示)接口设计; 3. 采用改进pid控制算法; 4. 系统软件流程及各程序模块设计; 5. 完成符合要求的设计说明书2设计原理 要设计完成一个生物培养液微型计算机温度控制系统,我们可以把它的组成分成以下几个部分:温度检测短路,信号放大短路,a/d转换电路,加热控制电路,降温电路,报警电路,键盘(温度设置)模块和led(温度显示)模块,单片机判断输入温度信号与设定的温度的差距,再通过改进的pid算法给以调节。放大器的则是用来放大采集装置采集的温度,由于测量的温度一般较小,所以要先用放大器进行放大再输入。a/d转换器是用来把采集到的模拟电压信号量转换成单片机机可以识别的数字信号。高阻抗加热丝和半导体制冷片是该温度控制系统的温度调节部分,当采集温度不符合要求时,则通过计算机判断后进行调节。半导体制冷片用来降温,高阻抗加热丝用来加温。显示部分则用来显示生物培养液微的温度以及设定时设置的温度值。温度采集装置采用热电阻ad590来采集培养液的温度,来看以看是否达到要求。通过以上的几个部分的组合,则组成了一个生物培养液微型计算机温度控制系统。生物培养液微型计算机温度控制系统的结构图如下图1所示。高阻抗电阻丝加热控制电路生物培养皿at89c51单片机报警电路降温控制电路半导体制冷片led显示键盘电路信号放大电路a/d转换温度传感电路 图1 生物培养液微机温度控制系统结构图3 硬件设计3.1 单片机选择 单片机的选择在整个系统设计中至关重要,要满足大内存、高速率、通用性、价格便宜等要求,本课题选择at89c51最为主控芯片。at89c51是一个低功耗、高性能的cmos 8为单片机,片内含4k bytes isp(in-system programmable)的可反复檫写的只读程序存储器和128 bytes位的随机存取数据存储器,期间采用atmel公式的高密度、非易失性存储技术制造,兼容标准mcs-51指令系统及80c51引脚结构,芯片内集成了通用8位中央处理器和isp flash存储单元,功能强大的微型计算机的at89c51可为许多嵌入式控制应用系统提供高性价比的解决方案。at89c51芯片具有以下特性:p0口:p0口是一组8位漏极开路双向i/o口,也郎地址/数据总线复用口,作为输出口用是,每位能吸收电流的方式驱动8个ttl逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,在组口线分是转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在flash编程时,p0口接收指令字节,而在程序校验时,输出指令字节,校验时,要外接上拉电阻。p1口:p1口是一个带内部上拉电阻的8位双向i/o口,p1的输出缓冲级课驱动(吸收或输出电流)4个ttl逻辑门电路。对端口写“1”,通过内部的上拉电阻吧端口拉到搞电平,此时课作为输入口。作为输入口使用时,因为内部上拉电阻,某个引脚被外部信号拉低时会输出一个电流。flash编程和程序校验期间,p1接收低8位地址。p2口:p2口是一个带有内部上拉电阻的8位双向i/o口,p2的输出缓冲级课驱动(吸收或输出电流)4个ttl逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到搞电平,此时可作为输入口,作为输入口使用时,因为内部存在上拉电阻,某个引脚外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器时,p2口送出高8位地址数据。在访问8位地址的外部数据存储器时,p2口线上的内容,在整个访问期间不改变。flash编程或校验时,p2亦接收高位地址和其他控制信号。p3口:p3口是一组带有内部上拉电阻的8位双向i/o口,p3口输出缓冲级课驱动4个ttl逻辑门电路,对p3口写入“1”时,它们被内部上拉电阻拉高并最为输入端口。作输入端时,被外部拉低的p3口将用上拉电阻输出电流。p3口还接收一些flash闪速存储器编程和程序校验的控制信号。rst:复位输入。当振荡器工作时,rst引脚出现两个机器周期以上高电平将单片机复位。ale:当访问外部程序存储器或数据存储器时,ale输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ale仍以时钟振荡频率的1/6输出固定的正脉冲信号,因为它可对外输出时钟或用于定时目的,要注意的是,每次访问外部数据存储器时将跳过一个ale脉冲。对存储器编程期间,改引脚还用于输入编程脉冲。psen:程序储存允许输出是外部程序存储器的读选通信号,当at89c51由外部程序存储器取指令时,每个机器周期两次psen有效,即输出两个脉冲。在此期间,当访问外部数据存储器,这两次有效的psen信号不出现。ea:外部访问允许。欲使cpu仅访问外部程序存储器,ea端必须保持低电平。需要注意的是,如果加密lb1被编程,复位时内部程序锁存存储器ea端状态。xtal1:振荡器反相放大器及内部时钟发生器的输入端。xtal2:振荡器反相放大器的输出端。图2 at89c51引脚图3.2温度检测电路3.2.1温度传感器电路温度检测电路包括温度传感器、变送器和a/d转换三部分。选用的温度传感器型号为lm35,其输出电压与摄氏温标呈线性关系,转换公式如式(1),0c时输出为0v,每升高 1c,输出电压增加10mv。 即: vout-lm35(t)=10mv/ctc (1)lm35 有多种不同封装型式,外观如图 3 所示。在常温下,lm35 不需要额外的校准处理即可达到 1/4c的准确率。其电源供应模式有单电源与正负双电源两种,其引脚如图 4 所示,正负双电源的供电模式可提供负温度的量测;两种接法的静默电流-温度关係如图 5所示,单电源模式在25c下静默电流约50a,非常省电。图3lm35封装及引脚排列 图4单电源模式图5双电源模式由课程任务书可知:温度在1525范围内连续可控。因此,只需要单电源模式即可满足要求。又由于,lm35输出的电压太小,因此将输出用非反相放大器放大十倍,其电路图如下图6所示。图6温度传感模块电路 3.2.2 信号放大电路 由于温度传感器lm35输出的电压范围为00.99v,虽然该电压范围在a/d转换器的输入范围允许范围内,但该电压信号较弱,如果不进行放大直接进行a/d转换则会导致转换侧很难过的数字量太小、精度低。系统中选用通用型放大器a741对lm35输出的电压信号进行幅度放大,还可以对其进行阻抗匹配、波形变换、噪声抑制等处理。系统采取同相输入,电压放大倍数为5倍,电路图如下所示图7 信号放大短路图3.2.3 a/d转换短路a/d转换课采用adc0809进行,adc0809是cmos单片型逐次逼近式a/d转换器,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型da转换器、逐次逼近 寄存器、三态输出锁存器等其它一些电路组成。因此,adc0809可处理8路模拟量输入,且有三态输出能力,既可与各种微处理器相连,也可单独工作。输入输 出与ttl兼容。图5中运算放大器输出电压vo,送入adc0809模拟输入通道in0,单片机at89c51控制adc0809的开始转换、延时等待结束以及读出转换好的8位数字量至单片机进行处理。adc0809a/d转换芯片引脚图如下图8所示。 图8 adc0809a/d转换芯片引脚图 adc0809a/d转换芯片引脚功能:adc0809芯片有28条引脚,采用双列直插式封装 in0in7:8路模拟量输入端。2-12-8:8位数字量输出端。adda、addb、addc:3位地址输入线,用于选通8路模拟输入中的一路.ale:地址锁存允许信号,输入,高电平有效。 start: ad转换启动信号,输入,高电平有效。 eoc: ad转换结束信号,输出,当ad转换结束时,此端输出一个高电平(转换期间一直为低电平)。 oe:数据输出允许信号,输入,高电平有效。当ad转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。clk:时钟脉冲输入端。要求时钟频率不高于640khz。 ref(+)、ref(-):基准电压。 vcc:电源,单一5v。 gnd:地。 ale为地址锁存允许输入线,高电平有效。当ale线为高电平时,地址锁存与译码器将a,b,c三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。a,b和c为地址输入线,用于选通in0in7上的一路模拟量输入。本系统中adc0809的转化电路如下图9所示。 图9 adc0809转换电路接线图3.3 加热控制电路设计在读取到从温度传感模块采集到的温度数值后,与事先设定好的温度值进行比较,若当前检测得的温度比设定的温度低,则需要对培养液进行加热处理。本系统利用高阻抗的电阻丝来对培养液加热。如下图10所示,在检测到温度比设定的温度低时,p2.5管脚输出高电平,从而npn管道通,驱动继电器启动,从而为高阻抗加热电阻丝通电加热生物培养液。利用改进的pid算法来计算pwm脉宽得出控制输出。从而根据检测到的温度而自动调节继电器导通时间。 图10 培养液电阻丝加热模块3.4 降温控制电路设计 若当前检测得的温度比设定的温度高,则需要对培养液进行降温处理。本系统利用半导体降温片来对培养液进行降温。其优点是是无运动部件,可靠性也比较高,且无污染。实物如下图11。实际使用中也是同电阻丝加热模块一样,采用继电器,在满足制冷条件下继电器接通,接通制冷电源,利用改进的pid算法来计算pwm脉宽得出控制输出。从而达到根据检测到的温度而自动调节继电器导通时间 当然,实际使用时也可以采用电风扇,即再在满足制冷条件下继电器接通,电风扇的电机接通电源而转动制冷。也是利用改进的pid算法来计算pwm脉宽得出控制输出。从而达到根据检测到的温度而自动调节风扇的转速。 图11 半导体制冷片实物图3.5 报警电路 如果培养液里的温度过高或者是过低了,超出了其允许的某个温度范围,则系统会自动报警,提醒用户,可以让用户采取更为快速和有效地措施来避免或是减少损失。报警电路图下图12所示。当微机判断当前温度值超出范围时,将p2.6管脚置低电平,利用非门来驱动喇叭报警。 图12 报警电路图3.6 键盘(温度设置)模块 键盘模块是本控制系统的人机交流模块部分,主要为用户提供进行温度的设置功能。该设置功能模块中包括了0到9的数字按键,启动设置按键,即“设置”按钮,输入错误时的删除按键,及“删除”键。 由于按键较多,为了节省i/o口的资源,本系统采用4x4矩阵式键盘方案。由于变成扫描、定式扫描的键盘工作方式过多的占用cpu时间,本系统为了不过的占用cpu时间,采用中断扫描方式。其中断方式接法如图5所示。其键盘接线连接图如下图13所示。 图13 中断方式接法图 图14 键盘模块接线图3.7 led温度显示模块由于任务书要求使用led显示温度,而且温度在1525范围内连续可控,温度控制精度为 0.5。因此,本系统采用了四位共阳极的七段数码管。如图所示为4位7段数码管的原理图。由于所有的段选线并联到同一个 i/o,由这个 i/o 口来控制,因此,若是所 有的 4 位 7 段 led 都选通的话,4 位 7 段 led 将会显示相同的字符。要使各个位 的 7 段 led 显示不同的字符,就必须采用动态扫描方法来轮流点亮每一位 7 段 led,即在每一瞬间只选通一位 7 段 led 进行显示单独的字符。在此段点亮时间 内,段选控制 i/o 口输出要显示的相应字符的段选码,而位选控制 i/o 口则输出 位选信号, 向要显示的位送出选通电平(共阴极则送出低电平,共阳极则送出高 电平),使得该位显示相应字符。这样将四位 7 段 led 轮流去点亮,使得每位分时显示该位应显示的字符。由于人眼的视觉暂留时间为 0.1 秒,当每位显示的间 隔未超过 33ms 时,并在显示时保持直到下一位显示,则由于人眼的视觉暂留效 果眼睛看上去就像是 4 位 7 段 led 都在点亮。设计时,要注意每位显示的间隔时间,由于一位 7 段 led 的熄灭时间不能超过 100ms,也就是说点亮其它位所用的时间不能超过 100ms,这样当有 n 位的 7 段 led 用来显示时,每一位间隔的时间 t 就必须符合下面的式子: t100ms/(n-1)本系统中n4,则由式子可以算出 t33ms,就是每一位的间隔时间不能超过 33ms。当然时间可以也设得短一些,比如 5ms或1ms 也可以。 图15 led的动态显示原理图 如下图16所示为该四位7段数码管显示模块的管脚连接图。从左到右,-g依次接p0.0-p0.6,dp接p0.7管脚。1-4为数码管位选的输入,依次接p2.0-p2.3管脚。图16 显示模块的管脚连接图4 改进pid控制算法4.1 simulink 仿真采用simulink仿真,通过simulink模块实现积分分离pid控制算法。仿真图如图17所示。 图17 simulink仿真选择合适的kp,ki,kd使系统的仿真效果趋于理想状态。matlab编写程序如下:clear all;close all;ts=10; %采样时间10ssys=tf(1,30,1,inputdelay,80);dsys=c2d(sys,ts,zoh); %将sys离散化num,den=tfdata(dsys,v); %求sys多项式模型参数kp=5.2;ti=0.005;td=0.005;end仿真波形如图18所示。图18 matlab仿真波形图4.2结果分析当ti,td一定,即当ti=td=0.005时,改变kp的值观察波形可以知道其对系统超调量的影响。当kp增大时,设kp=5.8,此时的波形如图19。图19 kp=5.8时的波形图当kp减小时,设kp=4.6,此时的波形如图20。图20 kp=4.6时的波形图由图18,图19,图20我们可以观察到当kp增大时系统超调量增大,当kp减小时系统超调量减小。5 系统软件设计5.1 程序流程图开始单片机系统初始化温度设置程序有键按下?温度采样与a/d转换调用温度显示温度超出?报警程序设定的温度值?设定的温度值?yesnonoyes保持温指示灯亮高温指示灯亮低温指示灯亮调用数据处理程序控制量的输出 图21单片机系统主控制流程图5.2程序代码#include #include sbit st=p20;sbit oe=p21;sbit eoc=p22;ucharcodedis_717=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40,0xed,0xf9,0xe7,0x39,0x63;/共阳led段码表 0 1 2 3 4 5 6 7 8 9 不亮 - s e q c uchar code scan_con4=0x7f,0xbf,0xdf,0xef; /列扫描控制字uchar data temp_data2=0x00,0x00; /读出温度暂放int channel=4;unsigned char saveddat6;/存放采集的数据结果void initadc0809()/初始化函数/* channelsela=0;channelselb=0;channelselc=0;/默认选择第0通道*/st=0; oe=0;et0=1;ea=1;tmod=0x02;th0=226;tl0=226;tr0=1;void readdat(void)st=1; _nop_();_nop_();st=0;/启动转换 _nop_();_nop_();if(eoc=1) oe=1; saveddatchannel=p1; _nop_(); _nop_(); oe=0; _nop_(); _nop_(); st=1; _nop_(); _nop_(); st=0; _nop_(); _nop_();initadc0809();/ channel=channelsel;switch(channelsel) case 0: channelsela=0; channelselb=0; channelselc=0;break; case 1: channelsela=0; channelselb=0; channelselc=1;break; case 2: channelsela=0; channelselb=1; channelselc=0;break; case 3: channelsela=1; channelselb=1; channelselc=0;break; case 4: channelsela=0; channelselb=0; channelselc=1;break; default:break;readdat();void main()adc0808(channel);p3=saveddatchannel;void keyscan(void) interrupt 1 using 2/用中断法扫描键盘 uchar keyscan()/检查按键情况 uchar temp=40; key=0xef; /扫描第1列键 switch(key) case 0xee:temp=1;break; case 0xed:temp=4;break; case 0xeb:temp=7;break; case 0xe7:temp=10;check();break; default:break; key=0xdf; /扫描第2列键 switch(key) case 0xde:temp=2;break; case 0xdd:temp=5;break; case 0xdb:temp=8;break; case 0xd7:temp=0;break; default:break; key=0xbf; /扫描第3列键 switch(key) case 0xbe:temp=3;break; case 0xbd:temp=6;break; case 0xbb:temp=9;break; case 0xb7:temp=11;break; default:break; return(temp); /返回按键键值 /*显示扫描函数*/scan()/温度显示时4位led扫描 char k; for(k=0;k6348) / 温度值正负判断 tem=65536-tem;n=1; / 负温度求补码,标志位置1 display4=tem&0x0f; / 取小数部分的值 display0=ditabdisplay4; / 存入小数部分显示值 display4=tem4; / 取中间八位,即整数部分的值 display3=display4/100; / 取百位数据暂存 display1=display4%100; / 取后两位数据暂存 display2=display1/10; / 取十位数据暂存 display1=display1%10; nowtp=display3*100+display2*10+display1; /计算当前温度 send_da0=nowtp; /把当前温度储存到发送缓存区*-pid运算函数-*void pid() static int diff19=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;static int sum_diff=0; /(diff)static uint curr_=0;float p_out,i_out,d_out,temp_pid;float pwm_0;temp_pid=diffcu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论