摘 要
温度是机械加工中最基本的参数之一,在生产过程中常需要对温度进行检测和监控。数控机床加工中,常需要对数控机床进行热误差计算并实现热误差补偿,通过热误差补偿技术来达到提高数控机床加工精度的目的。因此,研究一种基于串行通信的多路温度采集和实时监控系统,对提高工业控制性能、提高数控机床的加工精度以及提高生产效率有着重要的意义。
本文设计了一种数控机床多点温度采集电路,可以同时对四路温度进行实时的采集和显示,通过设定温度的报警范围对其进行预警,并且利用串口实现单片机和计算机的通信,使用上位机完成数据处理和温度的显示等。温度的测量精度低于0.5℃。
设计中使用STC89C52作为下位机的主控芯片,并使用LCD1602液晶屏进行温度的显示,采用温度传感器TC1047进行温度采集。将温度传感器输出的电压通过RC滤波电路以及运放OP07组成的放大电路,然后通过A/D转换,最后将A/D转换的数字量通过RS232串口发送到LABVIEW编写的上位机进行数据处理和显示。通过上位机设置温度的采集速率以及设定报警温度上限,将采集到的数据以TXT或XLS格式存储到电脑中。
硬件电路采用低成本的设计思想,软件设计采用模块化的设计方法,最后进行实物的制作和调试,验证了设计的设计稳定性和可行性,实现了设计的预期结果。
关键词:串口通信;LABVIEW;数控机床;热误差;多通道温度采集
目 录
引言 1
1 系统综述 2
1.1 方案论证与选择 2
1.2 系统整体框图 3
2 硬件电路设计 4
2.1 51单片机主控电路 4
2.1.1 单片机主控电路设计 4
2.1.2 C51程序语言 5
2.2 TC1047温度采集电路 5
2.3 RC低通滤波电路 6
2.4 OP07放大电路 7
2.5 A/D转换电路 8
2.6 LCD1602显示电路 9
2.7 串口通信电路 10
2.8 电源稳压电路 11
3 下位机软件设计 12
3.1 主程序框架 12
3.2 ADC0832驱动程序 13
3.3 LCD1602显示驱动程序 15
3.4 串口通信程序 17
4 上位机软件设计 18
4.1 上位机人机交互界面设计 18
4.2 上位机程序框图设计 19
4.2.1 主程序框图设计 19
4.3.2 LABVIEW串口程序设计 20
4.3.3 串口数据帧解码 21
4.3.4 数据处理和显示 22
4.3.5 数据的存储和读取 23
4.3.6 采集速率和温度报警 24
5 原理图电路仿真 25
6 实物的组装调试及软件验证 27
6.1 实物的制作流程 27
6.2 硬件调试及软件验证 28
6.2.1 电源电路测试 28
6.2.2 LCD1602显示测试 28
6.2.3 放大电路测试 29
6.2.4 A/D转换测试 29
6.2.5 下位机串口通信测试 29
6.2.6 上位机串口通信测试 29
6.2.7 下位机与上位机整体功能测试 30
6.3 数据测量及误差分析 30
6.3.1 温度传感器标定 30
6.3.2 数据的测量 34
6.3.3 误差计算及分析 36
6.4 软硬件调试综述 37
7 结论 38
7.1 系统功能 38
7.2 功能扩展 38
7.3 前景展望 39
谢 辞 40
参考文献 41
附录一 电路设计原理图 42
附录二 电路设计PCB图 43
附录三 电路设计实物图 43
附录四 上位机实时数据采集界面图 44
附录五 上位机历史数据读取界面图 45
引言
随着科学技术的不断发展,对现代设备精确度的要求不断增长,信息采集(即传感器技术)、信息传输(通信技术)和信息处理(计算机技术)为信息技术的前沿尖端技术,其应用非常广泛,已经渗透到社会的每一个领域[1-3]。
数据采集是指将温度、压力、流量、位移等物理量转换成数字量后,再由计算机进行存储、处理、显示或者打印的过程。在生产过程中应用数据采集,可对生产现场的工艺参数进行采集、监视和记录,为提高产品质量、降低成本提供信息和手段。
数控机床在加工过程中,热误差是因温度上升引起的加工误差。据统计,在精密加工和超精密加工中,由于热变形引起的加工误差占总加工误差的50%~70%[4-5]。目前,有两类方法可以用来减小机床的热误差。一是通过改进机床结构设计方法,直接减小热误差,但是会大大提高成本。二是通过建立热误差模型进行补偿的方法[15-16]。
LABVIEW软件是NI公司开发用于测控领域的图形化开发环境,它在数据采集、仪器控制、测量分析和数据显示方面有着明显的优势而得到广泛的应用[14]。它是一种方便的人机界面软件,其编程的方式相比于VC等比较复杂的上位机编程软件来说更加的简单和有针对性。利用NI的LABVIEW软件和数据采集卡可以实现数据的采集、存储、分析处理。或者通过其它接口可以很容易地将采集到的数据发送到LABVIE编写的上位机。
设计的主要目的和任务是,在生产车间中对数控机床的主要部件进行实时多点温度采集,采集硬件电路主要包括:温度传感器,放大滤波,A/D转换,下位机控制,串口通信等功能;采集通道数>=4,采集温度精度:0.5度,温度范围:0~40度。上位机对采集的温度数据进行受热分析,并显示温度随时间的变化趋势,并对加工的热变形误差进行计算和补偿。
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.0~P1.2为LCD的控制口;P2.0~P2.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级,可以适应一般模拟量的转换要求。其内部电源输入与参考电压复用,使得芯片的模拟电压输入在0~5V之间。芯片的转换时间仅为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是常用的液晶显示屏,它显示的内容为16×2,即可以显示两行,每行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的输出电流。虽然芯片是按照固定输出电压来设计的,但是接入适当的外部器件后,就能获得各种不同的输出电压和输出电流。L79××系列是三端稳压芯片除了输出是负电压之外,其余特性与L78××系列是三端稳压芯片基本一致。

