基于单片机与PC机的温度控制系统的软件设计_第1页
基于单片机与PC机的温度控制系统的软件设计_第2页
基于单片机与PC机的温度控制系统的软件设计_第3页
基于单片机与PC机的温度控制系统的软件设计_第4页
基于单片机与PC机的温度控制系统的软件设计_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、本科毕业论文(设计)题 目:基于单片机与pc机的温度控制系统软件设计文档由我国目前唯一全能交通出行搜索引擎达达搜 分享达达搜简介达达搜作为新一代的混合交通搜索引擎,首创结合海、陆、空为一体的出行搜索方式,实现对票价、里程、历时进行比较和排序。旨在为用户提供最方便、最便宜、最快捷的出行方式,同时提供旅游、酒店等相关查询、预定的服务,达到出行各方面的需求可以在一个平台上完成,减少用户操作,提高效率。出行海陆空,就上达达搜!如果你要找航班、火车或汽车等交通信息,现在可以不用上百度了,上“达达搜”试试看。昨天,由长沙达达网络公司推出的交通信息搜索引擎达达搜正式上线。无论是机票、火车票和汽车票信息,都可

2、以在达达搜上立即搜索出来。“达达搜”总经理刘友常称,这个由长沙人创立的搜索引擎是目前国内唯一的海陆空混合路径搜索、实时查询、各种票务比价订购的交通垂直搜索引擎。达达搜是一个国内唯一领先的海陆空混合路径搜索、实时查询、各种票务比价订购的交通垂直搜索引擎。通过混合(国内外航班、火车、长途巴士等)搜索,可得到该行程的所有出行方式,满足不同旅客的需求。尤其通过票务的比价和电子客票化,给旅客带来了更多优惠和方便。 目前,达达搜可以搜索地球上16000多个城市间的任意两点之间的所有海陆空到达方式,实现了国内外机票电子客票订购、火车票余票查询和订购、3000多个长途汽车巴士站的全部路径查询和32个巴士站电子

3、客票的订购。基于单片机与pc机的温度控制系统软件设计摘 要在工业生产中,人们需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。采用单片机对温度进行控制具有控制方便、简单和灵活性大、精度高价格便宜等优点。本文介绍了一种基于at89s52单片机与pc机串口通信的温度控制系统,用单片机作下位机完成温度数据的采集和执行pc机发出的控制执行命令;用pc机作上位机接收单片机发送的数据,进行数据处理,向单片机发送控制命令。 pc机与单片机采用串行通信,可实现远距离温度监控制。本设计充分利用pc机vb6.0软件强大的数据处理功能和友好的人机界面,对温度进行实时曲线显示。本设计由硬件和软件二部分组

4、成,本文主要进行软件部分设计。经样机实验证明本设计性能稳定可靠,各项性能指标高,可用于实际工程。关键词:ds18b20;单片机;温度控制;pid算法目 录1. 绪论11.1 前言11.2 系统分析12. 系统硬件简介33. pid控制原理与程序流程43.1 模拟pid调节器43.2 数字pid控制器53.3 pid算法的程序流程63.4 微分项的改进73.5 采样周期的选择93.6 数字pid控制的参数选择104. 系统软件设计124.1 软件开发工具简介124.2 c51单片机软件开发语言124.3 单片机主程序的软件设计144.4 单片机中断服务子程序的实现154.5 测温芯片ds18b2

5、0驱动子程序184.6 pwm控制204.7 pc机程序设计215. 调试305.1 开环控制实验结果分析305.2 pid参数的整定30第六章 结论33附录:34附录一、系统硬件总电路图34附录二、系统pc机运作vb界面35附录三、单片机程序36附录四、pc机程序44参考文献:4949基于单片机与pc机的温度控制系统软件设计1. 绪论1.1 前言随着新技术的不断开发与应用,近年来单片机发展给现代工业测控领域带来了一次新的技术革命,单片机的应用已经渗透到电力、冶金、化工、建材、机械、食品、石油等各个行业,发展迅速。而传统的温度采集方法不仅费时费力,而且精度差,单片机的出现使得温度的采集和数据处

6、理问题能够得到很好的解决。温度是工业对象中的一个重要的被控参数。然而所采用的测温元件和测量方法不相同,产品的工艺不同,控制温度的精度也不相同。因此对数据采集的精度和采用的控制方法也不相同。本系统所使用的加热器件是电炉丝,功率为三百瓦,要求温度在30100。静态控制精度为0.5。本设计使用单片机作为核心进行控制。它实用性强,集成度高,功能齐全,技术先进,使人们相信这是科技进步的成果。特别是具有体积小,价廉,功能强1,可靠性高,抗干扰能力强和使用方便等独特优点,在数字、智能化方面有广泛的用途。本文着重介绍了基于单片机与pc机的温度控制系统的软件设计的过程,阐述了以at89s52单片机为主体,热敏传

