压力传感器无线变送技术研究

  • 七月 29th, 2008

Pressure sensor is a commonly used sensors in industry practice.As the modern industrial development, application system of pressure sensor is being perfected. This paper describes the research of wireless convection technology of pressure sensor and designs a pressure sensor system which has applicative value. The system uses AT89C2051 as MC and computer as PC. With the control orders from the PC , ADC0832 controlled by the MC acquires the sensor signal data and transforms it from analog signals to digital signals. After the transform MC will sent out the digital signals by wireless data transceiver module Tx100. PC receive data by wireless data transceiver module Rx100 and display the data signal. PC and MC communicate with serial communications, MC is programed by using the assembly language and PC uses Visual C++ as the development platform. In the design a PC can control a few of MC and display a few of sensor signals in the same interface.
In this paper, the exordium introduces the background, significance and the current achievement of the design on this subject. In the second chapter it designs the system by modularization, makes the overall program of system design and paint frame diagram of the system. The third chapter is the details of implementation process for hardware circuit. The fourth chapter describes the software design process of the system. In the fifth chapter it sums up the system in this paper and brings forward the propose improvement.
KEY WORDS pressure sensors , analog to digital transform , wireless data
transmission , serial communications , Visual C++

目录

摘要 III
ABSTRACT IV

第一章 绪论 1
1.1 设计概述 1
1.2 设计意义 1
1.3 设计相关问题现状研究 2
1.3.1 单片机的发展历史 2
1.3.2 单片机发展趋势 2
1.3.3 无线数据通信 3
1.3.4 压力传感器发展趋势 3

第二章 整体方案设计 5
2.1 压力传感器模块 5
2.1.1 压力传感器应用 5
2.1.2 压力传感器原理 6
2.1.3 压力传感器选择 6
2.2 A/D转换模块 7
2.2.1 A/D转换概述 7
2.2.2 A/D转换模块器件选择 7
2.3 无线数传模块 10
2.3.1 无线数传概述及其特点 10
2.3.2 本设计采用的无线数传模块 11
2.4 终端显示模块 12
2.4.1 电平转换问题 12
2.4.2 上位机开发问题 14
2.5 系统硬件结构 14

第三章 系统硬件设计 15
3.1 传感器信号调理电路 15
3.1.1 压力传感器信号调理电路 15
3.1.2 滤波电路 16
3.1.3 电流-电压转换电路 16
3.2 A/D转换电路 17
3.2.1 ADC0832芯片资料 17
3.2.2 AT89C2051芯片资料 17
3.2.3 单片机与ADC0832连接图 19
3.3 数据传输电路 19
3.3.1 无线数传模块电路连接 19
3.3.2 MAX232模块电路 20
3.3.3 RS232的串行接口 21
3.4 系统硬件电路图 23

第四章 系统软件设计 24
4.1 下位机程序设计 24
4.1.1 串行通信工作方式 25
4.1.2 串行口工作方式 25
4.1.3 初始化程序设计 27
4.1.4 接收中断程序设计 29
4.1.5 A/D转换程序设计 30
4.1.6 发送子程序设计 33
4.2 上位机程序设计 33
4.2.1 开发工具介绍 33
4.2.2 串行通信控件MSComm 34
4.2.3 上位机界面设计 36
4.2.4 通信程序设计 36

第五章 结 论 40
5.1 设计总结 40
5.2 设计心得 40

结 束 语 42

参考文献 43

附录1 传感器1对应AT89C2051程序 44
附录2 传感器2对应AT89C2051程序 46
附录3 上位机关键程序 49
摘要
压力传感器是工业实践中常用的一种传感器,随着现代工业的发展,压力传感器应用系统也在不断完善。本文主要介绍了压力传感器无线变送技术研究,设计一个有实际应用价值的压力传感器系统。这个系统使用AT89C2051单片机作下位机、计算机作上位机。下位机在接收到上位机的控制命令后,控制ADC0832对传感器信号进行数据采集和A/D转换,并将转换后的数据使用无线数传模块Tx100发送出去。上位机端使用无线数传模块Rx100接收到数据后,把传感器信号数据在PC机上显示出来。上位机与下位机间采用串口通信,下位机端采用单片机汇编语言编程,上位机端以Visual C++作为开发平台。本设计中的上位机能控制多台下位机工作,并能在同一界面上显示多个传感器的信号。
本文绪论首先介绍了该课题的设计背景、设计意义及相关问题的研究现状。第二章通过将系统模块化设计,设计出系统的整体实现方案,画出系统框图。第三章具体介绍了硬件电路的实现过程。第四章介绍了系统的软件设计过程。第五章对本文介绍的系统作出总结,并提出可以改进的地方。
关键词 压力传感器,A/D转换,无线数传,串口通信,Visual C++

ABSTRACT