图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/D的转换通道。ADC0832的操作时序如图3-2所示。
图3-2 ADC0832的时序图
在进行A/D转换时,要用到两片ADC0832,在进行A/D转换时,先选择其中一片芯片进行A/D转换,读取两个通道的值,之后再选择另外一个芯片进行A/D转换,再读取两个通道的值。再选择芯片时只能使能其中的一个芯片,而另外的一个芯片的使能端必须禁止。ADC0832驱动程序流程图如图3-3所示。

图3-3 A/D转换程序流程图
ADC0832在读取转换结果时,是在时钟脉冲下串行输出的,并且是最高位先输出。读取A/D转换的部分代码如下:
for(i=0;i<8;i++) //循环8次读取1个字节数据
{
val=val<<1; //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-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所示,图中只画出了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 上位机串口通信测试
测试上位机能否接收数据并进行数据处理和显示。将已测试好的串口发送程序烧写到单片机,接通过电源。在上位机的人机交互界面上选择串口号、设定串口的相关参数、采集速率和报警温度上限等设置。按下数据采集按钮,观察数据接收窗口是否能接收到数据。若不能接收到数据,则检查上位机串口接收程序,若可以接收到数据,则可以进一步对上位机是否可以正常处理数据和显示数据等功能进行测试。
6.2.7 下位机与上位机整体功能测试
测试整个设计是否能正常工作。将以上测试LCD显示、A/D转换和串口通信等测试程序整合起来,结合上位机一起来测试整个设计的运行结果。首先下位机将采集到的4通道A/D转换值,通过数据处理在LCD上显示出4路温度值,然后再将A/D转换4路8位数字量值通过串口发送到上位。在发送4路数字量时,要注意数据要以数据帧的格式发送,即按顺序发送两个数据帧帧头0x31和0x32,接着发送4个字节的数据,这4个字节为A/D采集到的4路数字量,最后再发送0x31作为一帧数据的帧尾。上位就是根据下机位的数据帧发送格式进行获取4路A/D转换值的。在上位机上设定好各种参数之后,开始数据采集,首先验证上位机上显示的温度值是否与下位LCD显示的温度值一致,然后逐一测试温度波形曲线、温度强度图表、数据显示和存储等是否正确。若出现错误则分析错误的原因并将其改正过来。
6.3 数据测量及误差分析
6.3.1 温度传感器标定
温度传感器TC1047理论上是0℃时为100mV,40℃时为900mV,但在实际中,理论与实际是有一定的差距的,为了使测量的数据更加的准确,需要对4路温度传感器进行标定。由于条件有限,不能获得比环境温度更低的温度,在进行温度传感器标定时按下面的方法来完成。在标定过程中将温度传感器DS18B20测量的温度作为标准温度。首先将一定温度的水放在一个较大的烧杯中,再将一个较小的空烧杯放在较大的烧杯里,然后将温度传感器TC1047放到空烧杯中,同时温度传感器DS18B20也放进去,并且DS18B20要和温度传感器TC1047接近,接着连续测量三组数据;然后将大烧杯里的水加上温度较高的水,也连续测出三组数据;就这样,不断提高大烧杯中的水温来获取温度传感器所处的环境温度,并测量出相应温度传感器输出的电压和记录DS18B20的读数。表6-1、表6-2、表6-3和表6-4分别为通道1到通道4温度传感器相关数据的记录。
表6-1 通道1温度传感器标定测量数据
第一组数据 第二组数据 第三组数据
传感器电压/V 0.74 0.73 0.74 0.80 0.79 0.79 0.85 0.86 0.84
标准温度/℃ 24.4 24.3 24.4 30.4 30.5 30.4 35.7 35.9 35.8
第一组数据:
平均电压输出:
平均标准温度:℃
第二组数据:
平均电压输出:
平均标准温度:℃
第三组数据:
平均电压输出:
平均标准温度:℃
表6-2 通道2度传感器标定测量数据
第一组数据 第二组数据 第三组数据
传感器电压/V 0.74 0.74 0.74 0.81 0.79 0.82 0.85 0.86 0.85
标准温度/℃ 24.3 24.5 24.4 30.5 30.4 30.5 35.6 35.9 35.7
第一组数据:
平均电压输出:
平均标准温度:℃
第二组数据:
平均电压输出:
平均标准温度:℃
第三组数据:
平均电压输出:
平均标准温度:℃
表6-3 通道3度传感器标定测量数据
第一组数据 第二组数据 第三组数据
传感器电压/V 0.73 0.74 0.74 0.80 0.79 0.82 0.83 0.86 0.84
标准温度/℃ 24.3 24.5 24.4 30.4 30.4 30.6 35.7 35.8 35.8
第一组数据:
平均电压输出:
平均标准温度:℃
第二组数据:
平均电压输出:
平均标准温度:℃
第三组数据:
平均电压输出:
平均标准温度:℃
表6-4 通道4度传感器标定测量数据
第一组数据 第二组数据 第三组数据
传感器电压/V 0.75 0.73 0.72 0.83 0.79 0.81 0.85 0.83 0.86
标准温度/℃ 24.6 24.4 24.3 30.7 30.2 30.4 35.7 35.6 35.8
第一组数据:
平均电压输出:
平均标准温度:℃
第二组数据:
平均电压输出:
平均标准温度:℃
第三组数据:
平均电压输出:
平均标准温度:℃
根据表6-1、表6-2、表6-3、表6-4计算出的各通道温度传感器平均输出电压和对应的平均标准温度绘制出TC1047温度传感器的实际输出电压与温度的关系如图6-1所示。
图6-1 四路温度传感器实际输出电压与温度关系曲线
为了观察温度传感器输出电压随温度变化的趋势直线,并将趋势直线与理论直线对比。用EXL绘制出4通道的各自线性趋势线和理论的直线如图6-2所示。图中可以看出各
图6-2 传感器实际输出电压随温度度变化的趋势曲线
通道的传感器输出电压与温度的趋势直线与理论直线近似相等。为了使测量的温度更加准确,将各通道温度传感器电压-温度变化趋势直线的斜率和y轴的截距分别相加再作平均值作为的实际直线斜率和截距。下面分别计算出平均直线斜率k和截距d。
斜率:
截距:=0.495
所以温度传感器的实际输出电压与温度的关系表达示为:
其中为温度传感器输出电压,单位为;为所测温度,单位为℃。
6.3.2 数据的测量
对温度传感器进行标定之后就可以对温度进行实时采集。在进行数据采集时将串口的相关参数设置好之后,再设置报警温度上限为40℃,数据采集时间间隔为500ms。然后运行上位机和下位机程序,并点击上位机的开始运行按钮,就可以实现数据的采集和显示。上位机的实时数据采集界面如图6-3所示,用手触摸1通道温度传感器,则通道1的实时曲线也会随着温度的改变而改变。在界面左上角窗口显示的是各通道温度实时强度图,图中可以看出当通道1的温度升高时,强度图表中通道1的颜色也会随之变淡,说明温度在升高,而颜色加深时,说明温度在降低。强度图表下面显示的是采集到的4通道温度数据,同时也显示出采集数据的时间。在显示界面的右下角显示的是数控机床在当前采集到温度环境下的热误差。
图6-3 上位机实时数据显示界面
采集温度数据时还需要对采集到的温度数据进行存储,点击上位机中的数据存储路径可以选择数据存储的路径,可将温度数据以TXT或者XLS的格式存储,如图6-4所示为在采集过程中温度数据存储文件。
图6-4 温度数据存储文件
在实时数据显示界面显示的是动态的数据,为了方便数据的观察,历史数据显示界面可以读取存储文件里的数据并数据出来,方便数据的分析。在程序运行时点击历史界面中的开始读取按钮就可以读取历史文件数据并显示出来,其读取的历史数据界面显示如图6-5所示。
图6-5 上位机历史数据显示界面
上位机在进行数据采集和显示的同时,下位机也可以实现温度的采集并在LCD1602上显示出实时的温度数据,下位机4路温度显示如图6-6所示。
图6-6 下位机LCD1602温度显示
6.3.3 误差计算及分析
(1)误差计算
将温度传感器进行标定之后,需要对测量的温度进行误差计算和测量误差分析。在室温度下将4路温度传感器与作为标准电压测量的DS18B20紧挨着放在一起,分别记录4路温度值和DS18B20的读数。其中数据记录如表6-5所示。
表6-5 温度传感器温度测量值及标准温度测量值
通道1 通道2 通道3 通道4
测量值/℃ 26.5 26.4 26.7 26.1
标准值/℃ 26.1 26.1 26.3 26.3
由上表的测量数据可以计算出各通道的测量误差:
通道1测量误差:
通道2测量误差:
通道3测量误差:
通道4测量误差:
(2)误差分析
温度测量误差产生的原因可能有以下几个方面:
经放大电路后产生的误差。在求解温度的过程中,需要用到传感器经放大电路后输出电压及放大电路的放大倍数。而在实际中放大电路的放大倍数在进行计算和测量时本身就有一定的误差,导致最终的温度数据产生误差。
电源不稳定产生的A/D转换误差。在测量温度的过程中,如电源电压的不稳定,引起电压的波动,即A/D参考电压发生波动,将会造成A/D采集到的电压偏大或者偏小。这样也会使计算得到的温度产生误差。
软件计算误差。从A/D采集到的压开始到计算出温度值都是在单片机中实现的,在这过程中都需经过很多的数据处理,而软件对数据处理的精度也一定的限制,只能处理一定精度的数据,超过软件所能表达的精度时会自动将最低位或最高位舍去。这样就造成了软件数据处理误差。
6.4 软硬件调试综述
在进行软件和硬件的调试时,会遇到许多实际的问题,在进行调试时,要握调试的
方法和技巧。主要分下面几个方面来简述调试过程中遇到的问题和解决的方法。
首先,硬件电路的调试。理论与实际总是有一定的差距,在电路制作出来之后需要耐心地对整块电路进行调试,检查是否如预期的一样。在电路的调试中发现LCD不能正常显示,首先通过检查硬件电路,发现没有问题,然后再排除程序错误的可能,最后发现是LCD对比度太低而不能显示,通过调节滑动变阻调整其对比度之后就可以正常显示。而在这块硬件的调试过程中,采用先部分调试,再整体调试的分法,在确保每个部分都可以正常工作了,再进行将各部分整合起来一起调试。这样不仅可以很快发现问题的所在,也可以提高电路板调试的效率。
然后,上位机程序的调试。上位机采用LABVIEW进行编写,而以前对LABVIEW软件使用并不是很熟悉,需要对该软件进行更加深入的学习。在这个过程中都会遇到很的困难,需要通过自己寻找资料来解决。其中在上位机的编写过程中遇到一个重要的难题是如何区分串口发送来的数据分别是与那一个通道相对应的。对于LABVIE来说采用图形化来编写数据处理对于新手来说有一定的困难,经过学习发现LABVIEW中有一个公式节点可以使用类似于C语言的程序编写。最后,终于解决了这个大难题,在上位机编写过程中还遇到了数据存储问题、波形显示及温度强度图显示等问题,都需要耐心的去钻研,找到解决问题的方法。
最后,设计的优化调试。在对整个设计经过调试之后,确保整个设计的功能基本善
完之后,需要对设计进行整体的优化。比如,在读取A/D转换的结果时为了使读取结果
更加准确,在读取时通过连续读取10次,再求平均值作为最终的转换结果。还有在下
位进行4路温度的显示时,显示的温度数据变动太快,通过使用定时器定时一定的时间
再对LCD进行数据的更新,保证了数据显示更稳定。
7 结论
7.1 系统功能
设计是数控机床现场多点温度采集与实现,从原理上实现了使用温度度传感器TC1047进行四路温度采集,设计中使用了RC滤波电路、OP07组建的差分放大电路和A/D转换电路,并通过单片机串口与用LABVIEW编写的上位机进行通信。最终实现下位机显示四路温度值,上位机显示四路温度值及四路温度随时间变化的波形图表和强度图表,同时进行数据存储和报警功能等。设计出来的硬件和软件基本实现了预期的功能,使用起来也非常方便。在进行温度测量时,只要正确设置好串口的各参数、报警温度上限、数据采集速率和数据存储路径,然后再运行上位机和下位机就可以实现测量温度的显示和热误差补偿值的显示等功能。可以通过波形图表来观察温度随时间的变化曲线,同时也可以通过强度图表中颜色的浅深来判断各路温度的变化以及其温度的大小。设计温度测量结果准确,测量误差小,满足温度测量精度小于0.5℃的要求,温度测量范围为0~50℃,并实现数据的存储和热误差的计算。下位机与上位机在进行串口通信时,也能进行稳定的数据传输,使得整个设计能正常稳定的工作。
7.2 功能扩展
设计在进行温度的采集和热误差补偿计算时,还对整个设计进行了功能扩展。首先,增加了下位机四路温度的实时显示,在没有上位机的情况下也能对数控机床进行多点温度测量。其次,上位机增加了温度上限报警功能和数据采集速率设置功能,增加报警功能有助于对数控机床进行超温预警,而数据采集速率则能够根据实际情况对数控机床进行采集速率的设定,便于数据的观察。最后,设计中上位机除了实时数据显示界面之外,还设计了一个历史数据读取并显示界面,其中历史数据读取与显示界面是设计的创新点所在,可以在进行实时数据采集的同时也可以读取历史数据进行数据显示和分析。
7.3 前景展望
数控机床热误差补偿技术在提高数控机床的加工精度方面显示出很大的优越性,与通过改进数控机床结构来提高加工精度相比,不仅成本更低,操作简单,也更容易普遍应用。使用适当的热误差补偿策略,可以充分有效提高数控机床的加工精度,达到了采用热误差补偿避免技术难于获得的效果。故设计在提高数控数控机床加工精度在未来有广泛的应用前景。