7、感器ds18b20,电炉及其控制电路为核心的系统充分发挥了单片机的性能。其优点是硬件功能强大,软件功能完善,控制系统可靠,性价比较高,具有一定的使用和参考价值。1.2 系统分析一、系统功能要求基于单片机与pc机的温度控制设计系统应能达到以下功能要求:1. 可以人为方便地设定所需控制的温度值,温控仪器能自动将电炉加热至此设定值并能保持,直至重新设定为另一温度值,即能自动控制温度;2. 采用适当的控制方法,当设定温度突变(由40提高到60)时,减小系统的调节时间和超调量。3. 实现无触点式控制,消除机械噪声;4. 改进控制方法,控制精度达到0.5 c或更高;5. 具有自动加热保护功能的安全性要求。

8、如果实际测得的温度值超过了系统要求的温度范围,单片机就会发出断电指令,并进行报警;6. 装置可将温度数据通过串口送到上位机,上位机软件将接收到的数据存贮并显示温度变化曲线。系统总体方案框图如图1-1所示pc机键盘显示器rs232单片机驱动ssr电阻炉ds18b20图1-1 系统总体方案框图二、系统特点基于上述功能要求及智能仪表应具有的体积小、成本低、功能强、抗千扰并尽可能达到更高精度的要求。本系统在硬件设计方面具有如下特点:主机采用mcs-51系列的at80s52单片机价格便宜,有开发环境 。根据电阻炉测温范围的要求,该系统适合采用ds18b20作为温度传感器,ds18b20支持“一线总线”接

9、口,测量温度范围为-55c+125c,在-10+85c范围内,精度为0.5c。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。由于系统的执行机构是电阻炉,其功率调节可以采用相控调压法和通断调功法两种方式,但考虑到相控调压法对电网性能的破坏较大,因此按脉冲宽度调制法控制输出信号占空比的大小,从而实现系统对输出量的控制。整个系统遵循了冗余原则及以软代硬的原则,并尽可能选用典型、常用、易于替换的芯片和电路,为系统的开放性、标准化和模块化打下良好基础。系统扩展和配置在满足功能要求的基础上留有适当裕量,

10、以利于扩充和修改。2. 系统硬件简介本系统硬件由单片机at89s52最小系统电路、温度检测电路、温度控制电路等部分组成。在系统中,利用ds18b20温度传感器测得水温的实际温度并转换成与水温相对应的数字信号进入单片机,单片机进行数据处理后,将温度与设定温度比较,由设定的控制算法计算出控制量,根据控制量通过控制固态继电器的导通和关闭从而控制电阻丝的导通时间,以实现对温度的控制。该系统中还利用pc机通过rs232串口通信进行实时监控。一、单片机最小系统电路: 本系统采用晶振,复位电路组成的单片机最小系统电路使单片机正常运作以结合其他模块组成本设计所要求的系统。二、串口及其通信:单片机串行口输入输出

11、的电信号为ttl/cmos2电平,而pc机的串行口输入输出的电信号却为rs2323电平,rs232使用3v到15v的电压表示高电平,使用+3v +15v 的电压表示低电平。因此,单片机串行口并不能直接和pc机串行口相连,它们之间必须进行电平转换后才能相连。本设计选用max232电平转换芯片来进行电平的转换。51单片机有一个全双工的串行通讯口,所以单片机和计算机之间可以方便地进行串口通讯。我们采用了三线制连接串口,也就是说和计算机的9针串口只连接其中的3根线:第5脚的gnd、第2脚的rxd、第3脚的txd。三、温度检测电路:本设计温度检测采用温度传感器ds18b20,信息经过单线接口送入ds18

12、20或从ds18b20送出,因此从单片机到ds18b20仅需连接一条线。读定和完成温度变换所需的电源可以由数据经本身提供而不需要外部电源。 四、温度控制电路:本设计由固态继电器控制加热电源的通断,以实现对温度的控制,固态继电器(solid state relays),简写成“ssr”,是一种全部由固态电子元件(如光电耦合器、晶体管、可控硅、电阻、电容等)组成的新型无触点开关器件。与普通继电器一样,它的输入侧与输出侧之间是电绝缘的。但是与普通电磁继电器比,ssr体积小,开关速度快,无机械触点,因而没有机械磨损,不怕有害气体腐蚀,没有机械噪声,耐振动、耐冲击,使用寿命长。它在通、断时没有火花和电弧

