资源描述
摘 要作为农业大国,我国的设施农业生产起步较晚。与国外比较成熟的温室环境监控技术相比,国内的温室环境监控系统存在着自动化水平相对较低,系统设计不完善,现代管理水平较低的缺点。因此,为了实现温室农作物优质生长,我们有必要研究并开发一种温室大棚的监测系统。本文在传统系统设计的基础上,研发了基于虚拟仪器的温室大棚检测系统。通过传感器技术,检测温室大棚的室内温度;传感器输出信号经过信号调理,通过通信技术,输送到嵌入计算机中的数据采集卡中;最终将信号传输至计算机。本系统采用虚拟仪器设计思想,以LabVIEW2010为软件开发平台,采用可视化编程和数据库技术,向温室大棚工作人员提供一种优质的人机交互界面和简易的操作平台,实现了对温室参数的采集、处理、显示、存储、查询以及越限报警等功能。通过对系统的测试,结果显示该系统功能强大、操作简单易懂、可视化效果良好,能够实时准确地采集温室的各个参数,基本上满足了对温室检测的目的,达到了设计目标的要求。关键词:温室大棚;LabVIEW;检测;数据库;数据采集 Abstract As a large agricultural country, Chinas faculty agriculture started late.Greenhouse environmental control technology abroad is relatively mature,but in China,there are many shortcomings of the greenhouse environment monitoring system such as low level of automation ,system design complexity and low level of modern management.Therefor, In order to achieve the optimal conditions for crop growth, we need to study and develop a kind of monitoring system for greenhouse.In this paper, the design of the greenhouse control system was proposed based on virtual instrument technology on the basis of the traditional greenhouse control. Firstly, the greenhouse parameters, such as indoor temperature is measured by a variety of high-precision sensors; Secondly, the data, which are detected by the sensors, after processed through signal conditioning circuits, then are delivered into the DAQ (data acquisition) board. By the fact that DAQ board is inserted into the computer system, thus the data are transported into the computer finally.The system used virtual instrument design,with LabVIEW 2010 for software development platform . By means of visual programming language and database technology, this system provides a clear display and simple platform for greenhouse workers, and it can realize greenhouse parameters of acquisition, processing, display , save, query and alarm functions.The system test results show that: the monitoring system is powerful, easy to understand and control, and its visual effect is good.It collected data in real time ,which is good to meet the needs of greenhouse environment monitoring, to achieve the design goals.Key words: Greenhouse, LabVIEW, Monitoring, Database,Data acquisition目 录引言1 系统综述1.1 方案论证与选择1.2 系统整体框图2 硬件电路设计2.1 51单片机主控电路2.1.1 单片机主控电路设计2.1.2 C51程序语言2.2 TC1047温度采集电路2.3 RC低通滤波电路2.4 OP07放大电路2.5 A/D转换电路2.6 LCD1602显示电路2.7 串口通信电路2.8 电源稳压电路3 下位机软件设计3.1 主程序框架3.2 ADC0832驱动程序3.3 LCD1602显示驱动程序3.4 串口通信程序4 上位机软件设计4.1 上位机人机交互界面设计4.2 上位机程序框图设计4.2.1 主程序框图设计4.3.2 LABVIEW串口程序设计4.3.3 串口数据帧解码4.3.4 数据处理和显示4.3.5 数据的存储和读取4.3.6 采集速率和温度报警5 原理图电路仿真6 组装调试及软件验证6.1 制作流程6.2 硬件调试及软件验证6.2.1 电源电路测试6.2.2 LCD1602显示测试6.2.3 放大电路测试6.2.4 A/D转换测试6.2.5 下位机串口通信测试6.2.6 上位机串口通信测试6.2.7 下位机与上位机整体功能测试6.3 数据测量及误差分析6.3.1 温度传感器标定6.3.2 数据的测量6.3.3 误差计算及分析6.4 软硬件调试综述7 结论7.1 系统功能7.2 功能扩展7.3 前景展望谢 辞参考文献附录一 电路设计原理图附录二 电路设计PCB图附录三 上位机实时数据采集界面图附录四 上位机历史数据读取界面图附录五 主程序调试结果 附录六 串口程序调试结果 附录七 AD程序调试结果 附录八 1602程序调试结果引言随着科学技术的不断发展,对现代设备精确度的要求不断增长,信息采集(即传感器技术)、信息传输(通信技术)和信息处理(计算机技术)为信息技术的前沿尖端技术,其应用非常广泛,已经渗透到社会的每一个领域1-3。数据采集是指将温度、压力、流量、位移等物理量转换成数字量后,再由计算机进行存储、处理、显示或者打印的过程。在生产过程中应用数据采集,可对生产现场的工艺参数进行采集、监视和记录,为提高产品质量、降低成本提供信息和手段。数控机床在加工过程中,热误差是因温度上升引起的加工误差。据统计,在精密加工和超精密加工中,由于热变形引起的加工误差占总加工误差的50%70%4-5。目前,有两类方法可以用来减小机床的热误差。一是通过改进机床结构设计方法,直接减小热误差,但是会大大提高成本。二是通过建立热误差模型进行补偿的方法15-16。LABVIEW软件是NI公司开发用于测控领域的图形化开发环境,它在数据采集、仪器控制、测量分析和数据显示方面有着明显的优势而得到广泛的应用14。它是一种方便的人机界面软件,其编程的方式相比于VC等比较复杂的上位机编程软件来说更加的简单和有针对性。利用NI的LABVIEW软件和数据采集卡可以实现数据的采集、存储、分析处理。或者通过其它接口可以很容易地将采集到的数据发送到LABVIE编写的上位机。设计的主要目的和任务是,在生产车间中对数控机床的主要部件进行实时多点温度采集,采集硬件电路主要包括:温度传感器,放大滤波,A/D转换,下位机控制,串口通信等功能;采集通道数=4,采集温度精度:0.5度,温度范围:040度。上位机对采集的温度数据进行受热分析,并显示温度随时间的变化趋势,并对加工的热变形误差进行计算和补偿。1 系统综述1.1 方案论证与选择设计主要是实现数控机床机床4路温度的采集,正确选择温度传感器和设计放大电路对整个设计起到事半功倍的作用。下面简要分析设计硬件电路方案的选择和上位机编写软件的选择。(1)温度传感器选择 设计中温度传感器可以选择数字温度传感和模拟温度传感器。设计中要求采集的温度精度为0.5,数字温度传感器相对容易实现对温度的高精度测量,如数字温度传感器DS18B20,但进行多路温度采集时使用数字温度传感器成本高,在满足温度测量精度的条件下,选择模拟温度传感器。模拟温度传感器又分为电压输出型温度传感器和电流输出型温度传感器两种。其中电流输出型温度传感器,输出电流一般都很小,如AD590电流输出型温度传感器,需要将输出电流的变化转化电压的变化,才能进行电压放大和A/D转换等11。设计中选用电压输出型温度传感器TC1047温度传感,TC1047输出电压每变化10mV,表示温度变化1,正确设计放大电路和选择A/D转换芯片就可以满中温度测量精度为0.5的要求。(2)滤波电路设计设计中温度传感器选择的是电压输出型温度传感器,设计中要求将大于50Hz的信号给予滤除。设计中选择使用无源RC低通滤波电路即可以满足设计要求。(3)电压放大电路的设计设计中可以选择使用仪用放大器或运算放大器组建电路进行电压放大。选用仪用放大器可以大大减小电路设计的复杂度,如仪用放大器AD620和AD623只需要外接一个滑动变阻器就可以实现放大倍数的精确调节。而使用运算放大器电路设计复杂,精度也没有仪用放大器的高,但仪用放大器的价格相对运算放大器来说价格非常昂贵。设计中选择运算放大器OP07进行放大电路的设计,也可以满足设计的要求,并且设计成本大大降低。(4)A/D转换芯片选择设计中要合理选择A/D转换芯片的分辨率。设计放大电路的放大数5,只要A/D能分辨放大电路25mV输出电压的变化,就可以实现测量温度精度为0.5的要求。设计中选用8位分辨率的A/D转换芯片ADC0832,在参考电压为5V时可以分辨最小20mV的电压变化,满足设计要求。(5)上位机编程软件选择以上主要分析了硬件电路设计方案的选择,上位机的设计也是设计的难点。设计选择使用LABVIEW作为上位机的编写软件,LABVIEW是图形化编程语言,相对于其他文本编程语言来说,LABVIEW相对简单的多,可以很容易实现程序的编写和显示界面的美化设计10。1.2 系统整体框图 设计主要任务分为上位机的设计和下位机设计两个大模块。其中,下位机主要是硬件电路的设计和C语言程序的编写。用电压输出型温度传感器TC1047来实现四路温度的实时监测,用液晶LCD1602显示采集到的温度值。将温度传感器输出的电压,通过RC滤波电路,将50HZ以上的信号给予滤除,再经过运算放大器OP07组建的放大电路对滤波后的电压信号进行放大,使用两片ADC0832将四路放大的模拟信号转化为数字信号。主控芯片STC89C52将A/D转换的数字量经过基于MAX232芯片的串行通信方式,发送到用LABVIEW软件编写的上位机,同时将数字量经数据处理转化为温度值在液晶LCD1602上显示。上位机将接收到的数据进行处理和显示,显示温度随时间的变化曲线以及用颜色的浅深来表示温度的高低,上位机可以设定报警温度上限值和采集温度的速率。上位机分为两个面板,一个为实时数据显示面板,另一个为历史数据读取显示面板,可以实现实时数据采集,同时也可以读取和分析历史数据。设计的整体框图如图1-1所示。图1-1 数控机床测温系统整体框图2 硬件电路设计2.1 51单片机主控电路设计所选用的单片机型号为STC89C52,其与市场大部分51系列单片机完全兼容,并且在性能方面和速度上更具有优势。STC89C52是一种低功耗、高性能CMOS8位微控制器,在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。STC89系列单片机CPU主要功能是产生各种控制信号,控制输入/输出端口的数据传输、数据的算术运算、逻辑运算以及位操作处理等。STC89系列单片机几乎包含了所有数据采集和控制中所需的所有单元模块,可称得上是一个片上系统6-10。2.1.1 单片机主控电路设计图2-1 单片机主控电路设计单片机最小系统原理图如图2-1所示。主控模块由复位电路,晶振时钟电路和IO电路3部分组成。复位电路设计为按键复位和上电复位,通过在单片机的RST脚接10uf电容接电源,10K电阻接地的方式,完成上电复位,RST引脚再经过一个200欧的电阻和一个按键可以实现按键复位。测温电路设计要用到串口通信,为了得到较准确的波特率,降低通信的误码率,晶振电路使用的是11.0592MHZ的晶振,晶振两端分别接2个22pf电容接地,保证其时钟电路的稳定性。单片机引脚为访问外部存储器控制信号,将其接高电平,访问内部ROM。IO电路其引脚的功能具体如下:P0口为液晶LCD1602的并行数据总线,为了增加对LCD1602的驱动能力,外加了10K排阻;P1.0P1.2为LCD的控制口;P2.0P2.4为ADC0832的数据输入输出和控制口。P3.0和P3.1分别为串口通信的数据接收和数据发送口。2.1.2 C51程序语言C51是为51系列单片机设计的一种C语言,其特点:结构化语言,代码紧凑;接近真实语言,程序可读性强;库函数丰富,编程工作量小;机器级控制能力,功能很强;与汇编指令无关,易于掌握;对于有复杂计算的程序来说,更突显其优势,C51语言已成为51系列单片机程序开发的主流软件方法。C51与标准C语言对比,其语法规则、程序结构、编程方法大致相同,而数据类型、存储模式及中断处理存在着差异13。2.2 TC1047温度采集电路设计采用4个温度传感器TC1047A来采集4路温度,将温度的变化转化为电压的变化。TC1047和TC1047A是线性电压输出温度传感器,可以精确地测量从-40到+125之间的温度。10mV/的输出电压的斜率响应允许在温度范围内对预计的温度进行测量。TC1047传感器输出电压的大小会随温度的改变而改变,温度增大,输出电压会增大,温度减小,其输出电压也会减小12。TC1047温度传感器输出电压与温度变化成线性关系,关系表达式为:其中:为传感器输出电压,单位为;测量温度值,单位为。TC1047温度传感器输出电压随温度变化的关系曲线如图2-2所示。图2-2 TC1047输出电压随温度变化的关系曲线如图2-3所示为TC1047温度传感器接口电路的设计,其中3号管脚用于为该芯片供电,管脚1为电源地,管脚2为电压输出,只要给芯片供电就可以使温度传感器正常工作。图2-3 TC1047接口原理图2.3 RC低通滤波电路 设计采用一阶无源RC低通滤波电路滤除频率为50HZ以上的干扰信号,使温度传感器的输出电压较稳定。 常用的滤波电路有无源滤波和有源滤波两大类。若滤波电路元件仅由无源元件(电阻、电容、电感)组成,则称为无源滤波电路。无源滤波的主要形式有电容滤波、电感滤波和复式滤波(包括倒L型、LC滤波、LC型滤波和RC型滤波等)。若滤波电路不仅由无源元件,还由有源元件(双极型管、单极型管、集成运放)组成,则称为有源滤波电路。有源滤波的主要形式是有源RC滤波,也被称作电子滤波器。无源滤波电路的结构简单,易于设计,但它的通带放大倍数及其截止频率都随负载而变化,因而不适用于信号处理要求高的场合。有源滤波电路的负载不影响滤波特性,因此常用于信号处理要求高的场合。滤波电路还可以分为高通、低通、带通和带阻滤波器,是一种能使有用频率信号通过,同时抑制无用频率成分的电路。设计需要采集由温度传感器将温度转化为电压的信号,在实际中温度的变化频率不可能是太高的。为了使采集到的电压信号更加稳定可靠,设计需要将高于50HZ以上的信号滤除掉,才能进行电压信号的放大。在满足要求的前提下,为了使设计更加的简单,采用RC无源低通滤波电路。RC低通滤波器的截止频率计算公式为:其中:为电阻的阻值,单位为;为电容值,单位为。设计中选用的电容为,电阻,所以可以计算出低通滤波器的截止频率为:所以满足截止频率小于50HZ的要求,RC低通滤波电路原理图设计如图2-4所示。图2-4 RC低通滤波电路2.4 OP07放大电路 设计采用运算放大器OP07作为主芯片组建电压放大电路,放大经过RC低通滤波器电路后的电压信号。OP07芯片是一种低噪声,非斩波稳零的双极性运算放大器集成电路。由于OP07具有非常低的输入失调电压,所以OP07在很多应用场合都不需要额外的调零。OP07同时具有输入偏置电流低各和开环增益高的特点。这种低失调电压、高开环增益的特性使得OP07特别适用于高增益的测量设备和放大传感器输出的信号。温度传感器TC1047在0到40的电压输出范围为到,每变化一度,精度要求为0.5。而采用的是8位的A/D转换,最大能分辨20mV电压变化,放大器的放大倍数为5即可满中要求。设计要求能实时快速地采集温度的变化,对采集的速度有较高的要求,不能通过模拟开关来分时放大每一通道的电压信号,而是每个通道都有各自的放大电路,这样就可以大大提高温度采集的速度。单通道放大电路原理图如图2-5所示。 图2-5 单通道电压放大电路如上图2-5所示为三运放组成的差分放大电路,其中和都是组成电压跟随器,用于增大输入阻抗减小输出阻抗。的管脚3输入温度传感器的输出电压,用于将电压进行差分放大。需要根据要求计算各电阻的参数值。的输出电压为:(2-1)根据运算放大器虚短虚断的特性可得: (2-2)其中:,(2-3)由公式(2-1)、(2-2)和(2-3)可计算出如下表达式: (2-4)其中表达式(2-4)中为电阻阻值,单位为;分别为输入输出电压,单位为。设表达式(2-4)中的,即为电压放大倍数,为了方便计算,取,,将和所选择的电阻阻值代入(2-4)可得:解得:,电阻用一个的滑动变阻器代替,便于放大倍数的调节。2.5 A/D转换电路设计采用两片分辨率为8位的A/D转换芯片ADC0832将已放大的模拟电压信号转换为单片机可以处理的数字信号。ADC00832为8位分辨率的逐次逼近型双通道A/D转换芯片,其最高分辨可达256级,可以适应一般模拟量的转换要求。其内部电源输入与参考电压复用,使得芯片的模拟电压输入在05V之间。芯片的转换时间仅为32us,具有双数据输出可作为数据校验,以减小误差,转换速度快且性能稳定性强。独立的芯片使能输入,使多器件挂接和处理器控制变得更加方便。设计要求采集4通道的模拟量,而单片ADC0832只有双通道,所以选择使用2片ADC0832。之所以选择两片ADC0832作为A/D转换电路,而不是选择集成有多通道的A/D转换芯片,如ADC0834或ADC0838,而这两个芯片在操作时更复杂,编写软件时会降低模拟量采集的速度,若选用常用的转换芯片ADC0809,在频率为500KHZ时,转换速度才128us,速度也达不到。在设计时将两片芯片的引脚CLK、DI和DO分别对应并联在一起连接到单片片机的三个I/O口上,而两芯片的片选信号CS则连接到不同的I/O口上,可以通过片选端来选择要操作的A/D芯片。两片ADC0832组成的A/D转换电路原理图如图2-6所示。图2-6 A/D转换电路2.6 LCD1602显示电路设计LCD1602主要用于显示采集到的4路温度值。LCD1602是常用的液晶显示屏,它显示的内容为162,即可以显示两行,每行16个字符,目前绝大多数字符液晶基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。LCD1602工作电压为3.3V或5V,内含复位电路,提供各种控制命令如:清屏、字符闪烁、光标闪烁、显示移位等多种功能。有80字节显示数据存储器DDRAM,内建有192个5X7点阵的字型的字符发生器CGROM和8个可由用户自定义的5X7的字符发生器CGRAM。图2-7 LCD1602显示电路LCD1602主要由控制引脚和数据引脚2个部分组成。参考图2-7其中RS和RW两个引脚用于控制LCD1602的写操作类型,当RS和RW均为0时,即都为低电平时,则此次单片机发送的8位数为对LCD1602的控制命令,通过命令类型的判断执行相应的LCD的配置。而当RS为1即高电平时,则发送的8位数为需要显示的内容,LCD对其进行显示。每次的写命令,需要将LE控制引脚置为高电平,使能此次写,平时状态则置为低电平。引脚1和2分别为LCD的电源和接地端,引脚15和16分别为LCD背光调节的正极和负极,分别接上电源和地。LCD的3引脚用于调整字符显示的对比度,此部分通过外加一个10K电位器,接电源和地之间来实现手动的调整,一般当对比度不够高时,字符不会显示,而增加太多时会出现重影,因此合适的对比度对于显示效果比较重要。2.7 串口通信电路设计采用MAX232芯片进行单片与PC之间的电平转换,实现单片机与PC机之间的通信。MAX232芯片是美信(MAXIM)公司专为RS-232标准串口设计的单电源电平转换芯片,使用+5V单电源供电。由于电脑串口RS232电平是-10V,+10V,而一般的单片机应用系统的信号电压是TTL电平0 V和+5V,MAAX232就是用来进行电平转换的,该器件包含2驱动器、2接收器和一个电压发生器电路提供TIA/EIA-232-F电平。该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5-V TTL/CMOS电平。每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平。图2-8 串口通信电路串口通信电路原理图设计如图2-8所示。此次设计的串口通信电路主要使用MAX232芯片来实现电平转换。其中T1IN和R1OUT分别接单片机的发送引脚TXD和接收引脚RXD,MAX232外接5个1uf电容为经典电路的接法,主要实现振荡式升压将单片机的电平变成符合计算机的电平类型。与计算机接口电路使用RS232 DB9接头,由于不需要奇偶校验等,因此只需接其中3根线,即发送、接收和地线。2.8 电源稳压电路 设计要求运算放大器OP07需要在正负电源下工作,并且A/D的参考电压值也需要较稳定。为了使电路正常并且稳定工作,选用L78/ L79稳压芯片设计稳压电源。L78系列是三端正电源稳压芯片,它有一系列固定的固定的正电压输出,应用十分广泛。芯片内部有电流限制、过热保护以及安全工作区的保护,使它基本不会损坏。如果能够提供足够的散热片,就能够提供大于1.5A的输出电流。虽然芯片是按照固定输出电压来设计的,但是接入适当的外部器件后,就能获得各种不同的输出电压和输出电流。图2-9 稳压电源电路电源电路原理图如图2-9所示。选用L7812和L7912稳压芯片分别得到稳定的正12V和负12V电压。而A/D转换芯片、温度传感器和单片机等都需要正5V的工作电压,选用L7805稳压芯片得到稳定的正5V电压输出。其中P5用于接220V交流转12V交流的变压器,对12V交流经过整流后输出直流正电压和直流负电压。将整流后的直流电压经过一个2200uF和一个0.33uF的电容后可以得到较稳定的直流电压。然后通过稳压芯片L7812和L7912就可以得到稳定的正负12V电压,把稳压管输出的正12V作为L7805的输入,L7805就可以输出稳定的正5V电压。3 下位机软件设计 下位机程序设计使用KEIL C的编译环境,并使用C语言进行程序的编写,然后经过编译后生成.hex文件。此次设计因为要用到串口通信,所以选择使用串口下载,将代码下载到相应STC89C52的单片机中去。3.1 主程序框架 下位机程序设计采用模块化的设计思想,主要包括下面几部分:(1)编写LCD1602驱动程序,实现对LCD1602的8字节写命令操作函数、写数据操作函数,调用写命令函数初始化液晶屏以及通过写命令和写数据这两个函数来编写在指定的位置显示单个字符、在指定的位置开始显示字符串等扩展函数,便于在主程序中调用。通过在主程序中调用相应的LCD显示函数,最终完成4路温度值的显示。(2)编写ADC0832驱动程序,实现对4通道模拟电压的采集。程序中包括相应通道的选择和对A/D转换结果1个字节的读取。为了能方便在主函数中选择转换通道和读取相应通道的A/D转换结果。将程序设计成有两个参数变量和带返回值的函数,其中一参数变量用来选择对那片芯片操作,另一个参数变量用来选择转换通道,最后的返回值则为A/D的转换结果。(3)编写串口通信程序,实现将A/D转换的8位数字量通过串口发送到上位机。串口通信程序包括串口的初始化配置函数,串口1个字节发送函数。其中串口的初始化配置要特别注意波特率的设置,应该和上位机的波特率设置成一样大小,保证串口通信更准确;而串口发送则采用查询法。在主程序中通过调用发送子函数即可以将数据发送到上位机。(4)编写主程序,实现在主程序中调用已编写好的子程序,即将整个下位机的的功能在主程序中实现。在主函数中,首先对LCD1602、ADC082和串口进行初始化,然后在一个大循环中不停地采集A/D转换的数据,并通过处理通过串口发送到上位,同时再经过适当的处理,在LCD上显示出温度值。为了使接收到的数据更准确,在取A/D转换结果时,连续读取10次,再求取平均值,而LCD温度显示函数则在定时器中断调用,设置成每隔一段时间对温度值进行刷新一次。下位机的主程序流程图如图3-1所示。 图3-1 下位机主程序流程图3.2 ADC0832驱动程序ADC0832未工作时其CS输入端应为高电平,此时芯片禁止读写,CLK、DO和DI的电平值可任意。当要进行A/D转换时,必须将CS使能端置低电平并且保持低电平直到转换完全结束。使能CS之后,单片机向芯片时钟输入端CLK输入时钟脉冲,数据输入端DI用于输入数据进行A/D转换通道的选择,数据输出端DO用于输出A/D转换的结果。在第一个时钟脉冲的下降沿之前DI必须保持高电平,表示启动信号,在第二和第三个下降沿之前DI输入的数据用于选择A的转换通道。ADC0832的操作时序如图3-2所示。图3-2 ADC0832的时序图在进行A/D转换时,要用到两片ADC0832,在进行A/D转换时,先选择其中一片芯片进行A/D转换,读取两个通道的值,之后再选择另外一个芯片进行A/D转换,再读取两个通道的值。再选择芯片时只能使能其中的一个芯片,而另外的一个芯片的使能端必须禁止。ADC0832驱动程序流程图如图3-3所示。开始选择一片ADC0832选择通道1选择通道2保存转换结果保存转换结果选择另一片ADC0832选择通道3选择通道4保存转换结果保存转换结果结束图3-3 A/D转换程序流程图ADC0832在读取转换结果时,是在时钟脉冲下串行输出的,并且是最高位先输出。读取A/D转换的部分代码如下:for(i=0;i8;i+) /循环8次读取1个字节数据 val=val1; /val用于暂存转换结果,经过8次左移后即为转换结果CLK=1;CLK=0; /数据输出在下降沿后有效if(DO) val=val|0x01; /若输出为1则与0x01相或3.3 LCD1602显示驱动程序LCD显示驱动程序在进行数据的显示时,先要对LCD写入初始化控制命令字,初始化成功之后,写入数据地址控制命令,再写入数据才能把数据显示出来。程序主要包括写命令、写数据、数据地址指针设定、显示单个字符、显示字符串等。LCD1602的写操作时序如图3-4所示。图3-4 LCD1602写操作时序 根据LCD1602写操作时序图可知,当RS为低电平,RW为高电平时为写命令操作,控制命令主要是用设置LCD显示模式、光标的设置等,单片机将8位数据送到LCD并行数据总线上,单片机给E数据端一个正脉冲信号,就可以将控制命令字写入LCD。当RS为高电平,RW为高电平时为写数据操作,LCD就会将接收到的数据在液晶屏上显示出来。在进行数据显示前需要先设置数据地址指针,这样才能在想要的位置显示出数据。LCD1602显示驱动程序流程图如图3-5所示。 图3-5 LCD1602显示驱动程序流程图 根据以上LCD写操作时序和LCD显示驱动程序流程图编写出相应的驱动函数,部分显示函数如下:void Display_LCD_1602_dan_zi(uchar X,uchar Y,uchar Value) /在指定位置 / 写入一个字符,X为行,Y为列,Value为写入的数据LocationXY( X, Y); /确定字符显示的位置函数Write_com_or_dat(Value,1); /写入数据函数void Display_LCD_1602_duo_zi(uchar X,uchar Y,uchar *P) /显示字符串函 /数,P指向字符串的首地址LocationXY( X, Y); /设定初始地址while(*P) Write_com_or_dat(*P,1);P+; 3.4 串口通信程序 串口通信程序主要包括串口的初始化、串口数据发送,其中串口的初始化主要是用于设置波特率。在通信中采用的串口通信波特率为9600,在程序设计中采用查询法发送数据,串口通信程序流程图如图3-6所示。 图3-6 串口通信程序流程图 在进行串口通信程序编写时,编写单字节发送函数和字符串发送函数,其中部分程序代码如下:void Sent_Byte(uchar dat) /发送单字节函数SBUF=dat; /将数据送到缓冲器while(!TI); /判断是否发送完TI=0; /发送完清标志位void Sent_Date(uchar *dat) /发送一个字符串函数while(*dat)!= 0) /如果字符串未结束,指针+指向下一个字符Sent_Byte(*dat); /发送单字节函数dat+; /指针+4 上位机软件设计4.1 上位机人机交互界面设计此次设计的上位机人机交互界面主要分为两个窗口,即实时数据窗口和历史数据窗口,可以在使用过程中进行切换。实时数据窗口主要是用于实现4路温度数据的实时显示、实时温度变化曲线显示及实时温度强度图显示。并且可以在本界面设定串口的有关配置,如波特率、数据位、奇偶校验位等;另外可以设定设定温度采集的速率、报警的温度上限值、选择数据的数据的存储路径等;同时可以开始和停止温度的采集。除此之外,还显示出模拟的数控机床热变形误差,当采集的温度值超过设计的温度上限时,报警指示灯就会闪烁并发出报警声。因为实时窗口显示的数据是变动的,鉴于此历史数据窗口主要是用于历史数据的读取方便数据的分析。在进行数据显示时,除了显示温度值外,还显示出采集到温度所对应的时间。图4-1 实时数据显示界面人机交互界面的实时数据显示窗口设计如图4-1所示。实时数据显示窗口不仅可以显示温度随时的变化曲线,以及用强度图表中用颜色浅深来表示温度大小。除了用数值来显示温度值外,还用4个类似于温度计的柱体来直观显示温度的大小。图中开始按钮可以用来控制数据的采集和暂停。4.2 上位机程序框图设计4.2.1 主程序框图设计 主程序通过串口接收下位机发送的4路A/D转换采集到的8位数字量,通过数据处理,计算出温度值、热变形误差,同时能在前面板显示出来。另外还要实现报警、数据存储和相关数据采集参数设定等功能。上位机的整体程序设计流程图如图4-2所示。 图4-2 上位主程序流程图4.3.2 LABVIEW串口程序设计在LABVIEW程序串程序设计中,主要用到VISA配置串口、属性节点、VISA读取和简单错误处理等几部分组成,下面分别简单介绍这几个节点的使用。图4-3 VISA配置串口如图4-3所示为VISA配置串口节点,通过该节点可以很方便的对串口的参数进行配置,如波特率、奇偶校验、停止位等,通过配置好相关参数,即对串口进行初始化,上位机才能与下位机通过串口通信。 图4-4 VISA串口数据读取如图4-4所示为串口缓冲区读取节点,通过该节点可以读取下位机发送到串口数据缓冲区里的数据。其中有一个比较重要的设置,就是VISA READ的“字节总数”这个输入,由于在串口通信中,如果指定读取100个串口缓冲区的字节数,如果当前缓冲区的数据量不足100个时,程序会一直停在VISA READ这个节点上,如果在超时的时间(默认是10秒)内还没有凑足100个数据的话,程序就会报“Time out”的错误,如果超时时间设置得太长,有可能导致程序很长时间停止在VISA READ这个节点上。解决的办法是使用“Bytes at Port”这个串口的属性节点,这个属性节点读取当前串口缓冲区有字节数,然后将它的输出连接到VISA READ的“读取字节数”这个输入端上即可,这样当前缓冲区中有多少个字节就读回多少个,不会有任何等待,该属性节点如图4-5所示。图4-5 Bytes at Port属性节点 将以上几个节点正确连接起来,再结合while结构和判断结构就可以实现对下位机发送来的数据进行不断的读取。其部分程序设计如图4-6所示。 图4-6 串口数据读取部分程序4.3.3 串口数据帧解码下位机发送来的采集到的4路数据,在读取串口的数据之后并不知道接收到的数据是属于那一路的,需要将各路的数据区分开来,再进行数据处理和显示。上位机程序的编写要根据下位机发送的数据帧格式来解码,这样才能获取正确的数据。下位机发送的数据帧包括3个部分,包括2个字节的数据帧头、4个字节的数据和1个字节的数据帧尾。将读取的字符数据转换为字节数组,再对数组里的数据进行数据帧解析,得出想要的数据。在程序设计中通过编写数据帧解析子VI来供主程序调节,数据帧解析程序采用公式节点来设计。公式节点在程序中相当于一个数据运算子程序,可以在公式结点中进行类似于C语言的编程,这样可以大大减小程序的开发难度。公式节点可以进行参数的输入和输出,参数的传递通过输入变量和输出变量来传递。在子VI中设计两个输入参数变量,其中一个参数变量是数组,另一个参数变量是数组的长度,在程序中对输入的数据进行数据帧解析。首先对数组的第一个元素进行查找,在数组长度范围内,若找到两个连续的数据帧帧头,并且数组的下标加4后的数据为数据帧的帧尾,则数组帧头和帧尾之间的四个字节即为下位机发送的4路采集到的数据,4个字节数据的通道分别与下位机发送时的通道相对应。公式节点的程序设计如图4-7所示。 图4-7 公式节点数据帧解码4.3.4 数据处理和显示将数据帧解码得到的4路数据计算出电压值,再通过电压值计算出相应的温度值,并通过温度值计算出热误差,数据处理子VI如图4-8所示。图4-8 数据处理子VI各通道数据经过处理之后,就可以将数据输出到人机交互界面进行显示,用波形;用波形图表用来显示实时温度变化曲线,用强度图表中颜色的浅深来表示温度的高低,同时在人机交互界面上显示出各通道的温度数值和热变形误差。如图4-9所示为波形图表和强度图表。图4-9 波形图表和强度图表波形图表是显示一条或多条曲线的特殊数值显示控件,一般用于显示以恒定速率采集到的数据。波形图表会保留来源于此前更新的历史数据,又称缓冲区。如需在一次更新中向每条曲线传送多个点,可将一个数值簇数组连接到波形图表,每个数值代表各条曲线的单个y值点。在设计中需要向波形图表传送多条曲线的数据,将这些数据捆绑为一个标量数值簇,其中每一个数值代表各条曲线上的单个数据点,这样就可以在波形图表上同时显示多条实时温度曲线。与波形图表一样,强度图表也有一个来源于此前更新而产生的历史数据,又称缓冲区。由于强度图表将颜色作为第三个维度,因此一个类似于颜色梯度控件的标尺可定义强度图表的范围和数值到颜色的映射。在强度图表上绘制一个数据块以后,笛卡尔平面的原点将移动到最后一个数据块的右边。图表处理新数据时,新数据出现在旧数据的右边。如果图表显示已满,则旧数据将从图表的左边界移出。4.3.5 数据的存储和读取数据的存储和读取主要是通过写入文本文件和读取文本文件这两个节点来完成。写入文本文件节点如图4-10所示,将文件路径设计为选择路径输入,在进行数据采集时可图4-10 写入文本文件节点以在人机交互界面上选择数据文件存储的路径。读取文本文件是用于读取存储的历史数据,如图4-11所示。 图4-11 读取文本文件节点设计时通过按下按钮来读取文件里存储的数据,并在人机交互界面的历史数据界面上显示出历史数据,包括历史温度曲线图、历史温度强度图和历史时间对应的温度值。为了方便数据的分析,人机交互界面专门有一个是用来读取历史数据的,其程序设计如图4-12所示。图4-12 读取历史数据显示程序4.3.6 采集速率和温度报警 在进行数据采集时,数据采集过快或者过慢都不方便对的数据的观察和分析,在程序设计中可以让用户可以在人机交互界面上设定想要的采集速率;其次就在不同的场合,温度最高上限也不一样,同样在设计中出应该考虑到用户可以设定不同的温度报警上限值。其中,温度报警程序如图4-13所示。在程序设计中使用条件结构来判断是否执行报警程序,将各路采集到的温度度值与设定的温度值进行比较,若有其中一路温度值超过了设定的温度值,则条件结构判断为真,则执行报警程序。在报警程序中实现报警声的输出及报警指示灯每隔200毫秒红绿灯进行交替闪烁,当4路温度值都与设定的温度值低时,则条件结构判断为假,则报警程序不执行,这样就可以实现报警功能。图4-13 温度报警程序5 原理图电路仿真 为了更进一步确保本方案设计的可以行,在进行硬件电路实物的制作之前,先通过使用仿真软件对设计方案进行软件仿真。设计仿真主要使用Proteus仿真软件和虚拟串口软件。下位机硬件电路仿真原理图如图5-1所示, 图5-1 硬件电路原理仿真图图中只画出了4路放大电路中其中的1路放大电路,其它3路放大与其完全相同。仿真时另外三路放大器的电压输出用三个滑动变阻器来模拟温度传感器经放大后的电压输出。在上图的仿真原理图中只实现了温度传感器、放大电路、A/D转换电路和LCD1602显示电路的仿真,而串口通信并未实现仿真。在进行串口通信仿真时,首先需要安装一个虚拟串口软件VSPD XP 5,安装成功后打开如图5-2所示,会虚拟出两个串口COM1和COM2,通过这两个虚拟串口,就可以实现串口通信的仿真。在进行串口通信仿真前需要设置好仿真原理图中的串口,其串口参数设置如图5-3所示,选择串口号COM1,其中串口波特率为9600,数据为8位,停止位1位,没有奇图5-2 虚拟串口偶校验位。设置好这些参数之后,还需要打开串口调试助手,串口调试助手的设置除了串口号选择COM2不同外,其它设置必须与与Proteus中串口的设置一致。设置好串口调试助手之后,运行仿真程序,点击串口调试助手中打开串口按钮,若可以进行正常的串口通信,接收窗口将会显示单片机发送来数据。串口仿真结果如图5-4所示,在仿真程序中串口发送的一帧数据一共有7个字节,数据帧帧头为0x31和0x32,数据帧帧尾为图5-3 仿真串口参数设置0x33,帧头和帧尾之间的数据为A/D采集到的数据。从下图接收到的数据分析可知,串口仿真成功。同理,上位机串接收数据的仿真也可以通过这两个虚拟串口进行仿真。 图5-4 串口数据接收仿真6 调试及软件验证6.1 制作流程要点 下面分步骤介绍制作流程要点:(1)使用DXP 2004 SP2软件绘制出电路的原理图,然后生成PCB图,由于此次硬件放大电路需要用到较多的元器件,因此为了方便布线,选择使用双面板布线。在制作双面板时应该选择手动布线,在布要注意适当的添加过孔,方便以后电路板的焊接。然后对软件绘制的PCB板图进行检查,看是否存在有短路和断路、错误连线等一些情况的出现。(2)PCB图检查完毕后,将PCB图打印出来,因为制作的PCB为双面板,所以需要注意将PCB的顶层和底层进行进行对孔,并订装好。在把打印的PCB图印到电路板之前,先要把铜板用砂纸擦干净,以免有杂质影响电路图的印制;然后通过熨斗将油印好的PCB烫到覆铜板上,在用熨斗烫覆铜板时要仔细,并且毎个地方都要烫到,直到看到清晰的电路轮廓。(3)查看覆铜板上使用熨斗烫印的连线是否有脱落或者断掉的情况出现,如果存在小范围的这种情况,可以使用油性笔进行描绘补齐断线和脱落块,如果存在大范围的脱落时,需要将铜板冲洗干净,重新烫印一次电路。然后腐蚀电路板,腐蚀后需要检查是否存在有铜皮未腐蚀完的现象。在腐蚀过程中要注意掌握时间,时间不能够太长,最后将腐蚀好的电路板清洗干净。(4)将腐蚀好的电路板进行打孔,在进行打孔时要注意适当的选择钻针的大小,不同的元件可能需要的插孔不一定相同。插孔过大过小都会影响到电路的焊接。同时在进行打孔时要注意安全。(5)电路板打完孔后,就是焊接。焊接元件时要将电路板与PCB对照着,注意元件的封装是否与实物相对应,防止焊接错;在焊接电阻时,需要用万用表测出阻值的大小,确保阻值的大小是对的;电路板焊接好之后,要仔细检察电路板是否有短路、断路、虚焊等,确保电路连接的正确性.(6)电路板检察无误之后,接下来就是电路板的调试,通过将编译好的程序下载到单片机,进行验证硬件和软件的正确与否。在程序的调试过程中要分步进行调试,先把每个模块分别测试好,再将所有的模块组合起来一起测试。这样既方便错误的检查,又能提高效率。6.2 硬件调试及软件验证6.2.1 电源电路测试为了防止电源出现问题因电压过大烧坏元器件,在进行电源测试之前先将除电源外的其它芯片卸下。然后接通过电源,用万用表测量测量各输出电压端的输出电压是否正确。在电源测试时,分别测量各三端稳压芯片的输入和输出电压是否在预期的范围内,若不是则应立即拔掉电源插头,检查电路,再进行测试,直到能正常输出稳定的正负12V和正负5V电压。6.2.2 LCD1602显示测试测试电路板中的显示电路LCD1602是否能正常显示数字或字符。电源测试好之后,将卸下的元件装回电路板上,接着将LCD显示测试程序下载到单片机中,观察发现LCD不能显示,仔细检察程序之后,确保了程序是正确的。然后检察电路图和PCB图是否有误,将电路检察并确保无误后。最后发现是LCD的对比度太低,通过调节滑滑动变阻器来调节LCD的对比度之后,LCD就可以正常显示数据。6.2.3 放大电路测试测试4路电压放大电路能否按预期的进行电压放大。将4路温度传感器接入电路中,温度传感器将输出一个电压作为放大电路的输入。分别用万用表测量各通道温度传感器的输出电压和经过放大后的输出电压,计算出是否为预期的放大倍数,如果有偏差可以通过调节滑动变阻来调整电压放大倍数。6.2.4 A/D转换测试测试A/D转换电路是否能正常采集数据。将编写好的A/D测试程序结合显示程序来测试A/D转换电路。将各通道采集到的A/D转换的数据经过处理转换为电压之后送到LCD上显示,并通过用手握住温度传感器来改变温度传感器的电压输出来观察A/D是否能采集到电压。若用手紧握传感器时A/D采集到的电压增大,松手时A/D采集到的电压减小,说明A/D可以采集到数据。为了确保A/D采集到的数据是正确的,用万用表测量各通道放大电路的电压输出与A/D采集到的电压是否一致,若一致则说明A/D可以正常采集数据。在进行计算A/D采集到的电压时要注意A/D的参考电压,参考电压应与实际电路测量的参考电压为准。6.2.5 下位机串口通信测试测试串口通信电路能否进行正常发送数据。在串口通信测试中使用一根串口转USB线来实现下位机与上位机之间的串口通信。将已编写好的串口通信测试程序下载到单片机中,刚开始先不使用自己编写的上位机与下位机进行测试,而是使用串口调试助手软件与下位机进行通信,这样就可以排除自己编写上位机出错的可能。当串口调试助手可以正确接收到单片机通过串口发送过来数据,说明串口及串口发送程是正确的。6.2.6 上位机串口通信测试测
展开阅读全文