第一章 绪论
1.1 设计概述
本次毕业设计的题目是压力传感器无线变送技术研究,题目类型是工程设计类,题目来源是教师科研题。要求使用C++语言编写计算机程序,通过无线模块Rx100(或Gy-501等)接收数据并在计算机上实时显示;压力传感器采样放大输出标准4~20毫安电流,使用A/D转换得到数字信号,通过无线模块Tx100(或Gy-501等)将数据实施无线变送。
下位机采用单片机汇编语言,完成数据采集、转换及发送功能。上位机采用Visual C++完成操作界面、传输控制及显示。上位机及下位机之间采用无线数传模块通信。
本次设计的主要目的是掌握单片机的基本原理,能独立设计出基本的控制系统和串行通信系统。加深对计算机原理和无线通信原理的理解。熟练C++语言和单片机汇编语言的应用。熟悉Protel99电子制图软件,能绘制出电路原理图及印制版图。
对本次设计的构思如下:先将设计的系统分成几个模块,每个模块设计出最佳方案,得出最终的系统结构。其次完成系统的硬件电路设计,再分别编写上位机、下位机的程序,最后完成系统的调试。
1.2 设计意义
压力传感器是工业实践中常用的一种传感器,其广泛应用于各种工业自控环境,涉及水利水电、铁路交通、智能建筑、生产自控、航空航天、军工、石化、油井、电力、船舶、机床、管道等众多行业。对压力传感器的信号进行实时监控,是压力传感器应用的重要一环。随着单片机技术的不断发展,单片机的应用也从单机向网络化发展,在实际的应用系统中,通常由单片机作为下位机完成数据的采集和转换处理,计算机作为上位机,对下位机进行控制,同时完成数据的显示。在大型系统中往往上位机控制多个下位机,多路数据在上位机可以直观对比。采用无线数传模块,使在一些无法以有线形式传输数据的场合也能实现数据传输。在实际工业实践中,常会遇到高温、高压、封闭等无法进行有线连接的情况,此时,使用无线数传模块完成数据传输,体现出很高的实用价值。因此,本次设计的系统与工业化实际应用的系统原理是相通的,具有较高的研究价值。
1.3 设计相关问题现状研究
1.3.1 单片机的发展历史[1]
(1)第一阶段(1976-1978):单片机的探索阶段。以Intel公司的MCS-C48为代表。MCS-C48的推出是在工控领域的探索,参与这一探索的公司还有Motorola 、Zilog等,都取得了满意的效果。这就是SCM的诞生年代,”单机片”一词即由此而来。
(2)第二阶段(1978-1982):单片机的完善阶段。Intel公司在MCS-C48 基础上推出了完善的、典型的单片机系列MCS-C51。它在以下几个方面奠定了典型的通用总线型单片机体系结构。
①完善的外部总线。MCS-51设置了经典的8位单片机的总线结构,包括8位数据总线、16位地址总线、控制总线及具有很多机通信功能的串行通信接口。
②CPU外围功能单元的集中管理模式。
③体现工控特性的位地址空间及位操作方式。
④指令系统趋于丰富和完善,并且增加了许多突出控制功能的指令。
(3)第三阶段(1982-1990):8位单片机的巩固发展及16位单片机的推出阶段,也是单片机向微控制器发展的阶段。Intel公司推出的MCS-C96系列单片机,将一些用于测控系统的模数转换器、程序运行监视器、脉宽调制器等纳入片中,体现了单片机的微控制器特征。随着MCS-C51系列的广应用,许多电气厂商竞相使用80C51为内核,将许多测控系统中使用的电路技术、接口技术、多通道A/D转换部件、可靠性技术等应用到单片机中,增强了外围电路功能,强化了智能控制的特征。
(4)第四阶段(1990-):微控制器的全面发展阶段。随着单片机在各个领域全面、深入地发展和应用,出现了高速、大寻址范围、强运算能力的8位/16位/32位通用型单片机,以及小型廉价的专用型单片机。
1.3.2 单片机发展趋势
(1)低功耗CMOS化
MCS-51系列的8031推出时的功耗达630mW,而现在的单片机普遍都在100mW左右,随着对单片机功耗要求越来越低,现在的各个单片机制造商基本都采用了CMOS(互补金属氧化物半导体工艺)。象80C51就采用了HMOS(即高密度金属氧化物半导体工艺)和CHMOS(互补高密度金属氧化物半导体工艺)。CMOS虽然功耗较低,但由于其物理特征决定其工作速度不够高,而CHMOS则具备了高速和低功耗的特点,这些特征,更适合于在要求低功耗象电池供电的应用场合。所以这种工艺将是今后一段时期单片机发展的主要途径。
(2)微型单片化
现在常规的单片机普遍都是将中央处理器(CPU)、随机存取数据存储(RAM)、只读程序存储器(ROM)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强型的单片机集成了如A/D转换器、PMW(脉宽调制电路)、WDT(看门狗)、有些单片机将LCD(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。
此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。现在的许多单片机都具有多种封装形式,其中SMD(表面封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。
1.3.3 无线数据通信
数据通信是由电子计算机和电信技术相结合而产生的通信技术和通信业务。数据通信是用通信线路和通信设备将远地的数据终端与计算机连接起来进行数据处理的一种通信方式。因而它也是数据传输和数据处理相结合的通信方式。无线数据通信是通过无线电波传送数据信息的一种通信方式。它是在有线数据通信的基础上发展起来的,能实现无线状态下的数据通信。无线通信设备如寻呼接收机外观小巧,但内部却是一个五脏俱全的无线电接收机,由射频接收单元和逻辑控制单元两大部分组成。射频接收单元由天线,高放,混频,中放及滤波,限幅放大和鉴频等电路组成。逻辑控制单元由微处理器,译码器,综合功能接口组件,地址和功能数据存储器,液晶显示器和升压电路等组成。
1.3.4 压力传感器发展趋势[2]
传感器技术研究领域虽然十分广泛,但其发展方向可归纳为以下主要趋势:
第一:小型化 小型化会带来更多的好处,重量轻、体积小、分辨率高,便于安装在很小的地方。对周围环境器件影响小,也利于微型仪器、仪表的配套使用。如美国的Entran公司的量程2-500PSI产品,直径仅为1.27mm,可以置于人体血管测量有关参数而不会对血液的流通产生大的影响。
第二:集成化 可以利用现有的生产工艺和成熟的集成技术,把电路与传感器制作在一体。减少工艺流程以降低生产成本,而且不易损坏。
第三:智能化 由于集成化的出现,在集成电路部分制作一些微处理机,使得其具有”记忆”、”思维”、”判断”、”处理”的能力。目前,智能化传感器产品发展最快,它将成为传感器市场的主流。
第四:系列化 单一化产品在市场上没有大的竞争力和长久的生命力。市场风云突变,一旦失去市场,发展则停滞不前,经济效益差,资金浪费大,产品成本高。
第五:标准化 传感器技术已形成标准化。如IES、ISO国际标准;美国ANSIC、州SC、MIL-T和ASIME标准;日本JIS标准;法国DIN标准;原苏联T0CT及YTO标准。
第二章 整体方案设计
根据本次设计的要求,硬件部分可以分为四大模块:压力传感器模块、A/D转换及发送模块、无线数传模块、终端显示模块。在各模块设计出独立的方案,通过综合得出最优化的系统组成。需要解决的主要问题有以下几点:压力值的采集、A/D转换、单片机数据处理、无线变送、终端控制及显示。
2.1 压力传感器模块[2]
2.1.1 压力传感器应用
压力传感器是工业实践中最为常用的一种传感器,其广泛应用于各种工业自控环境,涉及水利水电、铁路交通、智能建筑、生产自控、航空航天、军工、石化、油井、电力、船舶、机床、管道等众多行业。而我们通常使用的压力传感器主要是利用压电效应制造而成的,这样的传感器也称为压电传感器。压电传感器主要应用在加速度、压力和力等的测量中。压电式加速度传感器是一种常用的加速度计。它具有结构简单、体积小、重量轻、使用寿命长等优异的特点。压电式加速度传感器在飞机、汽车、船舶、桥梁和建筑的振动和冲击测量中已经得到了广泛的应用,特别是航空和宇航领域中更有它的特殊地位。压电式传感器也可以用来测量发动机内部燃烧压力的测量与真空度的测量。也可以用于军事工业及生物医学测量领域。它既可以用来测量大的压力,也可以用来测量微小的压力,应用非常广泛。以下是压力传感器原理图。
图2.1 压力传感器原理图
2.1.2 压力传感器原理
我们知道,晶体是各向异性的,非晶体是各向同性的。某些晶体介质,当沿着一定方向受到机械力作用发生变形时,就产生了极化效应;当机械力撤掉之后,又会重新回到不带电的状态,也就是受到压力的时候,某些晶体可能产生出电的效应,这就是所谓的极化效应。科学家就是根据这个效应研制出了压力传感器。
压电传感器中主要使用的压电材料包括有石英、酒石酸钾钠和磷酸二氢胺。其中石英(二氧化硅)是一种天然晶体,压电效应就是在这种晶体中发现的,在一定的温度范围之内,压电性质一直存在,但温度超过这个范围之后,压电性质完全消失(这个高温就是所谓的”居里点”)。由于随着应力的变化电场变化微小(也就说压电系数比较低),所以石英逐渐被其他的压电晶体所替代。而酒石酸钾钠具有很大的压电灵敏度和压电系数,但是它只能在室温和湿度比较低的环境下才能够应用。磷酸二氢胺属于人造晶体,能够承受高温和相当高的湿度,所以已经得到了广泛的应用。
在现在,压电效应也应用在多晶体上,比如现在的压电陶瓷,包括钛酸钡压电陶瓷、PZT、铌酸盐系压电陶瓷、铌镁酸铅压电陶瓷等等。
压电效应是压电传感器的主要工作原理,压电传感器不能用于静态测量,因为经过外力作用后的电荷,只有在回路具有无限大的输入阻抗时才得到保存。实际的情况不是这样的,所以这决定了压电传感器只能够测量动态的应力。
2.1.3 压力传感器选择
工业用的压力传感器并不完全适用于本毕业设计中。经过查阅资料,最终选定一款实验用压力传感器,型号是FP1130,各项参数如下:
压力范围: 0 - 1000 kPa (0 - +10 bar)
最大允许压力: 1400 kPa (14 bar)
供电电压 VB: 12 - 30 V DC
电压输出: 1 - 5 V
电流输出: 4 - 20 mA
总误差: ±1% 满量程
最大测量频率: 100 Hz
电器保护: 短路保护,反极过压保护,最大可达50 V 直流(短时)
*压力 <0 bar时传感器仍有信号输出。但此时无法保证线性度和比例特性。
该型号压力传感器满足本次设计的要求,其价格亦合理,因此选定其作为本次设计的压力传感器。作用是将外部压力转换成模拟电信号。
2.2 A/D转换模块
2.2.1 A/D转换概述
由于数字电子技术的迅速发展,尤其是计算机在自动控制、自动检测以及许多其他领域的广泛应用,用数字电路处理模拟信号的情况更加普遍了。为了能够使用数字电路处理模拟信号,必须把模拟信号转换成为相应的数字信号,方能送入数字系统(如微型计算机)进行处理。
模数转换器是将模拟信号转换成数字信号的系统,是一个滤波、采样保持和编码的过程。 模拟信号经带限滤波,采样保持电路,变为阶梯形状信号,然后通过编码器,使得阶梯状信号中的各个电平变为二进制码。
为了保证数据处理结果的准确性,A/D转换器必须有足够的转换精度,A/D转换的位数越多,得到的数字量越精确,比如用8位和16位表示同一个模拟量,16位的精确度就高了很多。这和系统本身的精确度要求有关。同时,为了适应快速过程的控制和检测的需要,A/D转换器还必须有足够快的转换速度。转换精度和转换速度是衡量A/D转换性能优劣的主要标志。
2.2.2 A/D转换模块器件选择
目前单片机在电子产品中已得到广泛应用,许多类型的单片机内部已带有A/D转换电路,但此类单片机会比无A/D转换功能的单片机在价格上高几元甚至很多,本系统的A/D转换模块我初步构思了三种方案,一是使用内部带A/D转换的单片机芯片,例如ADuC814芯片;第二个方案是采用普通的单片机芯片,加上一个A/D转换器,实现A/D转换的功能,这里A/D转换器可选ADC0832、ADC0809等;第三个方案是使用普通的51单片机,在外部搭建简单的电路构成A/D转换模块。
1. 方案一:使用内部带A/D转换的ADuC814芯片
ADuC814是完全集成的采样速率为247 kSPS 的12位数据采集系统,它在一个单芯片上集成了一个高性能多通道ADC、一个8位MCU以及FLASH/EE程序存储器和数据存储器。该器件在3V和5V电源工作条件下能满足规定技术指标的要求,片内锁相环(PLL)能从32kHz晶振信号输入产生16.78MHz的高频时钟。先通过MCU 内核的一个可编程时钟分频器对16.78MHz的高频时钟分频,产生要求的工作频率,再进行路由分配。ADuC814具有8K字节片内非易失性FLASH/EE程序存储器, 640字节安全性增强的片内非易失性FLASH/EE数据存储器和256字节片内数据RAM。ADuC814还集成有附加的模拟功能器件,包括双12位DAC、一个电源监视器、POR电路和带隙基准电压源。片内数字外围器件包括一个看门狗定时器、一个时间间隔计数器、三个定时计数器和两个串行I/O端口(SPI和UART),并且能设置成其它接口。
2. 方案二:使用单片机+A/D转换器
(1)A/D转换器选择
串行和并行接口模式是A/D转换器诸多分类中的一种,但却是应用中器件选择的一个重要指标。在同样的转换分辨率及转换速度的前提下,不同的接口方式会对电路结构及采用周期产生影响。对A/D转换器的选择我们通过比较ADC0809和ADC0832来决定。这两个转换器都是常见的A/D转换器,其中ADC0809的并行接口A/D转换器,ADC0832是串行接口A/D转换器。

表2.1 并行A/D转换器ADC0809和串行A/D转换器ADC0832对比
通过比较可以直观看出,在分辨率、功耗、电压输入范围、工作温度范围等参数双方是一样的,而在最重要的转换时间上,ADC0832明显优于ADC0809,在高速数据采集的过程中,转换时间短无疑有很大的好处。并行通信最大的优点在于反应快,但是ADC0832的转换时间并不慢,反而比ADC0809还快,此外,由于串行通信所需引脚少,封装小,在实际应用中往往比并行通信有优势。在数据量不是很大的情况下,采用串行通信方式进行A/D转换是一个不错的选择。
ADC0832[3]是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变得更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。有关引脚说明如下:
• CS 片选使能,低电平芯片使能。
• CH0 模拟输入通道0,或作为IN+/-使用。
• CH1 模拟输入通道1,或作为IN+/-使用。
• GND 芯片参考0电位(地)。
• DI 数据信号输入,选择通道控制。
• DO 数据信号输出,转换数据输出。
• CLK 芯片时钟输入。
• Vcc/REF 电源输入及参考电压输入(复用)。
正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。
(2)单片机选择
单片机拟采用常见的AT89C2051单片机。主要原因是与51系列产品指令系统完全兼容,管脚少,占用空间少,能满足ADC0832串行通信的要求,性价比高。
3. 方案三:使用单片机+外部电路

图2.2 51单片机与外部电路构成的A/D转换电路

(1)硬件说明:
图中”RA0″和”RA1″为单片机的两个I/O脚,分别将其设置为输出与输入状态,在进行A/D转换时,在程序中通过软件产生PWM,由RA0脚送出预设占空比的PWM波形。RA1脚用于检测比较器输出端的状态。
R1、C1构成滤波电路,对RA0脚送出的PWM波形进行平滑滤波。RA0输出的PWM波形经过R1、C1滤波并延时后,在U1点产生稳定的电压值,其电压值U1=VDD*D1/(D1+D2),若单片机的工作电压为稳定的+5V,则U1=5V*D1/(D1+D2)。
图中的LM324作为比较器使用,其输入负端的U1电压与输入正端的模拟量电压值进行比较,当U1大于模拟量输入电压时,比较器的输出端为低电平,反之为高电平。
(2)A/D转换过程:
如果使RA0输出PWM波形,其占空比由小到大逐渐变化,则U1的电压会由小到大逐渐变化,当U1电压超过被测电压时,比较器的输出端由高电平变为低电平,因此可以认为在该变化的瞬间被测的模拟量与U1的电压相等。
由于U1的电压值=VDD*D1/(D1+D2),当VDD固定时,其电压值取决于PWM波形的占空比,而PWM的占空比由单片机软件内部用于控制PWM输出的寄存器值决定,若软件中用1个8位寄存器A来存放RA0输出的PWM的占空比值D1,因此在RA1检测到由”1″变为”0″的瞬间,A寄存器的值D1即为被测电压的A/D转换值,其A/D转换结果为8位。如果用16位寄存器来作输出PWM的占空比,则A/D转换值可达到16位。
4. 三种方案比较
方案一所使用的单片机带有A/D转换功能,因此省去了一个A/D转换器,集成度很高,同时也造成了成本的上升,经查阅资料,一片ADuC814芯片的价格约为60元人民币,这对控制成本是不利的。方案二采用了AT89C2051+ADC0832组合,电路设计比较简单,但是由于是串口通信,需要对转换数据的发送用软件控制,加大了程序的复杂程度,成本适中。方案三电路结构最简单,元件最好找,但是最大的缺陷就是消耗CPU资源,转换周期长。
5. 方案选择
经过对比三种方案的优劣,决定采用方案二。传感器信号经过调理电路后双通道输入ADC0832,由AT89C2051控制A/D转换过程,在接收到上位机的发送命令后将转换的数据储存并通过无线数传模块发送出去。
2.3 无线数传模块
2.3.1 无线数传概述及其特点
无线数传就是无线数据传输的简称,通常指:把甲地的数据(例如1234)通过无线电波发射到乙地,在乙地接收并还原成数据(1234)这个过程。
无线数传可以取代用电线连接,通常传输距离可从几米到几十公里远,可以跨越河流湖泊、山地、草原等一些用有线不能到达的地方,可以将多个地点联接成一个网络,实现远程控制自动化。
2.3.2 本设计采用的无线数传模块[4]
本次使用的无线数传模块分别是:发送模块Tx100,接收模块Rx100。
1. Tx100 无线发送模块
(1)Tx100 ASK无线发送模块简介:采用晶体稳频,具有频点稳定、数据传输速率高、体积小巧、功耗低、接口方便等特点。极高的性能价格比使其在无线遥控、玩具、安防、无线抄表、数字楼宇对讲系统等小区域低速无线数字通信领域得到了广泛应用。
(2)Tx100 无线发送模块参数:
工作电压: DC 1.8-5.5V
工作电流: 4.4mA-20mA(3V下)
工作功率: 10mW(3V下)
工作频率范围: 100MHz -1GHz
中心频点误差: ±5ppm(TA=25℃)
解调方式: ASK/OOK,100KHz
工作温度: -40℃-+85℃
外形尺寸: 29×14×4mm
接口方式: 4PIN (100mil/2.54mm)
(3)Tx100无线发送模块接口:
图2.3 Tx100无线发送模块芯片图
(4)使用注意事项
建议把RF部分和其它应用电路系统分开供电,以最大限度降低电路的串扰;如果经过试验验证,在满足用户使用要求的前提下也可以集中供电。
TX100模块在1.8V-5.5V工作电源下均可以可靠工作,但其工作电流及RF 辐射功率会有很大差别;不同工作电压下,数据接口部分电平要求于下:
发送使能(TXEN): “1″信号=Vcc±0.3V;”0″信号=公共地电平±0.3V
发送数据(DATA): 1.5V<”1″信号<6V;”0″信号=公共电平±0.3V
接口驱动电流: IH >0.5 mA
为保证最佳之使用效果,建议使用标准50欧天线以保证最大辐射效率。
2. Rx100无线接收模块
(1)Rx100无线接收模块简介:ASK 无线接收模组;TTL 接口;抗干扰能力极强;低成本、低功耗;高灵敏度接收;晶体稳频、性能可靠。
(2)Rx100无线接收模块参数:
工作电压: DC 4.5V-7.0V
工作电流: 2.2mA(5V下)
接收灵敏度: -100dBm (433.92MHZ 1KHz 方波调制ARP)
解调速度: DC-13KHz (433.92MHz ARP)
工作频率范围:200MHz-500MHz,
中心频点误差:±5ppm (TA=25)℃
工作温度范围:-40℃-+85℃
输出信号接口:TTL/CMOS兼容
最大外形尺寸:31×23×6mm
接口方式: 3 PIN (100mil/2.54mm)
(3)Rx100无线接收模块接口:

图2.4 Rx100无线接收模块芯片图
2.4 终端显示模块
2.4.1 电平转换问题
数据最终要在计算机上显示出来,这就要求无线数传模块需要与计算机的串行口相连接。然而无线数传模块采用的是TTL电平,它的逻辑1电平是5V,逻辑0电平是0V,而电脑串行口所使用的是RS232C的电平标准,它的逻辑1电平是-3V--12V,逻辑0电平是+3V-+12V。两者的电平范围相差很远,所以连接时需要用到专门的电平转换模块,或者是电平转换电路。
1. 电平转换模块
典型的电平转换模块有MAX232、DS275等。这里选用MAX232。
图2.5 电平转换模块MAX232管脚图及内部电路图

MAX232是MAXIM公司的产品,包含两路驱动器和接收器的RS-232转换芯片。芯片内部有一个电压转换器,可以把输入的+5V电压转换为RS-232接口所需的±10V电压,尤其适用于没有±12V的单电源系统。使用起来十分简单方便。
2. 电平转换电路
使用现成的电平转换模块有两个问题,一是元件需要专门购买使成本上升,二是电路连线相对复杂。在学习数字电子电路的时候我们曾经接触过,使用三极管可构成简易的电平转换电路,实现TTL电平与RS232C电平的转换。转换电路如下:

图2.6 由三极管构成的简易电平转换电路
3. 方案选择
两种方案各有优缺点,使用电平转换模块MAX232电路构造直观,精度高,但是元件多,会增加成本;使用电平转换电路原理简单,用常见的元件即可构成转换电路,能降低成本,但是转换精度相对较低,可能会对结果产生影响。由于这两种方案都是比较简单的,本人拟采用电平转换模块MAX232来完成设计,以达到更好的效果。
2.4.2 上位机开发问题
1. 上位机和下位机的概念
上位机是指人可以直接发出操控命令的计算机,一般是PC机,屏幕上显示各种信号变化(液压,水位,温度等)。下位机是直接控制设备获取设备状况的的计算机,一般是PLC/单片机之类的。上位机发出的命令首先给下位机,下位机再根据此命令解释成相应时序信号直接控制相应设备。
2. 上位机开发平台
上位机一般采用VB、VC、Labview等开发上位机界面。本次毕业设计要求使用C++语言设计计算机实时显示程序,故上位机开发平台使用Visual C++。VC基于C,C++语言,主要由MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高。
2.5 系统硬件结构
根据以上分析,可以确定系统硬件结构图如下:
图2.7 系统硬件框图

第三章 系统硬件设计
3.1 传感器信号调理电路
3.1.1 压力传感器信号调理电路
工程中被测物理量,如力、位移、温度等,经过传感器变换后,常常是一些缓变的微小电信号。从放大处理来看,直流放大有零漂和级间耦合等问题。为此,往往把缓变信号先变为频率适当的交流信号,然后利用交流放大器放大,最后再恢复为原缓变信号。这样的变换过程称为调制与解调。它广泛用于传感器的调理电路中。
以下是用MAX1450为核心构成的压力传感器信号调理电路:

图3.1 压力传感器信号调理电路

使用此信号调理电路效果比较好,但是电路复杂,元件众多,在本设计中使用是不现实的。由于信号调理电路的功能主要是滤波及使输入信号符合要求,因此本设计中信号调理电路可由滤波电路和电流-电压转换电路构成。
3.1.2 滤波电路[5]
滤波电路是一种能使有用频率信号通过,同时抑制无用频率成分的电路。在实际的电子系统中,外来的干扰多种多样,应当设法将其滤除或者衰减到足够小的程度。而在另一些场合中,有用信号和其他信号混在一起,必须设法把有用信号挑选出来。为了解决以上问题,可以采用滤波电路。一般情况下滤波电路用来作信号处理、抑制干扰等。按所处理的信号是连续的还是离散的,可以分为模拟滤波电路和数字滤波电路。以往这种滤波电路主要采用无源器件R、L、C组成的无源滤波电路。20世纪60年代后,集成运放获得了迅速发展,形成了以有源器件和RC滤波网络组成的有源滤波电路。有源滤波有很多优点,如体积小,重量轻;有源滤波电路中的继承运放可加电压串联深度负反馈,电路的输入阻抗高,输出阻抗低,输入和输出之间具有良好的隔离;还可以放大信号,且调节电压放大倍数不影响滤波效果。
本设计采用的低通滤波电路如下:
图3.2 低通滤波电路图
3.1.3 电流-电压转换电路[5]
从压力传感器出来的电信号经过滤波电路,已经滤除大部分干扰,但是由于ADC0832要求输入电压在0~5V,而传感器输出信号是4~20mA,所以还要加上电流-电压转换电路,使ADC0832的输入信号在0~5V之间。
图3.3 电流-电压转换电路图
经过电流-电压转换电路之后,信号将进入ADC0832进行A/D转换。值得注意的是由于采用A/D转换采用双通道输入,信号从压力传感器出来之后即分成两路,分别通过滤波电路和电流-电压转换电路,进入ADC0832芯片,作差分输入。
3.2 A/D转换电路
3.2.1 ADC0832芯片资料[6]
CS 片选使能,低电平芯片使能。
CH0 模拟输入通道0,或作为IN+/-使用。
CH1 模拟输入通道1,或作为IN+/-使用。
GND 芯片参考0电位(地)。
DI 数据信号输入,选择通道控制。
DO 数据信号输出,转换数据输出。
CLK 芯片时钟输入。
Vcc/REF 电源输入及参考电压输入(复用)。
图3.4 ADC0832芯片图
3.2.2 AT89C2051芯片资料[7]
P1口:P1口是一组8位双向I/O口,P1.2–P1.7提供内部上拉电阻,P1.0和P1.1无内部上拉电阻,主要是考虑它们分别是内部精密比较器的同向输入端(AIN0)和反向输入端(AIN1),如果需要应在外部接上拉电阻,P1口输出缓冲区可吸收20mA电流并可直接驱动LED,当P1口写入”1″时可作输入端,当P1.2–P1.7用作输入并被外部拉低时,它们将因为内部的上拉电阻而输出电流。
P3口:P3.0–P3.5、P3.7是提供内部上拉电阻的7个双向I/O口,P3.6没有引出,它作为一个通用I/O口但不可访问,但可作为固定输入片内比较器的输出信号,P1口输出缓冲区可吸收20mA电流,当P3口写入”1″时它们被内部上拉电阻拉高,可作输入端口,作输入端时,被外部拉低的P3口将由于内部的上拉电阻而输出电流。

图3.5 AT89C2051芯片图

除了常规用途以外,P3口还有特殊的功能,如下表所示:

表3.1 AT89C2051的P3口特殊功能
引脚 功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 INT0(外中断0)
P3.3 INT1(外中断1)
P3.4 T0(定时器/计数器0外部输入)
P3.5 T1(定时器/计数器1外部输入)

本次设计AT89C2051只使用20个管脚中的7个,分别是:
VCC(接电源)
GND(接地)
P1.7(接ADC0832-CS)
P1.6(接ADC0832-CLK)
P1.5(接ADC0832-DI、DO)
P3.0(RXD)
P3.1(TXD)
3.2.3 单片机与ADC0832连接图

图3.6 AT89C2051与ADC0832电路连接图

ADC0832的片选端和时钟端均由单片机I/O口控制。由于DO和DI在时序上可以复用,故接在同一个I/O口上,在前三个时序DI口起作用,控制信号进入DI,第一个时钟信号控制ADC0832的工作状态,第二和第三个时钟信号选择通道输入方式,分别是CH0单通道输入、CH1单通道输入、将CH0作为正输入端IN+,CH1作为负输入端IN-的差分输入、将CH0作为负输入端IN-,CH1作为正输入端IN+的差分输入。转换后从DO输出的数字信号将暂时保存在AT89C2051单片机的内部寄存器中,并由发送程序将其从串行输出口TXD以串行方式发送出去。
3.3 数据传输电路
3.3.1 无线数传模块电路连接

图3.7 无线数传模块电路连接图
如图所示,在单片机端的Tx100的数据输入端接单片机的TXD口,从单片机端接收数据并通过天线发送到上位机端的Rx100;单片机端的Rx100通过天线接收数据后,通过数据输出端口把数据发送到单片机端的RXD口,由单片机对数据进行处理。
在上位机端,由于要进行电平转换,无线数传模块不是直接接到PC机串口,而是先接到电平转换模块MAX232上。其中Rx100数据输出端接MAX232的T2in口,Tx100数据输出端接MAX232的R1out口。
3.3.2 MAX232模块电路
无线数传模块采用的是TTL电平,它的逻辑1电平是5V,逻辑0电平是0V,而电脑串行口所使用的是RS-232C的电平标准,它的逻辑1电平是-3V--15V,逻辑0电平是+3V-+15V。MAX232是单片机应用系统最常用的RS-232电平转换芯片。
前面我们说到,在上位机端,无线数传模块不是直接接到PC机串口,而是先接到电平转换模块MAX232上。其中RX100数据输出端接MAX232的T2in口,TX100数据输出端接MAX232的R1out口。在MAX232的另一端,T2out接DB9的第2口(RXD),R1in接DB9的第3个口(TXD)。
为了使MAX232正常工作,MAX232外围需要4个电解电容,均是内部电源转换所需电容,其取值均为1μF/16V,此外还需要一个0.1μF去耦电容。
电路连接图如下:

图3.8 电平转换模块MAX232电路连接图
3.3.3 RS232的串行接口[8]
串行通信接口标准经过使用和发展,目前已经有几种。但都是在RS-232标准的基础上经过改进而形成的。所以,以RS-232C为主来讨论。RS-323C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。它适合于数据传输速率在0~20000b/s范围内的通信。这个标准对串行通信接口的有关问题,如信号线功能、电器特性都作了明确规定。由于通行设备厂商都生产与RS-232C制式兼容的通信设备,因此,它作为一种标准,目前已在微机通信接口中广泛采用。
RS-232C标准(协议)的全称是EIA-RS-232C标准,其中EIA(Electronic Industry Association)代表美国电子工业协会,RS(recommeded standard)代表推荐标准,232是标识号,C代表RS232的最新一次修改(1969),在这之前,有RS232B、RS232A。它规定连接电缆和机械、电气特性、信号功能及传送过程。目前在PC机上的COM1、COM2接口,就是RS-232C接口。
1. RS-232C电气特性
EIA-RS-232C对电器特性、逻辑电平和各种信号线功能都作了规定。
(1)在TXD和RXD上:
逻辑1(MARK)=-3V~-15V,逻辑0(SPACE)=+3~+15V
(2)在RTS、CTS、DSR、DTR和DCD上:
信号有效(接通,ON状态,正电压)=+3V~+15V
信号无效(断开,OFF状态,负电压)=-3V~-15V
以上规定说明了RS-323C标准对逻辑电平的定义。对于数据(信息码):逻辑”1″(传号)的电平低于-3V,逻辑”0″(空号)的电平高于+3V;对于控制信号;接通状态(ON)即信号有效的电平高于+3V,断开状态(OFF)即信号无效的电平低于-3V,也就是当传输电平的绝对值大于3V时,电路可以有效地检查出来,介于-3~+3V之间的电压无意义,低于-15V或高于+15V的电压也认为无意义,因此,实际工作时,应保证电平在±(3~15)V之间。
EIA-RS-232C与TTL转换:EIA-RS-232C是用正负电压来表示逻辑状态,与TTL以高低电平表示逻辑状态的规定不同。因此,为了能够同计算机接口或终端的TTL器件连接,必须在EIA-RS-232C与TTL电路之间进行电平和逻辑关系的变换。
2. 连接器的机械特性
连接器:由于RS-232C并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9各种类型的连接器,其引脚的定义也各不相同。下面分别介绍两种连接器。
DB-25连接器:
PC和XT机采用DB-25型连接器。DB-25连接器定义了25根信号线,分为4组:
①异步通信的9个电压信号(含信号地SG)2,3,4,5,6,7,8,20,22
②20mA电流环信号 9个(12,13,14,15,16,17,19,23,24)
③空6个(9,10,11,18,21,25)
④保护地(PE)1个,作为设备接地端(1脚)
DB-9连接器:
在AT机及以后,不支持20mA电流环接口,使用DB-9连接器,作为提供多功能I/O卡或主板上COM1和COM2两个串行接口的连接器。它只提供异步通信的9个信号。DB-25型连接器的引脚分配与DB-9型引脚信号完全不同。因此,若与配接DB-25型连接器的DCE设备连接,必须使用专门的电缆线。
3. RS-232C的接口信号
RS-232C规标准接口有25条线,4条数据线、11条控制线、3条定时线、7条备用和未定义线,常用的只有9根,它们是:
数据装置准备好(Data set ready-DSR)–有效时(ON)状态,表明MODEM处于可以使用的状态。
数据终端准备好(Data set ready-DTR)–有效时(ON)状态,表明数据终端可以使用。
请求发送(Request to send-RTS)–用来表示DTE请求DCE发送数据,即当终端要发送数据时,使该信号有效(ON状态),向MODEM请求发送。它用来控制MODEM是否要进入发送状态。
允许发送(Clear to send-CTS)–用来表示DCE准备好接收DTE发来的数据,是对请求发送信号RTS的响应信号。当MODEM已准备好接收终端传来的数据,并向前发送时,使该信号有效,通知终端开始沿发送数据线TxD发送数据。
接收线信号检出(Received Line detection-RLSD)–用来表示DCE已接通通信链路,告知DTE准备接收数据。
振铃指示(Ringing-RI)–当MODEM收到交换台送来的振铃呼叫信号时,使该信号有效(ON状态),通知终端,已被呼叫。
发送数据(Transmitted data-TXD)–通过TXD终端将串行数据发送到MODEM,(DTE→DCE)。
接收数据(Received data-RXD)–通过RXD终端接收从MODEM发来的串行数据,(DCE→DTE)。
SG、PG–信号地和保护地信号线,无方向。
上述控制信号线何时有效,何时无效的顺序表示了接口信号的传送过程。例如,只有当DSR和DTR都处于有效(ON)状态时,才能在DTE和DCE之间进行传送操作。若DTE要发送数据,则预先将DTR线置成有效(ON)状态,等CTS线上收到有效(ON)状态的回答后,才能在TXD线上发送串行数据。这种顺序的规定对半双工的通信线路特别有用,因为半双工的通信才能确定DCE已由接收方向改为发送方向,这时线路才能开始发送。
串口通信的硬件连接采用三线制连接串口,就是说和PC的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,无联络信号等,只需明确以下的收发条件:
波特率(CPS)。发送、接受双方的波特率必须相同,误差不能超过一定的范围,否则就无法接收。
数据位长度(8位或者9位)。
校验有无及校验方式。在串行通信中,除了采用奇偶校验方式外,还可以使用其他的检验方式–和校验(往往保留和的低8位甚至低4位)、某一特征数码的倍数等。或者同时采用两种校验方式。
正确接收后的应答信号。
确定信息帧起始标志。常用发送信息中不可能出现的状态编码作为信息帧的起始标志。
确定信息帧结束标志。
以上收发条件将在软件设计中加以设置,具体情况将在第四章说明。
3.4 系统硬件电路图

图3.9 系统硬件整体电路图
第四章 系统软件设计
本次设计的软件部分可以分为上位机程序和下位机程序。从分布上看,上位机程序在PC机端,下位机程序在单片机端;从语言上看,上位机程序采用C++语言,开发平台是VC++,下位机程序采用单片机汇编语言;从功能上看,上位机程序完成对下位机的控制及数据的存储与显示,下位机程序完成对传感器信号的转换处理与发送。
4.1 下位机程序设计
单片机上电后启动,进行系统初始化,等待上位机的控制命令,通过中断方式接收到控制命令后判别是否控制本机的命令,确认后主程序调用A/D转换子程序进行A/D转换,将转换后数值保存于寄存器中,随后调用发送子程序,用查询方式将数据以串行通信的方式发送出去。程序流程图如下:

图4.1 下位机程序流程图
4.1.1 串行通信工作方式
在下位机软件设计之前,要首先确定系统的工作方式。RS232是一个串行通信协议,串行通信有同步和异步两种工作方式。下面分别介绍这两种工作方式。
同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。它们均由同步字符、数据字符和校验字符(CRC)组成。其中同步字符位于帧开头,用于确认数据字符的开始。数据字符在同步字符之后,个数没有限制,由所需传输的数据块长度来决定;校验字符有1到2个,用于接收端对接收到的字符序列进行正确性的校验。同步通信的缺点是要求发送时钟和接收时钟保持严格的同步。
异步通信中,在异步通行中有两个比较重要的指标:字符帧格式和波特率。数据通常以字符或者字节为单位组成字符帧传送。字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。接收端检测到传输线上发送过来的低电平逻辑”0″(即字符帧起始位)时,确定发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕。
异步通信依靠起始位、停止位保持通信同步。对硬件的要求低,实现起来比较简单、灵活,适用于数据的随机发送/接收,一般适用于50~9600bps的低速串行通信。我们选择异步通信的方式。
异步串行通信数据帧格式:
图4.2 异步串行通信数据帧格式
4.1.2 串行口工作方式
与串行通信有关的寄存器为串行口控制寄存器SCON(选择串行口工作方式)和电源控制寄存器PCON的SMOD位(波特率倍增控制位)[9]。
1. 串行口控制寄存器SCON

表4.1 串行口控制寄存器SCON各位含义
SCON寄存器结构
SCON D7 D6 D5 D4 D3 D2 D1 D0
SM0 SM1 SM2 REN TB8 RB8 T1 R1
位地址 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H

以下是对各控制位功能的介绍:
(1) SM0、SM1:串行口工作方式控制位。
SM0,SM1 工作方式
0 0 方式0
0 1 方式1
1 0 方式2
1 1 方式3
方式0:当设定SM1、SM0为00时,串行口工作于方式0,在方式0下,RXD为数据输入/输出端,TXD为同步脉冲输出端,发送或接收的数据为8位,低位在前,高位在后,方式0的波特率固定为ƒ /12,也就是每一机器周期传送一位数据。方式0可以外接移位寄存器,将串行口扩展为并行口,也可以外接同步输入/输出设备。
方式1:当设定SM1、SM0为01时,串行口工作方式1。方式1为波特率可变的8位异步通信方式,由TXD发送RXD接收,一帧数据为10位,1位起始位(低电平),8位数据位(低位在前)和1位停止位(高电平),波特率取决于定时器 的T 溢出率(1/溢出周期)和波特率的选择位SMOD。
波特率 = *(定时器T 溢出率)
方式2和方式3:当设定SM0、SM1为10或11时,串行口工作于方式2或方式3,这两种方式都是9位异步通信,仅波特率不同,适用于多机通信。在方式2或方式3下,数据由TXD发送RXD接收,1帧数据为11位,1位起始位(低电平),8位数据位(低位在前),1位可编程位(第9位数据,用作奇偶校验或地址/数据选择),1位停止位(高电平)。与方式1相比,多了一位可编程位,发送时,第9位数据为TB8,接收时,第9位数据送入RB8。
方式2:波特率 = *ƒ
方式3:波特率 = *(定时器T 溢出率)
(2) SM2:多机通信控制位。
多机通信是工作于方式2和方式3,SM2位主要用于方式2和方式3。接收状态,当串行口工作于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接受到的数据放弃。当SM2=0时,就不管第位数据是0还是1,都难得数据送入SBUF,并发出中断申请。
工作于方式0时,SM2必须为0。
(3) REN:允许接收位。
REN用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收。
(4) TB8:发送接收数据位8。
在方式2和方式3中,TB8是要发送的–即第9位数据位。在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址。
(5) RB8:接收数据位8。
在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征。
(6) TI:发送中断标志位。
可寻址标志位。方式0时,发送完第8位数据后,由硬件置位,其它方式下,在发送或停止位之前由硬件置位,因此,TI=1表示帧发送结束,TI可由软件清”0″。
(7) RI:接收中断标志位。
可寻址标志位。接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1表示帧接收完成。
2. 电源控制寄存器PCON:

表4.2 电源控制寄存器PCON各位含义
PCON电源管理寄存器结构
PCON D7 D6 D5 D4 D3 D2 D1 D0
位符号 SMOD - - - GF1 GF0 PD IDL

除SMOD位外,其他位均为虚设的,SMOD是串行口波特率倍增位,当SMOD=1时,串行口波特率加倍。系统复位默认为SMOD=0。
4.1.3 初始化程序设计
在进行程序初始化之前,先了解特殊功能寄存器TMOD各位的功能,以便确定工作方式。
特殊功能寄存器TMOD[10]:定时器的工作方式控制寄存器,格式如下:
表4.3 特殊功能寄存器TMOD各位含义
字节地址:88H B7 B6 B5 B4 B3 B2 B1 B0
GATE C/T M1 M0 GATE C/T M1 M0
T1各工作方式控制字 T0各工作方式控制字

初始化程序流程图如下:

图4.3 初始化程序流程图

mov tmod,#21h:使定时器1工作于方式1,定时器0工作于方式0。
mov th1,#0fdh
mov tl1,#0fdh: 这两句给定时器1置初值
Clr ET1:ET1是中断允许控制寄存器IE的第4位,是定时器T1中断允许位,由于本设计中T1作为波特率发生器,因此禁止T1中断。
setb tr1:启动定时器1。
mov scon,#50h:根据前面介绍,这条代码使串行口工作以方式1工作,同时将REN置”1″,允许串行接收。
mov pcon,#00h:如前面介绍,PCON中的SMOD位为”0″,波特率不加倍,为9600Bit/S。
CLR RI:清楚接收中断标志位,以便当在串口接收到上位机的控制命令后能引发中断。
Setb EA:允许中断。
Setb ES:允许串行中断。
Mov r0,#30H:中断接收的控制命令将储存与30H里面。
LOOP:
SJMP $:循环等待中断。
上电后单片机开始运行,完成初始化后循环等待串行接收中断,当接收完整一帧上位机的控制命令后即可引发中断。
4.1.4 接收中断程序设计
1. 中断的概念
单片机正在执行某个任务,突然要有更重要的事件,要求单片机响应,单片机就会应答响应,去执行更为重要的任务(中断处理),原来的任务就继续等待(现场的保护)。执行完更重要的任务后,回到中断的入口处,继续执行原来的任务(现场中断的恢复)。51系列的单片机共有5个中断源,分别为:外中断0、定时器T0中断、外中断1、定时器T1中断、串口中断。
2. 中断方式与查询方式的对比
查询方式指单片机在输入或输出数据前,查询是否满足输入或输出的条件,不满足则继续查询,直到满足为止,期间无法执行其他程序;而中断方式指CPU将启动命令写入外设控制口后继续执行程序,当满足中断响应条件的时候CPU将接收到中断请求信号,CPU将暂停执行随后的程序而去执行中断服务程序,执行完后再中断返回执行被中断的程序。
使用查询方式硬件开销少,程序简单,但是CPU占用率高;使用中断方式CPU利用率高,因此中断方式是CPU和外设之间通信最常用的一种方式。
在本次软件设计中为更好了解两种方式的区别,我设计在接收命令时采用中断方式,在发送数据时采用查询方式。在实际系统中,发送数据应也采用中断方式,以提高设备利用率。
3. 单片机中断系统
单片机的中断系统简单实用,其基本特点是:有5个固定的可屏蔽中断源,3个在片内,2个在片外,它们在程序存储器中各有固定的中断入口地址,由此进入中断服务程序;5个中断源有两级中断优先级,可形成中断嵌套;2个特殊功能寄存器用于中断控制和条件设置的编程。
5个中断源的符号、名称及产生的条件如下:
INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。
INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。
T0:定时器/计数器0中断,由T0计满回零引起。
T1:定时器/计数器l中断,由T1计满回零引起。
TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。
4. 串行中断的特点
单片机的串行I/O端口是一个中断源,有两个中断标志RI和TI,RI用于接收,TI用于发送。
串行端口无论在何种工作方式下,发送/接收前都必须对TI/RI清零。当一帧数据发送/接收完后,TI/RI自动置1,如要再发送/接收,必须先用软件将其清除。
在串行中断被打开的条件下,对方式0和方式1来说,一帧数据发送/接收完后,除置位TI/RI外,还会引起串行中断请求,并执行串行中侧目务程序。但对方式2和方式3的接收机而言,还要视SM2和RB8的状态,才可确定RI是否被置位以及串行中断的开放。
5. 本设计中断程序如下:
UART:
PUSH Acc
PUSH PSW
MOV a,sbuf
MOV @R0,a
CLR RI
POP PSW
POP Acc
RETI
中断程序将接收到的命令存储在30H中。软件设计是思路是接收命令采用中断方式,而发送数据采用查询方式,因此发生串行中断必然是RI置高电平,开中断后需用软件将RI清除。
串行中断的中断服务程序入口地址是0023H,由硬件决定。
4.1.5 A/D转换程序设计
单片机对ADC0832 的控制原理[6]:正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能。
通道选择与输入信号对应如下:

表4.4 ADC0832通道选择表
输入数据 通道选择
1 0 CH0单通道
1 1 CH1单通道
0 1 CH0作负输入端、CH1作正输入端差分输入
0 0 CH0作正输入端、CH1作负输入端差分输入
ADC0832具体的时序说明见下图:

图4.4 ADC0832时序图

A/D转换子程序流程图:

图4.5 A/D转换子程序流程图
4.1.6 发送子程序设计
send:
Clr ES /*禁止串口中断*/
Clr ti /*清除发送中断标志位*/
mov a,b
Mov sbuf,a
Jnb ti,$ /*采用查询方式发送数据*/
Clr ti
Ret

4.2 上位机程序设计
4.2.1 开发工具介绍
上位机的概念和作用在第二章已经介绍过,作为使用者直接面对的部分,上位机的界面应简洁美观,便于使用者使用。本设计的上位机设计以Visual C++为开发平台,编程语言是C++。
启动Visual C++ 6.0[11]后,开发界面如下:
图4.6 Visual C++ 6.0开发界面
可以看到整个开发界面分成五个组成部分:
(1)菜单和工具栏:位于界面的上面一部分。
(2)工作区窗口:界面中间左边的那个窗口。
(3)客户区窗口,也称为编辑窗口:界面中间右边的那个窗口,与工作区窗口平行。
(4)输出窗口:位于状态栏上方。
(5)状态栏:界面的最下方部分。
当然,这个布局并不是固定不变的,在菜单、工具栏、工作区窗口和输出窗口的边上有两条线形成的把手(gripper),把鼠标压在这个把手上拖动可以改变这些窗口的位置。
在Visual C++ 6.0Microsoft提供了一个基本类库(Microsoft Foundation Class,MFC),MFC类库是Visual C++程序设计的核心,它封装了许多常用的Windows API函数,绝大部分的Visual C++应用程序都是在此基础上构成的。
使用者要通过上位机控制下位机,在创建的应用程序类型中选择”基本对话”类型,界面是对话框形式,在随后的设计中会相对方便,由于涉及到串行通信,使用串行通信控件MSComm能大大简化设计复杂度。
步骤如下:
1.文件→新建,选择”工程”,选择MFC AppWizard[exe],在右上角的”工程”栏填上工程名称,如”chuangkou”,如有需要,可以在”位置”栏更改新建的工程存储的路径,点击”确定”。
2.在出现的对话框,可以创建3种类型的应用程序,由于本设计上位机需要发出控制命令及接收转换数据,用”对话框”类型应用程序会相对简单,因此选择”基本对话”。点击”完成”后会出现新建工程的信息。点击”确定”后,一个新的工程就建好了。
4.2.2 串行通信控件MSComm
MSComm控件是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,通过串行端口传输和接收数据,为应用程序提供串行通信功能。他在串口编程时非常方便,他实际上是调用了API函数,但程序员不必再了解复杂的API函数就可控制串行通信。通信的过程,实际上是对属性的操作和对控件事件的响应。
1. 添加串行通信控件MSComm
首先将该控件加入控件工具栏。”工程→添加工程→Component and Control→Registered ActiveX Controls,找到Microsoft Communication Control,Version 6.0控件,插入到当前工程,在当前工程中就创建了类CMScomm,类的头文件mscomm.h和主文件mscomm.cpp自动加入到当前工程中。
工具栏里包含了各种常用的控件,如编辑框、按钮、下拉菜单、静态文本框等。这些控件都是我们设计将要用到的。经过刚才的步骤,串行通信控件MSComm已经添加进控件工具栏了,在最下面一栏呈黄色电话机型。可以将其拖动放到对话框界面中,使用其强大的串口通信功能。
2. MSComm控件的主要属性[12]
(1)CommPort:设置或返回串行端口号,其取值范围为1-99,缺省为1。
(2)Setting:设置或返回串行端口的波特率、奇偶校验位、数据位数、停止位。如:Mscomn1.Setting=”96OO N 8 1″。
(3) PortOpen:打开或关闭串行端口,格式:MSComm.PortOpen={TRUE/FALSE}。
(4)InBuferSize:设置或返回接收缓冲区的大小,缺省为1024字节。
(5)InBuferCount:返回接收缓冲区内的等待读取的字节个数,可通过设置该属性为0来清除接收缓冲区。
(6)Rthreshold:该属性为一阀值,它确定当接收缓冲区内字节个数达到或超过该值后就产生代码为MSCOMM_EV RECEIVE的OnComm事件。
(7) InputLen:设置或返回接收缓冲区内用Input读入的个数。若取0,则INPUT读取整个缓冲区的内容。
(8)Input:该属性表示从接收缓冲区移走一串字符。类型:VARIANT。
(9)OutBuferSize:设置或返回发送缓冲区,缺省为512字节。
(10)OutBuferCount:返回发送缓冲区内等待发送的字符数,可用来清空缓冲区。
(11)Output:向发送缓冲区传送一字符串。类型:VARIANT。
如果在通信过程中发生错误或事件,就会引发OnComm 事件并且改变属性值,由CommEvent属性代码反映错误类型,在通信程序的设计中可根据该属性值来执行不同的操作,以下是部分属性常数值及其含义:
(1)ComEvSend:其值为1,发送缓冲区的内容少于SThreshold指定的值。
(2)ComEvReceive:其值为2,接收缓冲区内字符数达到RThreshold值,该事件在缓冲区中数据被移走前将持续产生。
(3)ComEventFrame:其值为1004,硬件检测到帧错误。
(4)ComEventRxOver:其值为1008,接收缓冲区溢出。
(5)ComEventTxFull:其值为1010,发送缓冲区溢出。
(6)ComEventRxParity:其值为1009,奇偶校验。
(7)ComEvEOF:其值为7,接收数据中出现文件结束(ASCH码为2 6)字符。
了解MSComm控件的主要属性是非常必要的,在随后的设计中很多地方要根据属性来设计程序语句。
4.2.3 上位机界面设计
上位机的界面设计是比较简单的,关键是在界面设计好后完善内部的程序。我构思的界面由以下几个部分组成:静态文本框–介绍通信参数;五个按钮控件–完成打开或关闭串口、选择传感器、结束程序等功能;两个编辑框控件–显示数据;MSComm控件–串行通信。
把对话框原来的”确定”和”取消”按钮删除,在静态文本框添加通信参数,在控件工具栏将按钮和编辑框拉到对话框界面上,并修改标题,调整位置和大小,上位机的界面基本就完成了。运行后如图所示:

图4.7 上位机操作界面

4.2.4 通信程序设计
上位机的界面设计好了,但是运行后仅仅有界面而已,点击上面的按钮是没有反应的,因为还要完善内部程序。
主对话框中添加了两个编辑框[13],一个用于显示传感器1数据,ID为IDC_EDIT_RXDATA1,另一个用于显示传感器2数据,ID为IDC_EDIT_TXDATA2,将接收编辑框的Properties→Styles中把Miltiline和Vertical Scroll属性选上,可以显示多行数据。
再打开ClassWizard→Member Viariables选项卡,选择CSCommTestDlg类, 为IDC_EDIT_RXDATA1添加Byte型变量m_strRXData1,为IDC_EDIT_RXDATA2添加Byte型变量m_strRXData2。说明: m_strRXData1和m_strRXData2分别用来放入传感器1和传感器2的字符数据。
添加串口事件消息处理函数OnComm():打开ClassWizard→Message Maps,选择CSCommTestDlg,选择IDC_MSCOMM1,双击消息OnComm,将弹出的对话框中将函数名改为OnComm。
以下分别为在ClassWizard→Member Viariables为编辑框添加Byte型变量m_strRXData1、m_strRXData1图和在ClassWizard→Message Maps添加串口事件消息处理函数OnComm()。

图4.8 编辑框添加BYTE变量界面
图4.9 添加串口事件消息处理函数OnComm()界面
根据前面MSComm控件的主要属性的介绍[14],
为”打开串口”按钮添加语句”m_ctrlComm.SetPortOpen(true);”
为”关闭串口”按钮添加语句”m_ctrlComm.SetPortOpen(false);”
为”结束程序”按钮添加语句”CDialog::OnCancel();”
为”传感器1″按钮添加语句”void SetOutput(const VARIANT & newValue);
m_ctrlComm.SetOutput(COleVariant(”11000011″));其中”11000011″ 是传感器1对应的下位机响应命令。由于Output语句的数据类型为VARIANT,要用特殊的语句使其进行数制变换。
同理,为”传感器2″按钮添加语句”void SetOutput(const VARIANT & newValue);m_ctrlComm.SetOutput(COleVariant(”00111100″));其中”00111100″ 是传感器2对应的下位机响应命令。
在主对话框的OnInitDialog()函数添加以下程序:
m_ctrlComm.SetCommPort(1); //选择com1
m_ctrlComm.SetSettings(”9600,n,8,1″); //波特率9600,无校验,8个数据位,1个停止位
m_ctrlComm.SetInputModel(1); //1:表示以二进制方式检取数据
m_ctrlComm.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字节时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
OnComm()函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行。
直接获取的数据为VARIANT型数据,我们再通过数据类型转换来变为我们所要的数据类型Int和Byte型,最后在数据显示框显示出来。

上位机工作流程图:

传感器1 传感器2
图4.10 上位机工作流程图
第五章 结 论
经过近3个月的设计,我已经基本完成了毕业设计的内容,现对过去几个月的学习作一个总结。
5.1 设计总结
本次设计的题目是压力传感器无线变送技术研究,设计的系统是使用单片机控制A/D转换芯片,将压力传感器传来的电信号进行处理和存储。在接收到上位机的命令后将转换后的数据通过无线数传模块发送到上位机并显示出来。而上位机能控制多个单片机进行数据采集及转换。
毕业设计是大学4年学习的一个总结。确定了毕业设计的题目之后,我查阅了相关的资料,将整个系统进行模块化处理,每个模块得出了不同的方案,通过比较最后整合出最优方案。我认为这种方法是比较可行的。
本次设计我采用了ADC0832作为A/D转换芯片,AT89C2051作为数据处理芯片,无线数传模块选用Tx100和Rx100,上位机使用Visual C++ 6.0作为开发平台。设计出能运行的系统。通过上位机能控制两个2051芯片,分别接收两个传感器的信号并将其在上位机界面显示出来。在实际应用中,也许需要接收的信号的数量还会更多,但是原理是相通的。
在设计中我研究了所使用芯片的功能,对单片机汇编语言和C++语言作了比较深入的学习,重温了51系列单片机指令,熟悉RS232串口通信协议,能熟练运用Protel来绘制硬件结构图。
设计不足:由于时间仓促,上位机的控制界面略显简单,功能也相对单一,无法配置通信参数。我想,有了本次设计的经验,加上今后的不断学习,我会对这方面的内容有更深的了解,能设计出一个更加完善的系统。
设计展望:可以设计为控制更多数量的单片机,此外,能够配置通信参数,如能在COM1–COM4间选择通信接口,能使系统在多个波特率状态下工作,对数据传输增加校验功能等等,压力值的显示方法也可以加以改进。
5.2 设计心得
在设计中遇到不少困难,这对自己是一个考验,刚开始拿到题目的时候头绪并不是很多,通过查阅资料对整个系统有了一定的认识。单片机的相关内容在大三的课程学过,但是学得并不是很深,在设计前我重新学习了一遍单片机的知识,包括芯片接口和51系列单片机的指令等。串行A/D转换器ADC0832是新接触的一种芯片,除学习芯片功能外,主要了解了对芯片串行输出的控制,这里的软件设计是一个难点。上位机方面Visual C++也是新学习的内容,我学会了如何制作界面,如何进行可视化编程。上位机的通信程序是本次设计中的另一个难点,涉及到了数据读取、数制转换等问题,经过查阅资料,终于克服了遇到的难题,完成本次设计。
我认为我们专业学习硬件知识相对比软件多,所以在软件设计方面我还有很大不足,因此设计中我认真学习了汇编语言和C++语言,学习如何使用Visual C++平台。程序的设计经过了”学习–模仿–编写–修改–再修改–定型”等阶段,在软件的学习上我也花了比较多的时间和精力,让我欣慰的是收获也很大。
本次设计的系统还有不少缺陷,但是我认为收获最大的是学习到了一种方法,在面对自己不了解的领域怎样的方法。在老师的指导、自己努力和同学们共同研究下,完成了本次设计。
结 束 语
三个多月的毕业设计即将完成了,本次设计是我第一次独立完成如此大工作量的课题。从选题到查阅资料,从硬件设计到软件实现,我在完成设计的过程中巩固了大学中的专业知识,并了解了很多以前没有学习过的内容。更重要的是,我锻炼了自己独立学习的能力,这对今后的发展是很有帮助的。
在设计的过程中,我得到了指导老师林立新老师的热心指导,从设计之初林老师就给了我们很多的帮助,给我印象很深的是在我编写汇编程序的时候,对一些概念不是很清晰,林老师耐心地给我指导,使我最终能顺利解决问题。在林老师指导毕业设计的日子里,我从他身上学到了很多东西。此外,感谢同组的杨延雷、殷晓芳等五位同学,在跟他们讨论问题的过程中也有很大的收获。
大学的四年即将结束,感谢所有教导过我的老师,传授给我专业知识和做人道理;感谢方树敏、吴海生、杨延雷、陈金福、李飞五位室友,我们在一起互相关心,互相勉励;感谢通信0303班全体同学,我们一起共同成长;还要感谢所有关心我帮助我的朋友,使我有一个精彩的大学生活。

参考文献
[1] 潘永雄.《新编单片机原理及应用》[M].西安电子科技大学出版社.2000.1-156.
[2] Stevezq.压力传感器原理及应用[EB/OL].http://hi.baidu.com/stevezq/blog
/item/9512c7cb034316fc53664f06.html.2007-05-14.
[3] 郑国君.8位串行A/D转换器ADC0832[J].电子世界.2002,22(9):44-45.
[4] smartrf.ASK无线数传模组.http://www.smartrf.com.cn/cn/txt/tx100.Pdf
http://www.smartrf.com.cn/cn/txt/rx100.pdf[EB/OL].2003-5-26
[5] 朱宇光.《单片机应用新技术教程》[M].电子工业出版社.1999.230-242.
[6] 杜洋.ADC0832芯片原理及应用[N].中国电子报,2005.11.18(4).
[7] 电子驿站.AT89C2051中文资料[EB/OL].http://www.ourmpu.com/webdown/
webdown.htm.2005-10-9
[8] 兆科电子.RS232串行通信简介.[EB/OL].http://www.zhaokeetech.com/2006/
11/29/18175297.Htm.2006-11-29
[9] 杨文龙.《单片机原理及应用》[M]. 西安电子科技大学出版社.2000.133-158.
[10] 孟仁周.单片机实现数据采集PC机进行数据分析的系统设计[D]:[学士学位论
文].贵州民族大学.2006.
[11] 王超龙.《Visual C++6.0入门与提高》[M].人民邮电出版社.2002.13-55.
[12] 月光软件站.MSComm控件属性大揭秘[EB/OL].http://www.moonsoft.com/doc
/46864.Htm.2005.5.
[13] 李志刚 王以法.在VC++中用ActiveX控件实现与单片机的串行通信[J].2006
[14] 龚建伟.串口通信技术专栏[Z].http://www.gjwtech.com/serialcomm.htm.
[15] 龚建伟.串口调试助手源程序及编程详细过程[CB].2001.http://cs.nju.edu.
cn/yangxc/dcc2003.files/jszc-sub/comif-66.htm.2001-6-20
[16] Bjarne Stroustrup.《The C++ programming language(third edition)》
[M].机械工业出版社.1997.

相关日志

No Responses to “压力传感器无线变送技术研究”

Leave a Reply