13、,有利于防爆,干扰小(特别对微弱信号回路)。另外,ssr的驱动电压低,电流小,易于与计算机接口。因此ssr作为自动控制的执行部件得到越来越广泛的应用。3. pid控制原理与程序流程对于一个控制系统,合理选择控制策略是至关重要的。pid调节器具有算法简单、鲁棒性好、可靠性高、易于实现等优点,并且不需要建立其精确的数学模型,因此在过程控制中仍然是应用最广泛的一类控制器。在本系统设计中,作为被控对象的电阻炉由于模型较为复杂,无法建立精确的数学模型,故采用pid算法比较方便,但pid算法也存在现场参数调整麻烦、被控对象模型参数难以确定及外界干扰会使控制漂离最佳工况等问题。针对这些问题,在本系统设计中,

14、采用了基于模糊推理4的自整定pid控制算法。3.1 模拟pid调节器一、模拟pid控制系统5组成图3-1模拟pid控制系统原理框图二、模拟pid调节器的微分方程和传输函数pid调节器是一种线性调节器,它将给定值r(t)与实际输出值c(t)的偏差的比例(p)、积分(i)、微分(d)通过线性组合构成控制量,对控制对象进行控制。1.pid调节器的微分方程 (1)式中 2.pid调节器的传输函数 (2)三、pid调节器各校正环节的作用1.比例环节:即时成比例地反应控制系统的偏差信号e(t),偏差一旦产生,调节器立即产生控制作用以减小偏差。2.积分环节:主要用于消除静差,提高系统的无差度。积分作用的强弱

15、取决于积分时间常数ti,ti越大,积分作用越弱,反之则越强。3.微分环节:能反应偏差信号的变化趋势(变化速率),并能在偏差信号的值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减小调节时间。3.2 数字pid控制器一、模拟pid控制规律的离散化表3-1模拟形式离散化形式二、数字pid控制器的差分方程 (4)式中 称为比例项 称为积分项 称为微分项三、常用的控制方式1.p控制 (5)2.pi控制 (6)3.pd控制 (7)4.pid控制 (8)在实际运算时,由于水具有很大的热惯性,而且pid运算中的i(积分项)具有非常明显的延迟效应所以不能保留,我们必须把积分项去掉,

16、相反d(微分项)则有很强的预见性,能够加快反应速度,抑制超调量,所以积分作用应该适当加强才能达到较佳的效果,系统最终选择pd控制方案。四、pid算法的两种类型1.位置型控制例如图3-2调节阀控制 (9)2.增量型控制例如图3-3步进电机控制 (10)图3-2数字pid增量型控制示意图图3-3数字pid增量型控制示意图 本设计应用了上面所介绍的位置型pid控制算法,将温度传感器采样输入作为当前输入,然后与设定值进行相减得偏差e(n),然后再对之进行pid运算产生输出结果open,进而控制加热器。3.3 pid算法的程序流程一、增量型pid算法的程序流程1.增量型pid算法的算式 (11)式中,2

17、.增量型pid算法的程序流程图3-4图3-4二、位置型pid算法的程序流程1.位置型的递推形式 (12)2.位置型pid算法的程序流程图3-4只需在增量型pid算法的程序流程基础上增加一次加运算u(n)+u(n-1)=u(n)和更新u(n-1)即可。三、对控制量的限制1.控制算法总是受到一定运算字长的限制2.执行机构的实际位置不允许超过上(或下)极限 (13)3.4 微分项的改进一、不完全微分型pid控制算法1.不完全微分型pid算法传递函数 (14) 图3-5 不完全微分型pid算法传递函数框图2.完全微分和不完全微分作用的区别 图3-6 完全微分和不完全微分作用的区别3.不完全微分型pid

18、算法的差分方程 (15) (16)二、微分先行和输入滤波1.微分先行微分先行是把对偏差的微分改为对被控量的微分,这样,在给定值变化时,不会产生输出的大幅度变化。而且由于被控量一般不会突变,即使给定值已发生改变,被控量也是缓慢变化的,从而不致引起微分项的突变。微分项的输出增量为 (17)2.输入滤波输入滤波就是在计算微分项时,不是直接应用当前时刻的误差e(n),而是采用滤波值e(n),即用过去和当前四个采样时刻的误差的平均值,再通过加权求和形式近似构成微分项 (18) (19)3.5 采样周期的选择一、选择采样周期的重要性采样周期越小,数字模拟越精确,控制效果越接近连续控制。对大多数算法,缩短采

