温度是工业生产中常见的被控参数之一。从食品生产到化工生产,从燃料生产到钢铁生产等等,无不涉及到对温度的控制,可见,温度控制在工业生产中占据着非常重要的地位,而且随着工业生产的现代化,对温度控制的速度和精度也会越来越高。近年来, 温度控制领域发生了很大的变化,工业生产中对温度的控制不再局限于近距离或者直接的控制,而是需要进行远距离的控制,这就产生了远程温度控制。 远程温度控制的通信方式有多种,如通过网络,无线电等等。每一种方式都有其优点和缺点。利用无线电通信,方便、灵活,而且经济。它不需要像网络控制耗费巨大的通信资源,也不受网络速度的影响。 在温度控制的方法上,传统的控制方法(包括经典控制和现代控制)在处理具有非线形或不精确特性的被控对象时十分困难。而温度系统为大滞后系统,较大的纯滞后可引起系统不稳定。 在温度采集方法上,通常是利用热电偶把热化为电信号,再通过A/D转换得到温度值。这种方法速度慢,而且精度不是很高。综合上面的考虑以及自己的爱好,设计了基于无线电通信的远程温度控制系统。本文详细的介绍了系统的硬件设计,软件设计,以及调试等,希望它能给初级电子制作爱好者带来一些无线电通信和温度控制的基本常识,以及应该注意的一些事项。 1、温度控制的发展及意义 在人类的生活环境中,温度扮演着极其重要的角色。无论你生活在哪里,从事什么工作,无时无刻不在与温度打着交道。自18世纪工业革命以来,工业发展对是否能掌握温度有着绝对的联系。在冶金、钢铁、石化、水泥、玻璃、医药等等行业,可以说几乎%80的工业部门都不得不考虑着温度的因素。 现代工业设计、工程建设及日常生活中常常需要用到温度控制,早期温度控制主要应用于工厂中,例如钢铁的水溶温度,不同等级的钢铁要通过不同温度的铁水来实现,这样就可能有效的利用温度控制来掌握所需要的产品了。在现代社会中,温度控制不仅应用在工厂生产方面,其作用也体现到了各个方面,随着人们生活质量的提高,酒店厂房及家庭生活中都会见到温度控制的影子,温度控制将更好的服务于社会。 2 总体设计与可行性分析 2.1 设计任务 1、利用所学的知识设计远程温度控制系统。电烤箱温度可在一定范围内由人工设定,温度信号检测方案自行确定,用单片机采用PID控制算法实现温度实时控制,静态误差1度,超调量〈2.5%,系统温度调节时间ts〈4分钟。控制输出采用脉冲移相触发可控硅来调节加热有效功率。控制温度范围室温--125℃,用十进制数码显示箱内的温度。 2、采用PID控制算法实现温度实时控制,并显示温度实际值。 3、了解计算机控制系统的基本原理和组成; 4、实现无线发送、接收,编码、解码校验。实现超限报警; 5、掌握计算机控制系统的软、硬件设计与调试,实现满足指标要求的控制系统。 主要技术指标: (1)温度控制误差:≤±0.5℃; (2)发射频率:≥300MHZ (3)发射距离:≥500m (4)误码率:≤10-6 2.2 总体设计框图及概述述 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg 图 2.0 系统总体设计框图 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg 图 2.1 键盘控制面示意图 如图2.1所示,键盘控制面采用2*4式键盘,K0,K1的功能分别是左移一位和右移一位;K4,K5的功能分别是加1和减1;K2,K3,K6分别是向从系统00,01,10发送温度设定值的功能键。K7为清楚报警鸣声且熄灭报警提示红绿灯。编码解码部分采用通用编解芯片PT2262/PT2272。PT2262/PT2272工作电压低,可进行地址编码,地址码多达531441种,数据最多可达6位。发射接收部分采用F05T,J04T模块,发射接收频率为433M,工作电压3—12V,频率稳定度为0.00001。温度传感器采用“一线总线”数字温度传感器DS18B20,DS18B20测量范围为-55℃—125℃,测量精度为±0.5℃。 2.3 温度采集系统的设计 采用典型的反馈式温度控制系统,如图2.2所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg 图2.2 温度采集系统框图 2.4 数字PID控制 数字PID控制在生产过程中是一种最普遍采用的控制方法,在冶金、机械、化工等行业中获得广泛的应用。下面简单介绍PID控制的基本原理、数字PID控制算法及其改进和PID的参数整定及其发展。 2.4.1 PID控制原理 在模拟控制系统中,控制器最常用的控制规律是PID控制。PID控制器是一种线性控制器,它根据给定值r(t)与实际输出值c(t)构成控制偏差e(t)=r(t)-c(t)。将偏差的比例、积分和微分通过线形组合构成控制量,对被控对象进行控制,故称PID控制器。其控制规律为: u(t)=Kp[e(t)+1/Ti∫e(t)dt+Tdde(t)/dt] (1) 或写成传递函数形式 G(S)=U(S)/E(S)=Kp(1+1/TiS+TdS) (2) 式中 Kp是比例系数,Ti是积分时间常数,Td是微分时间常数。简单地说,PID控制器各校正环节的作用如下: (1)比例环节:及时成比例地反映控制系统的偏差信号e(t),偏差一旦产生,控制器立即产生控制作用,以减少偏差。 (2)积分环节:主要用于消除静差,提高系统的无差度。积分作用取决于积分时间常数Ti,Ti越大,积分作用越弱,反之则越强。 (3)微分环节:能反映偏差信号的变化趋势(变化速率),并能在偏差信号值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减小调节时间。 2.4.2 数字PID控制算法 在计算机控制系统中,使用的是数字PID控制器,数字PID控制算法通常又分为位置式和增量式控制算法。由于计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量,因此模拟式中的积分和微分项不能直接使用,需要进行离散化处理。以一系列的采样时刻点kT代表连续时间t,以和式代替积分,以增量代替微分,作近似变换。采样周期足够短,才能保证有足够的精度。 (1)位置式PID控制算法 由于计算机输出的u(k)直接去控制执行机构,u(k)的值和执行机构的位置是一一对应的,所以通常称 u(k)=Kp{e(k)+T/Ti∑e(j)+Td/T[e(k)-e(k-1)]}} (3) 为位置式PID控制算法。 这种算法的缺点是:由于全量输出,所以每次输出均与过去的状态有关,计算时要对e(k)进行累加,计算机运算工作量大。而且,因为计算机输出的u(k)对应的是执行机构的时间位置,如计算机出现故障,u(k)大幅度变化,会引起执行机构位置的大幅度变化,这种情况往往是生产实践中不允许的,在某些场合,还可能造成重大的生产事故,因而产生了增量式PID控制的控制算法。 (2)增量式PID控制算法 所谓增量式PID是指数字控制器的输出只是控制量的增量。 △u(k)=Ae(k)-Be(k-1)+Ce(k-2) (4) 式中 A=Kp(1+T/Ti+Td/T) B=Kp(1+2Td/T) C=KpKd/T 采用增量式算法时,计算机输出的控制增量对应的是本次执行机构位置的增量。对应阀门实际位置的控制量,即控制量的积累需要采用一定的方法来解决,例如用有累积作用的元件来实现;而目前较多的是利用算式通过执行软件来完成。 增量式控制虽然只是算法上作了一点改进,却带来了不少优点: ①由于计算机输出增量,所以误动作时影响小,必要时可用逻辑判断的方法去掉。 ②手动/自动切换时冲击小,便于实现无扰动切换。此外,当计算机发生故障时,由于输出通道或执行装置具有信号的锁存作用,故仍能保持原值。 ③算式中不需要累加。控制增量的确定,仅与最近K次的采样值有关,所以较容易通过加权处理而获得比较好的控制效果。 但增量式控制也有其不足之处:积分截断效应大,有静态误差;益出的影响大。因此,在选择时不可一概而论,一般认为在以晶闸管作为执行器或在控制精度要求高的系统中,可采用位置算法,而在以步进电机或电动阀门作为执行器的系统中,则可采用增量控制算法。 2.4.3 改进的数字PID控制算法 在计算机控制系统中,PID控制规律是用计算机程序来实现的,因此它的灵活性很大。一些原来在模拟PID控制器中无法实现的问题,在引入计算机以后,就可以得到解决,于是产生了一系列的改进算法:积分分离PID控制算法、遇限削弱积分PID控制算法、不完全微分PID控制算法、微分先行PID控制算法和带死区的PID控制算法等。 (1)积分分离PID控制算法 在普通的PID数字控制器中引入积分环节的目的,主要是为了消除静差、提高精度。但在过程的启动、结束或大幅度增减的设定值时,短时间内系统输出有很大的偏差,会造成PID运算的积分积累,致使算得的控制量超过执行机构困难最大的动作范围对应的极限控制量,最终引起系统较大的超调,甚至引起系统的振荡,这是某些生产过程中绝对不允许的。引进积分分离PID控制算法,既保持了积分作用,又减小了超调量,使得控制性能有了较大的改善。其具体实现如下: ①根据实际情况,人为设定一阀值q>0。 ②当|e(k)|>q时,也即偏差值|e(k)|比较大时,采用PD控制,可避免过大的超调,又使系统有较快的响应。 ③当|e(k)|<=q时,也即偏差值|e(k)|比较小时,采用PID控制,可保证系统控制精度。 (2)遇限削弱积分PID控制算法 积分分离PID控制算法在开始时不积分,而遇限削弱积分PID控制算法则正好与之相反,一开始就积分,进入限制范围后即停止积分。遇限削弱积分PID控制算法的基本思想是:当控制进入饱和区以后,便不再进行积分项的累加,而只执行削弱积分的运算。因而,在计算u(k)时,先判断u(k-1)是否已超出限制值。若u(k-1)>umax,则只累加负偏差;若u(k-1)<umax,则累加正偏差。遇限削弱积分PID控制算法可以避免控制量长时间停留在饱和区。 (3)不完全微分PID控制算法 微分环节的引入,改善了系统的动态特性,但对于干扰特别敏感。在误差扰动突变时微分项有不足之处。即微分项仅在第一个周期有输出,且幅值为KD=KP×TD/T,以后均为零。该输出的特点为: ①微分项的输出仅在第一个周期起激励作用,对于时间常数较大的系统,其调节作用很小,不能达到超前控制误差的目的。 ②幅值一般比较大,容易造成计算机中数据溢出。 克服上述缺点的方法之一是,在PID算法中加一个一阶惯性环节(低通滤波器),既可构成不完全微分PID控制。可以将低通滤波器直接加在微分环节上,也可将低通滤波器加在整个PID控制器之后。 引入不完全微分后,微分输出在第一个采用周期内的脉冲高度下降,之后又逐渐衰减。所以不完全微分具有较理想的控制特性。尽管不完全微分PID控制算法比普通PID控制算法要复杂些,但由于其良好的控制特性,近些年来越来越得到广泛的应用。 (4)微分先行PID控制算法 微分先行PID控制的特点是只对输出量c(t)进行微分,而对给定值r(t)不作微分。这样在改变给定值时,输出不会改变,而被控量的变化,通常总是比较缓和的。这种输出量先行微分控制适用于给定值r(t)频繁升降的场合,可以避免给定值升降时所引起的系统振荡,明显地改善了系统的动态特性。 (5)带死区的PID控制算法 在计算机控制系统中,某些系统为了避免控制作用过于频繁,消除由于频繁动作所引起的振荡,可采用带死区的PID控制。设死区为e0,当|e(k)|≤e0时,令e'(k)=0;当|e(k)|>e0时,令e'(k)=e(k)。式中,死区是一个可调的参数,其具体数值可根据实际控制对象由实验确定。若e0值太小,使控制动作过于频繁,达不到稳定被控对象的目的;若e0太大,则系统将产生较大的滞后。此控制系统实际上是一个非线性系统。 2.4.4 PID参数整定 在数字控制系统中,PID参数是影响调节品质的重要参数,闭环系统正式使用前,必须对PID参数进行整定,整定点通常设定在目标值。 整定PID参数的原则: (1)要使控制系统的过程过渡时间尽量短 (2)最大偏差和超调量要小 (3)扰动作用后减幅振荡的次数尽量少 (4)恒温曲线要求尽可能平直;静差要小 整定PID参数的方法主要有: (1)理论整定法:所谓理论整定法是从PID调节规律的概念出发,根据对象的特性和控制准确度的要求从理论上得出各参数的整定数据。从PID的理论概念分析可知: ①要使过渡过程尽可能短,应选较小的P,较短的Ti和适量的Td ②要使超调量尽量小,使系统减幅振荡,应选较大的P,较长的Ti和尽可能短Td 整定时既要满足前者,又不可忽视后者,从优选法的观点出发考虑到PID参数的折中选取,故将P和I整定到中间值,而D参数的整定应该根据炉体的具体使用情况而定。若在系统的调节过程中不会有过大的阶跃扰动出现,D应尽可能小,甚至不用 (2)经验法:实际上是一种试凑法。PID参数预先放在哪里以及反复试凑的程序是经验法的核心,整定参数预先放置的位置要根据对象特性及参考仪表的量程而定。对于一般热处理炉的温度调节系统,可按下列参考数据进行:file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.gif为20%~70%或更小;Ti为(3~10)min;Td为(0.5~3)min。试凑程序可先用P,再加I,最后再D。炉温控制的准确度,不但取决于仪表本身的准确度和性能,也取决于它所控制对象的特性,要使仪表使用合理,并达到最佳控制,必须使仪表和炉体很好地配合,正确地调整。 2.5可行性分析 可行性分析与总体设计对于实现一个设计方案来说是必不可少的,而在对一个方案进行总体设计之前必须对其进行可行性分析。盲目行动很有可能导致失败,从而造成不必要的经济损失和资源的浪费。而进行可行性分析与明确所要完成的任务的目标和所选的器件是分不开的。本次远程温度控制的设计要达到如下目标: (1)主系统采用键盘输入方式设定温度值并显示; (2)利用无线电进行通信; (3)一对多点通信,对各通信点进行编址; (4)对温度进行控制; (5)温度信号采集。 综合考虑上面描述的功能并结合自己的具体情况,选用如下的器件来实现: ① 选用常用的89S51单片机作为控制器; ② 选用带地址编码的编码芯片PT2262以及与之配套的解码芯片PT2272。 ③ 选用发射模块F05T和接收模块J04T进行无线电通信。 ④ 选用数字温度传感器DS18B20进行温度采集。 3 硬件设计 3.1温度采集电路设计DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。 3.1.1 DS18B20的内部结构 DS18B20内部结构如图3.1所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg 图3.1 DS18B20的内部结构 从图中可以看出,DS18B20主要由4部分组成:64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如图3.2所示,DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端。
ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同。64位ROM的排的循环冗余校验码(CRC=X8+X5+X4+1)。ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg 3.2 DS18B20的管脚排列 DS18B20中的温度传感器完成对温度的测量,用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。 温度值低字节 MSBLSB 温度值高字节 高低温报警触发器TH和TL、配置寄存器均由一个字节的EEPROM组成,使用一个存储器功能命令可对TH、TL或配置寄存器写入。其中配置寄存器的格式如下: MSBLSB R1、R0决定温度转换的精度位数:R1R0=“00”,9位精度,最大转换时间为93.75ms;R1R0=“01”,10位精度,最大转换时间为187.5ms;R1R0=“10”,11位精度,最大转换时间为375ms;R1R0=“11”,12位精度,最大转换时间为750ms;未编程时默认为12位精度。
高速暂存器是一个9字节的存储器。开始两个字节包含被测温度的数字量信息;第3、4、5字节分别是TH、TL、配置寄存器的临时拷贝,每一次上电复位时被刷新;第6、7、8字节未用,表现为全逻辑1;第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。
3.1.2 DS18B20的工作时序 DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。其工作时序包括初始化时序、写时序和读时序,如图3.3(a)(b)(c)所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image013.jpg
(a)初始化时序 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg
(b)写时序 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image015.jpg
(c)读时序
图3.3 DS18B20的工作时序图 3.1.3 DS18B20与单片机的典型接口设计
图3.4以MCS-51系列单片机为例,画出了DS18B20与微处理器的典型连接。图3.4(a)中DS18B20采用寄生电源方式,其VDD和GND端均接地,图3.4(b)中DS18B20采用外接电源方式,其VDD端用3V~5.5V电源供电。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image017.jpg 3.4(a)寄生电源工作方式 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image019.jpg 3.4(b)外接电源工作方式
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image021.jpg
图3.4 (c) DS18B20与微处理器的典型连接图 单片机系统所用的晶振频率为11.0592MHz,根据DS18B20的初始化时序、写时序和读时序,编写了如下的DS18B20驱动程序: /*========================================================================= 功能:实现对DS18B20的读取 原理:单总线协议 注意:单总线协议对延时要求比较严格,此程序中采用的是11.0592M的晶振, ====================================================================================================*/ //#include"reg51.h" sbitDQ =P1^4; //定义通信端口 //延时函数 /* voiddelay(unsigned int i) { while(i--); } */ //初始化函数 Init_DS18B20(void) { unsigned char x=0; DQ = 1; //DQ复位 delay(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay(80); //精确延时 大于480us DQ = 1; //拉高总线 delay(14); x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(20); }
//读一个字节 ReadOneChar(void) { unsignedchar i=0; unsignedchar dat = 0; for(i=8;i>0;i--) { DQ = 0; // 给脉冲信号 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; delay(4); } return(dat); }
//写一个字节 WriteOneChar(unsignedchar dat) { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = dat&0x01; delay(5); DQ = 1; dat>>=1; } //delay(4); }
//读取温度 ReadTemperature(void) { unsignedchar a=0; unsignedchar b=0; unsignedint t=0; float tt=0; Init_DS18B20(); WriteOneChar(0xCC);// 跳过读序号列号的操作 WriteOneChar(0x44);// 启动温度转换 Init_DS18B20(); WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=ReadOneChar(); b=ReadOneChar(); t=b; t<<=8; t=t|a; tt=t*0.0625; //t=tt*10+0.5; //放大10倍输出并四舍五入---此行没用 return(t); }
main() { unsigned char i=0; while(1) { i=ReadTemperature();//读温度 } } ……
子程序ReadTemperature读取的温度值高位字节送WDMSB单元,低位字节送WDLSB单元,再按照温度值字节的表示格式及其符号位,经过简单的变换即可得到实际温度值。
如果一线上挂接多个DS18B20、采用寄生电源连接方式、需要进行转换精度配置、高低限报警等,则子程序ReadTemperature的编写就要复杂一些。 3.2单片机控制电路设计 3.2.1 AT89S51单片机 AT89S51是一种带4K字节闪烁可编程可擦除只读存储器FPEROM的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 3.2.1.1 主要特性:
·与MCS-51 兼容 ·128*8位内部RAM
·4K字节可编程闪烁存储器 ·32可编程I/O线
·寿命:1000写/擦循环 ·两个16位定时器/计数器
·数据保留时间:10年 ·5个中断源
·全静态工作:0Hz-24Hz ·可编程串行通道
·三级程序存储器锁定 ·低功耗的闲置和掉电模式
·片内振荡器和时钟电路 3.2.1.2 主要功能介绍
VCC:供电电压+5V GND:接地
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 3.2.2 键盘控制面板 键盘控制面板由2*4键组成,P2口的P2.2,P2.3口作为键盘的行控制位,P2.4,P2.5,P2.6,P2.7口作为键盘的列控制位。P2.0,P2.1作为主控系统中编码解码芯片的地址控制位。在2*4键盘面板中,K0,K1的功能分别是左移一位和右移一位;K4,K5的功能分别是加1和减1;K2,K3,K6分别是向从系统00,01,10发送温度设定值的功能键。K7为清楚报警鸣声且熄灭报警提示红绿灯。键盘、显示控制板电路如图3.5所示:
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image023.jpg 图3.5 键盘、显示系统控制板 3.2.3 LED数码管显示电路 显示系统是微机控制系统的重要组成都分,主要用于显示各种参数的值,以便使现场上工作人员能够及时掌握生产过程。工业控制系统中常用的显示器件有CRT、LED、LCD等。CRT不仅可以进行字符显示,而且可以进行画面显示,和计算机配合使用,可十分方便地实现生产过程的管理和监视。但由于CRT体积较大、价格昂贵,所以只适用于大型微机控制系统。在中小企业的生产过程控制中,为了使工作人员能够在现场直接看到生产情况和报警信号,经常选用LCD和LED作为显示器件。LED具有体积小,功耗低,响应速度快,容易匹配,可靠性高和寿命长等优点。 LED数码管有共阴极和共阳极两类,如图3.6所示。共阴极LED数码管的发光二极管的阴极接在一起,某个发光二极管的阳极电压为高电平时,二极管发光:而共阳极LED数码管是发光二极管的阳极连接在一起,当某个二极管的阴极电压为低电平时,二极管发光。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image025.jpg 图3.6 共阴极与共阳极数码管 在微机控制系统中,一般利用N位LED数码管组成N位LED显示器。一般有两种显示方法:静态显示和动态显示。静态显示的优点是数据显示很少占用单片机时间,在单片机有大量实时数据需要处理时,最好采用这种方法;其缺点是需要显示码锁存电路,增加了硬件的复杂性。动态显示方法是把N位数码管的相同名称的段码连在一起(即,把所有数码管的a段连在一起引出一条线作为段选,其余类同)由8条线控制,而位选线由其它的I/O口控制。比如,4位动态LED显示电路只需要12条I/O口线,其中8位用来控制段选码,另外4位用来控制位选。由于所有位的段选码用同一个I/O口控制,因此若要位选显示不同的字符,必须采用扫描显示方式。即任何时候位选只选通一个显示位,同时控制段选的I/O口输出显示字符对应的段选码,使该位显示相应字符,显示一段时间后,再选通下一显示位。如此循环,且每个显示器件显示该位应显示的字符,通过程序控制,不断循环输出相应的段选码和位选码,由于人的视觉残留效应,就可以获得视觉稳定的显示状态。 本次设计采用封装在一起的4位共阳极数码管作为显示器,外加PNP型三极管作为驱动,采用动态显示方法,由P0口控制段选,P2口控制位选。其电路如图3.6中右上部分所示。 3.2.4 在线代码下载电路 Atmel89Sxx芯片都具有在线编程功能(In-SystemProgramming),其串行编程模式更是容易操作,其编程电路如图3.7所示。在图3.7中,P1.5是指令串行输入端,P1.6是数据串行输出端,P1.7是编程时钟信号输入端,注意,编程时钟信号的频率应该低于晶振频率的1/16,即,如果选用的晶振频率为33MHz,编程时钟信号的频率则不能超过2MHz。如果要将其和电脑连接实现在线编程则还需要外加一些电路。通常的做法是用MAX232芯片实现单片机TTL电平到电脑RS232电平之间的转换,从而进行通信。这里给出一种更为简单的连接方式,可以不用MAX232芯片,其电路如图3.8将DB25插头接在电脑上,通过电阻分压,P1.5~P1.7和RESET端高电平时电压在4.8V左右,这时就可以烧写.Hex文件了(当然需要软件支持)。 本次设计将单片机的烧写电路直接做在控制板上,用起来十分方便,不用拆芯片,为以后的程序调试提供了很好的支持,加快了程序开发的速度。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image027.jpg 图3.7 AT89s51串行编程模式
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image029.jpg 图3.8 在线代码下载电路 3.2.5驱动电路设计 电力电子器件的驱动电路是电力电子主电路与控制电路之间的接口,是电力电子装置的重要环节,对整个装置的性能有很大的影响。采用性能良好的驱动电路,可使得电力电子器件工作在较理想的开关状态,缩短开关时间,减少开关损耗,对装置的运行效率、可靠性和安全性都有重要的意义。另外,对电力电子器件或整个装置的一些保护措施也往往就近设在驱动电路中,或者通过驱动电路来实现,这使得驱动电路的设计更为重要。 简单的说,驱动电路的基本任务,就是将信息电子电路传来的信号按照其控制目标的要求,转换为加在电力电子器件控制端和公共端之间,可以使其开通或关断的信号。驱动电路还要提供控制电路与主电路之间的电气隔离环节。一般采用光隔离或磁隔离。光隔离一般采用光偶合器。光偶合器有发光二极管和光敏晶体管组成,封装在一个外壳内。 3.2.5.1光电偶合器件MOC3021 利用光电耦合器构成的交流电控制电路设计。 方案一:交流电源降压后用一个电容交连到单片机,从而在单片机内部形成过零检测信号。其采用电容充放电方式产生方波,波形不够理想而且安全可靠性差。对单片机软件设计要求较高。 方案二:交流电源的通断由单片机通过光电耦合器件控制,避免交流电平干扰,其安全性可靠性高。驱动控制电路与单片机的接口设计电路如图3.9所示: file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image031.jpg 图3.9 驱动控制电路与单片机的接口设计 3.2.5.2 双向可控硅BTA12 (1)双向可控硅可以认为是一对反并联联接的普通晶闸管组成,其电气图形符号如图3.10中右边部分,它有两个主电极1和2,一个门极3。门极使器件在主电极的正反两个方向均可触发导通双向双向晶闸管与一对反并联晶闸管相比是比较经济的,而且控制电路比较简单,所以在交流调压电路、固态继电器(Solid State Relay—SSR)和交流电动机调速等领域应用较多。 (2)双向可控硅驱动电路:双向可控硅作为电力控制器件,广泛应用于控制系统中,即可作固态继电器进行开关控制,也可用于交流电的移相触发调节交流电压。在本课程设计中作为固态继电器进光电隔离器件选用双向可控硅输出型(如MOC3020、MOC3021),R2选用330Ω的电阻。控制端输入采用低电平有效的方式。电路如图3.10所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image033.jpg 图3.10 可控硅控制电路 触发电路使用独立电源,J1的1脚接+5V电源,2脚接地。J2的2脚接PWM端口,当PWM=1时,光电耦合器的输出端导通,晶体管9013导通,A、B端有触发脉冲输出。反之,晶体管截止,触发脉冲结束。用于触发双向可控硅,不需要另外的触发电源,利用双向晶闸管的工作电源作为触发电源。MOC3021是双向可控硅输出型的光电耦合器,输出端的额定电压为400V,最大输出电流为1A,最大隔离电压为7500V,输入端控制电流小于15mA。J1的1脚输入高电平时,MOC3021的输入端有电流流入,输出端的双向可控硅导通,触发外部的双向可控硅KS导通。反之,MOC3021输出端的双向可控硅关断,外部双向可控硅KS在外部电压过零后也关断。 3.2.6 报警电路设计 除了显示电路以外,为了系统运行的安全,设计了如图3.11所示的报警电路。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image035.jpg 图3.11 报警电路 如图3.11所示,温度失控报警的启动端接P3.3,.H3.7为上限报警指示红灯,L3.6为下限报警指示绿灯。当温度失控超出上限设定值时,P3.3输出高电平,报警鸣声,同时点亮红灯。当温度失控超出下限设定值时,点亮绿灯。 3.3无线收/发电路设计 3.3.1 编码/解码电路设计 3.3.1.1编码电路设计 PT2262/2272是一种CMOS工艺制造的低功耗低价位通用编解码电路。PT2262/2272最多可有12位(A0-A11)三态地址端管脚(悬空,接高电平,接低电平),任意组合可提供531441地址码,PT2262最多可有6位(D0-D5)数据端管脚,设定的地址码和数据码从17脚串行输出,可用于无线遥控发射电路。D0,D1,D2,D3,D4共五位数据位接单片机I/O口,通过单片机将数据输送到编码芯片中进行编码,编码后数据从17脚输出,从而实现了数据的并行输入,串行输出。因为单片机中每一个字节有8位,而PT2262中的数据口最多只有6位,所以需要把每个字节分为两半,先发送高4位,后发送低4位。为了区别接收到的是高4位还是低4位,系统中使用了5个数据口D0,D1,D2,D3,D4,其中,D4用来表明接收到的数据是高4位还是低4位,当D4=1时表示接收到的是高4位,D4=0时表示接收到的是低4位。PT2262收到从单片机传来的数据后,需要同时启动编码,否则17脚将不会有数据输出。 PT2262特点: ● CMOS工艺制造,低功耗 ● 外部元器件少 ● Rc振荡电阻 ●工作电压范围宽:2.6-15v ● 数据最多可达6位 ● 地址码最多达531441种 应用范围: ●车辆防盗系统 ● 家庭防盗系统 ● 遥 控 玩 具 ● 其他电器遥控 PT2262的引脚图如3.12所示: file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image037.jpg 图3.12 PT2262的引脚图 PT2262的管脚说明如表3.1。 表3.1 名称 | | | | | 地址管脚,用于进行地址编码,可置为“0”,“1”,“f”(悬空) | | | | | | | | | | | | | | | | | | | | | |
PT2262输出波形以及极限参数如图3.13和表3.2所示. file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image039.jpg 图3.13 PT2262输出波形 表3.2 PT2262极限参数 参数 | | | | | | | | | | | | | | | | | | | | | | | file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image040.gifC | | | | file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image041.gifC |
PT2262的振荡脉冲与编码脉冲如图3.14所示。OSC为PT2262的振荡频率,0、1、f分别为PT2262的三种编码形式。0表示低电平,1表示高电平,悬空时为f。从波形的形状可以清楚地看出输入的是低电平,高电平还是悬空。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image043.jpg 图3.14 振荡脉冲与编码脉冲 在具体的应用中,外接电阻可根据需要进行适当的调节,阻值越大振荡频率越慢,编码的宽度越大,发码一帧的时间越长.推荐值:2262/4.7M/2272/820K2262/3.3M/2272/680K,2262/1.2M/2272/200K由于2262/2272目前厂牌较多,外接振荡电阻也略有不同,下面列出的是PT2262与HS2272及HS2262/HS6672的振荡电阻数据。PT2262/4.7M配HS2272/2M HS2262/4.7M配HS2272/1M。振荡电阻的阻值必须精确,切不可随意用一个阻值差不多的电阻来代替,因为振荡电阻的阻值决定着编码的频率。 3.3.1.2 解码电路设计 PT2262/2272是一种CMOS工艺制造的低功耗低价位通用编解码电路PT2262/2272最多可有12位(A0-A11)三态地址端管脚(悬空,接高电平,接低电平),任意组合可提供531441地址码,PT2272最多可有6位(D0-D5)数据端输出管脚,17脚为解码有效指示输出,PT2272分为锁存型输出或非锁存型输出,可用于无线遥控接收电路。系统中的地址位只使用了A0,A1组成00,01,10,11与悬空的A2,A3,A4,A5,A6组成地址码。副系统中,A0A1=00表示副系统2的解码端PT2272,A0A1=01表示副系统2的编码端PT2262,A0A1= 10表示副系统1的解码端PT2272,A0A1=11表示副系统3的解码端PT2272。这样,在主控系统端通过改变A0A1的值,就可以向不同的副系统发送温度设定值。 PT2272的引脚如图3.15所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image045.jpg 图3.15 PT2272的引脚图 PT2272特点: ● CMOS工艺制造,低功耗 ● 外部元器件少 ● Rc振荡电阻 ● 工作电压范围:2.6-15v ● 数据最多达6位 ● 地址码最多达531441种 应用范围: ● 车辆防盗系统 ● 家庭防盗系统 ● 遥 控 玩 具 ● 其他电器遥控 PT2272的管脚说明如表3.3。 表3.3 PT2272的管脚说明 名称 | | | | | 地址管脚,用于进行地址编码,可置为“0”,“1”,“f”(悬空)必须与2262一致,否则不解码 | | | 地址或数据管脚,当做为数据管脚时,只有在地址码与2262一致,数据管脚才能输出与2262数据端对应的高电平,否则输出为低电平,锁存型只有在接收到下一数据才能转换 | | | | | | | | | | | | | | | | | | |
编码芯片PT2272的时序如图3.16所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image047.jpg 图3.16 编码芯片PT2272的时序图 这里a=2*时钟周期,为“f”仅对地址码有效,同步位的长度是4个AD位的长度,含一个1/8AD位的脉冲,见图3.17。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image049.jpgfile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image050.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image050.gif 图3.17 PT2272 时钟周期与位宽关系图 地址码和数据码都用宽度不同的脉冲来表示,两个窄脉冲表示“0”;两个宽脉冲表示“1”;一个窄脉冲和一个宽脉冲表示“F”也就是地址码的“悬空”。PT2272的极限参数如表3.4所示。PT2272的电气参数如表3.5所示。 表3.4 PT2272极限参数表 参数 | | | | | | | | | | | | | | | | | | | | | | | file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image051.gifC | | | | file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image052.gifC |
表3.5 PT2272的电气参数表 从图3.18可以明显看到,图上半部分是一组一组的字码,每组字码之间有同步码隔开,所以我们如果用单片机软件解码时,程序只要判断出同步码,然后对后面的字码进行脉冲宽度识别即可。图下部分是放大的一组字码:一个字码由12位AD码(地址码加数据码,比如8位地址码加4位数据码)组成,每个AD位用两个脉冲来代表:两个窄脉冲表示“0”;两个宽脉冲表示“1”;一个窄脉冲和一个宽脉冲表示“F”也就是地址码的“悬空”。 2262每次发射时至少发射4组字码,2272只有在连续两次检测到相同的地址码加数据码才会把数据码中的“1”驱动相应的数据输出端为高电平和驱动VT端同步为高电平。因为无线发射的特点,第一组字码非常容易受零电平干扰,往往会产生误码,所以程序可以丢弃处理。Din和VT的波形示意图如图3.17所示,图3.19则为瞬态型和锁存型PT2272数据输出波形示意图。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image054.jpg 图3.18 Din和VT的波形示意图 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image056.jpg 图3.19 瞬态型和锁存型PT2272数据输出波形示意图 PT2272解码芯片有不同的后缀,表示不同的功能,有L4/M4/L6/M6之分,其中L表示锁存输出,数据只要成功接收就能一直保持对应的电平状态,直到下次遥控数据发生变化时改变。M表示非锁存输出,数据脚输出的电平是瞬时的而且和发射端是否发射相对应,可以用于类似点动的控制。后缀的6和4表示有几路并行的控制通道,当采用4路并行数据时(PT2272-M4),对应的地址编码应该是8位,如果采用6路的并行数据时(PT2272-M6),对应的地址编码应该是6位,系统中采用的都是PT2272-L4。 需要注意的一点是,解码端的地址必须和编码端的地址一致,否则将无法解码。这是需要特别注意的地方,也是无线收发能否成功的关键之一。 3.3.2发射/接收电路设计 3.3.2.1发射电路设计 发射模块F05T的频率有两种433M和315M两种型号,系统中选用433M,频率稳定度达10-5。F05T的引脚功能如图3.20所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image058.jpg 图3.20 F05T的引脚功能图 1、F05T的性能参数及引脚功能如表3.6所示。 表3.6 F05T的性能参数及引脚功能 2、F05T的典型应用电路设计如图3.21所示: file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image060.jpg 图3.21 F05T典型应用电路设计 在图3.21 F05T典型应用电路中,编码器采用PT2262,振荡电阻取3.3M效果较好,17脚无信号输出时,FO5不工作.发射电流为零;当14脚为低电平时,17脚输出已设定的编码脉冲对FO5进行调制发射,通过测试F05工作电流可大致判断F05是否处于正常发射状态,空码时加天线时发射电流约6mA左右,调整R2可调整发射电流,R2取值小可提高发射距离,但易引起过调制甚至停振。 3、F05T的应用说明: F05系列采用SMT工艺,树脂封装,声表谐振器稳频,免调试,特别适合短距离无线遥控及数据传输。 F05T具有较宽的工作电压范围及低功耗特性,可以根据需要调整发射电流,当发射电压为3V时,发射电流约2mA。12V具有较好的发射效果,发射电流约5-8mA。F05T为OOK方式调制,需要输入数据信号才能工作,数据信号停止,发射电流为零,但停止状态时必须为低电平。不合适的数据信号会引起调制效率下降,收发距离变近。当低于300HZ或高于10K的频率信号发射效率会变的很差。 直流电平及模拟信号是不能发射的。如采用单片机请选用F05P或F05C,在无数据时须将单片机输出口设为低电平状态,如在数据位前加一些乱码可以抑制接收机的零电平燥声干扰。若采用通用编解码器,发射效果比单片机要好得多,因为通用编解码器的数据无论怎么变但每一位的脉宽是不变的,即使出现一点干扰,解码器的宽容性也会解码输出高电平。而单片机则不同了,脉宽是随着数据变化的,过宽过窄的脉冲会引起过调制或调制不足,接收到的数据便会出现错误。所以单片机必须要工作在可靠的收发区域。 F05T有4个功能引脚,因为体积小,无天线只能满足短距离使用,而天线对距离起着很大的作用,天线能否匹配也是很关键,匹配良好的天线能增加几倍的距离,匹配不好的天线效果很差甚至会引起频率漂移。天线的长度取发射频率的1/4,可以用一根直径0.5-1毫米,长度(433M)18厘米 (315M)24厘米的漆包线代替。但天线必须拉直,指向无所谓。短于1/4波长或弯曲的天线效果会很差。 FO5T 应垂直安装在印板边部,应离开周围器件5mm以上,以免受分布参数影晌而停振。FO5T发射距离与输入信号,发射电压,电池容量,发射天线及环境有关。在障碍区由于折射反射会形成一些死区及不稳定区域, 不同的收发环境会有不同的收发距离。 F05T调整输入端限流电阻可调整发射电流。 3.3.2.2 接收电路设计 1、射频接收模块J04T的主要参数及引脚功能如表3.7所示。 表3.7J04T的主要参数及引脚功能 2、接收模块J04T内部结构如3.22所示: file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image062.jpg 图3.22 接收模块J04T内部结构图 3、J04T典型应用电路如图3.23所示。J04T的数据输出2脚接解码芯片的数据输入脚(14)。PT2272的17脚接一个发光二极管,解码有效时,17脚输出高电平,二极管不断闪烁。只有当PT2262与PT2272的地址码相同时,PT2272才会解码,输出与PT2262相对应的高电平。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image064.jpg 图3.23 接收模块典型应用电路设计 4、J04T应用说明: (1)J04T工作频率分为315 M及433M二种,在模块的右上角有标记,圈内有点为 315M。 (2)J04T性能与J04R相同,与J04V引脚完全兼容,可直接替换。为方便后级电路的电平接口增加了数据反相输出端,无数据时2脚输出为高电平,3脚为低电平,可输出2mA的驱动电流。若驱动低阻抗负载会引起工作电压的不稳定。 (3)J04T最佳工作电压为3---3.5V(处于最高接收灵敏区) 工作电压范围:2.5V-3.5V (4)J04T不适合开关电源。适合电池或线性电源,可采用3.7K电阻从5V取得 3.3V 再加 220UF电解电容滤波给J04T供电,此时J04T输出能力可驱动一支发光二极管。如果从6V以上的电压用电阻降压会引起工作电压的不稳定。也可以从220V用电容降压 整流滤波后用7805取得 5V再用3.7K电阻降压滤波取得 3.3V。不适合用稳压管串联分压。接收模块的电源直接影响到接收电路的稳定性,也是接收电路的只要干扰源。 (5)J04T顶部镀银电感不要碰压,否则会引起频率偏移距离变近。 (6)J04T无接收数据时输出为零电平状态,与J04T接口的器件无数据时也必须处于零电平状态。如果是高阻抗负载可直接连接,如CMOS电路。 (7)J04T内部具有放大整形电路,只适合数据信号的接收而不适合模拟信号。 (8)J04T引脚之间A点可根据需要接入一支470K-1M的电阻可使J04V输出更干净,但接收灵敏度会降低。 (9)J04T应按装在印板边部并应离开周围器件5mm以上,要垂直于线路板,否则会引起频率偏移。如果器件较多还必须要注意地线布局要合理,否则会引起很多无法排除的干扰致使接收电路无法正常工作。 3.4 硬件最后实施方案 根据以上分析,采用如下方案: (1)控制面板采用2*4式键盘;显示部分采用4位共阳极数码管,分时显示温度设定值,检测值,简单直观。 (2)温度测量部分采用“一线总线”数字温度传感器DS18B20,加上软件非线性补偿来实现高精度测量。 (3)驱动控制部分采用脉冲移相触发可控硅改变电烤箱的有效功率。 (4)发射部分采用F05T,接收部分采用与F05T配套的J04T,频率都为433M。 (5)编码解码部分采用PT2262/PT2272,由于其编解码脉冲是固定不变的,所以比用单片机实现编解码要好得多。且PT2262/PT2272有大量的地址码可以选择,可实现系统的一对多控制。 4 软件设计 4.1 模块化设计 (1)键盘控制模块设计; K0,K1的功能分别是左移一位和右移一位;K4,K5的功能分别是加1和减1;K2,K3,K6分别是向从系统00,01,10发送温度设定值的功能键。K7为清楚报警鸣声且熄灭报警提示红绿灯。温度设定范围为室温——125℃,本设计中设置初始温度值为35℃。 (2)显示模块设计; (3)系统主控模块设计; (4)温度采集模块设计; (5)控制PID算法模块设计 ,即结合硬件使系统的上升时间和超调量可调。 PID控制算法原理 设计原理:采用单片机作为控制器的自动控制系统图6,它是由89C51单片机系统通过A/D电路过程变量y,并根据有关的算法控制变量u,通过PWM输出到执行机构,使过程变量稳定在设定的值上。 在采样时刻t=I×T(T为采样周期,I为正整数),PID调节规律可以通过数值公式 Ui=Kp[ei+T/Ti(e0+e1+e2+……)+Td /T(ei-e (i-1))]+u0 近似计算,如果T取得足够小,这种逼近可相当准确,被控过程与连续过程十分接近。 △u=Ki*e0+Kp*(e0-e1)+Kd*(e0-2*e1+e2) =Ki*(r-y0)+Kp(y1-y0)+Kd*(y2+2*y1+y0) =Ki*r-Ki*y0+Kp*y1-Kp*y0+Kd*y2-2*Kd*y1+Kd*y0 其中:Ki、Kp、Kd为PID参数,y0、y1、y2为采样值,r为设定值,△u为控制量的增量。增量型PID运算流程如图4.0所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image066.jpg 图4.0 增量型PID运算流程图 4.2 并行键盘显示面板驱动程序 (1)键盘控制面板采用2*4式键盘,P2.2,P2.3为行控制口,P2.4,2.5,2.6,2.7为列控制口。 ;********************************************** ;键盘扫描程序, ;********************************************** //--------------------------------------------------------------------- //函数:键盘程序 //功能:实现Ctal_Data的加一减一功能 //入口参数:无 //出口参数:无 //--------------------------------------------------------------------- void keyboard() { uchar smao,i,shifter; smao=0xbf; P2=smao; for(i=0;i<3;i++) { if(P2==0xdb) /* up 键功能:pid参数加一*/ {Ctrl_Data[Disp_Ptr]++;} P2 = smao; if(P2==0xe7) /* left 键功能:显示指针减一*/ {Disp_Ptr--; if(Disp_Ptr==0xff) Disp_Ptr=5;} if(P2==0xb7) /*reset键功能:停止*/ {} if(P2==0xd7) /* right 键功能:显示指针加一*/ {Disp_Ptr++; if(Disp_Ptr>5) Disp_Ptr=0;} if(P2==0xeb) /* down 键功能:pid参数减一*/ {Ctrl_Data[Disp_Ptr]--;} if(P2==0xbb) /* run 键功能:开始*/ {} P2 = 0xff;
receive(); display(Disp_Ptr); /*disp()调用作为延时*/ receive(); display(Disp_Ptr); /*disp()调用作为延时*/
shifter=smao<<7; //右移一位,准备显示下一位 smao=smao>>1; smao=smao|shifter; P2=smao; } } (2)显示子程序 ;*************************************************** ;LED显示电路采用4位共阳极数码管 //------------------------------------------------------------------------- //函数:显示码转换子程序 //功能:将Ctrl_Data[Disp_Ptr]转化为三位BCD存入Disp_Buff[3][2][1]中 //入口参数:显示指针 Disp_Ptr //出口参数:无 //------------------------------------------------------------------------- voidtras(uchar i) { uchar j = Ctrl_Data; Disp_Buff[2] = Disp_Tab[(j/100)%10];//百位 Disp_Buff[1] = Disp_Tab[(j/10)%10];//十位 Disp_Buff[0] = Disp_Tab[j%10];//个位 Disp_Buff[3] = Information;//提示信息 } //------------------------------------------------------------------------- //函数:显示子程序 //功能:显示数组Ctrl_Data[Disp_Ptr]并加上提示信息 //入口参数:显示指针 Disp_Ptr //出口参数:无 //------------------------------------------------------------------------- voiddisplay(uchar i) { uchar j; uchar begin = 0x7f,shifer; tras(i); for(j=0;j<4;j++) { P0 = Disp_Buff[j];//段选 P2 = begin; //位选 delay(100); //延时 1535 shifer=begin<<7; begin=begin>>1; begin=begin|shifer; } P0=0xff;// 关显示 P2=0xff; } 4.3 DS18B20驱动程序————————————— /*========================================================================= 功能:实现对DS18B20的读取 原理:单总线协议 注意:单总线协议对延时要求比较严格,此程序中采用的是11.0592M的晶振, ====================================================================================================*/ //#include"reg51.h" sbit DQ =P1^4; //定义通信端口 //延时函数 /* void delay(unsigned int i) { while(i--); } */ //初始化函数 Init_DS18B20(void) { unsigned char x=0; DQ = 1; //DQ复位 delay(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay(80); //精确延时 大于 480us DQ = 1; //拉高总线 delay(14); x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(20); } //读一个字节 ReadOneChar(void) { 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(4); } return(dat); } //写一个字节 WriteOneChar(unsigned char dat) { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = dat&0x01; delay(5); DQ = 1; dat>>=1; } //delay(4); } //读取温度 ReadTemperature(void) { unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度 a=ReadOneChar(); b=ReadOneChar(); t=b; t<<=8; t=t|a; tt=t*0.0625; //t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用 return(t); } main() { unsigned char i=0; while(1) { i=ReadTemperature();//读温度 } } 4.4 控制电路PWM驱动程序设计——————————— PWM的波形图如图4.1所示. file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image068.jpg 图4.1 PWM波形 其中,T为PWM周期,T1为高电平时间,T2为低电平时间,叫做占空比。对于pwm来说占空比是一个重要参数。 1、改变占空比的4种方法: (1)定宽调频法 这种方法是保持t1不变,只改变t2,这种使周期T(或频率)也随之改变。 (2)调宽调频法 这种方法是保持t2不变,而改变t1,这种使周期(或频率)也随之改变。 (3)调宽调频法 这种方法是同时改变t1,t2。这种使周期也随之改变。 (4)定频调宽法 这种方法是使用周期T(或频率)保持不变,而同时改变t1和t2。前两种方法由于在调速时改变了控制脉冲的周期,当控制脉冲的频率与系统的固有频率接近时,就会引起振荡,所以应该尽量避免。 2、PWM控制信号的产生方法有如下四种: (1)分立元件组成的PWM信号发生器 这种方法是利用分立的电子元件组成的PWM信号电路。他是早期的方式,现在已经不用了。 (2)软件模拟法利用单片机的一个I/O引脚,通过软件对该引脚不断的输出高低电平来实现PWM波输出。这种方法要占用CPU的一定量时间。 (3)专用PWM集成电路 从PWM控制技术出现之日起,就有芯片制造商生产专用的PWM集成电路芯片,现在市场上已有许多种。这些芯片除了有信号发生功能外,还有“死区”调节功能,保护功能。在用单片机控制直流电动机中,使用专用PWM集成电路可以减轻单片机负担,工作更可靠,但价格贵。 (4)单片机的PWM口 新一代的单片机增加了许多功能,其中包括PWM功能。单片机通过初始化设置,使其能自动地发出PWM脉冲波,只有改变占空比时,CPU才进行干预,但价格比较贵。 //----------------------------------------------------------- //函数:定时器0中断 //功能:输出pwm波形 //----------------------------------------------------------- void timer0() interrupt 1 { TH0=tim0>>8; TL0=tim0; if(Pwm_Ctrl++>Pwm_H)PWM_OUT = 1; else PWM_OUT = 0; } 4.5 数字PID子程序设计 //----------------------------------------------------------- //函数:数字PID子程序 //功能:计算偏差,产生控制量,即PWM高电平时间 //----------------------------------------------------------- voidPID() { e2 = e1; e1 = e0; e0 = Expect_T-Actual_T; u += Ki*e0+Kp*(e0-e1)+Kd*(e0-2*e1+e2); if(u<0) u = 0; //限幅 if(u>255) u = 255; Pwm_H = u; //计算pwm高电平时间 } 4.6 程序流程图———————————————— (1)主系统程序流程图如图4.2所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image070.jpg 图4.2 主系统程序流程图 (2)温度报警处理子程序流程图如图4.3所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image072.jpg 图4.3 温度报警处理子程序流程图 (3)副系统程序流程图: file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image074.jpg 图4.4 从系统程序流程图 5 系统调试 本系统中有软件和硬件的协调工作。由于系统模块较多且各模块间独立性较强、软件设计灵活的特点,我们采用先设计硬件,再设计软件;先分模块调试,再联起来整体调试的方法进行调试。 5.1 调试步骤 由于硬件电路模块比较多,结构复杂,不可能第一步就进行联机调试。在进行硬件功能调试以前,先对硬件电路调试和检查。首先要检查电路板,看看电路板上的线路是否有短路或者是断路的情况,如果有则要修正它。检测各芯片的电源连接是否正确,确保连线正确后,加上电源,看电路板上元件是否有异常反应,若有,立即断开电源,再次进行电路检查,纠正错误。直到电路各器件在上电工作情况下无异常反应。确保电路设计正确后,进行分模块调试。 系统调试步骤如下:(1)控制模块与显示模块调试;(2)编码/解码模块调试;(3)编/解码模块与收/发模块联合调试;(4)驱动电路模块调试;(5)温度采集模块调试;(6)整体调试。 5.2模块调试 5.2.1 控制模块与显示模块调试 键盘控制模块和显示模块是需要联合调试的,不能分开来调试。键盘控制面板上共有8个按键,每个键有不同的功能。K0,K1的功能分别是左移一位和右移一位;K4,K5的功能分别是加1和减1;K2,K3,K6分别是向从系统00,01,10发送温度设定值的功能键;K7为清楚报警鸣声且熄灭报警提示红绿灯。编写键盘扫描程序和显示子程序,按键盘上的按键,看看每个键是否实现期望的功能,若不能实现,则修改程序重新调试。这样反复地调试,直到各个按键能够实现期望的功能为止。在此模块调试时,因为还没涉及到向副系统发数据,所以只能调试0号,1号,4号,5号共4个键,其余几个键到整体调试时才调试。 5.2.2 编码/解码模块调试 编码、解码模块的调试主要调试它的编码解码是否正确,如不正确,则检查是电路问题,还是芯片烧坏问题。调试编码解码电路的连接方法如图5.1所示。把经过PT2262编码的数据直接接到PT2272数据输入口,观察PT2272的解码有效指示灯是否闪亮,如不亮则检查PT2262和PT2272地址是否对应,只有二者的地址完全一致时,PT2272才会解码。解码指示灯闪亮后,观察如图5.1左右两边点亮的发光二极管是否一致,如一致,则编码、解码模块调试完毕。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image076.jpg 图5.1 编码/解码模块调试连接电路 5.2.3 编/解码模块与收/发模块联合调试 完成上面5.2.2调试后,下一步是编/解码模块与收/发模块联合调试,这一步主要是检查发射接收模块是否能够正常发射或接收。在调试发射、接收模块时,注意不要碰压这些模块上的金属条,否则会使发射频率产生漂移,也有可能引起发射距离变近。编、解码模块与接收、发射模块联合调试时,电路接法如图5.2所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image078.jpg 图5.2 编/解码模块与收/发模块联合调试连接电路 按上图连接电路后,用示波器测量PT2262的17脚(数据输出脚)将会看到如图5.3所示的波形。如果发射、接收模块正常工作,在PT2272的数据输入端(即J04T数据输出引脚将会看到图5.4所示的波形。比较这两者的波形,可以看出这部分联合电路是正常的。再看两边的发光二极管的亮和暗是否一致,如一致,则表示调试成功。也有不一致的情况,这时候问题一般是二极管的接触不好,或者损坏了,用万用表仔细检查即可解决问题。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image080.jpg file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image082.jpg 图5.3 编码输出波形 图5.4 解码输出波形 5.2.4 驱动电路模块调试 驱动电路是温度控制系统中非常重要的部分,这部分如果不能正常工作,温度控制也就失去了意义。驱动电路模块调试连接方法如图5.5所示。因为这部分电路用到220V的交流电,调试时一定要注意安全,待所有的线路连接后再接上交流电源。首先利用示波器测量PWM的波形,正确的PWM波形如图5.6所示。如果PWM无输出,则不用再接上220V file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image084.jpg file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image086.jpg 图5.5 驱动电路模块线路连接图 图5.6 PWM波形图 交流电,应检查PWM程序是否正确。待PWM输出波形正确后接上交流电,这时,电烤箱的电源指示灯会闪亮起来,驱动电路调试完毕。 5.2.5 温度采集模块调试 温度采集模块的调试主要是软件的调试。系统采用“一线总线”数字式温度传感器DS18B20,其硬件结构比较简单,总共只有三个引脚:数据、地、电源,但简单的硬件需要复杂的软件来支持。DS18B20的程序设计在前面已经叙述,要注意的是,根据DS18B20的通信协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行操作。 5.3整体调试 经过前面的调试,系统大部分功能已经实现了。至此,需要对系统进行整体调试了。整体调试最重要的还是软件的调试,说到底就是发送接收子程序的调试。这部分程序调试的难度最大,在调试过程中常常会出现接收的数据与发送不一致的现象,或者接收到的数据全为0,这是就需要不断修改程序。首先,在主系统中设定副系统1的地址并向其发送一些变化的数据,观察其数据输出口的发光二极管是否发光并不断变化,如果变化则表明主系统正常向副发送数据。接着,修改地址调试其余两个副系统。 完成主系统向副系统发送数据调试后,接着调试副系统向主系统发送数据,这部分调试比较直观。因为副系统向主系统发送的数据能够显示模块中显示出来,轻易的看出接收到的数据是否正确。调试方法与主系统向副系统发送数据时的调试方法一样。至此,系统所有的调试完毕。 整个系统综合有如下几个特点: 1、89S51单片机的采用,不仅便于数据采集,而且扩展了各种功能,比如显示、外部中断等。 2、编码解码电路采用通用的PT2262/PT2272,编码解码有固定的脉冲,即使出现一点干扰,解码器的宽容性也会解码输出高电平,非常可靠,误码率也很低,足以满足系统设计的指标要求。 3、“一线”数字温度传感器DS18B20与软件处理相结合,进一步提高了系统的测温精度。 4、在电路的设计中充分考虑了系统的可靠性和安全性。经过精心同时达到各项设计要求,动态性能也达到较高指标 6 系统性能指标测试 6.1误码率测试 6.1.1误码仪测试原理 误码仪由发端模块和收端模块两部分组成。发端模块产生连续或者突发的比特流,作为通信系统的信源数据;收端模块接收通信系统输出的比特流,并将其与本地产生的、与发端形式相同的比特流进行比较,从而完成误码测试。从逻辑上看,误码仪的工作过程大致可以分成以下几个步骤: (1)发端模块产生原始数据,并使其通过被测通信系统构成的信道; (2)收端模块产生与发端相同码型、相同相位的数据流; (3)将收到的数据流与收端产生的本地数据流逐比特地比较,并进行误码统计; (4)根据误码统计结果,计算出相应的误码率,并输出误码指示。 6.1.2 误码率测试 误码率Pe: 二进制数据位传输时出错的概率。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image088.gif 误码仪测试原理如图6.1所示。只要对两个序列逐位比较,就可以进行误码统计了。在误码测试逻辑中,接收到的总比特数与误码个数均以二进制方式存储在内部的逻辑向量中。它们最高非0比特所处的位置之差实际上反映了误码率的指标不,只要根据这个差值就可以大致估计出误码率,本系统的误码率≤10-6。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image090.jpg 图 6.1 误码仪测试原理图 6.2 发射/接收频率测试 在前面说过,发射接收模块期望频率都为433M,但由于制作过程存在误差,实际应用中的频率不一定为433M,现做了如图6.2所示的测试。经过测试,系统的发射、接收频率都约为430M,与期望的433M基本接近。注意,因为频率比较高,用一般的低频示波器是无法测出频率来的,图6.2只是一个测试示意图,实际测试中发射、接收模块频率测试是不共地的。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image092.jpg 图6.2 发射、接收模块测试示意图 6.3 数据传输速率测试 (1)数据传输速率是 指通信线上传输信息的速度。有两种表示方法,即信号速率和调制速率。①信号速率S:指单位时间内所传送的二制位代码的有效位数,以每秒多少比特数计,即bit/s、b/p、位/秒。信号速率的高低,由每位所占的时间决定,若一位数据所占的时间越小,则信号速率越高。设T为传输的电脉冲信号的宽度或周期,N为电脉冲信号所有可能的状态数,则信号速率为S=1/T×log2N(bps)。② 调制速率B:是脉冲信号经过调制后的传输速率,以波特(BAUD)为单位,通常用于表示调制器之间传输信号的速率。表示每分钟传送多少电信号单元,若T(秒)表示调制周期,则调制速率为:B=1/T 。 (2)利用高频示波器观察编码输出(发射模块输入)和解码模块输入(接收模块输出)的波形,记录波形的周期,并通过计算,得到发射接收速率都约为1200bit/s。 7 操作说明: file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image094.jpg KEY0,KEY1的功能分别是左移一位和右移一位;KEY4,KEY5的功能分别是加1和减1;KEY2,KEY3,KEY6分别是向从系统00,01,10发送温度设定值的功能键。K7为清楚报警鸣声且熄灭报警提示红绿灯。温度传感器的测温范围在-55度——125度,而实际上低于室内的温度在调试环境下是不存在的,所以键盘控制输入应在室内温度(大约25℃)到125℃之间。键盘设定值设定并在数码管上显示后,选择要控制的从系统,按2号键向从系统00发送温度设定值,按3号键向从系统01发送温度设定值,按6号键向从系统10发送温度设定值,对各从系统进行分时控制。从系统收到设定值后对电烤箱的温度进行控制,并把实际检测到的温度值送主控系统,并显示出来。7号键用于清除失控报警鸣声,同时熄灭报警指示灯。 经过几天的连续反复测定并校准,在设定范围内都能达到指标的要求,可控,误差不是太大,但是因为温度信号的检测滞后使得无论是电烤箱内的温度还是经过温度传感器DS18B20测量,单片机计算控制显示的数值总是有一定的滞后和超调,但是最后都能稳定在设定的温度值左右,不会超过误差范围,也就意味着该毕业设计的制作达到了设计的要求——可控,可调。 主系统的单片机是一个可直接在线烧写程序的系统,左边6个插脚用于连接计算机在线烧写程序。三脚开关拨向右边时只能烧写程序,不能执行任何控制操作。拨向左边时单片机开始执行操作,此时如果要进行烧写程序,则系统拒绝烧写。 8 总结 8.1技术优点与缺点 8.1.1技术优点 系统采用的技术有如下的优点: (1)利用无线电进行远程双工通信,灵活、方便,而且比较经济;(2)利用AT89S51单片机的软件编程来实现大量硬件的功能,减少元件使用,减少许多干扰因素,从而增加了测量的精度;(3)采用通用编解码器PT2262/PT2272,发射效果比单片机编码解码好得多,因为通用编解码器的数据无论怎么变但每一位的脉宽是不变的,即使出现一点干扰,解码器的宽容性也会解码输出高电平;(4)温度采集部分采用“一线总线”数字化温度传感器DS18B20,测量精度可达到±0.5℃;(5)系统是“一对多点”控制,控制效率大大提高。 8.1.2技术缺点 采用无线电进行远程温度控制有气球优点但同时也存在着下面的缺点: (1)系统无线电通信距离短,不适合超远距离的信号传输;(2)无线电通信距离受楼房等障碍物的影响。 所以,采用一种技术时必须充分考虑它的优点和缺点才能更好地掌握和利用它。 8.2 提高测量精度的几项措施 1、制作电路板时注意元件布局,线与线之间的距离,尽可能减少外来的干扰 2、减少干扰源,提高测量精度; 3、通过软件提高温度的测量精度; 4、用单片机进行数据存储和运算处理,很容易实现温度自动补偿、斜率自动校正、多次测量平均等技术。 8.3问题及解决方法 1、系统整体调试过程中,最难以调试的是无线电发射接收部分。无线发射接收部分,频率高,容易受到干扰。在调试时,为了下载程序方便,把系统放在电脑旁边,但无论怎么调试,原来能够解码的子系统统统无法解码,忙了一天也毫无结果。后来无意中把系统板拿到远离电脑的桌子上,接收部分解码马上有效了。所以调试时应该远离干扰源。 2、在面包板上调试编码解码电路时,出现了解码有效,但输入数据跟输出数据始终不能一致。在这种情况下,一般都会怀疑解码电路有问题,或者解码芯片坏了,或者编码解码地址设置不一致。仔细检查后还是没有解决问题,找同学,找老师帮忙都毫无进展。在化了大量的时间和精力后才发现,编码电路只有在连续两次检查到与编码电路相同的地址后才会解出与输入端相同的数据。所谓编码解码电路地址一致并不仅仅是检查到系统的地址就可以了,而必须是连续两次检查到相同的地址,否则系统解码后的数据将与输入的数据不一致。在面包板上调试时,由于不是利用单片机或按键连续发数据,当然就会造成输入与输出不一致了,也就会出现乱码。 3、在安装元件的时候,要特别注意三极管的安装。同一种型号不同厂家的三极管的极性也有可能不一样,安装的时候不注意,在调试时就难以发现问题所在了。当发现问题所在时,还得把三极管拆下重新安装。这样,电路板往往会被弄得面目全非。 4、系统设计的是一对多控制,电源插脚比较多,供电时很容易出现把电源正负极插反以至烧了芯片。解决问题的最好办法是用墨笔在板上标明电源的正负极,每个电源用固定的接线。 5、由于系统应用了高频电路,设计电路时应该在电源旁边放置适当值的电容,以减少电源对系统的干扰,数据输入输出的波形也会比较“干净”。总之,要设计出一个性能良好的控制系统需要注意许多问题,在硬件设计的时候为减少外干扰应加入滤波。 8.4 整体测试结论 (1)发射、接收频率均约为433M;频率稳定度:10-5;发射电流:0.2-10mA 发射功率:10mW。 (2)编码、解码效果如图8.1,8.2所示; 单片机输出的并行数据经过编码电路编码后的串行数据波形如图8.1所示。编码后的数据输入到发射模块进行调制发射,副系统接收数据并解码后的波形如图8.2所示。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image095.jpg file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image096.jpg 图8.1 编码输出波形 图8.2 解码输出波形 从上面两个图可以看出,采用PT2262和PT2272进行编码、解码效果很好。 (3)温度采样误差:≤±0.5℃; 温度设定值和采样值以及实际值的比较如表8.1所示。表中,实际温度值是指用温度计测量到的值,采样最大值是指从副系统返回主系统的温度检测最大值。 表8.1 温度设定值和采样值以及实际值的比较 从以上的数据可以知道各段的数据没有超过要求的2.5%,达到了很好的效果。 (4)温度调节时间:ts<4min; (5)数据传输速率:<10kbps; (6)发射距离:约400米; (7)误码率:≤10-6。
谢 辞
岁月匆匆,愉快、充实而又短暂的大学四年生活随着毕业设计的完成而将圆满结束。毕业设计是对大学四年所学专业知识的巩固和深化,理论知识和实际操作相结合,学以致用,使我们学会了提出问题,分析问题,解决问题的能力。这对我们以后的工作和人生将产生深远的影响。在此,感谢母校无私的培养,特别感谢我的导师龙超老师在整个毕业设计过程中的谆谆教导,耐心指导。同时也感谢系其他老师和系领导为我们做毕业设计提供的帮助。在未来人生的工作岗位上,我将用在母校里学会的学习思维方法和做人的行为准则来严格要求自己,为母校争光。谢谢!
参考文献: [1] 于海生,潘松峰,于培仁等.微型计算机控制技术[M].北京:清华大学出版社,1999.3 [2] 徐 炜,姜 晖,崔 琛.通信电子技术[M] 西安:西安电子科技大学出版社,2003.8 [3] 朱定华. 微机原理与接口技术[M] 北京:清华大学出版社 北方交通大学出版社,2002.6 [4] 李斯伟,雷新生.数据通信技术[M] 北京:人民邮电出版社,2004.2 [5] 扬振江,蔡德芳.新型集成电路使用指南与典型应用[M] 西安:西安电子科技大学出版社 2004.7 [6] 潘新民 ,王燕芳等. 微型计算机控制技术[M]北京:高等教育出版社, 2001.7 [7] 谢自美. 电子线路设计.实验.测试[M] 武汉:华中科技大学出版社,2000.7 [8] 梁廷贵.遥控电路 可控硅触发电路 语音电路分册[M] 北京:科学技术文献出版社,2002.2 [9] 吴金戊,沈庆阳,郭庭吉.8051单片机实践与应用[M],北京:清华大学出版社,2002.9 [10] 黄贤武,郑筱霞.传感器原理及其应用[M] 成都:电子科技大学出版社, 2002.7 [11] 张积东.单片机51/98开发与应用[M],北京:北京电子工业出版社, 1994.01 [12] Control SystemsTheory with Engineering Applications[M] Boston.Basel.berlin 2001 [13] Linear Control System Analysis and Design[M] John J.D’azzo Constantine H.Houpis 2002.6
附 录:
附录(一):所需主要仪器设备: (1)微机一台; (2)示波器; (3)万用表; (4)直流稳压电源; (5)单片机开发系统一套。 附录(二):电路原理图及PCB 图
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image098.jpg 图1 主系统部分原理图 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image100.jpg 图2 副系统部分原理图 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image102.jpg file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image104.jpg 图3 副系统PCB图 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image106.jpg 图4 副系统PCB图 附录(三):系统源程序 (1)主系统部分程序(部分) ;*********************************************; ;*****************主系统程序******************; ;*********************************************; TEMJ EQU 50H ;温度检测值存放单元 TEMS EQU 51H ;温度设定值存放单元 ORG 0000H ; LJMP MAIN ;**********************************************主系统主程序 MAIN: MOV 51H,#25 MAIN1:NOP LCALL KEYB LCALL BCD LCALL DISP LCALL DISP LCALL DISP LCALL DISP LCALL DISP LCALL DISP LCALL DISP LJMP MAIN1
;---------------------------------------------- ;键盘扫描程序,P2.2,P2.3为行控制口, ;P2.4,2.5,2.6,2.7为列控制口 ;---------------------------------------------- KEYB: MOV P2,#0F4H JB P2.4,PROM0 MOV A,#10 ADD A,51H MOV 51H,A PROM0:JB P2.5,PROM1 INC 51H PROM1:JB P2.6,PROM2 LCALL SEND1 PROM2:JB P2.7,PROM3 LCALL SEND2 PROM3:MOV P2,#0F8H JB P2.4,PROM4 MOV A,51H CLR C SUBB A,#10 MOV 51H,A PROM4:JB P2.5,PROM5 DEC 51H PROM5:JB P2.6,PROM6 LCALL SEND3 PROM6:JB P2.7,PROM7 CLR P3.0 ;清除报警音乐 CLR P3.6 ;清下限报警绿灯 CLR P3.7 ;清上限报警红灯 PROM7:RET ; ;、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 ;------------------------------ D100MS: MOV R7,#0FFH LOOP0:MOV R6,#0FFH LOOP1:MOV R5,#0FH LOOP2:NOP NOP DJNZ R7,LOOP2 DJNZ R6,LOOP1 DJNZ R5,LOOP0 RET ;-------------------------------
;**********************************************显示子程序 DISP: MOV A,40H MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A MOV P2,#0DFH ACALL DL1MS MOV A,41H MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A MOV P2,#0BFH ACALL DL1MS MOV A,42H MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A MOV P2,#7FH ACALL DL1MS MOV A,43H MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A MOV P2,#0EFH ACALL DL1MS RET
;----------------------------- ;显示10ms子程序 ;----------------------------- DL1MS:MOV R7,#0FFH DL0: MOV R6,#0FH DL1: DJNZ R6,DL1 DJNZ R7,DL0 RET
;------------------------------------------------------------- BCD: MOV A,51H MOV B,#100 DIV AB MOV 40H,A ;(50H)/100送40H,百位 MOV A,B MOV B,#10 DIV AB MOV 41H,A ;(50H)%100/10送41H,十位 MOV 42H,B ;(50H)%10送4242H,个位 MOV 43H,#00H ;末位置0(未用) RET ;--------------------------------------------------------------
;------------------------------------------------- TAB: DB 28H ;0 DB 0EEH ;1 DB 32H ;2 DB 0A2H ;3 DB 0E4H ;4 DB 0A1H ;5 DB 21H ;6 DB 0EAH ;7 DB 20H ;8 DB 0A0H ;9 ;------------------------------------------------- END (2)副系统程序(部分) //======================================================================== //副系统接收发送程序 //======================================================================== #include<reg51.H> #defineuchar unsigned char #defineuint unsigned int sbitadd1 = P3^6; sbitadd2 = P3^7; //接收数据 P0.0-P0.3 sbitR_ENABLE = P0^6; //解码有效 sbitDTAT_R_PTR = P0^4; //接收数据高低位指示 //发送数据 P2.1-P2.4 sbitT_ENABLE = P2^0; //编码启动 sbitDTAT_T_PTR = P2^5; //发送数据高低位 bitHIGH,LOW; ucharth,tl; ucharExpect_T,Actual_T; //------------------------------------------------------------------------- //长(16位)延时子程序 //------------------------------------------------------------------------- voiddelay(uint i){ uint j; for(j=0;j<i;j++); } //----------------------------------------------------------- //函数:发送子程序 //功能:发送当前温度 //----------------------------------------------------------- voidtransmit() { uchar i;
th = Actual_T&0xf0;th = th>>3;th =th|0x20; tl = Actual_T&0x0f;tl = tl<<1; for(i=0;i<=3;i++) { P2 = th; delay(1500); T_ENABLE = 1; delay(1500); } for(i=0;i<=3;i++) { P2 = tl; delay(1500); T_ENABLE = 1; delay(1500); } } //******************************************** //主程序 //******************************************** voidmain() { Actual_T = 123; while(1) { transmit(); } }
|