单片机课程设计-水温控制系统设计

上传人:na****u 文档编号:61675366 上传时间:2022-03-12 格式:DOC 页数:31 大小:631.50KB
返回 下载 相关 举报
单片机课程设计-水温控制系统设计_第1页
第1页 / 共31页
单片机课程设计-水温控制系统设计_第2页
第2页 / 共31页
单片机课程设计-水温控制系统设计_第3页
第3页 / 共31页
点击查看更多>>
资源描述
水温控制系统的设计报告 摘要:PID控制是工控领域内的一种重要控制方法,将PID算法应用到以51单片机为核心的控制系统中,能产生良好的控制效果。基于PID算法的水温控制系统采用目前性价比较高的数字温度传感器DS18B20作为检测变送器,通过键盘向单片机输入设置数码管温度,单片机将温度偏差进行PID运算后,输出PWM波。PWM波作为执行机构的输入从而来决定电炉工作电压的大小,最终实现水温的控制。整个系统的电路结构简单,可靠性能高。经实验测试,该系统基本满足要求。关键词:PID;51单片机;温度传感器DS18B20;PWM;键盘;显示目录第1章 系统方案41.1 设计思想41.2 方案论证41.3 论证分析6第2章 系统设计82.1 硬件设计82.1.1 电源电路82.1.2 温度检测与变送环节82.1.3单片机最小系统92.1.4键盘电路112.1.5显示电路112.1.6 加热驱动模块122.1.7报警电路132.2 软件设计133.2.1 主函数132.2.3 按键设定函数142.2.4 温度采集函数152.2.6 PID运算子函数152.2.7 PWM产生函数172.3 系统调试182.3.1 人机界面调试183.3.2 温度显示18第 3 章 总 结19附录 系统源程序20第1章 系统方案1.1 设计思想温度的期望值可用键盘设定,温度传感器检测实际温度,控制器根据实测值与期望值偏差通过相应运算,输出相应的控制参数给加热驱动模块,从而实现闭环控制。 加热器 加热驱动模块 水温度传感器测量当前水温键盘输入给定温度控制器根据偏差进行相应运算,输出控制参数 显示 控制器加热器加热驱动模块蜂鸣报警键盘电源温度传感器整体设计框图1.2 方案论证1、 控制器 根据设计要求,控制器主要用于对温度测量信号的接收和处理、控制显示电路对温度值实时显示、控制键盘实现对温度值的设定、控制加热驱动模块等。对控制器的选择有以下两种方案:方案一:采用FPGA作为系统控制器。FPGA采用并行的IO口方式,运算速度快,稳定性高,可用EDA软件仿真及调试,功能强大,易于拓展,适合做大规模实时系统控制核心。由于本设计对数据处理的速度要求不高,FPGA处理速度快的优势得不到充分体现,且其成本较高,引脚较多,硬件电路布线复杂。方案二:采用STC90C516RD+作为系统控制器。单片机运算功能强、软件编程灵活、自由度大、可软件编程实现各种算法和逻辑控制,并且其功耗低、技术成熟、成本也较低。本设计对数据处理的速度要求不高,单片机已能满足设计需求。基于以上分析拟定采用方案二,由STC90C516RD+作为控制核心,对温度采集、实时显示以及加热装置进行控制。2、 控制算法在水温控制系统中,选择一个好的算法是系统达到技术指标的保证。对算法的选择有以下两种方案:方案一:数字PID控制算法。在连续时间控制系统中,PID控制应用非常广泛,其设计技术成熟,长期以来形成了典型的结构,参数整定方便,结构更改灵活,整合了比例控制、积分控制和微分控制3种基本控制规律。由于计算机程序的灵活性,数字PID控制比连续PID控制更优越。方案二:分段非线性加积分分离PI算法。当偏差较大时,控制量采用由实验总结出的经验值;当偏差较小时,切换为积分分离PI算法。该算法可较好地改善系统的非线性及静态特性,但PI控制只能消除稳态误差,而动态过程不能令人满意。方案三:模糊PID控制算法。该算法是在传统PID控制算法上增加模糊控制,在确定、的基础上,增加模糊集、,进行模糊化,以自适应不同的环境,实现控制的精确性和鲁棒性。由于对数字PID控制算法比较熟悉,且该算法参数整定方便,结构灵活,综上所述,选择方案一。3、 温度传感器温度信号为模拟信号,本设计要求对温度进行控制和显示,所以要把模拟量转为数字量。温度传感器模块有以下两种方案:方案一:利用热电阻传感器作为感温元件,热电阻阻值随温度变化而变化,测量电阻值即可得到对应的温度值。电阻阻值的变化经变送器转化为电流信号,再转化为电压信号送到A/D转换器PCF8591,将模拟信号转为数字信号。该方案在系统测量的温度范围内线性度良好。方案二:采用数字温度传感器DS18B20。该温度传感器无需其他外加电路,直接输出数字量,可直接与单片机通信,读取测温数据,电路简单,能够达到0.5度的固有分辨率,满足设计要求。考虑到现有的资源的有限选择以及热敏电阻传感器也能达到设计要求且线性度好,综上所诉,选择方案一。4、 加热驱动模块根据设计要求,可使用电热棒进行加热,控制加热棒的功率即可控制加热速度。由于加热的功率较大,考虑到简化电路的设计,我们直接采用220V电源。对加热驱动模块有以下两种方案:方案一:采用可控硅作为开关器件控制电路。可控硅是一种半控器件,由交流过零检测电路输出方波经适当延时可控制可控硅的导通角,延时时间即移相偏移量由温度误差计算得到。可以实现对交流电单个周期有效值周期性控制,保证系统的动态性能指标。该方案可以实现功率的连续调节,响应速度快,控制精度高,但电路稍复杂,需使用光耦合驱动芯片以及变压器等器件。方案二:采用固态继电器作为开关器件控制电路。固态继电器的使用比较简单,没有触点,可以频繁动作,且其内部本身就存在电磁隔离,因此单片机输出控制功率的PWM信号,即可控制固态继电器的导通和关断,从而达到控制加热棒通电和断电的目的。采用固态继电器控制可省去光耦隔离和交流过零检测电路,且由于系统设计对输出PWM信号频率要求不高,考虑电路中流过开关器件的电流较大,所以只要在选用时注意器件的最大功率和最大电流,选用适当参数的固态继电器型号就能达到设计要求。故选择采用方案二。5、 键盘模块根据设计要求,水温要由人工设定给定值并设置报警温度。对键盘模块有以下两种方案:方案一:采用矩阵键盘。矩阵键盘可大大节省I/O口的使用,但编程和电路较为复杂。方案二:采用独立键盘。独立键盘编程简单且电路也较为简单,但由于每一个按键都需要一个I/O口,故在I/O资源有限的情况下是一种浪费。考虑到本次设计所需按键较少,系统所需I/O充足,而独立按键编程及电路简单,故采用方案二。6、 显示模块根据设计要求,需要实时显示水温。显示模块有以下两种方案:方案一:采用液晶显示屏。液晶显示屏具有功耗小、平面直角显示以及影像稳定不闪烁,可视面积大,画面效果好,抗干扰能力强等特点。但其成本较高,编程工作量大,控制器资源占用较多。方案二:采用七段LED。数码管功耗低、寿命长、耐老化、对外界环境要求较低,且数码管采用BCD编码显示数字,编程简单,资源占用较少。由于本次设计只需显示三位温度值,信息量较少,故采用方案二。本系统中采用数码管的动态显示,节省单片机的内部资源。7、 电源模块该模块为单片机及各器件提供电源。采用220V变压整流电路输出5V直流电。8、 报警模块为使系统的人机交互界面更友好,设置了两路报警信号和两路标志信号,用于显示越限报警、强电电路通断情况以及温度稳定情况。1.3 论证分析经过比较,采用DS18B20测量水温,硬件电路简单,测量精度高,信号易处理,故温度变送器选用DS18B20。驱动加热采用固态继电器,在实行控制的时候不像其它采用D/A转换后再控制调节阀的方法,而是直接外接一个固态继电器,通过内部改变定时器的中断时间来调节一个周期内电子开关的导通和断开时间。这样既节省了材料也可以很大程度上减少硬件电路的结构4。系统原理框图如图1-1所示。温度显示报警DS18B20按键设定温度电炉固态继电器51单片机图1-1 系统原理框图综上所述方案有如下的特点:(1) 在完成所要求的任务的基础之上还有着结构简单、明了的特点,很容易实现,而且在一定的程度上节约成本。(2) 由于采用了离线的方法,很大程度上的减少了编程的麻烦,实现起来较容易。(3) 采用了无污染能源,保护环境。同时也省去了为建造燃料供应子系统的费用,节约了成本。采用了模拟的PWM变换,和固态继电器。可以将采样频率提高到很多的水平,使控制结果更准确,实时性、控制效果更好。第 31 页 共 31 页第2章 系统设计整个系统由软件和硬件两部分组成。本章详细介绍了系统的硬件和软件设计,并对硬件和软件的每一个部分进行了分析,在后半部分还对系统模型进行了仿真与程序调试。硬件和软件的每一个坏节都是深思熟虑而成,各自完成相应的功能并组成一个统一的整体。2.1 硬件设计系统的硬件包括:电源模块、温度设定模块、温度采集变送模块、温度偏差处理模块、温度显示模块、报警模块、电炉加热模块。2.1.1 电源电路由于整个系统都是用单片机和各类芯片及电阻、电容组成的,其工作电压为5V,不需要负电压,可采用三端固定正电压集成稳压器7805系列的芯片。其输出电压5V,按输出电流不同可分为78M05、78L05,输出电流分别为0.5A和1.0A,转换成功率分别为2.5W和5W。从整个系统的设计来看,其中有几块集成芯片和多个电阻、电容等器件,其功率总和应在2W左右,所以考虑整个系统的功率裕量,采用78M05作为整个系统的供电芯片。如图2-1所示。图2-1 电源电路图其中输入电压为交流220V,经过变压器其输出为12V,再进行整流。整流可通过四个二极管进行全波整流,也可以利用集成整流堆来进行。后面接电容C1、C2为滤波电容进行滤波,注意电解电容应该要有一定裕量,否则不能起到很好的滤波效果,本电路中使用的电容大小为470F。78M05的输出级接入两个滤波电容,用于减小因为电源波动对系统造成的影响和滤波。其不需要采用大容量的电解电容器,容量大小为100pF,再接入470F的电容器,便可减少因为电源波动的影响和滤去纹波,很好地改善负载的瞬态响应5。2.1.2 温度检测与变送环节 检测与变送设备主要根据被检测参数的性质与系统设计的总体考虑来决定。被检测参数性质的不同,准确度要求、响应速度要求的不同以及对控制性能要求的不同都影响检测、变送器的选择,要从工艺的合理性、经济性加以综合考虑。DS18B20是数字温度传感器,具有3引脚TO92小体积封装形式;温度测量范围为55125,可编程为9位12位A/D转换精度,测温分辨率可达0.0625,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生。 DS18B20的核心功能部件是它的数字温度传感器,它的分辨率可配置为9、10、11、12位,它们对应的温度值分辨率为0.5、0.25、0.125、0.0625。温度信息的低位、高位字节内容还包括了符号位S和二进制小数部分。本系统中DS18B20接线图如图2-2所示,当测量距离较远时,可在数据输出口加上拉电阻R9,其阻值为5K左右,确保数据传输的准确性。图2-2 DS18B20接线图由于本系统中涉及到PID调节,PID调节需要精度稍高的输入量,故本系统选取16位分辨率,精度为0.0625。2.1.3单片机最小系统整个系统采用常用的51单片机,90C516RD+是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,称单片机。1主要特性: 与MCS-51兼容,4K字节可编程闪烁存储器,寿命:1000写/擦循环;数据保留时间:10年;全静态工作:0Hz-24Hz;三级程序存储器锁定;128*8位内部RAM;32个可编程I/O线,两个16位定时器/计数器,5个中断源,可编程串行通道,低功耗的闲置和掉电模式,片内振荡器和时钟电路。2.本设计中90C516RD+与外围电路的接口本系统采用P3口与键盘电路连接,P1.3口与DS18B20的数据端连接。P0口作为显示与报警电路端口。/VCC端接5V电源,X1,X2接晶振电路,RESET端接复位电路,其余INT1,INT0,T1,T0,/RD,/WR,RXD,TXD,ALE,PSEN端置空。图2-3 90C516RD+单片机引脚图3. 复位电路90C516RD+单片机的复位是由外部的复位电路来实现的。最简单的上电自动复位电路,是通过外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1毫秒,就可以实现自动上电复位。当时钟频率选用12MHz时,C取22uF,R取1K。除上电复位外,有时还需要按键手动复位。按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST端经电阻和电源Vcc接通而实现的,按键手动电平复位电路如图2-4所示。当时钟频率选用12MHz时,C1选取10uF,R18选择1000欧,R20选择10000欧。图2-4 复位电路4. 晶振电路晶振有一个重要的参数,那就是负载电容值,选择与负载电容值相等的并联电容,就可以得到晶振标称的谐振频率。一般的晶振的负载电容为15pF或12.5pF,如果再考虑元件引脚的等效输入电容,则两个20pF的电容构成晶振的振荡电路就是比较好的选择。 晶体振荡器与石英晶体谐振器都是提供稳定电路频率的一种电子器件。石英晶体振荡器是利用石英晶体的压电效应来起振,而石英晶体谐振器是利用石英晶体和内置IC来共同作用来工作的。振荡器直接应用于电路中,谐振器工作时一般需要提供3.3V电压来维持工作。振荡器比谐振器多了一个重要技术参数为:谐振电阻。谐振器没有电阻要求。RR谐振电阻的大小直接影响电路的性能,也是各商家竞争的一个重要参数9。本设计采用12MHz晶振,并联两个20pF电容构成晶振电路。 图2-5 晶振电路2.1.4键盘电路要想控制温度,就要采用良好的人机界面。选择用4个按键组成一个小键盘执行某些功能,如清零、预置值、改变测量范围等。如图2-6所示。图2-6 按键电路其中S1作为设定期望温度、上下限报警温度,通过软件配合可实现电炉加热的通断;S2、S3用来设定所需温度的具体数值;S4用来确定温度设定,并启动温度测量程序。 2.1.5显示电路LED显示是用发光二极管显示字段的显示器件,也可称为数码管,其外形结构如图所示,由图可见它由8个发光二极管构成,通过不同的组合可用来显示09、AF及小数点。图2-7 “8”字型共阳数码管及锁存器连接图LED显示器分为共阴极和共阳极,共阴极是将8个发光二极管阴极连接在一起作为公共端,而共阳极是将8个发光二极管的阳极连接在一起作为公共端。在51单片机系统中常用的数码管显示方法有两种:动态扫描显示和串行静态显示。本系统中DS18B20的工作周期为几百毫秒,而且后续的PID运算涉及到浮点数运算,PWM波的中断周期小于温度采样周期控制,若采用动态扫描显示,显示时间短,且容易被中断打断,所以综上考虑,为使显示部分显示的是实时温度,且为了保持良好的人机界面,必须采用串行静态显示。对于四位数码管的串行静态显示,工作周期不超过40微秒,完全符合要求。2.1.6 加热驱动模块固体继电器工作可靠,寿命长,无噪声,无火花,无电磁干扰,开关速度快,抗干扰能力强,且体积小,耐冲击,耐振荡,防爆、防潮、防腐蚀、能与TTL、DTL、HTL等逻辑电路兼容,以微小的控制信号达到直接驱动大电流负载。主要不足是存在通态压降,有断态漏电流,交直流不能通用,触点组数少,另外过电流、过电压及电压上升率、电流上升率等指标差。固体继电器目前已广泛应用于计算机外围接口装置,电炉加热恒温系统,数控机械,遥控系统、工业自动化装置;信号灯、闪烁器、照明舞台灯光控制系统;仪器仪表、医疗器械、复印机、自动洗衣机;自动消防,保安系统,以及作为电网功率因素补偿的电力电容的切换开关等等,另外在化工、煤矿等需防爆、防潮、防腐蚀场合中都有大量使用。图2-8 加热驱动电路如图2-11所示,PWM口用来进行PID调节,改变加热丝中电流通断时间。2.1.7报警电路为使系统的人机交互界面更好,设置了两路报警信号和两路标志信号,用于显示越限报警、强电电路通断情况、温度稳定情况。当电炉中水温高于工作人员所设定的上限温度或者低于设定的下限温度时,则认为发生了越限,L1和L2分别用来表示上限报警和下限报警。值得一提的是,当系统从低温开始加热,到下限温度以前系统都会出现越限报警。当出现越限报警时,工作人员应该注意是不是此种情况,此情况可以忽略,利用LED发光进行报警。2.2 软件设计系统的软件部分以主程序为入口,在初始化之后调用键盘管理程序,完成对键盘的扫描,读入键值,并根据相应的键值进行各类操作。温度采样频率由软件延时控制,在每一次采样完成之后进行控制时间的计算和显示刷新。软件部分主要包括主函数、延时子函数、温度采集子函数、按键扫描子函数、PID处理子函数、PWM波产生子函数、报警显示函数。3.2.1 主函数主程序作为程序的入口,控制各类程序的调用。在系统中其主要的任务是调用键盘管理程序。然后其它的功能都由DS18B20温度转换程序和中断程序完成。可以说主程序起到了重启动后读入E2PROM中的设计温度和上、下限温度;设计各类定时器和开中断的,并调用键盘管理程序的功能。这样处理主程序起到了分散功能的作用,即主程序会变得很容易编写,而具体的功能都由功能子程序完成。流程图如图2-9所示。图2-9 主程序流程图2.2.2 按键设定函数系统的被控温度、上下限报警温度等都是通过按键来设定的,由于采用键盘的接法是最普通的,所以按键处理函数并不会占用整个程序太多时序。流程图如图2-10所示。图2-10 按键设定流程图2.2.3 温度采集函数DS18B20是数字式温度传感器,它与单片机的硬件接口电路简单,采用单总线工作方式,所以使用DS18B20需详细了解其工作时序和内部寄存器。主机通过拉低单线480微秒以上,产生复位脉冲,然后释放该线,进入RX接收模式。主机释放总线时,会产生一个上升沿。DS18B20检测到上升沿后,延时15至60微秒,DS18B20通过拉低总线60-240微秒来产生应答信号,主机接收到有应答信号后,说明有单线器件在线。流程图如图2-11所示。图2-11 DS18B20测温流程图2.2.4 PID运算子函数常规的模拟PID控制系统原理框图如图212所示。该系统由模拟PID控制器和被控对象组成。其中r(t)是给定值,y(t)是系统的实际输出值,给定值与实际输出值构成控制偏差e(t): (2-1)图2-12 模拟PID控制系统原理图e(t)作为PID控制的输入,u(t) 作为PID控制器的输出和被控对象的输入, 所以模拟PID控制器的控制规律为 (2-2)其中Kp:控制器的比例系数Ti:控制器的积分系数Td:控制器的微分系数1、比例部分在模拟PID控制器中,比例环节的作用是对偏差瞬间做出反应。偏差一旦产生控制器立即产生控制作用,使控制量向减少偏差的方向变化。控制作用的强弱取决于比例系数Kp,比例系数Kp越大,控制作用越强,则过渡过程越快,控制过程的静态偏差也就越小;但是越大,也越容易产生振荡,破坏系统的稳定性。故而,比例系数Kp选择必须恰当,才能过渡时间少,静差小而又稳定的效果。2、积分部分从积分部分的数学表达式可以知道,只要存在偏差,则它的控制作用就不断的增加;只有在偏差为0时,它的积分才能是一个常数,控制作用才是一个不会增加的常数。可见,积分部分可以消除系统的偏差。积分环节的调节作用虽然会消除静态误差,但也会降低系统的响应速度,增加系统的超调量。积分常数Ti越大,积分的积累作用越弱,这时系统在过渡时不会产生振荡;但是增大积分常数Ti会减慢静态误差的消除过程,消除偏差所需的时间也较长,但可以减少超调量,提高系统的稳定性。当Ti较小时,则积分的作用较强,这时系统过渡时间中有可能产生振荡,不过消除偏差所需的时间较短。所以必须根据实际控制的具体要求来确定Ti。3、微分部分实际的控制系统除了希望消除静态误差外,还要求加快调节过程。在偏差出现的瞬间,或在偏差变化的瞬间,不但要对偏差量做出立即响应(比例环节的作用),而且要根据偏差的变化趋势预先给出适当的纠正。为了实现这一作用,可在PI控制器的基础上加入微分环节,形成PID控制器。PID控制器参数的工程整定,各种调节系统中PID参数经验数据以下可参照如下数据:温度T:P=2060%,T=180600s,D=3180s 压力P:P=3070%,T=24180s液位L:P=2080%,T=60300s流量L:P=40100%,T=660s本系统中,PID控制器的输入是实测温度与期望温度的偏差,输出是PWM波的脉宽。由于温度具有热惯性这个特性,且在温度控制场合尽量不允许出现超调现象,所以在在选取比例系数不能太大,但为了和相应时间保持协调,可以当温差大于10时不进行PID运算,只有当温度偏差进入10范围内时,开启定时器进行PID控制。根据工程经验,本系统可忽略微分项,只进行比例与积分运算,最终实现稳准快的指标。流程图如图2-13所示。图2-13 PID运算流程图2.2.5 PWM产生函数脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶 体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。用PWM波输入固态继电器的输入端,从而改变电炉加热丝内的电流通断时间15。本设计中,PWM由单片机定时器中断产生,与主程序和其他函数不影响。脉宽受PID控制器的输出量控制,流程图如图2-14所示。图2-14 PWM产生流程图3.3 系统调试3.3.1 人机界面调试本系统涉及到人机界面的部分包括按键电路、显示电路、报警电路。首先对显示电路进行调试,根据移位寄存器的八个并行输出口与数码管的管脚的连接情况得出0-9、H、L、S的字型码,其中H用来标志上限报警值,L用来标志下限报警值、S用来标志期望设定值。当SET键第一次被按下时,四位数码管的第三位显示S,随后按动add10键和add1键,用来设定所需控制的温度值;当SET键第二次被按下时,四位数码管的第三位显示H,随后按动add10键和add1键,用来设定温度的上限报警值;当SET键第三次被按下时,四位数码管的第三位显示L,随后按动add10键和add1键,用来设定温度的下限报警值。当CHECK键被按下时,启动温度测量。当设定温度值小于下限温度值时,下限报警指示灯亮;当设定温度值大于上限温度值,上限报警指示灯亮。3.3.2 温度显示系统的控制对象为温度,所以温度测量的准确性至关重要,DS18B20采用了12位的分辨率,精度达到0.0625,由于DS1820与微处理器间采用串行数据传送,占用了一定的时序,并且串行静态显示需要几百毫秒的延时,所以数码管显示的温度大致就是当前的温度。该系统测量精度符合要求,但是响应时间比较慢,这样就对软件设计中的采样周期提出了较高的要求。第 3 章 总 结基于90C516RD+单片机温度控制系统,利用温度传感变送器,将采样到的温度信号输入到单片机中,再由单片机作为90C516RD+单片机的控制器,根据测量温度与设定温度的差值和90C516RD+单片机的算法生成控制信号,控制电炉的通电与断电。整个系统结构紧凑、所用芯片少、控制精度高。在键盘、变送器、显示电路上都采用了串行方式,从而减小了单片机口线的使用,也使使用口线小的单片机成为可能,减小了成本开支;电源电路虽未采用流行的开关稳压电源,但也经济实惠,性能稳定。在软件上,基于90C516RD+单片机的算法的温度控制系统采用了经典的90C516RD+单片机的算法,从某个角度上说这种算法优于传统的控制算法,有更稳定、控制精度更高等优点,而控制量的输出上采用了模拟的PWM变换,免去了一级D/A转换器,减小了成本,且简单易行。在程序的编写过程中特别注意了人机的交互性及各种功能的实现,如键盘控制管理程序和90C516RD+单片机的运算程序都是经过深思熟虑而精心设计,使系统的操作界面更容易让人理解,同时使用键盘输入控制温度,虽然一定程度上增加了程序的复杂性,但同时也使系统的温度更容易设定。当然,系统同时也存在几点缺点。在选择89C51单片机的控制器时用了速度相对较慢的单片机,若采用速度更快的单时钟周期系列的单片机,提高采样频率,控制精度将会更高。附录 系统源程序/*- 名称:DS18b20数码管显示 内容:显示格式 符号 xxx.x C 可以显示负温度-*/#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include 18b20.h#include delay.h#define DataPort P0 /定义数据端口 程序中遇到DataPort 则用P0 替换#define uint unsigned int#define uchar unsigned charsbit LATCH1=P22;/定义锁存使能端口 段锁存sbit LATCH2=P23;/ 位锁存sbit set=P30; /定义按键输入端口sbit add1=P32;sbit add10=P34;sbit check=P36;sbit spk=P10; /警报sbit pwm=P27; /pwm波struct PID unsigned int setpoint;unsigned int p;unsigned int i;unsigned int d;signed long lasttime;signed long prevtime;signed long sumerror;struct PID spid;bit ReadTempFlag;/定义读时间标志unsigned char code dofly_DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值09unsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码unsigned char TempData8; /存储显示值的全局变量uchar dbuf4=0; bit flag;uchar k,h_p,l_p;uint temp_set,temp_h,temp_l,tset,th,tl,e,lastt;uint uk,uk1,kp;float ki,kd;unsigned int TempH,TempL,temp;uchar high_time=0,low_time=0,count=0;unsigned int shi, ge;void Display(unsigned char FirstBit,unsigned char Num);/数码管显示函数void Init_Timer0(void);/定时器0初始化void Init_Timer1(void);/定时器1初始化void ds18b20(void);/读取温度+显示+警报void key_set(void);/设置温度及上下限void key_add1(void);/加1void key_add10(void);/加10void key_check(void);/显示实时/设置温度void pidcalc(void);/PID运算void c_pwm(void);/*- 主函数-*/void main (void) /unsigned int TempH,TempL,temp;PT1=1;/Init_Timer1();kp=4;ki=0.0015;kd=0;pwm=0;while(1) key_set(); key_add1(); key_add10(); key_check(); while(flag=1) ds18b20(); if(e0)&(e5) Init_Timer1(); pidcalc(); else pwm=0; key_set(); /*- 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2-*/void Display(unsigned char FirstBit,unsigned char Num) static unsigned char i=0; DataPort=0; /清空数据,防止有交替重影 LATCH1=1; /段锁存 LATCH1=0; DataPort=dofly_WeiMai+FirstBit; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=TempDatai; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; i+; if(i=Num) i=0;/*- 定时器0初始化子程序-*/void Init_Timer0(void) TMOD |= 0x01; /使用模式1,16位定时器,使用|符号可以在使用多个定时器时不受影响 /TH0=0x00; /给定初值 /TL0=0x00; EA=1; /总中断打开 ET0=1; /定时器0中断打开 TR0=1; /定时器0开关打开/*- 定时器0中断子程序-*/void Timer0_isr(void) interrupt 1 static unsigned int num; TH0=(65536-2000)/256; /重新赋值 2ms TL0=(65536-2000)%256; Display(0,8); / 调用数码管扫描 num+; if(num=300) / num=0; ReadTempFlag=1; /读标志位置1/*- 定时器1初始化子程序-*/void Init_Timer1(void) TMOD |= 0x10; /使用模式1,16位定时器,使用|符号可以在使用多个定时器时不受影响 TH1=(65536-50000)/256; /给定初值50ms TL1=(65536-50000)%256; /TH1=0xff; /TL1=0xec; EA=1; /总中断打开 ET1=1; /定时器1中断打开 TR1=1; /定时器1开关打开/*- 定时器1中断子程序-*/void Timer1_isr(void) interrupt 3static unsigned int i; /TH1=60536/256; /TL1=60536%256; i+; /pwm=0; if(i=uk) pwm=1;/pwm占空比 if(i=200) pwm=0;i=0; /*switch(pwm=1) case 0: if(+low_time=l_p) pwm=1; low_time=0; break; case 1: if(+high_time=h_p) pwm=0; high_time=0; break; */ /*if(+count=(high_time) pwm=0; else if(count4; TempL=temp&0x0F; TempL=TempL*6/10;/小数近似处理 if(TempHth|TempH5)|(ek=5) ET1=0; pwm=0; if(ek0)&(ekTempH%100) if(e5) high_time=100; low_time=0; else for(i=0;i=100) high_time=100; low_time=(100-high_time); else high_time=0; low_time=100; /*PID初始化*/void init_pid() spid.p=20; spid.i=2; spid.d=4; spid.setpoint=tset; 头文件:/*- 名称:18B20温度传感器-*/#includedelay.h#include18b20.h/*- 18b20初始化-*/bit Init_DS18B20(void) bit dat=0; DQ = 1; /DQ复位 DelayUs2x(5); /稍做延时 DQ = 0;
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕业论文


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!