19、样周期可使控制回路性能改善,但采样周期缩短时,频繁的采样必然会占用较多的计算工作时间,同时也会增加计算机的计算负担,而对有些变化缓慢的受控对象无需很高的采样频率即可满意地进行跟踪,过多的采样反而没有多少实际意义。二、选择采样周期的原则采样定理最大采样周期 (20)式中为信号频率组分中最高频率分量。三、选择采样周期应综合考虑的因素1.给定值的变化频率加到被控对象上的给定值变化频率越高,采样频率应越高,以使给定值的改变通过采样迅速得到反映,而不致在随动控制中产生大的时延。2.被控对象的特性(1)考虑对象变化的缓急,若对象是慢速的热工或化工对象时,t一般取得较大。在对象变化较快的场合,t应取得较小。

20、(2)考虑干扰的情况,从系统抗干扰的性能要求来看,要求采样周期短,使扰动能迅速得到校正。3.使用的算式和执行机构的类型(1)采样周期太小,会使积分作用、微分作用不明显。同时,因受微机计算精度的影响,当采样周期小到一定程度时,前后两次采样的差别反映不出来,使调节作用因此而减弱。(2)执行机构的动作惯性大,采样周期的选择要与之适应,否则执行机构来不及反应数字控制器输出值的变化。4.控制的回路数要求控制的回路较多时,相应的采样周期越长,以使每个回路的调节算法都有足够的时间来完成。控制的回路数n与采样周期t有如下关系: (21)式中,tj是第j个回路控制程序的执行时间。3.6 数字pid控制的参数选择

21、一、数字pid参数的原则要求和整定方法1.原则要求:被控过程是稳定的,能迅速和准确地跟踪给定值的变化,超调量小,在不同干扰下系统输出应能保持在给定值,操作变量不宜过大,在系统与环境参数发生变化时控制应保持稳定。显然,要同时满足上述各项要求是困难的,必须根据具体过程的要求,满足主要方面,并兼顾其它方面。2.pid参数整定方法:理论计算法依赖被控对象准确的数学模型(一般较难做到)工程整定法不依赖被控对象准确的数学模型,直接在控制系统中进行现场整定(简单易行)二、常用的简易工程整定法1.扩充临界比例度法6适用于有自平衡特性的被控对象整定数字调节器参数的步骤是:(1)选择采样周期为被控对象纯滞后时间的

22、十分之一以下。(2)去掉积分作用和微分作用,逐渐增大比例度系数直至系统对阶跃输入的响应达到临界振荡状态(稳定边缘),记下此时的临界比例系数及系统的临界振荡周期。(3)选择控制度。 (22)通常,当控制度为1.05时。就可以认为ddc与模拟控制效果相当。(4)根据选定的控制度,得t、kp、ti、td的值。2.扩充响应曲线法适用于多容量自平衡系统参数整定步骤如下:(1)让系统处于手动操作状态,将被调量调节到给定值附近,并使之稳定下来,然后突然改变给定值,给对象一个阶跃输入信号。(2)用记录仪表记录被调量在阶跃输入下的整个变化过程曲线,如图3-7所示。图3-7 被调量在阶跃输入下的整个变化过程曲线(

23、3)在曲线最大斜率处作切线,求得滞后时间,被控对象时间常数t以及它们的比值t/。(4)由求得的、t及t/,即可求得数字调节器的有关参数kp、ti、td及采样周期t。3.归一参数整定法令,。则增量型pid控制的公式简化为 (23)改变kp,观察控制效果,直到满意为止。基于以上的分析在本设计中,采用扩充响应曲线法对参数进行整定。4. 系统软件设计4.1 软件开发工具简介一、单片机开发工具本系统开发工具采用keil51标准c编译器keil c51,在保留汇编代码高效、快速性的同时为8051微控制器的软件开发提供c语言环境。c51集成到uvision2开发环境,这个环境包括:编译器,汇编器,实时操作系

24、统,调试器。slisp支持串行、并行两种通信下载线,支持的at89s51/52和avr系列器件。烧录文件格式为intel格式的hex文件、eep文件,二进制bin文件。通过串口和下载线相连接,支持usb转换成的串口通信。在使用并行下载线编程时,编程速度是可以调节的,可以根据自己系统的时钟频率选择模式。二、pc机开发工具vb vb是微软公司出品的一个快速可视化程序开发工具软件,借助微软在操作系统和办公软件的垄断地位,vb在短短的几年内风靡全球。vb是极有和功能强大的软件,主要表现在:所见即所得的界面设计,基于对象的设计方法,极短的软件开发周期,较易维护的生成代码6。美国微软公司在1991年推出v

