《自考视频辅导课程》轻松易懂,助你拿证!点击试听,综合优惠低至69元/科!
自考电子信息工程毕业论文:基于单片机的酿酒槽的温度检测与控制由自考生网为考生收集整理,以下毕业论文仅供参考。
更多电子信息工程专业相关论文,可查看我办“自考电子信息工程毕业论文”栏目。
基于单片机的酿酒槽的温度检测与控制
摘要:课题针对温度控制的特点及实现准确温度控制的意义,设计了一种基于单片机的控制系统。设计内容包括硬件和软件两个部分。硬件电路以AT89S52单片机为微处理器,详细设计了温度信号采样电路,键盘及显示电路,温度控制电路,报警电路,时钟信号电路。软件部分主要对PID算法进行了数学建模和编程。PID参数整定采用的是归一参数整定法。本设计由键盘电路输入设定温度信号给单片机,温度信号采集电路采集现场温度信号给单片机,单片机根据输入与反馈信号的偏差进行PID计算,输出控制信号给温度控制电路,实现降温。显示电路实现现场温度的实时监控。
工业生产中温度控制具有单向性、时滞性、大惯性和时变性的特征,要实现温度控制的快速性和准确性,对于提高产品质量具有很重要的现实意义。
本课题针对温度控制的特点及实现准确温度控制的意义,设计了一种基于单片机的控制系统。设计内容包括硬件和软件两个部分。硬件电路以AT89S52单片机为微处理器,详细设计了温度信号采样电路,键盘及显示电路,温度控制电路,报警电路,时钟信号电路。软件部分主要对PID算法进行了数学建模和编程。PID参数整定采用的是归一参数整定法。本设计由键盘电路输入设定温度信号给单片机,温度信号采集电路采集现场温度信号给单片机,单片机根据输入与反馈信号的偏差进行PID计算,输出控制信号给温度控制电路,实现降温。显示电路实现现场温度的实时监控。
本系统PID参数整定在MATLAB软件下SIMULINK环境中进行了仿真,通过稳定边界法整定得到、、参数,最终系统无稳态误差,调节时间为30s,无超调量,各项指标均满足设计要求。本系统实现简单,硬件要求不高,且能对温度进行时实显示,具有控制过程的特殊性,本设计提出了一种基于PID算法来实现恒温控制的温度控制系统,主要是为了达到生产过程中对温度控制速度快,准确性高等特点。
关键词PID算法温度控制
第1章绪论
1.1引言
电加热温度控制具有升温单向性、大惯性、大滞后性和时变性的特点。例如:其升温单向性是由于电加热的升温、保温主要是通过电阻加热;降温则通常是依靠自然冷却,当温度一旦超调,就无法用控制手段使其降温,因而很难用数字方法建立精确的模型,并确定参数。应用传统的模拟电路控制方法,由于电路复杂,器件太多,往往很难达到理想的控制效果。由于无法用精确的数学方法来建立模型并确定参数,本设计采用PID控制。
目前工业自动化水平已成为衡量各行业现代化水平的一个重要标准,同时控制理论的发展也经历了经典控制理论、现代控制理论和智能控制理论三个阶段。智能控制的典型实例是模糊全自动洗衣机等;而自动控制系统可分为开环控制系统和闭环控制系统。一个控制系统包括控制器、传感器、变送器、执行机构、输入输出接口。控制器的输出经过输出接口、执行机构加在被控系统上,控制系统的被控量经过传感器、变送器通过输入接口送到控制器。不同的控制系统,其传感器、变送器和执行机构都不一样。比如压力控制系统要采用压力传感器,而温度控制系统要采用温度传感器。目前PID控制及其控制器或智能PID控制器已经很多,产品已在工程实际中得到广泛的应用,各大公司均开发了具有PID参数自整定功能的智能调节器,其中PID调节器参数是自动调节是通过智能化调整或自校正、自适应算法来实现,有利用PID调节控制实现压力、温度、流量、液位的控制。能实现PID控制功能的有PLC和一些PC机。
传统的PID控制电路结构复杂,需配合相应的可控硅控制电路来完成功率的调控。针对它具有器件多、生产成本高、电路调试复杂的缺点,本恒温自动控制系统的设计中应用AT89S52的单片机进行数字PID运算,能充分发挥软件系统的灵活性,在必要时针对PID算法进行修正,使其更加完善,固态继电器的功率调节电路,极大地简化了执行电路,与单片机的接口也变得十分的方便,同时只需要更换不同输出功率的固态继电器,就可满足不同功率加热系统的需要由于设计的系统对温度动、静态指标要求要求不高,且允许有一定的温度偏差和允许调节的时间较长时,最流行控制方法还是继电接触器控制系统。因此本设计采用若继电接触器控制系统。整个设计系统电路简单、调试方便、实际应用可达到理想的精度。
随着集成电路技术的发展,单片微型计算机的功能也不断地增强,许多高性能的新型机种不断的涌现出来,单片机以其集成度高、功能强、体积小可靠性高、价格低和开发周期短等特点,成为自动化和各个测控领域中应用广泛的器件,在工业生产中,称为必不可少的器件,尤其是在当要求控制精度高,而成本低的社会里,往往都是采用单片机作为数字控制器取代模拟控制器。在温度控制系统中,单片机最是起到了不可替代的核心作用。
而PID控制技术在现在最为成熟,控制结构简单,参数容易调整,不必求出被控对象的数学模型就可以调节,所以在恒温控制系统中通常采用PID算法。PID是比例(proportional)、积分(intergal)和微分(derivative)三者的缩写。PID调节器的三个基本参数kp(比例系数)、ki(积分系数)、kd(微分系数)是选择非常重要,它将直接影响一个控制系统的准确性。而三个环节在实际控制中的作用:1、比例调节作用:比例反映系统的偏差,系统一旦出现偏差,比例调节立即产生调节作用,用于减少偏差。比例作用大,可以加快调节,减少误差,但过大的比例使系统的稳定性下降,甚至造成系统不稳定;2、积分调节作用:是使系统消除静态误差,提高无差度。因为有误差,积分调节就进行,直至无差,积分调节就停止。积分调节输出为一常值,积分作用的强弱取决于积分时间常数Ti.Ti越小,积分时间就越强;反之Ti越大,积分时间就越弱。加入积分调节可使系统稳定性下降,动态响应变慢,积分作用常与另两种调节规律结合,组成PI调节或PID调节;3、微分调节作用:微分作用反映系统偏差信号的变化率,具有预见性,能预见偏差变化的趋势。因此能产生超前的控制作用。在偏差还没有形成之前,已被微分调节作用消除。因此微分调节可以改善系统的动态性能。在为时间选择合适的情况下,可以减少超调,减少调节时间。微分作用对噪音干扰有放大作用,因此过强的加微分环节,对系统抗干扰不利。此外微分反映的是变化率,而当输入没有变化时,微分作用的输出为零。微分作用不能单独使用,需要与另外两种调节规律相结合,组成PI调节器或PID调节器。
大多数温度控制系统均建立在模型上,难以满足加工工艺要求,故引入模糊控制,采用模糊PID算法,运用AT89S52单片机对电阻炉温度实现智能控制,可以解决上述种种不足,从而实现高精度的控制。PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,因此本次设计应用PID控制技术最为有效。
1.2方案的论证
无论是工农业生产中,还是日常生活中,对温度的检测和控制都是必不可少的,对于温度的检测通常是采用热敏电阻在通过A/D(模/数)转换得到数字信号,但由于信号的采集对整个系统的影响很大,如果采样精度不高,会使这个系统准确性下降。因此本次设计采用高精度的温度传感器:数字温度传感器DS18B20。这种数字温度传感器是DALLAS公司生产的单总线,。而对于温度控制的方法也有很多:如单片机控制、PLC控制、模拟PID调节器和数字PID调节器等等。综合各方面的意见,本设计采用单片机来实现温度的控制。
1.2.1方案一利用单片机实现酿酒槽的温度控制系统
利用单片机系统实现温度恒定的控制,其总体结构图如图1.1所示。系统主要包括现场温度采集、实时温度显示与报警装置和系统核心AT89S52单片机作为微处理器。
图1.1方案一的系统总体结构框图
温度采集电路以数字量形式将现场温度传至单片机。单片机结合现场温度与用户设定的目标温度,按照已经编程固化的模糊控制算法计算出实时控制量。以此控制量控制固态继电器开通和关断,以决定温度控制电路的工作状态,使温度不超过目标值。在温度接近或达到目标值时,单片机通过采样回的温度与设置的目标温度比较做出相应的控制,使酒槽温度下降。系统运行过程中的各种状态参量均可由液晶实时显示。
1.2.2方案二利用PLC实现恒温控制系统
利用PLC实现对酒槽温度的控制,其控制系统采用PLC控制实现自动控制方式,来达到控制温度的恒定。智能型电偶温度表将置于被测对象中,热电偶的传感器信号与恒定温度的给定电压进行比较,构成闭环系统,生成温差电压Vt,PLC自适应恒温控制电路,根据Vt的大小计算出全通、间接导通和全断的自适应恒温控制电路,并将占空比可调的控制电平经输出隔离电路去控制可控硅门极的通断,实现自适应的恒温控制。若温度升的过快,PLC也将输出关断电平信号转换为可控硅电路相匹配的输入信号。
1.2.3方案三利用模拟PID调节的恒温控制系统
基于模拟PID调节的恒温控制系统由数字电路部分和模拟电路两部分组成,其控制系统的机构框图如图1.2所示。由按键设定某一温度,单片机对设定温度值进行查表计算后转换为对应的电压数字值,通过16位的数模转换器得到与之精确对应的电压信号,此电压值于热敏电阻实际测量的电压值进行比较产生一个误差信号,经过PID电路后,获得一个控制量给制冷元件构成实时闭环系统,同时实际测量的电压值并显示在液晶屏上。
图1.3方案三的系统结构框图
1.3设计方案
控制模块的选择,数字比较器与模拟控制器相比较,数字比较器具有以下几个优点:
1、模拟调节器调节能力有限,当控制规律较为复杂时,就难以甚至无法实现。而数字控制器能实现复杂控制规律的控制。
2、计算机具有分时控制能力,可实现多回路控制。
3、数字控制器具有灵活性。起控制规律可灵活多样,可用一台计算机对不同的回路实现不同的控制方式,并且修改控制参数或控制方式一般只可改变控制程序即可,使用起来简单方便,可改善调节品质,提高产品的产量和质量。
4、采用计算机除实现PID数字控制外,还能实现监控、数据采集、数字显示等其他功能。综合考虑,本设计控制模块采用数字PID调节器。
对于方案一,采用单片机实现恒温控制,虽然该方案成本低,可靠性高,抗干扰性强,但对于系统的动态性能与稳态性能要求较高的场合是不合适的;而对于方案二,采用PLC实现恒温控制,由于PLC成本高,且PLC是外围系统配置复杂,不利于我们的设计,由于数字PID调节,运算量大,只要选择合适的参数对于温度的控制精度往往能达到较好的效果。为了使设计的成本低、抗干扰强,系统动态性能与稳态性能好的前提下,设计方案的总体结构框图如图1.3所示:通过单片机对偏差进行PID运算,输出控制D/A转换电路转换成0—8V电压信号来控制可控硅触发电路,从而控制可控硅通断率,通过调节加热功率即可达到控制温度恒定的目的。
图1.3设计总体结构框图
第2章酿酒槽温度控制系统硬件设计
考虑到尽量降低成本和避免与复杂的电路,此系统所用到的元器件均为常用的电子器件。而主控器采用低功耗、高性能、片内含8k byte可反复檫写的Flash、只读程序器CMOS8位单片机AT89S52;温度传感器采用DALLAS公司生产的单总线数字温度传感器DS18B20;采用控制端TTL电平,即可实现对继电器的开关,使用时完全可以用NPN型三极管接成电压跟随器的形式驱动;单片机所需要的+5V工作电源是通过220V交流电压通过变压、整流、稳压、滤波得到。实时控制的显示器、键盘通过单片机来完成键盘扫描与输出动态显示。采用具有微功耗、外围接口简单、精度高、工作稳定可靠等优点的ds12887实时时钟芯片。
考虑到系统对传输速度的要求不高,在PCA机上设定和实时显示温度,系统配有RS232串行通讯端口,下面对硬件电路作具体的设计。
2.1 AT89S52单片机简介
2.1.1 AT89S52单片机资源简介
AT89S52的结构如图2.1所示。由于它的广泛使用使得市面价格较8155、8255、8279要低,所以说用它是很经济的。该芯片具有如下功能:①有1个专用的键盘/显示接口;②有1个全双工异步串行通信接口;③有2个16位定时/计数器。这样,1个89S52,承担了3个专用接口芯片的工作;不仅使成本大大下降,而且优化了硬件结构和软件设计,给用户带来许多方便。
89S52有40个引脚,有32个输入端口(I/O),有2个读写口线,可以反复插除。所以可以降低成本。
主要功能特性:
(1)兼容MCS51指令系统
(2)32个双向I/O口线
(3)3个16位可编程定时/计数器中断
(4)2个串行中断口
(5)2个外部中断源
(6)2个读写中断口线
(7)低功耗空闲和掉电模式
(8)8k可反复擦写(>1000次)Flash ROM
(9)256x8 bit内部RAM
(10)时钟频率0-24MHz
(11)可编程UART串行通道
(12)共6个中断源
(13)3级加密位
(14)软件设置睡眠和唤醒功能。
2.1.2 AT89S52单片机信号引脚介绍[9]
输入输出口线
~口8位双向口线
~口8位双向口线
~口8位双向口线
~口8位双向口线
ALE地址锁存控制信号
在系统扩展时,ALE用于控制把口输出的低8位地址送入锁存器锁存起来,以实现低位地址和数据的分时传送。此外由于ALE是以六分之一晶振频率的固定频率输出正脉冲,因此可作为外部定时脉冲使用。
外部程序存储器读选通信号
在读外部ROM时,有效(低电平),以实现外部ROM单元的读操作。
访问程序存储趋控制信号
但信号为低电平时,对ROM的读操作限定在外部程序存储器;而当信号为高电平时,则对ROM的读操作是从内部程序存储器开始,并可延续至外部程序存储器。
RST复位信号
当输入的复位信号延续2个机器周期以上高电平时即为有效,用以完成单片机的复位操作。
和外接晶体引线端
当使用芯片内部时钟时,此二引线端用语外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
地线
+5V电源
2.1.3 AT89S52单片机时钟和复位电路
时钟电路
单片机内部有一个高增益反向放大器,输入端为芯片引脚,输出端为引脚。而在芯片外部和之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。晶体震荡频率高,则系统的时钟频率也高,单片机运行速度也就快,但反过来运行速度快对存储器的速度要求就高,对印制电路板的工艺要求也高,所以,这里使用震荡频率为6MHz的石英晶体。震荡电路产生的震荡脉冲并不直接是使用,而是经分频后再为系统所用,震荡脉冲经过二分频后才作为系统的时钟信号。在设计电路板时,振荡器和电容应尽量靠近单片机,以避免干扰。需要注意的是:电路板时,振荡器和电容应尽量安装得与单片机靠近,以减小寄生电容的存在更好的保障振荡器稳定、可靠的工作电路图如图2.2所示
复位电路
单片机的复位电路分上电复位和按键复位两种方式。
(a)上电复位:
在加电之后通过外部复位电路的电容充电来实现的。当的上升时间不超过1ms,就可以实现自动上电复位,即接通电源就完成了系统的初始化电路原理图。RST上的电压必须保证在斯密特触发器的阀值电压以上足够长时间,满足复位操作的要求。
(b)按键复位:
程序运行出错或操作错误使系统处于死锁状态时,为了摆脱困境,也需按复位键以重新启动。RST引脚是复位信号的输入端,复位信号是高电平有效。按键复位又分按键脉冲复位(图2.3)和按键电平复位。电平复位将复位端通过电阻与相连,按键脉冲复位是利用RC分电路产生正脉冲来达到复位的。
(c)注意:
因为按键脉冲复位是利用RC微分电路产生正脉冲来达到复位的。所以电平复位要将复位端通过电阻与相连.如复位电路中R、C的值选择不当,使复位时间过长,单片机将处于循环复位状态。故本设计采用按键复位。
2.2温度传感器
温度测量转换部分是整个系统的数据来源,直接影响系统的可靠性。传统的温度测量方法是:温度传感器例如AD590,将测量的温度转换成模拟电信号,再经过A/D转换器把模拟信号转换成数字信号,单片机再对采集的数字信号进行处理[3]。这种模拟数字混合电路实现起来比较复杂,滤波消噪难度大系统稳定性不高,鉴于这些考虑,本设计采用数字式温度传感器DS18B20。
DS18B20支持“一线总线”接口,测量温度的范围为-55°C~+125°C,现场温度直接以“一线总线”的数字式传输,大大的提高了系统的抗干扰性。DS18B20为3引脚,DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端。
温度采集电路模块如图2.4所示。DSB8B20的3脚接系统中单片机的P1.4口线,用于将采集到的温度送入单片机中处理,2脚和3脚之间接一个4.7K上拉电阻,即可完成温度采集部分硬件电路。DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
图2.4温度采样电路
DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。数据转换如下表2.1。
表2.1 DS18B20温度数据转换表
LS Byte Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
23 22 21 20 2-1 2-2 2-3 2-4
MS Byte Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8
S S S S S 26 25 24
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
2.3键盘和显示电路
键盘采用4×4的行列式键盘,又叫矩阵式键盘。用I/O口线组成行、列结构,按键设置在行列的交点上。4×4的行列结构可组成16个键的键盘。因此,在按键数量较多时,可以节省I/O口线。
2.3.1行列式键盘的接口
行列式键盘的接口方法,直接接口于单片机的I/O口上,如图2.5所示。
图2.5行列式键盘与单片机连接
2.3.2行列式键盘的工作原理
键盘设置在行、列线的交点上,行、列线分别连接到按键开关的两端。行线通过上拉电阻接+5V,被拉在高电平状态。
对键盘的工作过程可分两步:第一步时CPU首先检查键盘上是否欧键按下;第二步是再识别是哪一个键按下。
检测键盘上有无键按下可采用查询工作方式、定时扫描工作方式和中断三种工作方式。
2.3.3液晶显示的接口
液晶显示的接口方法,直接接口于单片机的I/O口上,如图2.6所示。
图2.5液晶显示与单片机连接
2.3.4液晶显示的工作原理
显示采用DMC1602A LCM,采用标准的14脚接口,其中:
第1脚:VSS为地电源
第2教:VDD接5V正电源
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度
第4脚:RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器
第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:E端为始能端,当E端由高电平变成低电平时,液晶模块执行命令
第7~14脚:D0~D7为8位双向数据线
第5~16脚:空脚
1602液晶模块内部的控制器共有11条控制指令,如表2所示,
表2.1指令表
指令RS R/W D7 D6 D5 D4 D3 D2 D1 D0
清显示0 0 0 0 0 0 0 0 0 1
光标返回0 0 0 0 0 0 0 0 1*
置输入模式0 0 0 0 0 0 0 1 1/D S
显示开/关控制0 0 0 0 0 0 1 D C B
光标和字符移位0 0 0 0 0 1 S/C R/L**
置功能0 0 0 0 0 DL N F**
置字符发生存储器地址0 0 0 0 1字符发生存储器地址(AGG)
置数据存储器地址0 0 1显示数据存贮器地址(ADD)
读忙标志或地址0 1 BF计数器地址(AC)
写数到CGRAM或DDRAM 1 0要写的数
从CGRAM或DDRAM读数1 1读出的数据
它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
指令1:清显示,指令码01H,光标复位到地址00H位置
指令2:光标复位,光标返回到地址00H
指令3:光标和现实模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或右移。高电平有效,低电平则无效
指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁
指令5:光标或显示以为S/C:高电平时移动显示的文字,低电平时移动光标
指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平双行显示
指令7:字符发生器RAM地址设置
指令8:DDRAM地址设置
指令9:读忙信号和光标地址BF:为忙标志,高电平表示忙,此时模块不能接受命令或者数据,如果为低电平表示不忙。
指令10:写数据
指令11:读数据
2.4温度控制电路
在控制系统中通过测定温度控制电磁阀进行洒水降温。
直动式电磁阀:
原理:通电时,电磁线圈产生电磁力把关闭件从阀座上提起,阀门打开;断电时,电磁力消失,弹簧把关闭件压在阀座上,阀门关闭。
特点:在真空、负压、零压时能正常工作,但通径一般不超过25mm。
分布直动式电磁阀:
原理:它是一种直动和先导式相结合的原理,当入口与出口没有压差时,通电后,电磁力直接把先导小阀和主阀关闭件依次向上提起,阀门打开。当入口与出口达到启动压差时,通电后,电磁力先导小阀,主阀下腔压力上升,上腔压力下降,从而利用压差把主阀向上推开;断电时,先导阀利用弹簧力或介质压力推动关闭件,向下移动,使阀门关闭。
特点:在零压差或真空、高压时亦能可靠动作,但功率较大,要求必须水平安装。
先导式电磁阀:
原理:通电时,电磁力把先导孔打开,上腔室压力迅速下降,在关闭件周围形成上低下高的压差,流体压力推动关闭件向上移动,阀门打开;断电时,弹簧力把先导孔关闭,入口压力通过旁通孔迅速腔室在关阀件周围形成下低上高的压差,流体压力推动关闭件向下移动,关闭阀门。
特点:流体压力范围上限较高,可任意安装(需定制)但必须满足流体压差条件。
2.5语言报警电路
语音报警电路采用ISD2560语音芯片,ISD2560语音芯片在语音录放系统中的实际应用效果非常好,而且编程也比较简单,与其它一些数字语音芯片相比,ISD2560的突出特点是放音效果极佳,能够非常真实、自然地再现语音、音乐、音调和效果声,另外,使用该芯片也可自己设计电路实现录音操作,使用十分方便。
2.5.1 ISD2560工作模式
由于ISD2560内置了若干种操作模式,因而可用最少的外围器件实现最多的功能。操作模式也由地址端控制;当最高两位都为1时,其它地址端置高可选择某个(或某几个)特定模式。因此操作模式和直接寻址相互排斥。具体操作模式见表1所列。操作模式可由微控制器也可由硬件实现。使用操作模式要注意两点:(1)所有操作最初都是从0地址即存储空间的起始端开始。后续的操作根据选用的模式可从其它地址开始。但是,电路由录转放或由放转录(M6模式除外),或都执行了掉电周期后,地址计数器将复位为0。(2)当CE变低且最高两地址位同为高时,执行操作模式。这种操作模式将一直有效,直到CE再次由高变低,芯片重新锁存当前的地址/模式端电平并执行相应的操作为止。如表2.2所示:
表2.2操作模式简表
模式功能典型应用可组合使用的模式
M0信息检索快进入信息M4、M5、M6
M1删除WOM在最后一条信息结束处放EOM M3、M4、M5、M6
M2未用保留N/A
M3循环从0地址连续放音M1、M5、M6
M4连续寻址录放连续的多段信息M0、M1、M5
M5 CE电平有效允许暂停M0、M1、M3、M4
M6按键模式简化外围电路M0、M1、M3
2.5.1 ISD2560的连接图
ISD2560语音芯片的硬件接法,如图2.6:
图2.6语音报警电路图
第3章酿酒槽温度控制系统软件设计
在控制系统中,控制器最常用的控制规律是PID控制。PID控制系统原理框图如图3.1所示。系统由PID控制器和被控对象组成。
3.1 PID调节器控制原理
图3.1 PID控制系统原理框图
PID控制器是一种线性控制器,一种它根据给定值rin(t)与实际输出值yout(t)构成控制偏差:
Error(t)=rin(t)-yout(t)
PID控制就是对偏差信号进行比例、积分、微分运算后,形成一种控制规律。即,控制器的输出为:
(3.1)
或写成传递函数的形式:
(3.2)
左中,kp——比例系数;Ti——积分时间常数;T d——微分时间常数。
简单说来,PID控制器各校正环节的作用如下[5]:
(1)比例环节:成比例地反映控制系统的偏差信号error(t),偏差一旦产生,控制器立即产生控制作用,以减小偏差。
比例控制:Gc(s)=Kp
(2)积分环节:主要用于消除静差,提高系统的无差度。积分作用的强尽弱取决于积分时间常数Ti,Ti越大,积分作用越弱,反之则越强。
积分控制:Gc(s)=Kp/T is
(3)微分环节:反偏差信号的变化趋势(变化速率),并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。
微分控制:Gc(s)=KpT ds
3.2位置式PID算法
基本PID控制器的理想算式为
(3.3)
式中
u(t)——控制器(也称调节器)的输出;
e(t)——控制器的输入(常常是设定值与被控量之差,即e(t)=r(t)-c(t));
Kp——控制器的比例放大系数;
Ti——控制器的积分时间;
Td——控制器的微分时间。
设u(k)为第k次采样时刻控制器的输出值,可得离散的PID算式
(3.4)
式中,。
由于计算机的输出u(k)直接控制执行机构(如阀门),u(k)的值与执行机构的位置(如阀门开度)一一对应,所以通常称式(2)为位置式PID控制算法。
位置式PID控制算法的缺点:当前采样时刻的输出与过去的各个状态有关,计算时要对e(k)进行累加,运算量大;而且控制器的输出u(k)对应的是执行机构的实际位置,如果计算机出现故障,u(k)的大幅度变化会引起执行机构位置的大幅度变化。
3.3数字PID参数的整定
PID控制器的参数整定是控制系统设计的核心内容。它是根据被控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。PID控制器参数整定的方法很多,概括起来有两大类:一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。本设计采用PID归一整定法把对控制台三个参数(Kc、Ti、Td,)转换为一个参数,从而使问题明显简化。以达到控制器的特性与被控过程的特性相匹配,满足某种反映控制系统质量的性能指标。
3.3.1采样周期选择的原则
(1)根据香农采样定理,系统采样频率的下限为fs=2fmax,此时系统可真实地恢复到原来的连续信号。
(2)从执行机构的特性要求来看,有时需要输出信号保持一定的宽度。采样周期必须大于这一时间。
(3)从控制系统的随动和抗干扰的性能来看,要求采样周期短些。
(4)从微机的工作量和每个调节回路的计算来看,一般要求采样周期大些。
(5)从计算机的精度看,过短的采样周期是不合适的。
(6)当系统滞后占主导地位时,应使滞后时间为采样周期的整数倍
下表3.1列出了几种常见的被测参数的采样周期T的经验选择数据。可供设计时参考。实际上生产过程千差万别,经验数据不一定就合适,可用试探法逐步调试确定。
表3.1采样周期的经验数据表[10]
被测参数采用周期T(s)备注
流量1~5s优先选用1s
压力3~10s优先选用5s
液位6~8s
温度15~20s或纯滞后时间
成分15~20s
3.3.2 PID参数对系统性能的影响
表3.2 PID参数对系统性能的影响
参数图作用缺点
P加快调节,减少稳态误差稳定性下降,甚至造成系统的不稳定
I因为有误差,积分调节就进行,直至无差.消除稳态误差,提高无差度。加入积分调节可使系统稳定性下降,动态响应变慢。积分作用常与另两种调节规律结合,组成PI调节器或PID调节器。
D反映系统偏差信号变化率,具有预见性,能预见偏差变化的趋势,因此能产生超前的控制作用。可以减少超调,减少调节时间。微分作用对噪声干扰有放大作用,因此过强的加微分调节,对系统抗干扰不利。微分作用不能单独使用,需要与另外两种调节规蓄料目结合,组成PD或PID控制.
综上所述,(Kp、Ti、Td,)对系统的性能影响如表3.3所示:
表3.3 Kp、Ti和Td对系统的影响
影响Kp Ti Td
稳态性能可以减少静差,但不能消除消除静差,但不能太大配合比例控制,可以减少静差
动态性能加快系统速度,但会引起震荡太小会不稳定,太大会影响性能太大和太小都会引起超调量大,过渡时间长。
3.4 PID计算程序
PID调节规律的基本输入输出关系可用微分方程表示为:
(3.5)
式中为调节器的输入误差信号,且
(3.6)
其中:为给定值,为被控变量;
为调节器的输出控制信号;
为比例系数;
为积分时间常数;
微分时间常数。
计算机只能处理数字信号,若采样周期为T第n次采样的输入误差为,且,输出为,PID算法用的微分由差分代替,积分由代替,于是得到
(3.7)
写成递推形式为
△
=
=
=
=
=(3.8)
其中:(3.9)
(3.10)
(3.11)
显然,PID计算△只需要保留现时刻以及以前的两个偏差量和。初始化程序初值通过采样并根据参数、、以及、和计算△。
根据输出控制增量△,可求出本次控制输出为
+△=(3.12)
由于电阻炉一般是属于一阶对象和滞后的一阶对象,所以式中、、的选择取决于电阻炉的阶跃响应曲线和实际经验,工程上已经积累了不少行之的参数整定方法。本设计采用Ziegler-Nichols提出的PID归一调整法,调整参数,主要是为了减少在线整定参数的数目,常常人为假定约束条件,以减少独立变量的个数,令:
(3.13)
(3.14)
(3.15)
式中称为临界周期。在单纯比例作用下(比例增益由小到大),是系统产生等幅振荡的比例增益,这时的工作周期为临界周期,则可以得到
△=
=
=(3.16)
式中=0.2,=1.25[8](3.17)
从而可以调节的参数只有一个。可设计一个调整子程序,通过键盘输入改变值,改变运行参数,使系统满足要求。
下面对PID运算加以说明:
1、所有的数都变成定点纯小数进行处理。
2、算式中的各项有正有负,以最高位作为符号位,最高位为0表示为正数,为1表示
负数。正负数都是补码表示,最后的计算以原码输出。
3、双精度运算,为了保证运算精度,把单字节8位输入采样值和给定值都变成双字节16位进行计算,最后将运算结果取成高8位有效值输出。
4、输出控制量的限幅处理。为了便于实现对晶闸管的通断处理,PID的输出现在在0~250之间。大于250或小于0的控制量都是没有意义的,因在算法上对进行限幅,即
=(3.18)
PID的计算公式采用位置式算法,计算公式为
+
=(3.19)
PID计算的程序流程图图3.2所指示;而参数内存分配表如表3.4所列。
表3.4参数内存分配表
存储单元符号说明存储单元符号说明
3FH高8位38H低8位
30H低8位39H高8位
31H给定值高8位3AH低8位
32H给定值低8位3BH高8位
33H高8位3CH低8位
34H低8位3DH高8位
35H高8位32EH低8位
36H低8位3FH高8位
37H高8位40H低8位
图3.2 PID计算程序的流程图
参照流程图3.2编写程序,程序如下:
/*********************************************************/
/*名称:float PIDprocess1*/
/*功能:PID adjust*/
/*说明:*/
/*调用:*/
/*输入:float xdata*Yn,float xdata*Rn*/
/*返回值:deltaPn*/
/*********************************************************/
float PIDprocess1()
{
int data E_0;
float data deltaPn,deltaPi,deltaPp,deltaPd,PsumCopy;
E_0=SetTemperature1-CurrentTemperature1;
if(abs(E_0)>Emax)
{
deltaPp=(float)Kp*(E_0-E_11);
deltaPd=(float)Kd*(E_0-2*E_11+E_21);
//if(deltaPd>=dPdmax)deltaPd=0;
deltaPn=deltaPp+deltaPd;
}
else
{
if(abs(E_0)>E0)
{
deltaPi=(float)Ki*E_0*(Emax-abs(E_0))/(Emax-E0);
}
else
{//小误差时的处理
deltaPi=(float)Ki*E_0;
//if(fabs(deltaPi)<dPimin)deltaPi=0;
}
deltaPp=(float)Kp*(E_0-E_11);
deltaPd=(float)Kd*(E_0-2*E_11+E_21);
//if(deltaPd>=dPdmax)deltaPd=0;
deltaPn=deltaPp+deltaPi+deltaPd;
}
/*if(fabs(deltaPn)>dPmax)
{
if(deltaPn>0)deltaPn=dPmax;
else deltaPn=-dPmax;
}*/
Psum1+=deltaPn;
PsumCopy=Psum1;
if(PsumCopy>Pmax)PsumCopy=Pmax;
if(PsumCopy<Pmin)PsumCopy=Pmin;
E_21=E_11;
E_11=E_0;
return(PsumCopy);
}
/*********************************************************/
/*名称:float PIDprocess2*/
/*功能:PID adjust*/
/*说明:*/
/*调用:*/
/*输入:float xdata Yn,float xdata Rn*/
/*返回值:Psum2*/
/*********************************************************/
float PIDprocess2()
{
int data E_0;
float data deltaPn,deltaPi,PsumCopy;
E_0=SetTemperature2-CurrentTemperature2;
if(abs(E_0)>Emax)
{
deltaPn=(float)Kp*(E_0-E_12)+(float)Kd*(E_0-2*E_12+E_22);
}
else
{
if(abs(E_0)>E0)
{
deltaPi=(float)Ki*E_0*(Emax-abs(E_0))/(Emax-E0);
}
else
{//小误差时的处理
deltaPi=(float)Ki*E_0;
}
deltaPn=(float)Kp*(E_0-E_12)+deltaPi+(float)Kd*(E_0-2*E_12+E_22);
}
/*if(fabs(deltaPn)>dPmax)
{
if(deltaPn>0)deltaPn=dPmax;
else deltaPn=-dPmax;
}*/
Psum2+=deltaPn;
PsumCopy=Psum2;
if(PsumCopy>Pmax)PsumCopy=Pmax;
if(PsumCopy<Pmin)PsumCopy=Pmin;
E_22=E_12;
E_12=E_0;
return(PsumCopy);
}
3.5系统相关软件设计
3.5.1系统其它部件的软件设计方案
1)每个模块的程序结构简单,任务明确,易于编写、调试和修改。
2)程序可读行好,对程序的修改可局部进行,其它部分可以保持不变,便于功能扩充。
3)对于使用频繁的子程序可以建立子程序库,便于多个模块调用。
3.5.2系统软件设计框图
如图3.3所示:
图3.2系统软件设计框图
根据设计要求,首先要确定软件设计方案,即确定该软件应该完成那些功能;其次是规划为了完成这些功能需要分成多少个功能模块,以及每一个程序模块的具体任务是什嫫。一般划分模块应遵循下述原则:
1)每个模块应具有独立的功能,能产生一个明确的结果。
2)模块之间的控制参数应尽量简单,数据参数应尽量少。控制参数是指模块进入和退出的条件及方式,数据参数是指模块间的信息交换方式、交换量的多少及交换的频繁程度。
3)模块长度要适中。模块太长时,分析和调试比较困难,失去了模块化程序结构的优越性;模块太短则信息交换太频繁,也不合适。
3.5.3主程序的设计
主程序的设计内容一般包括:主程序的起始地址,中断服务程序的起始地址,有关存储单元及相关部件的初始化和一些子程序调用等等。
3.5.4主程序的起始地址及初始化
MCS-51系列单片机复位后,(PC)=0000H,而0003H~002BH分别为各中断源的入口地址.所以编程时应在0000H处写一条跳转指令.
3.5.5 lcd1602的显示控制
显示屏的具体工作原理,见流程图3.5所示。
图3.3显示程序设计框图
3.5.6 DS18B20和lcd1602的子程序设计
DS18B20和lcd1602一起的c程序设计如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^7;//ds18b20与单片机连接口
sbit RS=P3^0;
sbit RW=P3^1;
sbit EN=P3^2;
unsigned char code str1[]={"temperature:"};
unsigned char code str2[]={""};
uchar data disdata[5];
uint tvalue;//温度值
uchar tflag;//温度正负标志
/*************************lcd1602程序**************************/
void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)
{unsigned int i,j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++);
}
void wr_com(unsigned char com)//写指令//
{delay1ms(1);
RS=0;
RW=0;
EN=0;
P2=com;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void wr_dat(unsigned char dat)//写数据//
{delay1ms(1);;
RS=1;
RW=0;
EN=0;
P2=dat;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void lcd_init()//初始化设置//
{delay1ms(15);
wr_com(0x38);delay1ms(5);
wr_com(0x08);delay1ms(5);
wr_com(0x01);delay1ms(5);
wr_com(0x06);delay1ms(5);
wr_com(0x0c);delay1ms(5);
}
void display(unsigned char*p)//显示//
{
while(*p!='\0')
{
wr_dat(*p);
p++;
delay1ms(1);
}
}
init_play()//初始化显示
{lcd_init();
wr_com(0x80);
display(str1);
wr_com(0xc0);
display(str2);
}
/******************************ds1820程序***************************************/
void delay_18B20(unsigned int i)//延时1微秒
{
while(i--);
}
void ds1820rst()/*ds1820复位*/
{unsigned char x=0;
DQ=1;//DQ复位
delay_18B20(4);//延时
DQ=0;//DQ拉低
delay_18B20(100);//精确延时大于480us
DQ=1;//拉高
delay_18B20(40);
}
uchar ds1820rd()/*读数据*/
{unsigned char i=0;
unsigned char dat=0;
for(i=8;i>0;i--)
{DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
delay_18B20(10);
}
return(dat);
}
void ds1820wr(uchar wdata)/*写数据*/
{unsigned char i=0;
for(i=8;i>0;i--)
{DQ=0;
DQ=wdata&0x01;
delay_18B20(10);
DQ=1;
wdata>>=1;
}
}
read_temp()/*读取温度值并转换*/
{uchar a,b;
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/
ds1820wr(0x44);//*启动温度转换*/
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/
ds1820wr(0xbe);//*读取温度*/
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
{tvalue=~tvalue+1;
tflag=1;
}
tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
return(tvalue);
}
/*******************************************************************/
void ds1820disp()//温度值显示
{uchar flagdat;
disdata[0]=tvalue/1000+0x30;//百位数
disdata[1]=tvalue%1000/100+0x30;//十位数
disdata[2]=tvalue%100/10+0x30;//个位数
disdata[3]=tvalue%10+0x30;//小数位
if(tflag==0)
flagdat=0x20;//正温度不显示符号
else
flagdat=0x2d;//负温度显示负号:-
if(disdata[0]==0x30)
{disdata[0]=0x20;//如果百位为0,不显示
if(disdata[1]==0x30)
{disdata[1]=0x20;//如果百位为0,十位为0也不显示
}
}
wr_com(0xc0);
wr_dat(flagdat);//显示符号位
wr_com(0xc1);
wr_dat(disdata[0]);//显示百位
wr_com(0xc2);
wr_dat(disdata[1]);//显示十位
wr_com(0xc3);
wr_dat(disdata[2]);//显示个位
wr_com(0xc4);
wr_dat(0x2e);//显示小数点
wr_com(0xc5);
wr_dat(disdata[3]);//显示小数位
}
/********************主程序***********************************/
void main()
{init_play();//初始化显示
while(1)
{read_temp();//读取温度
ds1820disp();//显示
}
}
3.5.7键盘处理子程序流程图
图3.4键盘程序设计框图
3.5.8键盘处理子程序设计
4乘4键盘程序设计如下:
#include<reg51.h>
#include<defi.h>
/*用于键消抖的延时函数*/
void delay()
{
uchar t;
for(t=400;t>0;t--);
}
/*键扫描函数*/
uchar keyscan(void)
{
uchar scancode,tmpcode;
P2=0xf0;//发全0行扫描码
if((P2&0xf0)!=0xf0)//若有键按下
{
delay();//延时去抖动
if((P2&0xf0)!=0xf0)//延时后再判断一次,去除抖动影响
{
scancode=0xfe;
while((scancode&0x10)!=0)//逐行扫描
{
P2=scancode;//输出行扫描码
if((P2&0xf0)!=0xf0)//本行有键按下
{
tmpcode=(P2&0xf0)|0x0f;
/*返回特征字节码,为1的位即对应于行和列*/
return((~scancode)+(~tmpcode));
}
else scancode=(scancode<<1)|0x01;//行扫描码左移一位
}
}
}
return(0);//无键按下,返回值为0
}
/*主程序*/
void main()
{
uchar key;
while(1)
{
key=keyscan();//调用键盘扫描函数
delay();
switch(key)
{
case 0x11:
NUM0=1;//第1行第1列,选择正弦波输出
break;
case 0x21://第1行第2列,选择矩形波输出
LIGHTA=0;
LIGHTB=0;
break;
case 0x41://第1行第3列,选择三角波输出
LIGHTA=1;
LIGHTB=0;
break;
default:break;
}
if(NUM0)
{NUM0=0;
LIGHTA=0;
LIGHTB=1;
}
}
}
第4章酿酒槽温度控制的系统调试
4系统调试
第一步:上电准备
用万用表测试一下电源和地是否短路,确保不短路的情况下准备上电
第二步:电源模块检测
主要检查电源芯片输出电压是否达到标称值
第三步:核心芯片检测AT89S52
对于这一块我觉得采用程序测试的方法,看能否下载好程序,能否有输出。等等
第四步:外围器件调试
在核心芯片调试好的基础上,再测试AT89S52与周围器件的协调工作情况
4.2系统的软件调试
单片机的使用软件模拟调试,意思就是用开发单片机程序的计算机去模拟单片机的指令执行,并虚拟单片机片内资源,从而实现调试的目的,但是软件调试存在一些问题,如计算机本身是多任务系统,划分执行时间片是由操作系统本身完成的,无法得到控制,这样就无法时时的模拟单片机的执行时序,也就是说,不可能像真正的单片机运行环境那样执行的指令在同样一个时间能完成(往往要完成的比单片机慢)。
4.3系统的软件与硬件调试的特点
总结一下两者的不同与相同:
相同点:
1:都可以检测单片机执行时序下的片内资源情况(如R0-R7、PC计数器等)
2:可以实现断点、全速、单步、运行到光标等常规调试手段。
不同点:
1:软件调试无法实现直接连接硬件电路的调试,只能通过软件窗口虚拟硬件端口的电平输出情况而仿真器可以实现与单片机一样的功能的硬件连接,从某种意义上说这个时候仿真器就是一个单片机。
2:软件调试执行单片机指令的时间无法与真实的单片机执行时间画上等号,也就是说如果一个程序在单片机中要执行300us,可能在计算机中执行的时间可能会比这个长很多,而且无法预料。仿真器则是完全与单片机相同。
3:软件调试只能是一种初步的,小型工程的调试,比如一个只有几百上千行的代码的程序,软件调试能很好的完成,如果是一个协调系统,可能还需要借助几个单片机仿真器和相关的仪器才能解决。
最后,调试一般都是在发生错误与意外的情况下使用的,如果程序能正常执行调试很多时候是用不上的,所以最高效率的程序开发还是需要我们自己做好规范,而不是指望调试来解决问题。
第5章酿酒槽温度控制的设计总结
5.设计总结
5.1工作总结
此次设计是对大学所学知识的一个简单综合测评,通过这次设计的制作,使我们对所学知识有了更进一步的理解和掌握。我所做的酿酒槽的温度检测与控制系统能实现以下功能:
1)能够通过传感器采集当前温度,使当前温度显示在液晶显示屏上。
2)能够通过PID算法控制当前温度不超过温度并且在一定范围内发出警报。
3)能够通过键盘设定当前日期等。
致谢
在这次毕业设计过程中,我知道光靠我个人的力量是不可达到的,同时要有学校给我们这个机会,周君芝老师对我们的耐心指导,我的组员给我的帮助与大力支持这样我才能将课程设计顺利地做完。
非常感谢学校给我们这个机会,培训的机会,让我们有一个动手的机会,让我们得到实践的机会。
感谢周老师对我们的耐心指导。引导我们,让我学会了解决问题的方法。
有了学校及系给的机会及条件、老师的热心指导和大力支持、同学互相帮助和团结协作,才有了这次毕业设计的成功,我在这里忠心地感谢学校、老师还有同学们!谢谢你们!
经过此次的毕业设计,我受益非浅,也翻阅了大量的书籍和浏览了无数的网页。这次的设计是我的一次实践,也刚刚打开科技的大门,今后我还想拥有更多的机会去实践,让我得到更多的锻炼!
结束语
由于许多工艺生产中,温度起到了很重要的作用。因此本设计做的是恒温控制系统。通过理论分析表明,PID控制较好地满足了恒温控制的各种要求,在这种理论指导下,采用AT89S52单片机实现PID控制,最终实现温度控制。为了验证此次设计的准确性,以电磁阀作为实例。虽然仿真环境不可能与实际情况一样,但它的结果还是有相当的指导意义。由于仿真可快速、方便、多次的进行,从中找到较优的方案。经过反复调节PID参数,以及考虑系统的性能,最终确定了PID参数
结果表明,当系统施加给定升温时,系统无超调量,且稳态误差为零,具有准确性和快速性。本次设计的恒温控制系统不仅能满足各项设计指标,并且具有体积小,结构简单,价格便宜,准确性高、可行性强等优点。
参考文献
[1]康华光,陈大钦.模拟电子电路[M].北京:高教育出版社,2004:335-336.
[2]赵茂泰.智能仪器原理及应用[M].北京:电子工业出版社,2006:130-132.
[3]黄贤武,郑筱霞.传感器原理与应用[M].成都:电子科技大学出版社,高等教育出版社,2005:76-108.
[4]清源计算机工作室.Protel99SE原理图与PCB及仿真[M].北京:机械工业出版社,2005:113-122
[5]黄坚.自动控制原理及其应用[M].北京:高等教育出版社,2004:246-273.
[6]张晓华.控制系统数字仿真欲CAD[M].北京:机械工业出版社,2003:124-140.
[7]王幸之,钟爱琴,王雷,王闪.AT89系列单片机原理及接口技术[M].北京:北京航天大学出版社,2004:489-504.
[8]李广弟,朱月秀,王秀山.单片机基础[M].北京:北京航空航天大学出版社,2006:15-40.
[9]赖寿宏.微型计算机控制技术[M].北京:机械工业出版社,2006:91-111.
以上为“自考电子信息工程毕业论文:基于单片机的酿酒槽的温度检测与控制”,更多论文请查看本站自考生网www.zikaosw.cn“毕业论文”栏目。
全专业电子资料、题库、学位、网课
最高直省2344元
上千+科次精品网课
买网课即送全真模考题库
五千+科次教材资料
电子资料满三件9折
五千+科次在线题库
全真呈现历年考试试题