生物培养液微机温度控制.docx
- 文档编号:3691080
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:20
- 大小:292.27KB
生物培养液微机温度控制.docx
《生物培养液微机温度控制.docx》由会员分享,可在线阅读,更多相关《生物培养液微机温度控制.docx(20页珍藏版)》请在冰豆网上搜索。
生物培养液微机温度控制
目录
1主要原理介绍3
2系统结构图3
3输入通道设计4
3.1键盘输入(温度设置)模块4
3.2传感与检测模块5
3.3A/D转换模块6
3.3.1ADC0809的外部特性6
3.3.2ADC0809工作方式7
3.3.3ADC0809的转化电路8
3.4温度显示模块8
4输出通道设计10
4.1报警电路设计10
4.2降温控制电路设计10
4.3加热控制电路设计11
5系统总电路图11
6采用改进PID控制算法12
前言
《计算机控制技术》主要研究如何将计算机技术和自动控制理论应用于工业生产过程,并设计出所需要的计算机控制系统,是自动化专业的主干专业课程。
课程培养自动化专业本科生熟悉计算机的最新发展动态,掌握计算机在自动化领域中的应用。
《生物培养液微机温度控制系统的设计》涉及到各个领域里面的知识,包括传感与检测技术、A/D转换技术、自动控制技术等的综合应用,对学生来说有一定的难度。
对老师来说可以起到一个很好的考验作用。
Abstract
ComputerControlTechnologyisacoursemajortostudyhowwillthecomputertechnologyandautomationtheoryappliedtoindustrialproductionprocesses,anddesignedoutthecomputercontrolsystem,isthatautomationofbackbonetechnicalcourses.Thecoursedevelopautomatedcomputerprofessionalundergraduatesfamiliarwiththelatestdevelopmentinthedynamic,masreringthecomputer’sapplicationinthefieldofautomation.Biologicalmicrocomputercontrolsystemdesigntemperatureinvolvedinvariousfieldsofintellectual,includingsensinganddetectiontechnology、A/Dconversiontechnologies、automaticallythesyntheticapplicationoftechnology,therearesomedifficultytothestudents.Whiletheteacherescouldgetagoodtestrole.
1主要原理介绍
首先,一个生物培养液微型计算机温度控制硬件系统是由几个部分组成的,各个部分和有机的联系起来再加上软件控制系统便成了一个完整的工作过程。
我们可以把它的硬件组成分成以下几个模块:
温度采集模块、温度放大转换模块、温度驱动调节模块、实时温度显示模块和报警模块,以及温度设置模块。
这几个模块通过控制中心单片机来统一支配工作的有序进行,保证培养液的温度在设定的温度允许的范围内波动。
首先单片机判断经过转换的环境输入温度信号与设定的温度之间的偏差,然后再通过改进的PID算法给以调节,使得培养液的温度保持在理想的范围内。
系统首先检查键盘的输入信号,将用户设定的温度读取并存储。
温度采集装置采用热电阻AD590来采集培养液的温度。
系统调动温度检测模块的数据,由放大器将数据放大,经过A/D转换后,温度信号便成了可以被计算机识别的电信号。
这样利用首先得到的电信号通过液晶显示模块把当前温度显示出来。
显示部分则用来显示生物培养液微的温度以及设定时设置的温度值。
随后将温度信号与预先读入的用户理想信号对比。
当采集温度不符合要求时,则通过计算机判断后进行调节。
高阻抗加热丝和半导体降温片是该温度控制系统的温度调节部分。
其中,半导体降温片用来降温,高阻抗加热丝用来加温。
2系统结构图
生物培养液微型计算机温度控制系统的结构图如下图1所示:
图1生物培养液微型计算机温度控制系统结构图
3输入通道设计
3.1键盘输入(温度设置)模块
键盘模块是本控制系统的人机交流模块部分,主要为用户提供进行温度的设置功能。
该设置功能模块中包括了0到9的数字按键,启动设置按键,即“设置”按钮,输入错误时的删除按键,及“删除”键。
由于按键较多,为了节省I/O口的资源,本系统采用4X4矩阵式键盘方案。
由于变成扫描、定式扫描的键盘工作方式过多的占用CPU时间,本系统为了不过多的占用CPU时间,采用中断扫描方式。
其中断方式接法如图2所示。
其键盘接线连接图如下图3所示。
图2中断方式接法图
图3键盘接线图
3.2传感与检测模块
LM35是由NationalSemiconductor所生产的温度感测器,其输出电压与摄氏温标呈线性关系,转换公式如式
(1),0°C时输出为0V,每升高1°C,输出电压增加10mV。
即:
。
LM35有多种不同封装型式。
在常温下,LM35不需要额外的校准处理即可达到±°1/4C的准确率。
其电源供应模式有单电源与正负双电源两种,分别如图4和图5所示,正负双电源的供电模式可提供负温度的量测;单电源模式在25°C下静默电流约50μA,非常省电。
图4单电源模式图5双电源模式
由课程任务书可知:
温度在15~25℃范围内连续可控。
因此,只需要单电源模式即可满足要求。
又由于,LM35输出的电压太小,因此将输出用非反相放大器放大十倍,其电路图如下图6所示。
图6温度传感与放大电路
3.3A/D转换模块
本系统采用ADC0809A/D转换器。
ADC0809是CMOS单片型逐次逼近式A/D转换器,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近寄存器、三态输出锁存器等其它一些电路组成。
因此,ADC0809可处理8路模拟量输入,且有三态输出能力,既可与各种微处理器相连,也可单独工作。
输入输出与TTL兼容。
ADC0809A/D转换芯片引脚图如下图7所示。
图7ADC0809A/D转换芯片引脚图
3.3.1ADC0809的外部特性
ADC0809芯片有28条引脚,采用双列直插式封装。
下面说明各引脚功能。
IN0~IN7:
8路模拟量输入端。
2-1~2-8:
8位数字量输出端。
ADDA、ADDB、ADDC:
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:
地。
3.3.2ADC0809工作方式
(1)定时传送方式
对于一种A/D转换其来说,转换时间作为一项技术指标是已知的和固定的。
例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。
可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。
(2)查询方式
A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。
因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。
(3)中断方式
把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。
不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。
首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。
3.3.3ADC0809的转化电路
ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。
本系统中ADC0809的转化电路如下图8所示。
图8ADC0809转换电路接线图
3.4温度显示模块
由于任务书要求使用LED显示温度,而且温度在15~25℃范围内连续可控,温度控制精度为0.5℃。
因此,本系统采用了四位共阳极的LED七段数码管。
如图7所示为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就必须符合下面的式子:
t≦100ms/(N-1)
本系统中N=4,则由式子可以算出t≦33ms,就是每一位的间隔时间不能超过33ms。
当然时间可以也设得短一些,比如5ms或1ms也可以。
如下图10所示为该四位7段LED数码管显示模块的管脚连接图。
从左到右,A-G依次接P0.0-P0.6,DP接P0.7管脚。
1-4为数码管位选的输入,依次接P2.0-P2.3管脚。
图9七段LED数码管显示原理图
在进行显示编程时,首先选定需要显示的位数,然后向段选为送数据。
即可显示。
由于单片机可以直接驱动LED显示管,因此不需外加驱动电路了。
图10七段LED数码管显示模块的管脚连接图
4输出通道设计
4.1报警电路设计
如果培养液里的温度过高或者是过低了,超出了其允许的某个温度范围,则系统会自动报警,提醒用户,可以让用户采取更为快速和有效地措施来避免或是减少损失。
报警电路图下图11所示。
当微机判断当前温度值超出范围时,将P2.6管脚置低电平,利用非门来驱动喇叭报警。
图11喇叭报警电路图
4.2降温控制电路设计
若当前检测得的温度比设定的温度高,则需要对培养液进行降温处理。
本系统利用半导体降温片来对培养液进行降温。
其优点是是无运动部件,可靠性也比较高,且无污染。
实物如下图10。
实际使用中也是同电阻丝加热模块一样,采用继电器,在满足制冷条件下继电器接通,接通制冷电源,利用改进的PID算法来计算PWM脉宽得出控制输出。
从而达到根据检测到的温度而自动调节继电器导通时间
当然,实际使用时也可以采用电风扇,即再在满足制冷条件下继电器接通,电风扇的电机接通电源而转动制冷。
也是利用改进的PID算法来计算PWM脉宽得出控制输出。
从而达到根据检测到的温度而自动调节风扇的转速。
其电路图如图12所示。
图12降温控制电路图
4.3加热控制电路设计
在读取到从温度传感模块采集到的温度数值后,与事先设定好的温度值进行比较,若当前检测得的温度比设定的温度低,则需要对培养液进行加热处理。
本系统利用高阻抗的电阻丝来对培养液加热。
如下图13所示,在检测到温度比设定的温度低时,三极管基极高电平,从而NPN管道通,驱动继电器启动,从而为高阻抗加热电阻丝通电加热生物培养液。
利用改进的PID算法来计算PWM脉宽得出控制输出。
从而达到根据检测到的温度而自动调节继电器导通时间。
图13加热控制电路图
5系统总电路图
图14系统总电路图
6采用改进PID控制算法
采用典型的反馈式温度控制系统,组成部分见下图15。
其中数字控制器的功能由单片机实现。
图15控制系统框图
已知培养皿的传递函数为
设
,其中τ1为电阻加热的时间常数,
为电阻加热的纯滞后时间,
为采样周期。
A/D转换器可划归为零阶保持器内,所以广义对象的传递函数为
(4-1)
广义对象的Z传递函数为
(4-2)
所以系统的闭环Z传递函数为:
(4-3)
系统的数字控制器为:
=
(4-4)
写成差分方程即为:
(4-5)
令
则有
(4-6)
式中
——第
次采样时的偏差;
——第
次采样时的偏差;
——第
次采样时的偏差;
本生物培养液温控系统采用的数字PID算法由软件实现,增量PID控制算法的优点是编程简单,数据可以递推使用,占用存储空间少,运算快。
但是对于温度这种响应缓慢、滞后性大的过程,不能用标准的PID算法进行控制。
当扰动较大或者给定的温度值大幅度变化时,由于产生较大的偏差,加上温控本身的惯性及滞后,在积分作用下,系统往往产生较大的超调和长时间的振荡。
因此,为克服这种不良的影响,采用积分分离法对增量PID算法进行改进。
当偏差e(k)绝对值较大时,暂时取消积分作用;当偏差e(k)绝对值小于某一设定值M时,才将积分作用投入。
(1)当|e(k)| 偏差小,说明系统温度已经接近设定值,此时加入了积分作用,可以消除系统静差,保证系统的控制精度。 根据递增原理可得: 式中: e(K)=r(K)一y(K)为第K时刻所得偏差信号,其中rk是给定值,yk是实际输出值; 其中kp为比例增益;ki为积分系数;kd为微分系数。 则增量式PID控制算法为: (2)当|e(k)|≥M时,用PD控制。 由于偏差大,说明系统温度远离设定值,应快速降温,采用PD控制,可以提高系统的动态响应速度,避免产生过大的超调,减小动态误差。 心得体会 通过本次温度监控系统的设计,我大有收获,在制作过程中,一定要注意的每个工作步骤的检查,确保制作成功。 设计时可以采取先分后总的方式来设计总电路图。 也就是说先把系统划分为几个独立的模块或者结构,然后再根据各个模块之间的联系性,把它们通过一定的关系综合起来,就得出了一个完整的系统。 特别是在设计大型系统的时候就显得特别的重要,有几个或者几十个设计者来合作,为了节省时间,必须同时开始,这就得划分模块分工合作,最终再合起来。 “先分后总”这是一种设计方式。 另外在本次设计的过程中遇到了使得我重新复习了过去的知识,加深了对知识的了解。 过去有些不了解的知识点经过现在的复习,有了更好的理解。 总的来说,本次课设让我对单片机程序、单片机应用、传感器、放大器等很多知识有更深一步的认识,收获甚大。 参考文献 【1】陈立周陈宇编著.单片机原理术及应用,机械工业出版社,2007.1 【2】于海生计算机控制技术,机械工业出版社,2007年5月 【3】林立张俊亮编著.单片机原理及应用,电子工业出版社,2009.7 【4】通用微机接口实验系统教师用实验指导书,北京清华大学出版社,2001.1~4 【5】刘红丽传感与检测技术,国防工业大学出版社,2007年3月 参考程序 #include #include sbitST=P2^0; sbitOE=P2^1; sbitEOC=P2^2; ucharcodedis_7[17]={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""°" ucharcodescan_con[4]={0x7f,0xbf,0xdf,0xef};//列扫描控制字 uchardatatemp_data[2]={0x00,0x00};//读出温度暂放 intChannel=4; unsignedcharSavedDat[6];//存放采集的数据结果 voidInitAdc0809()//初始化函数 { /*ChannelSelA=0; ChannelSelB=0; ChannelSelC=0;//默认选择第0通道*/ ST=0; OE=0; ET0=1; EA=1; TMOD=0x02; TH0=226; TL0=226; TR0=1; } voidReadDat(void) { ST=1; _nop_(); _nop_(); ST=0;//启动转换 _nop_(); _nop_(); if(EOC==1) { OE=1; SavedDat[Channel]=P1; _nop_(); _nop_(); OE=0; _nop_(); _nop_(); ST=1; _nop_(); _nop_(); ST=0; _nop_(); _nop_(); } } InitAdc0809(); //channel=ChannelSel; switch(ChannelSel) { case0: ChannelSelA=0; ChannelSelB=0; ChannelSelC=0;break; case1: ChannelSelA=0; ChannelSelB=0; ChannelSelC=1;break; case2: ChannelSelA=0; ChannelSelB=1; ChannelSelC=0;break; case3: ChannelSelA=1; ChannelSelB=1; ChannelSelC=0;break; case4: ChannelSelA=0; ChannelSelB=0; ChannelSelC=1;break; default: break; } ReadDat(); } voidmain() { Adc0808(Channel); P3=SavedDat[Channel]; } VoidKeyscan(void)interrupt1using2//用中断法扫描键盘 {ucharKeyScan()//检查按键情况 { uchartemp=40; KEY=0xef;//扫描第1列键 switch(KEY) { case0xee: temp=1;break; case0xed: temp=4;break; case0xeb: temp=7;break; case0xe7: temp=10;check();break; default: break; } KEY=0xdf;//扫描第2列键 switch(KEY) { case0xde: temp=2;break; case0xdd: temp=5;break; case0xdb: temp=8;break; case0xd7: temp=0;break; default: break; } KEY=0xbf;//扫描第3列键 switch(KEY) { case0xbe: temp=3;break; case0xbd: temp=6;break; case0xbb: temp=9;break; case0xb7: temp=11;break; default: break; } return(temp);//返回按键键值 } } /--------------显示扫描函数--------------/ scan()//温度显示时4位LED扫描 { chark; for(k=0;k<4;k++)//4位LED扫描控制 { Disdata=dis_7[display[k]];//数据显示 if(k==1&&DINcon==1){DIN=1;}//小数点显示 discan=scan_con[k];//位选 delay(250); } /--------温度数据处理--------/ work_temp(uinttem) { ucharn=0; if(tem>6348)//温度值正负判断 {tem=65536-tem;n=1;}//负温度求补码,标志位置1 display[4]=tem&0x0f;//取小数部分的值 display[0]=ditab[display[4]];//存入小数部分显示值 display[4]=tem>>4;//取中间八位,即整数部分的值 display[3]=display[4]/100;//取百位数据暂存 display[1]=display[4]%100;//取后两位数据暂存 display[2]=display[1]/10;//取十位数据暂存 display[1]=display[1]%10; nowtp=display[3]*100+display[2]*10+display[1];//计算当前温度 send_Da[0]=nowtp;//把当前温度储存到发送缓存区 /--------PID运算函数---------------/ voidpid() {staticintdiff[19]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; staticintsum_diff=0;//Σ(diff) staticuintcurr_=0; floatp_out,i_out,d_out,temp_pid; floatpwm_0; temp_pid=diff[curr_]; if(curr_+1>=19)curr_=0; elsecurr_+=1; sum_diff-=diff[curr_]; diff[curr_]=settp-nowtp; sum_diff+=diff[curr_]; p_out=KP*diff[curr_];//比例项输出 i_out=KI*sum_diff;//积分项输出 d_ou
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 生物 培养液 微机 温度 控制