25、b1.0至今,版本已经演变到visual basic 2005(也被称为vb8)7,本系统采用各方面均较为成熟的vb6.0运行在win2000,winxp,windowsnt等操作系统下,是一个32位的应用程序开发工具。它主要有以下几个特点:1.成功地简化了界面的设计过程。它在windows平台上提供了图形用户界面(gui)的集成开发环境(ide)。2.采用简单易学的basic语言。它既适用于没有任何编程经验的开发者学习,也适合于开发各种复杂的底层应用程序。3.具有强大的数据和字符串处理功能。visual basic 提供了许多现成的字符串处理函数。4.易于扩充。除了简单易学的特点以外,vis

26、ual basic 还是一种易于扩充功能的开发系统。5.提供了intellisense技术。当你在visual basic 的代码窗口敲进对象名称的时候intellisense技术会自动向你显示一些相关的信息,例如对象的属性和方法等。6.提供了多种向导。利用这些向导,你可以快速地完成一般性的任务,例如生成其控件不绑定到数据控件上的纯代码窗体,建立查询,添加工具,制作图表,以及发布创建的应用程序等。 4.2 c51单片机软件开发语言c语言是一种通用的计算机程序设计语言。由于汇编程序的可读性和可移植性都较差,而c语言既是一种高级语言,又兼有一些汇编语言才具有的特点,其表达能力和运算能力和运算能力都

27、很强,并且具有很好的可移植性的硬件控制能力,编写代码效率高,软件调试直观,维护升级方便。同时,c语言具有完善的模块程序结构和功能丰富的库函数,在软件开发中可以采用模块化程序设计方法,并可以方便地调用库函数一些常用的功能。再说现在的单片机程序存储器容量越来越大,因此不用像过去那样对程序规模大小斤斤计较,这也有利于c语言程序在单片机上的推广应用。此外,使用c语言进行mcs-51系列单片机系统开发,编程者可以专注于应用软件部分的设计,不必将大量的精力花在内存分配等底层工作上,从而大大地加快了软件的开发速度,c语言程序的可读性比汇编语言好得多,对于程序的改进和扩充也方便得多,因此越来越多的设计人员选用

28、c语言来开发单片机控制程序8。鉴于c语言在功能上、结构性、可读性和可维护性上比汇编有明显的优势,编程有众多优点,在本设计中,采用的是c语言编写程序。一、c语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。 1.数据类型关键字(12个):l char :声明字符型变量或函数 l double :声明双精度变量或函数 l enum :声明枚举类型 l float:声明浮点型变量或函数 l int: 声明整型变量或函数 l long :声明长整型变量或函数 l short :声明短整型变量或函数 l signed:声明有符号类型变量或函

29、数 l struct:声明结构体变量或函数 l union:声明共用体(联合)数据类型 l unsigned:声明无符号类型变量或函数 l void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)2.控制语句关键字(12个):(1)循环语句 l for:一种循环语句(可意会不可言传)l do :循环语句的循环体l while :循环语句的循环条件l break:跳出当前循环l continue:结束当前循环,开始下一轮循环(2)条件语句 l if: 条件语句 l else :条件语句否定分支(与 if 连用)l goto:无条件跳转语句 (3)开关语句 l switch :用

30、于开关语句l case:开关语句分支l default:开关语句中的“其他”分支(4)返回语句l return :子程序返回语句(可以带参数,也看不带参数)3.存储类型关键字(4个) l auto :声明自动变量 一般不使用 l extern:声明变量是在其他文件正声明(也可以看做是引用变量) l register:声明积存器变量 l static :声明静态变量4.其它关键字(4个):l const :声明只读变量 l sizeof:计算数据类型长度 l typedef:用以给数据类型取别名(当然还有其他作用l volatile:说明变量在程序执行中可被隐含地改变二、c语言中的9中控制语句l

31、 goto语句:无条件转向; l if语句:判断语句; l while循环语句; l do-while语句:先执行循环体,然后判断循环条件是否成立. 之后继续循环; l for语句:循环,可替代while语句; 只是用法不同; l break语句跳出本层的循环;(只跳出包含此语句的循环) l continue语句:继续(一般放到循环语句里,不在执行它下面的语句,直接跳到判断语句例:for语句,就直接跳到第二个分号处,while语句,就直接跳到while()的括号里; l switch语句:多相选择; l return语句:返回;4.3 单片机主程序的软件设计由于系统程序比较复杂,为了便于编写、

32、调试、修改,统程序的编写采用了模块化的结构,整个系统包括主模块、初始化模块、温度检测模块、中断服务模块、控制算法模块、输出控制模块等几个部分,其软件总体结构如图4-1所示。主模块初始化温度检测模块控制算法模块中断服务模块控制输出模块串口通信模块图4-1单片机软件总体结构初始化读温度处理温度数据显示温度传送温度至pc机 初始化端口开机显示8888开机先转换一次温度初始化定时器开启定时器图4-2单片机程序结构框图 图4-3单片机程序初始化结构4.4 单片机中断服务子程序的实现中断是指当计算机执行正常程序时,由于系统中出现某些需要紧急处理的情况或特殊请求时,计算机打断当前正在运行的程序,转而对这些紧

33、急情况进行处理,处理完毕后,再返回继续执行原来被打断的程序。中断控制方式使单片机在平时可以有充分的时间去处理主要事件,而当外界有特殊情况需要处理时单片机也不会错过。充分地利用单片机的中断功能,可以提高单片机的工作效率,尤其是在编制实时性要求较高的控制程序时。8051系列单片机的中断共分2个优先级,5个中断源。每个中断源的优先级都是可以编程的。8051单片机的5个中断源分别是:l 外部中断请求0,由int0输入。l 外部中断请求1,由int1输入。l 片内定时器/计数器0溢出中断请求。l 片内定时器/计数器1溢出中断请求。l 片内串行口发送/接收中断请求。除了以上5个中断外,对于8052系列单片

34、机来说,还增加了一个片内定时器/计数器2溢出中断请求。一、定时中断服务程序通过单片机内部的定时器t0进行10ms定时,再通过寄存器进行计数,以实现2s定时中断的要求。进入中断服务程序后,可进行当前温度的检测及显示,根据所测值与设定值比较进行温度控制等。图4-4为定时器t0中断服务程序流程图。图4-4定时器t0中断服务程序流程图二、串行口发送/接收中断服务程序串口通信原理:串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计算机端,而且也能实现计算机对单片机的控制。由于其所需电缆线少,接线简单,所以在较远距离传输中,得到了广泛的运用。以下对串口通信中一些需要注意的地方作一点说明:1.

35、波特率选择波特率(boud rate)就是在串口通信中每秒能够发送的位数(bits/second)。mcs-51串行端口在四种工作模式下有不同的波特率计算方法。其中,模式0和模式2波特率计算很简单,请同学们参看教科书;模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择。在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式)。在此模式下波特率计算公式为:波特率=(1+smod)*晶振频率/(384*(256-th1)其中,smod寄存器pcon的第7位,称为波特率倍增位; th1定时器的重载值。在选择波特率的时候需要考

36、虑两点:首先,系统需要的通信速率。这要根据系统的运作特点,确定通信的频率范围。然后考虑通信时钟误差。使用同一晶振频率在选择不同的通信速率时通信时钟误差会有很大差别。为了通信的稳定,我们应该尽量选择时钟误差最小的频率进行通信。下面举例说明波特率选择过程:假设系统要求的通信频率在20000bit/s以下,晶振频率为12mhz,设置smod=1(即波特率倍增)。则th1=256-62500/波特率根据波特率取值表,我们知道可以选取的波特率有:1200,2400,4800,9600,19200。列计数器重载值,通信误差如下表:表4-1 通信误差因此,在通信中,最好选用波特率为1200,2400,480

37、0中的一个。2.通信协议的使用通信协议是通信设备在通信前的约定。单片机、计算机有了协议这种约定,通信双方才能明白对方的意图,以进行下一步动作。假定我们需要在pc机与单片机之间进行通信,在双方程式设计过程中,有如下约定:0xa1:单片机读取p0端口数据,并将读取数据返回pc机;0xa2:单片机从pc机接收一段控制数据;0xa3:单片机操作成功信息。在系统工作过程中,单片机接收到pc机数据信息后,便查找协议,完成相应的操作。当单片机接收到0xa1时,读取p0端口数据,并将读取数据返回pc机;当单片机接收到0xa2时,单片机等待从pc机接收一段控制数据;当pc机接收到0xa3时,就表明单片机操作已经

38、成功。通过单片机内部的定时器1工作于8位自动重载模式, 用于产生波特率。进入中断服务程序后,对数据进行读取,并对其进行判断处理。图4-5为串口中断服务程序流程图。yn进入串口中断将数据存入寄存器根据命令执行相应操作读数据是否命令图4-5为串口中断服务程序流程图4.5 测温芯片ds18b20驱动子程序目前市场上温度传感器较多,有以下几种: 方案一:选用铂电阻温度传感器,此类温度传感器线性度、稳定性等方面性能都很好, 其成本较高。 方案二:采用热敏电阻,选用此类元器件有价格便宜的优点,但由于热敏电阻的非线性特性会影响系统的精度。 方案三:ds18b20是dallas公司生产的一线式数字温度传感器,

39、具有3引脚to92小体积封装形式;温度测量范围为55125,可编程为9位12位a/d转换精度,测温分辨率可达0.0625。此器件具有体积小、质量轻、线形度好、性能稳定等优点其各方面特性都满足此系统的设计要求。 比较以上三种方案,方案三具有明显的优点,因此选用方案三。 一、ds18b20的编程方法及工作时序ds18b20工作时必须严格遵守这些协义:总路线主机先对ds18b20进行初始化,总线主机检测到dsl820 的存在后便可以发出rom 操作命令之一,然后再发出存储器操作命令,如温度变换、读暂存器。要用单片机控制ds18b20对温度的采集只要根据ds18b20的初始化时序、写时序和读时序,分别

40、编写5个子程序:init为初始化子程序,write为写(命令或数据)子程序,read为读数据子程序,发送64位序列号子程序和串行发送温度数据到pc机的子程序。然后在主程序中调用各个子程序就可实现温度的采集和发送。下面是ds18b20的工作时序:1.初始化时序复位要求主cpu将数据线下拉500微秒,然后释放,ds18b20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主cpu收到此信号表示复位成功。2.读时序ds18b20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让ds18b20把数据传输到单总线上。ds18b20在完成一个读时序过程,至少需要60us才

41、能完成。3.写时序ds18b20对写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证ds18b20能够在15us到45us之间能够正确地采样io总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。二、程序的实现先让所有的ds18b20复位,然后发跳过rom匹配命令,再发出温度转换命令,让所有的ds18b20进行温度转换,延时等待转换完毕后,再将已转换的温度值一一地从各个ds18b20取出,转换成ascall码后再发送到pc机上,如此循环。程序框图如下图4-6示。图4-6 读温度程序框图三、温度处理方法18b20进行温度转化后得到的12

42、位数据,存储在18b20的两个8比特的ram中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.25即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.25即可得到实际温度。具体程序如下:/*读出温度函数*/read_temp()ow_reset(); /总线复位write_byte(0xcc); / 发skip rom命令write_byte(0xbe); / 发读命令temp_data0=read_byte(); /温度低8位temp_data1=read_byte(); /温度高8位ow_reset();write_byte

43、(0xcc); / skip romwrite_byte(0x44); / 发转换命令上面这个程序使温度低8位放在temp_data0中,温度高8位放在temp_data1中。4.6 pwm控制9为了设计高精度温控仪对电热管的加热功率进行连续控制,可采用pwm技术,由pid控制算法得到的增量式算式 作输出,直接改变电热管通断占空比,从而可实现对温度的高精度闭环连续控制。在图4-7左图中,单片机输出位控信号,经1413驱动固态继电器,由双向可控硅作无触点交流开关以控制电热管加热。只要使 输出与电热管通电时间成正比,即可实现加热功率的连续调节,控制原理如图4-7右图所示。为此,可在eprom中开辟

44、 单元用来存放pwm周期(可预置),用来存放加热时间 ,而 则用来存放关断时间 。在一个采样周期内,将 的差值存于v单元,将 的值存于 单元,然后利用单片机内部中断源构成10ms定时器,每产生一个10ms定时中断则 单元的数减1,直到 单元的数为零则使 由高电平变为低电平;若 为负值则 单元赋值为00h, 单元赋值为 ,这样就可以做到温度偏差量与电热管加热时间成正比。1413图4-7 电热管pwm控制原理我国电力供电电压频率50hz,固态继电器大多采用过零型,则最小可准确到一个波头,1s有100个波头,取2s为一个功率输出周期,pwm控制方式的功率误差就是1/200,即0.5%。实际情况还有些

45、变动,pwm调制输出可能没问题,但脉宽中电平由低变为高电平时,电压波形不会正好在过零点,可能在两过零点之一间(图4-7右图),实际控制输出的功率也就存在一定的误差,有最大0.5%的误差10。但对本系统没什么影响。pwm在程序上的实现也很简单,用一个循环来输出周期脉冲,如下程序:for(j=0;jtime;j+)/time为脉冲周期(以10ms为单位)if(jout) /out为控制脉宽的输出变量outp=jopen; /接通继电器elseoutp=jclose; /判断继电器delay10ms(1);4.7 pc机程序设计pc机程序中包括串口通信模块,绘图模块,命令按妞模块,温度显示模块等。一

46、、串口通信模块在本设计中,采用mscomm控件进行串口的通讯,mscomm控件串口具有完善的串口数据的发送和接收功能。通过此控件,pc机可以利用串行口与其它设备实现轻松连接,简单高效地实现设备之间的通讯。此控件的事件响应有两种处理方式,事件驱动方式:由mscomm控件的oncomm事件捕获并处理通讯错误及事件;查询方式:通过检查commevent属性的值来判断事件和错误。 以下是mscomm控件的常用属性和方法:l commport:设置或返回串行端口号,其取值范围为199,缺省为1。l settings:设置或返回串行端口的波特率、奇偶校验位、数据位数、停止位。如:mscomm.settin

47、g=9600, n, 8, 1”。l portopen:打开或关闭串行端口。l inputmode:设置或返回接收数据的类型。l inputlen:设置或返回一次从接收缓冲区中读取字节数。l inbuffersize:设置或返回接收缓冲区的大小,缺省值为1024字节。l inbuffercount:设置或返回接收缓冲区中等待计算机接收的字符数。l input:从接收缓冲区中读取数据并清空该缓冲区,该属性设计时无效,运行时只读。l outbuffersize:设置或返回发送缓冲区的大小,缺省值为512字节。l outbuffercount:设置或返回发送缓冲区中等待计算机发送的字符数。l out

48、put:向发送缓冲区发送数据,该属性设计时无效,运行时只读。l rthreshold:该属性为一阀值。当接收缓冲区中字符数达到该值时,mscomm控件设置commevent属性为comevreceive,并产生oncomm事件。用户可在oncomm事件处理程序中进行相应处理。若rthreshold属性设置为0,则不产生oncomm事件。例如用户希望接收缓冲区中达到一个字符就接收一个字符,可将rthreshold设置为1。这样接收缓冲区中接收到一个字符,就产生一次oncomm事件。l sthreshold:该属性亦为一阀值。当发送缓冲区中字符数小于该值时,mscomm控件设置commevent属

49、性为comevsend,并产生oncomm事件。若sthreshold属性设置为0,则不产生oncomm事件。要特别注意的是仅当发送缓冲区中字符数小于该值的瞬间才产生oncomm事件,其后就不再产生oncomm事件。例如sthreshold设置为3,仅当发送缓冲区中字符数从3降为2时,mscomm控件设置commevent属性为comevsend,同时产生oncomm事件,如发送缓冲区中字符始终为2,则不会再产生oncomm事件。这就避免了发送缓冲区中数据未发送完就反复发生oncomm事件。l commevent:这是一个非常重要的属性。该属性设计时无效,运行时只读。一旦串口发生通信事件或产生

50、错误,依据产生的事件和错误,mscomm控件为commevent属性赋不同的代码,同时产生oncomm事件。用户程序就可在oncomm事件处理程序中针对不同的代码,进行相应的处理。mscomm控件的部分属性设置实例:select case com.listindex case 0 mscomm1.commport = 1 case 1 mscomm1.commport = 2 case 2 mscomm1.commport = 3 case 3 mscomm1.commport = 4end select 指定端口号(com) mscomm1.settings = 9600,n,8,1 240

51、0波特,无校验,8位数据位,1位停止位 mscomm1.inputmode = cominputmodetext 接收文本数据 mscomm1.inputlen = 0 读出接收缓冲区的所有内容 mscomm1.inbuffersize = 1024 mscomm1.outbuffersize = 1024 mscomm1.rthreshold = 1 每接收到1个字符,发生1次事件 mscomm1.portopen = true 打开串口接收程序实例:private sub mscomm1_oncomm()select case mscomm1.commeventcase comevrece

52、ivetext1.text = text1.text & mscomm1.inputcase elseend selectend sub发送程序实例:private sub command1_click()mscomm1.output = trim(text2.text)end sub二、绘图模块在vb中,绘图可以利用line和circle方法绘制几何图形11,还可以利用mschart控件绘制各种图表。而本设计就采用mschart控件进形绘制温度变化曲线图。mschart控件在绘制直方图(条形图)、折线图、饼图、标记图、填充区域图等各种常用的数据分析图形方面有很大的优势,我们只要将需按图形表示

53、的数据装入数组中,然后将数组数据赋值给mschart控件,再进行一些简单的图形标题、背景、图例、注脚方面的定义,就可以得到所期望的数据分析图形。mschart控件的系统默认名是:mschart1、mschart2等。由于mschart控件不是vb内建的基本控件,因此在使用前必须用工程菜单中的“部件”,添加mschart控件。添加mschart控件的选项是“microsoft chart control 6.0(oledb)”。当我们在vb的工具箱中添加了mschart控件,并在窗体中“画”出mschart控件后,可见到如下图形:图7.31.设置mschart系列数据与图表类型:(1)mschart的系列通过对图7.3的分析,我们可以看到mschart图表中将数据分组显示。如图中r1、r2、r3、r4、r5各代表一个组,一组相关的数据在绘图中称为一个“系列”,一张图表可由一个或多个系列构成。若mschart控件被赋值一个一维数组数据,则它所显示的数

温馨提示

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

评论

0/150

提交评论