最新基于单片机的智能水平仪设计
- 格式:doc
- 大小:6.45 MB
- 文档页数:60
基于单片机智能RLC测试仪的设计毕业设计摘要本文主要论述了基于凌阳SPCE061A单片机的智能RLC测试仪的设计,利用单片机对R、L、C等参数进行测量,可以充分利用单片机的运算和控制功能,方便地实现测量,使测量精度得到提高。
同时用软件程序代替一些硬件测量电路,可在硬件结构不变的情况下,修改软件以增加新的功能。
能够很好的完成对RLC参数的测量,以满足现代测控系统的需要。
关键词:单片机;SPCE061A;RLC测试仪ABSTRACTIt is mainly discussed in this paper that the design of intellectual RLC parameter measurer based on Lingyang SPCE061A MCU. MCU use of R, L, C, and other parameters measured, can take full advantage of MCU processing and control functions, to facilitate the realization of measurements for improved measurement accuracy. Simultaneously uses the software procedure to replace some hardware metering circuits, may in the hardware architecture invariable situation, revi se software to increase the new very good completing to the RLC parameter survey, satisfy the modern observation and control system the need.Keywords: MCU;SPCE061A;RLC testing device目录摘要 (I)ABSTRACT (II)目录 (III)前言 (V)1 系统测试原理与总体方案设计 (1)RLC测试原理 (1)相位+有效值测量 (1)相位+有效值测量方案的软仿真 (2)RLC参数测量方法 (3)总体设计方案 (4)系统原理框图 (4)整个系统工作流程 (4)系统设计中的难点和关键技术 (5)2 RLC测试仪硬件部分实现 (6)-5V电源的设计 (6)标准正弦信号发生模块 (6)标准正弦信号的原理 (6)AD9850芯片简介 (8)AD9850硬件电路图及单片机程序 (9)3 I-V变换模块 (11)I-V变换方案设计 (11)I-V变换的硬件电路 (11)4 同时采样模块 (12)同时采样模块方案设计 (12)A/D芯片的选择 (12)ADS7861芯片介绍 (13)ADS7861转换时序的逻辑控制 (13)5 单片机系统设计 (16)SPCE061A单片机概述 (16)单片机的电源设计 (16)SPCE061A最小系统 (17)6 RLC测试仪应用软件设计 (18)数据采集模块程序流程图 (18)中断程序流程图 (19)主程序流程图 (19)结论 (21)参考文献 (22)致谢 (23)附录 (24)前言随着微电子技术、计算机技术、软件技术的高度发展及其在电子测量技术与仪器上的应用,新的测试理论、新的测试方法、新的测试领域以及新的仪器结构不断出现,在许多方面已经冲破了传统仪器的概念,电子测量仪器的功能和作用发生了质的变化。
智能化水平仪的研究与设计第一章引言在高楼、桥梁等建筑行业,对建筑物自身在水平面倾斜度的测量和处理,需要一个能连续工作几个月甚至一年以上的采样进度很高的数字水平仪系统,这就要求该系统必须具有高精度微功耗的功能。
本文所介绍的就是能满足这一要求的数字水平仪系统,它在笔者的工作中已得到了充分的应用和试验。
该系统采用ADXL202芯片产生与水平面倾斜的两个角度量,它是一个具有高精度、宽动态特性的加速度测量芯片。
下面对该芯片的主要特点和用法进行简要介绍,随后介绍ADXL202与微功耗单片机C8051F020的接口电路与程序设计。
第二章 ADXL202简介2.1 特点及结构ADXL202特点如下:(1)ADXL202是集双轴加速度传感器于一体的单块集成电路;(2)它既可测量动态加速度,又可测量静态加速度;(3)具有脉宽占空比输出每轴的输出带宽可调;(4)低功耗(<0.6mA);(5)比电解质、水银、热能斜度测量仪响应快;(6)每根轴的带宽均可通过电容调整;(7)60Hz带宽时的分辨率为5mg;(8)直流工作电压为+3V~+5.25V;(9)可承受1000g的剧烈冲击;(10)可应用于:斜度测量、惯性导航、地震监测装置、交通安全系统等。
图1和图2分别为ADXL202的功能结构框图和引脚排列图。
表1所列是其引脚功能。
2.2 工作原理ADXL202是基于单块集成电路的完善的双轴加速度测量系统。
它是一个以多晶硅为表面的微电机传感器和信号控制环路来执行操作的开环加速测量结构。
对每根轴而言,输出环路将模拟信号转换为脉宽占空比的数字信号。
这些数字信号直接与微处理器接口。
ADXL202可测量正负加速度,其最大测量范围为±2g。
ADXL202也可测量静态加速度,亦可用作斜度测量。
传感器采用在硅片上经表面微加工的多晶硅结构,用多晶硅的弹性元件支撑它并提供平衡加速度所需的阻力。
结构偏转是通过由独立的固定极板和附在移动物体上的中央极板组成的可变电容来测量的。
智能控制仪表课程设计----基于51单片机地智能控制仪表简单设计学校:红河学院专业:电气工程及其自动化姓名:***学号:************班级:10级电气叁班指导老师:**第1章引言仪器仪表是人类认识世界地工具,人们借助于各种仪器仪表对各种物理量进行度量,反映其大小与变化规律. 随着人类认识能力地提高与科学技术不断进步,仪器仪表技术得到了飞速发展.50 年代以前,仪器仪表多为指针式,其理论基础是机电学. 从50 年代起,电子技术特别是数字技术地发展,给仪表行业带来了生机,各种数字式仪表相继问世,许多传统地指针式仪表相继被淘汰,数字仪表使仪表外观耳目一新,数据表达能力与总体性能都大幅提高. 70 年代中期,随着微处理器地出现以及单片机地兴起与应用,设计者将计算机特有地许多优点引入仪表设计,随之产生了一代崭新地智能仪表,使仪表逐渐由数字型向智能化发展,其功能也由单一显示功能转变为具有信息处理、传输、存贮、显示、控制等功能,使仪表性能产生了质地飞跃.,品种繁多. 目前,我国仪器仪表有13 大类,1 300 多个产品. 其中自动化仪表及控制系统是和国民经济各产业部门关系最为密切地一类产品,其传感变送单元与主控装置及I/O接口均正朝智能化方向发展.在本设计中采用以单片机作为仪表核心控制器件,可以利用A/D转换芯片对标准信号进行采集、转换,将输入地模拟量转换成单片机能够检测地数字量进行分析和监测控制,同时可以利用键盘显示电路将相关数据进行显示.与此同时通过所查阅地资料我还了解到随着测量技术地发展和微处理器地广泛应用,单片机系统地电路越来越复杂,而系统地可靠性问题也越来越突出,一般地单片机系统在工业现场等恶劣地环境下容易死机,因此系统在这些场合要保证能够稳定地工作就必须外加监视电路,在设计中采用了美国集把关定时器、电压监控和串行EEPROM三项功能于一体地专用集成芯片X5045.该芯片地应用将有利于简化单片机系统地结构,增强功能、降低系统地成本,尤其是大大地增加了系统地可靠性.X5045中地看门狗对系统提供了保护功能.当系统发生故障而超过设置时间时,电路中地看门狗将通过RESET信号向CPU作出反应.X5045提供了三个时间值供用户选择使用.它所具有地电压临控功能还可以保护系统免受低电压地影响,当电源电压降到允许范围以下时,系统将复位,直到电源电压返回到稳定值为止.本次毕业设计旨在掌握智能控制仪表地设计方法,同时掌握在开发系统下实现部分软件地仿真方法.第2章控制系统地硬件设计硬件组成智能仪表地硬件方框图如图2.1图2.1 智能控制仪表地原理框图2.1 CPU 地选择[6]AT89C52 芯片有40 个引脚,32 个外部双向输入/输出(I/O )端口.同时内含2 个外中断口,3 个16 位可编程定时计数器,2 个全双工串行通信口,2 个读写口线.AT89C52 可以按照常规方法进行编程,也可以在线编程.其将通用地微处理器和Flash 存储器结合在一起,特别是可反复擦写地Flash 存储器可有效地降低开发成本.基于上述特点,可使电路极大地简化,而且程序地编写及固化也相当方便、灵活. AT89C52地引脚如图2.2所示.2.2 标准信号转换电路[5]设计要求实现0~5V,1~5V,0~10ma,4~20ma 标准信号变换电路地设计,输入信号范围确定,输出电压范围则取决于所选取地A/D 转换芯片地输入电压范围,A/D 转换器选用地串行A/D 转换器TLC2543,它地最大输入电压范围为V 5~0,因此需完成四种不同信号与V 5~0电压信号地转换.1. V 5~0/V 5~0转换及V 5~1/V 5~0转换(1)V 5~0/V 5~0转换:此转换电路只需在输入与输出电压之间加一电压跟随器即可.电压跟随器,顾名思义,就是输出电压与输入电压是相同地,就是说,电压跟随器作为同相放大器地特例,在低频情况下其放大倍数接近1,故称为电压跟随器,电压跟随器地显著特点就是,输入阻抗高,而输出阻抗低,一般来说,输入阻抗要达到几兆欧姆是很容易做到地.输出阻抗低,通常可以到几欧姆,甚至更低.因此常在信号处理中作用阻抗变换器.在电路中,电压跟随器一般做缓冲级及隔离级.因为,电压放大器地输出阻抗一般比较高,通常在几千欧到几十千欧,如果后级地输入阻抗比较小,那么信号就会有相当地部分损耗在前级地输出电阻中.在这个时候,就需要电压跟随器来从中进行缓冲.起到承上启下地作用.应用电压跟随器地另外一个好处就是,提高了输入阻抗,这样,输入电容地容量可以大幅度减小,为应用高品质地电容提供了前提保证.电压跟随器地另外一个作用就是隔离.具体电路如图2.3所示.图2.3 0~5V/O ~5V 转换电路Ui1图2.2 AT89C52引脚图(2)V 5~1/V 5~0转换:采用同相放大器电路,如图2.4所示.2. V mA 5~0/10~0地转换及V mA 5~0/20~4地转换 (1)V mA 5~0/10~0地转换电路下图2.5为所设计地I/v 转换电路.其实质是一同相放大器电路,利用mA 10~0电流在电阻R 上产生输入电压.在输出端接负载时,需考虑转换器地输出驱动能力,一般在输出端可再接一个电压跟随器作为缓冲器,V mA 5~0/20~4地转换也同此,由于采用同相端输入,因此放大器A 应选用共模抑制比较高地运算放大器,从电路结构可知,其输入阻抗较低.图2.4 1~5V/O ~5V 转换电路Ui2图2.5 0~10mA/O ~5V 转换电路Ui3(2)V mA 5~0/20~4地转换电路如图2.6.2.3 A/D 转换器地选型设计[3] [8]在单片机开发中,很多都要涉及到将模拟量转换为数字量,因此使用ADC 地场合很多. 选择一款合适地ADC 芯片就显得尤为重要. 由于单片机往往要控制比较多地I/O 口,因此使用并行ADC 会限制系统I/O 口功能地扩展,采用串行ADC 比较适合那些低速采样而控制管脚又比较多地系统.TLC2543是有11个输入端地12 bit 模数转换器,具有转换快、稳定性好、与微处理器接口简单、价格低等优点. 由于它带有串行外设接口(SPI) ,而51系列单片机没有SPI, 为了与TLC2543接口,可利用软件合成SPI 操作,完成A/D 数据地采集.2.3.1 TLC2543地特点及引脚TLC2543是12 bit 串行A/D 转换器,使用开关电容逐次逼近技术完成A /D 转换过程. 由于是串行输入结构,能够节省单片机地I/O 资源. TLC2543地引脚排列如图2.7所示图1中A IN0~A IN10为模拟输入端; /CS 为片选端; DIN 为串行数据输入端;DOUT 为A/D 转换结果地三态串行输出端; EOC 为转换结束端; CLK 为I/O 时钟; REF +为正基准电压端; REF - 为负基准电压端;VCC 为电源; GND 为地.2.3.2 TLC2543使用方法控制字地格式:控制字为从DATE INPUT 端串行输入地8 bit 数据, 它规定了TLC2543要转换地模拟量通道、转换后地输出数据长度以及输出数据地格式. 其功能为:数据寄存器地前4位(D7-D4 )数据,用来选择要求转换地通道,D7D6D5D4=0000时选择0通道,D7D6D5D4=0001时选择1通道,依此类推.1011到1110代表分别选中测试电压.D3D2D1用来选择输出数据长度,共有三种位数可供选择:8位(精度较低,方便单字节串行数据传输),12位(标准位数),16位(低四位为零,便于16位串行数据传输).选择输出数据长度为12位时,即D3D2=00或D3D2=10;D1,D0选择输入数据地导前位,D1:为“0”表示输出数据地最大位导前(MSB ),为“1”时表示最小位导前,D0为“0”时表示输出数据是单极性(无符号二进制),为“1”图2.6 4~20mA/O ~5V 转换电路时表示双极性(有符号二进制).本设计采用地是输出数据长度为8位.TLC2543在每次I/O 周期读取地数据都是上次转换地结果,当前地转换结果在下一个I/O周期中被串行读出,第一次读数由于内部调整,读取地转换结果可能不准确.应丢失.转换过程:TLC2543每次转换和数据传送使用16个时钟周期,并且在每次传送周期之间插入 /CS时序.片选/CS 为高, I/O CLOCK、DATA INPUT被禁止,DATA OUT呈高阻状态, EOC为高. 使/CS变低, I/O CLOCK、DATA INPUT使能, DATA OUT脱离高阻状态. 12个时钟信号从I/O CLOCK端依次加入,随着时钟信号地加入,控制字从DATA INPUT一位一位地在时钟信号地上升沿时被送入TLC2543 (高位先送入) ,同时上一周期转换地A /D数据,即输出数据寄存器中地数据从DATA OUT一位一位地移出. TLC2543收到第4个时钟信号后,通道号也已收到,此时TLC2543开始对选定通道地模拟量进行采样,并保持到第12个时钟地下降沿. 在第12个时钟下降沿, EOC变低,开始对本次采样地模拟量进行A /D转换,转换时间约需10μs,转换完成后EOC变高,转换地数据在输出数据寄存器中,待下一个工作周期输出. 此后,可以进行新地工作周期.2.3.3 TLC2543与AT89C52单片机地接口:89C52单片机没有SP I接口,为了与TLC2543接口可以用软件功能来实现SP I接口,其硬件接口如图2.8所示.图2.82.4 键盘、显示电路地设计[7]在设计中我采用了HD7279A键盘显示芯片做为键盘显示驱动电路芯片.HD7279A 是标准28 引脚双列直插式芯片.其接口电路和外围电路简单,且占用口线少,加之它具有较高地性能价格比.HD7279A可同时驱动8位共阴式数码管(或64只独立LED)地显示驱动芯片,该芯片同时可连接多达64键地键盘矩阵,一片即可完成LED显示及键盘接口地全部功能.HD7279A内部含有译码器,可以直接接收BCD 码或16进制码,并同时具有2种译码方式.此外,还具有多种控制指令,例如:消隐、闪烁、左8 地移、右移、段寻址等.HD7279A是一种管理键盘和 LED显示器地专用智能控制芯片.它能对多达8键盘矩阵情况进行监视,具有自动消除键抖动并识别按键代码地功能.下面表2-1是HD7279引脚说明.2.4.1 HD7279A地特点1.各位可独立控制译码/不译码、消隐和闪烁等属性;2.具有(循环)左移/(循环)右移指令;3.具有段寻址指令,可方便地用来控制独立地LED显示管;4.64键键盘控制器内含消抖电路.表2-1 HD7279引脚说明解释:RESET 为复位端.该端由低电平变成高电平并保持25ms 即复位结束.通常, 该端接+5V 电源.在需要较高可靠性地情况下, 可以连接一外部地复位电路,或直接由单片机控制.DIG0~DIG7 分别为8 个LED 管地位驱动输出端.SA~SG 分别是LED 数码管地A 段~G 段地输出端DP为小数点地驱动输出端.DIG0~DIG7 和SA~SG 同时还分别是64 键盘地列线和行线端口, 完成对键盘地监视、译码和键码地识别.HD7279A 片内具有驱动电路, 可以直接驱动1 英寸及其以下地LED 数码管, 使外围电路变地简单可靠.HD7279A 与微处理器间仅需4 条接口线, 其中CS 为片选信号( 低电平有效) .当微处理器访问HD7279A 时, 应将片选端置为低电平.DATA 为串行数据端, 当向HD7279A 发送数据时, DATA 为输入端;当通过HD7279A 输出键盘代码时, DATA 为输出端.CLK 为数据串行传送地同步时钟输入端, 时钟地上升沿表示数据有效.KEY 为按键信号输出端, 在无键按下时为高电平; 而在有键按下时变为低电平, 并一直保持到按键释放为止.HD7279A地控制指令格式分为纯指令和带有数据地指令两大类,以下分别给予介绍.1. 纯指令:2. 带有数据地指令:带有数据地指令包括以下5种:(1)下载数据且按方式0译码.该命令由二字节组成,前半部分为指令,后半部分为显示内容,其中a2~a0为位地址,d0~d3为数据.(2)下载数据且按方式1译码此指令与上一条指令基本相同,所不同地只是译码方式.该指令地译码方式为:d0~d3地值对应于(3)下载数据但不译码该指令地格式如下:.当相应地数据位为1时,该段点亮,否则该段不亮.(4)闪烁控制88H.此命令用于控制各个数码管地闪烁属性,d1~d8分别对应数码管1~8.在相应地各位中0表示闪烁,1表示不闪烁.开机后地缺省状态为各位均不闪烁.具体指令格式如下:该指令地格式如下:2.4.2 HD7279A与单片机地接口设计HD7279A驱动地键盘显示地接线如图3.8所示.在键盘方面可以不用到地键,可以不用按钮.可以根据你地需要,进行按钮地增减.本设计用到一个键——“显示键”.图2.9 HD7279A 驱动地键盘显示电路2.5 D/A 转换器选型设计在后向通道中采用D /A 转换器是计算机实现对模拟量控制地常用方式,而串行D /A 转换器由于接口电路简单、易于远程操作以及体积小、功耗低等优点而广泛应用于便携式设备或分布式控制系统中.本设计对于D/A 转换器地转换速度要求不高.设计中选用串行12位D/A 转换器TLC5617,完全满足系统对分辨率地要求.图2.10 为TLC5617地引脚图,表2-2 是 TLC5617引脚排列及引脚功能说明 .表2-2 TLC5617引脚排列及引脚功能说明图2.10 TLC5617引脚图单片机与TLC5617地接口电路如图3.10所示.P0.6通过光电耦合器接TLC5617地SCLK端,P0.5通过光电耦合器接TLC5617地DIN端,P0.7通过光电耦合器接TLC5617地CS端.当片选CS为低电平时,输入数据由时钟定时以最高有效位在前地方式输入TLC5617地16位移位寄存器.SCLK输入地下降沿把数据移入寄存器.然后CS地上升沿把数据送到TLC5617地内部DAC寄存器.所有CS地跳变应当发生在SCLK输入为低电平时.图2.11 TLC5617与单片机的接口2.6 RS-232 串行通讯电路由于AT89C52单片机具有集成度高、面向控制、系统结构简单、价格便宜等诸多优点,因而在智能化仪器仪表、数据采集、数据测量等方面有着广泛地应用.但是,实际应用中单片机在数据处理能力、人机交互等方面往往不能满足要求,因而通常用PC机来弥补单片机地这些不足.串行通信端口(Serial Communication Port)在系统控制地范畴中一直扮演着极其重要地角色,它不仅没有因为时代地进步而遭淘汰,反而在规格上越来越先进,应用也越来越广泛.现在,串行通信端口(RS —232)是计算机上地标准配置,用途上则以连接调制解调器来传输数据最为常见.RS —232通信端口是每台计算机上地必要配置,通常有COMl 与COM2两个端口.计算机上地RS —232均是公头,在一般个人计算机上地外观如下图.图3-11计算机上地串行端口端口共有9个引脚,每一个引脚都有其特定地名称与用途,它们在计算机和连接线上地位置和定义如图2.12图2.12RS-232 电路是单片机采集电路部分与上位机之间地接口电路.单片机就是利用RS-232 串口通讯向PC 机发送指令,以完成数据地远距离传输.RS-232 是美国电子工程师协会正式公布地串行总线标准,也是目前最常用地串行接口标准,主要用来实现计算机与计算机之间、计算机与外设之间地数据通讯.RS-232串行通讯是全双工地,可以同时接受和发送,它地逻辑“1”是-5V ~-15V,逻辑“0”是+5V ~+15V.RS-232 串行接口总线适用于设备之间地通讯距离不大于15m,并且传输速率最大为20Kbps.由于RS-232 和TTL 各自规定了自己地电气标准,互不兼容,因此RS-232 与TTL 电路接口时需进行电平单介绍一种电平转换.单电源RS-232 电平转换集成电路: MAXIM 公司出品MAX 系列单电源供电RS-232 接收发送器可大大简化RS-232 电平转换电路.它具有功耗低、通信速率高、封装形式多、单一电源供电、外接器件少等特点.它由充电泵电压变换器、驱动器(发送器)和接收器三个部分组成.2.6.1 +5V 到±10V 双充电泵电压变换器+5V 到±10V 地变换是由一种专利产品双充电泵电压变换器(见图2.13)完成地.第一个充电泵电压变换器地电容器C1 被充上+5V 电压,输出滤波电容器C3 上也充有+5V 电压,输出电压V+为+10V.第二个充电泵电压变换器用电容器C2 将+10V 反相为-10V,保存-10V 在V-输出滤波电容器C4 上.在停机方式下,V+通过一个1K 地内部下拉电阻连接到VCC,同时V-通过一个1K 地内部上拉电阻连接到地.1:CD-Carrier Detect, 载波检查 6:DSR-Data SetReady,传输端待命 2:RXD-Receive, 数据接受 7:RTS-Request ToSend,要求传输 3:TXD-Transmit, 数据传输 8:CTS-Clear To Send,清除并传输 4:DTR-Data Terminal Ready, 数据端待命9:RI-Ring Indicator, 响铃指示 5:GND-Ground, 地线 123456789123456789(公头)(母头)图2.13 电压变换器电路2.6.2 RS-232 发送器发送器地输入为TTL/CMOS 电平,输出RS-232 电平,当MAX 系列地电压倍增器(CPE)地工作电压为+5V,而RS-232 接受端负载为5K 时,发送器地输出电压为+8V 左右;空载时输出电压从(V+-0.6)V-之间变化,发送器地输入端内置400K地上拉电阻,当输入端悬空时,被上拉到Vcc,经反相器,输出端为低电平,上拉电阻耗电为15uA.所以悬空时地功耗最低2.6.3 RS-232 接收器接受器输入为RS-232 电平,输出为TTL/CMOS 电平.不使用地接受器输入、输出端可以悬空.其输入端内置5K 地下拉电阻.当输入端悬空时,被下拉至地,经反相器,输出为高电平.图 2.14 MAX 232 引脚图MAX232芯片是美信公司专门为电脑地rs-232标准串口设计地接口电路,使用+5v单电源供电.内部结构基本可分三个部分:第一部分是电荷泵电路.由1、2、3、4、5、6脚和4只电容构成.功能是产生+12v和-12v两个电源,提供给rs-232串口电平地需要.第二部分是数据转换通道.由7、8、9、10、11、12、13、14脚构成两个数据通道.其中13脚(r1in)、12脚(r1out)、11脚(t1in)、14脚(t1out)为第一数据通道.8脚(r2in)、9脚(r2out)、10脚(t2in)、7脚(t2out)为第二数据通道.Ttl/cmos数据从t1in、t2in输入转换成rs-232数据从t1out、t2out送到电脑dp9插头;dp9插头地rs-232数据从r1in、r2in输入转换成ttl/cmos数据后从r1out、r2out输出.第三部分是供电.15脚dng、16脚vcc(+5v).正常工作时对C1-C4 地电容类型要求不是很高,例如MAX202 需要0、1uF 地电容,而MAX232 需要1uF 地电容,在所有地情况下10uF 以内地电容均可使用.本系统选用MAX232 芯片实现TTL 与232 电平之间地转换,与接口电路相连地一侧是AT89C52 单片机,另一侧是GPRS MODEM,由它们来实现数据地无线传输.系统地RS-232串行通讯电路如图2.15.图2.15 RS-232串口电路原理图2.7 看门狗电路[2]测量技术地发展和微处理器地广泛应用, 单片机系统地电路越来越复杂,而系统地可靠性问题也越来越突出,一般地单片机系统在工业现场等恶劣地环境下容易死机,要求系统在这些场合可靠稳定地工作,就必须外加监视电路.X5045 是在单片机系统中广泛应用地一种看门狗芯片,他把上电复位、看门狗定时器、电压监控和E2 PROM四种常用功能组合在单个芯片里, 以降低系统成本、节约电路板空间.其看门狗定时器和电源电压监控功能可对系统起到保护作用;512 ×8 位地E2 PROM 可用来存储单片机系统地重要数据.将其运用在温度控制系统,取得了令人满意地结果.2.7.1 X5045 芯片地工作原理(1)引脚及功能X5045 地管脚排列如图2.13 所示,他共有8 个引脚,各引脚地功能如下:CS :电路选择端,低电平有效;SO :串行数据输出端;SI :串行数据输人端;SCK:串行时钟输入端;WP :写保护输人端,低电平有效;RESET :复位输出端;VCC:电源端; VSS :接地端.图2.13 X5045 地管脚图(2)工作原理X5045 除了作为看门狗芯片使用外,另外一个基本地功能就是作为E2 PROM 数据存储器使用,内部包含512 ×8 地串行E2 PROM ,以保证系统在掉电后仍可维持重要数据不变.X5045 与MCU 采用流行地SPI 总线接口方式,可以和任意一款单片机地I/ O 口直接连接.数据在SCK地上升沿由时钟同步输入,在整个工作期内,CS必须是低电平且WP 必须是高电平.如果在看门狗定时器预置地溢出时间内没有总线活动通常指CS引脚电平变化,那么X5045 将提供复位信号输出以保证系统地可靠运行.X5045 内部有一个“写使能”锁存器,在执行写操作之前该锁存器必须被置位,在写周期完成之后,该锁存器自动复位.X5045 还有一个状态寄存器,用来提供X5045状态信息以及设置块保护和看门狗地定时周期.对芯片内部寄存器地读写均按一定地指令格式进行, 表1 为X5045 地指令格式.数据读写时,MSB(最高位) 在前.表1 中地A8 表示内部存储器地高地址位.在实际应用中,往往要对状态寄存器进行读写操作,他是一个8 位地寄存器,用来标识芯片地忙闲状态、内部E2 PROM 数据块保护范围以及看门狗定时器地定时周期,其内部格式如表2 所示.器地保护范围,一旦设置了保护位,则被保护地数据段只允许读,写操作是严格禁止地.看门狗定时器周期设置位WD1 ,WD0 可以由用户通过编程自行设定看门狗地溢出时间,当全为0 时定时间为114 s ,如表3 所示.2.7.2 X5045 芯片与52 内核地单片机连接图2.14 X5045 与AT89C52 地硬件接口电路2.8 电源部分由于时间限止,我采用了5V~12V地直流稳压电源.第3章系统地软件设计系统软件主要包括两部分:一部分是单片机地程序,一部分是上位机地程序.3.1 下位机程序设计下位机主程序完成系统地初始化工作,启动A/D转换,将采集来地模拟量转换成数字量,然后分别执行相应地子程序.主要子程序包括:显示程序,键盘扫描程序, X5045读/写控制程序DAC转换程序.具体流程图下图.具体程序见附录.3.1.1 ADC转换程序模块该子程序主要完成对信号地采集,转换.3.1.2 显示程序模块该子程序主要完成对采集、转换后地信号进行显示,HD7279A芯片构成地键盘显示电路,按照其程序依次调用发送、收受程序,将单片机处理后地数据通过LED数码管显示.3.1.3键盘扫描程序模块该子程序主要完成任务书中要求地对数码管显示地数据进行有关参数地设置3.1.4 DAC转换程序模块该子程序主要完成数字变成模拟地功能,实现对模拟量控制地常用方式.3.1.5 看门狗子程序模块该程序主要完成对系统地监控功能.3.2 上位机程序设计PC机地程序采用C语言设计,主要包括以下功能:与单片机部分进行通讯、显示转换数据、建立数据存储文件等功能.程序流程图如下图所示.其程序流程图如下图.由于应用程序服务器与单片机之间地通信一般是短距离地,在考虑低成本地情况下采用串行、异步、单工方式即可,即用两条信号线和一条地线完成数据地传送,这就要求在发送和接收之间制定一定地规则,使发送和接收之间协调一致.本系统根据PC机和单片机之间地特点编写了串行发送和接收模块实现了PC机和单片机之间地高速串行通信.上位机接收数据所用C语言程序包括初始化子程序和接收子程序.各子程序分别如下:void init_com1(void)/*初始化子程序*/{outportb(0x3fb,0x80);/*线控制寄存器高位置1,使波特率设置有效*/outportb(0x3f8,0x18);/*波特率设置,与单片机波特率一致为4800bps*/outportb(0x3f9,0x00);outportb(0x3fb,0x03);/*线控制寄存器设置,8位数据位,1位停止位,无奇偶校验*/outportb(0x3fc,0x03);/*Modem控制寄存器设置,使DTR和RTS输出有效*/outportb(0x3f9,0x00);/*设置中断允许寄存器,禁止一切中断*/}void receive data(void)/*查询方式接收数据子程序*/{while(!kbhit()){while(!(inportb(0x3fd)&0x01));/*若接收寄存器为空,则等待*/printf("%x ",inportb(0x3f8));/*读取结果并显示*/}getch();}第4章系统抗干扰措施抗干扰设计是单片机应用系统设计地重要组成部分,没有良好地抗干扰措施,系统就无法安全可靠地工作.当然,我们只能通过系统软件、硬件设计尽可能地减少干扰带来地影响,而不可能完全消除干扰.本系统在抗干扰方面考虑了如下地问题:a:电源去耦,在电源线和地线之间并联47uF 和0.1uF 两个去耦电容,并联大电容为了去除低频干扰,并联小电容为了去除高频干扰.b:加宽地线和电源线,加宽后地地线和电源线是信号线地7 倍.c:所有芯片可靠接地,并且接地线构成环路.d:手工布置元件和布线,连线尽可能短.e:双面板两面地线条尽可能垂直交叉.f:避免来自传感器,测量信号功能模块,控制信号功能信号地干扰,模拟电路通路通过隔离放大器隔离,数字电路通过光电耦合器进行隔离.g:软件抗干扰设计: 通常有数字滤波技术、软件冗余、软件陷阱、看门狗等技术.结论在本设计中,按照指导教师下达地要求认真完成设计,包括仪表地方案设计、标准信号地电路及A/D 转换、键盘显示电路地连接、单片机地串行通讯接口电路、看门狗技术和D/A输出控制等硬件电路,并完成相关地程序编写及利用开发系统对部分软件进行仿真.在设计时,我遇到过许多困难,我地指导老师吴春富老师热心地为我答疑,许多老师也对我地毕业设计给予关注和指导,帮助我解决了许多难题,在此我表示感谢.附录ORG 0000HAJMP STARTORG 0030HSTART:MOV SP,#07H;LCALL TLC2543;LCALL KMG;LCALL HD7279A;LCALL TLC5617;LCALL KMG;AJMP START;;TLC2543接口子程序TLC2543: CLR P0.0 ;清I/O时钟。
智能控制仪表简单设计龙岩学院电子信息工程学号:200402208 姓名:邓晶晶指导老师:吴春富【摘要】:随着传感器技术、微电子技术、单片机技术的不断发展,为智能控制仪表测控功能的完善、测控精度的提高和抗干扰能力的增强等提供了条件。
本设计介绍了一种用变送器现场采集的温、湿度等信号再经A/D 转换送单片机进行处理,最后通过数码显示器,键盘等硬件设计实现了工作过程的自动化。
一般的单片机系统在工业现场等恶劣的环境下容易死机,所以在本文中外加监视电路对系统起保护作用。
关键词】:AT89C52 单片机;HD7279A; 看门狗;第1章引言仪器仪表是人类认识世界的工具,人们借助于各种仪器仪表对各种物理量进行度量,反映其大小与变化规律.随着人类认识能力的提高与科学技术不断进步,仪器仪表技术得到了飞速发展.50年代以前,仪器仪表多为指针式,其理论基础是机电学•从50年代起,电子技术特别是数字技术的发展,给仪表行业带来了生机,各种数字式仪表相继问世,许多传统的指针式仪表相继被淘汰,数字仪表使仪表外观耳目一新,数据表达能力与总体性能都大幅提高• 70年代中期,随着微处理器的出现以及单片机的兴起与应用,设计者将计算机特有的许多优点引入仪表设计,随之产生了一代崭新的智能仪表,使仪表逐渐由数字型向智能化发展,其功能也由单一显示功能转变为具有信息处理、传输、存贮、显示、控制等功能,使仪表性能产生了质的飞跃.,品种繁多•目前,我国仪器仪表有13大类,1 300多个产品.其中自动化仪表及控制系统是和国民经济各产业部门关系最为密切的一类产品,其传感变送单元与主控装置及I/O接口均正朝智能化方向发展•在本设计中采用以单片机作为仪表核心控制器件,可以利用A/D转换芯片对标准信号进行采集、转换,将输入的模拟量转换成单片机能够检测的数字量进行分析和监测控制,同时可以利用键盘显示电路将相关数据进行显示。
与此同时通过所查阅的资料我还了解到随着测量技术的发展和微处理器的广泛应用,单片机系统的电路越来越复杂,而系统的可靠性问题也越来越突出,一般的单片机系统在工业现场等恶劣的环境下容易死机,因此系统在这些场合要保证能够稳定的工作就必须外加监视电路,在设计中采用了美国集把关定时器、电压监控和串行EEPRO三项功能于一体的专用集成芯片X5045。
基于单片机的智能仪器综合设计实验一、实验目的在实验一~实验三的基础上,完成综合设计实验,学会信号采集、数据处理、键盘控制、LCD或LED显示等功能的智能仪器设计。
二、复习与参考实验一~实验三三、设计指标利用K分度号热电偶进行温度检测,测温范围为500-1200ºC,室温为20ºC,用LCD或LED显示室温和测量温度。
具有4路温度信号循环检测功能,通道切换时间可调;具有任意指定通道显示功能。
四、实验要求1.选择传感器,设计硬件电路,包括检测电路、信号调理电路、AD转换电路、单片机最小系统、LED显示(单号)、LCD显示(双号)、独立式按键,画出电路原理图。
2.画出软件流程图。
3.用Keil C51编写程序。
3.实验结果在LCD或LED上显示出来。
4.实验前完成第1、2项备查。
五、实验仪器设备和材料清单PC机;单片机实验板、连接导线、ST7920图形液晶模块Keil c51软件六、实验成绩评定方法实验成绩包括预习、实验完成质量、实验报告质量3部分组成,各部分所占比例分别为30%、40%、30%。
八、实验报告要求实验报告格式:●实验名称●实验目的●实验内容●硬件设计●软件设计●调试过程●参考文献●附1:电路原理图●附2:程序清单附录:实验程序源代码如下:(陈寅)#include "reg51.h"#define THC0 0xee //5ms时间常数设置#define TLC0 0x00sbit ADWR=P3^6; /***WR*****/sbit ADRD=P3^7; /***RD*****/sbit ADCS=P2^7; /***CS*****/sbit EOC=P3^3; /***EOC****/sbit ADA=P1^3; //通道选择引脚sbit ADB=P1^4;sbit ADC=P1^5;sbit CS =P1^0; /****************/sbit SID=P1^1; /**液晶引脚定义**/sbit SCLK=P1^2; /****************/sbit MODE=P2^0; /*************************/sbit UP=P2^1; /*四个按键接口,0表示按下*/sbit DOWN=P2^2; /*************************/sbit LED1=P2^3; /**4个LED灯引脚定义**/sbit LED2=P2^4; /********************/sbit LED3=P2^5; /********************/sbit LED4=P2^6; /********************//***************500~1200°C范围的K分度表,间隔10*******************/ unsigned int code K_TABLE[71]={20644,21066,21493,21919,22346,22772,23198,23624,24050,24476,24902,25327,25751,26176,26599,27022,27445,27867,28288,28709,29128,29547,29965,30383,30799,31214,31629,32042,32455,32866,33277,33686,34095,34502,34909,35314,35718,36121,36524,36925,37325,37725,38122,38519,38915,39310,39703,40096,40488,40897,41296,41657,42045,42432,42817,43202,43585,43968,44349,44729,45108,45486,45863,46238,46612,46985,47356,47726,48095,48462,48828}; unsigned char GetAdData[10]={0}; //存放获得AD值的数组变量unsigned char ViewTemperature[4]={"0000"}; //显示温度缓冲数组变量unsigned MODESelect=1;int ChangeTime=2; //通道切换时间,单位Sint TongDao=1;void delay(unsigned int j){unsigned char i;do{for(i=0;i<100;i++);}while(j--);}void send_command(unsigned char command_data) //发送命令{unsigned char i;unsigned char i_data;i_data=0xf8; //操作命令,可以查看资料delay(10);CS=1;SCLK=0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data=i_data&0x0f;i_data<<=4;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;}void send_data(unsigned char command_data) //发送数据{unsigned char i;unsigned char i_data;i_data=0xfa; //操作命令,可以查看资料delay(10);CS=1;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data=i_data&0x0f; //取低四位i_data<<=4; //左移四位,从而变成高四位for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;}void InitLCD() //液晶初始化{send_command(0x30); //功能设置:一次送8位数据,基本指令集send_command(0x06); //点设定:显示字符/光标从左到右移位,DDRAM地址加1send_command(0x0c); //显示设定:开显示,显示光标,当前显示位反白闪动send_command(0x04); //显示设定:开显示,显示光标,当前显示位反白闪动send_command(0x01); //清DDRAMsend_command(0x02); //DDRAM地址归位send_command(0x80); //把显示地址设为0X80,即为第一行的首位}/* x,y为起始座标x(0<=x<=3),y(0<=y<=7),x为行座标,y为列座标;how为要显示汉字的个数;style为显示字符的类型,0表汉字,1表字母;str是要显示汉字的地址*/void Display(unsigned char x,unsigned char y,unsigned char how,bit style,unsigned char *stri) //液晶显示{unsigned char hi=0;if(x==0) send_command(0x80+y);else if(x==1) send_command(0x90+y);else if(x==2) send_command(0x88+y);else if(x==3) send_command(0x98+y);if(style==0){for(hi=0;hi<how;hi++){send_data(*(stri+hi*2));send_data(*(stri+hi*2+1));}}elsefor(hi=0;hi<how;hi++) send_data(*(stri+hi));}float LvBo(void)//复合滤波{unsigned char max,min,i;unsigned int sum=0;float U1;max=GetAdData[0];min=GetAdData[0];for(i=0;i<10;i++){sum=sum+GetAdData[i];if(max<GetAdData[i]) max=GetAdData[i];if(min>GetAdData[i]) min=GetAdData[i];}sum=sum-max-min;U1=(float)sum/8;U1=10.0*((U1*5.0)/255); //换成mvreturn U1;}void search (void)//查表子函数{unsigned int da=0,max,min,mid,j;unsigned int var;da=LvBo()*1000; //u1扩大1000倍da=da+798; //20度max=71;min=0;var=0;while(1){mid=(max+min)/2; //中心元素位置if(K_TABLE[mid]==da) {var=mid*10;break;} //中心元素等于查表元素,计算相应温度else if(K_TABLE[mid]>da) max=mid-1;else min=mid+1;if(max-min==1) /*线性插值计算温度值*/{j=(K_TABLE[max]-K_TABLE[min])/10; /*表中相邻两值对应温度相差10°C*/j=(da-K_TABLE[min])/j;var=10*min+j;break;}if(max==min){if(da>=K_TABLE[min]){j=(K_TABLE[min+1]-K_TABLE[min])/10;j=(da-K_TABLE[min])/j;}else if(da<K_TABLE[min]){j=(K_TABLE[min]-K_TABLE[min-1])/10;j=(da-K_TABLE[min-1])/j;min=min-1;}var=10*min+j;break;}}var=var+500;ViewTemperature[0]=var/1000+0x30;ViewTemperature[1]=var/100%10+0x30;ViewTemperature[2]=var/10%10+0x30;ViewTemperature[3]=var%10+0x30;}void LcdDisplay(void){unsigned char ViewMODESelect,ViewTongDao[5]={"0 "},ViewChangeTime[5]={"00(S)"};ViewMODESelect=MODESelect+0x30;ViewTongDao[0]=TongDao+0x30;if(MODESelect==1||MODESelect==2){if(MODESelect==1) Display(0,3,5,0,":自动切换");else if(MODESelect==2) Display(0,3,5,0,":手动切换");Display(0,0,2,0,"模式"); //液晶显示Display(0,2,1,1,&V iewMODESelect);Display(1,0,5,0,"温度通道:");Display(1,5,5,1,V iewTongDao);Display(2,0,4,0,"温度值:");Display(2,4,4,1,V iewTemperature);Display(2,6,2,1,"℃");}else if(MODESelect==3){ViewChangeTime[0]=ChangeTime/10+0x30;ViewChangeTime[1]=ChangeTime%10+0x30;Display(0,0,2,0,"模式");Display(0,2,1,1,&V iewMODESelect);Display(0,3,5,0,":设置时间");Display(1,0,5,0,"切换时间:");Display(1,5,5,1,V iewChangeTime);Display(2,0,14,1," "); //本行清屏}}void TDSelect(void) //AD通道设置{if(TongDao>=5) TongDao=1;if(TongDao<=0) TongDao=4;if(TongDao==1) {ADC=0;ADB=0;ADA=0;}else if(TongDao==2) {ADC=0;ADB=0;ADA=1;}else if(TongDao==3) {ADC=0;ADB=1;ADA=0;}else if(TongDao==4) {ADC=0;ADB=1;ADA=1;}}main(){unsigned char AdCount=0; //用来存放AD采集次数InitLCD();TMOD=0x11; //定时器0初始化TH0=THC0;TL0=TLC0;TR0=1;ET0=1;EA=1;P2|=0x07; //按键初始为高while(1){ADWR=1; /************/ADCS=0; /************/ADWR=0; /**AD初始化**/ADWR=1; /************/while(!EOC); //等待转换结束ADRD=0;GetAdData[AdCount]=P0; //读取转换结果AdCount++;if(AdCount>=10) //连续采集10次值{AdCount=0;search(); //查表LED1=!LED1;LcdDisplay(); //显示}}}void Timer0() interrupt 1{static unsigned char count=0,UPFlag=1,DOWNFlag=1; //按键标志位static unsigned int TimeCount=0;TH0=THC0;TL0=TLC0;if(MODE==0||UP==0||DOWN==0){count++;if(count>=30) //消抖处理{count=0;if(MODE==0) //按键按下{MODESelect++;if(MODESelect>=4) MODESelect=1;}else if(UP==0){UPFlag=0;if(MODESelect==2){TongDao++;TDSelect();}}else if(DOWN==0){DOWNFlag=0;if(MODESelect==2){TongDao--;TDSelect();}}}}else count=0;if(MODESelect==1){TimeCount++;if(TimeCount>=(ChangeTime*1000/5)){TimeCount=0;TongDao++;TDSelect();}}else if(MODESelect==3){if(UPFlag==0) {UPFlag=1;ChangeTime++;}else if(DOWNFlag==0){DOWNFlag=1;ChangeTime--;if(ChangeTime<=0) ChangeTime=1;}}}。
基于单片机的智能仪器综合设计实验一、实验目的在实验一~实验三的基础上,完成综合设计实验,学会信号采集、数据处理、键盘控制、LCD或LED显示等功能的智能仪器设计。
二、复习与参考实验一~实验三三、设计指标利用K分度号热电偶进行温度检测,测温范围为500-1200ºC,室温为20ºC,用LCD或LED显示室温和测量温度。
具有4路温度信号循环检测功能,通道切换时间可调;具有任意指定通道显示功能。
四、实验要求1.选择传感器,设计硬件电路,包括检测电路、信号调理电路、AD转换电路、单片机最小系统、LED显示(单号)、LCD显示(双号)、独立式按键,画出电路原理图。
2.画出软件流程图。
3.用Keil C51编写程序。
3.实验结果在LCD或LED上显示出来。
4.实验前完成第1、2项备查。
五、实验仪器设备和材料清单PC机;单片机实验板、连接导线、ST7920图形液晶模块Keil c51软件六、实验成绩评定方法实验成绩包括预习、实验完成质量、实验报告质量3部分组成,各部分所占比例分别为30%、40%、30%。
八、实验报告要求实验报告格式:●实验名称●实验目的●实验内容●硬件设计●软件设计●调试过程●参考文献●附1:电路原理图●附2:程序清单附录:实验程序源代码如下:(陈寅)#include "reg51.h"#define THC0 0xee //5ms时间常数设置#define TLC0 0x00sbit ADWR=P3^6; /***WR*****/sbit ADRD=P3^7; /***RD*****/sbit ADCS=P2^7; /***CS*****/sbit EOC=P3^3; /***EOC****/sbit ADA=P1^3; //通道选择引脚sbit ADB=P1^4;sbit ADC=P1^5;sbit CS =P1^0; /****************/sbit SID=P1^1; /**液晶引脚定义**/sbit SCLK=P1^2; /****************/sbit MODE=P2^0; /*************************/sbit UP=P2^1; /*四个按键接口,0表示按下*/sbit DOWN=P2^2; /*************************/sbit LED1=P2^3; /**4个LED灯引脚定义**/sbit LED2=P2^4; /********************/sbit LED3=P2^5; /********************/sbit LED4=P2^6; /********************//***************500~1200°C范围的K分度表,间隔10*******************/ unsigned int code K_TABLE[71]={20644,21066,21493,21919,22346,22772,23198,23624,24050,24476,24902,25327,25751,26176,26599,27022,27445,27867,28288,28709,29128,29547,29965,30383,30799,31214,31629,32042,32455,32866,33277,33686,34095,34502,34909,35314,35718,36121,36524,36925,37325,37725,38122,38519,38915,39310,39703,40096,40488,40897,41296,41657,42045,42432,42817,43202,43585,43968,44349,44729,45108,45486,45863,46238,46612,46985,47356,47726,48095,48462,48828}; unsigned char GetAdData[10]={0}; //存放获得AD值的数组变量unsigned char ViewTemperature[4]={"0000"}; //显示温度缓冲数组变量unsigned MODESelect=1;int ChangeTime=2; //通道切换时间,单位Sint TongDao=1;void delay(unsigned int j){unsigned char i;do{for(i=0;i<100;i++);}while(j--);}void send_command(unsigned char command_data) //发送命令{unsigned char i;unsigned char i_data;i_data=0xf8; //操作命令,可以查看资料delay(10);CS=1;SCLK=0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data=i_data&0x0f;i_data<<=4;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;}void send_data(unsigned char command_data) //发送数据{unsigned char i;unsigned char i_data;i_data=0xfa; //操作命令,可以查看资料delay(10);CS=1;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data=i_data&0x0f; //取低四位i_data<<=4; //左移四位,从而变成高四位for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;}void InitLCD() //液晶初始化{send_command(0x30); //功能设置:一次送8位数据,基本指令集send_command(0x06); //点设定:显示字符/光标从左到右移位,DDRAM地址加1send_command(0x0c); //显示设定:开显示,显示光标,当前显示位反白闪动send_command(0x04); //显示设定:开显示,显示光标,当前显示位反白闪动send_command(0x01); //清DDRAMsend_command(0x02); //DDRAM地址归位send_command(0x80); //把显示地址设为0X80,即为第一行的首位}/* x,y为起始座标x(0<=x<=3),y(0<=y<=7),x为行座标,y为列座标;how为要显示汉字的个数;style为显示字符的类型,0表汉字,1表字母;str是要显示汉字的地址*/void Display(unsigned char x,unsigned char y,unsigned char how,bit style,unsigned char *stri) //液晶显示{unsigned char hi=0;if(x==0) send_command(0x80+y);else if(x==1) send_command(0x90+y);else if(x==2) send_command(0x88+y);else if(x==3) send_command(0x98+y);if(style==0){for(hi=0;hi<how;hi++){send_data(*(stri+hi*2));send_data(*(stri+hi*2+1));}}elsefor(hi=0;hi<how;hi++) send_data(*(stri+hi));}float LvBo(void)//复合滤波{unsigned char max,min,i;unsigned int sum=0;float U1;max=GetAdData[0];min=GetAdData[0];for(i=0;i<10;i++){sum=sum+GetAdData[i];if(max<GetAdData[i]) max=GetAdData[i];if(min>GetAdData[i]) min=GetAdData[i];}sum=sum-max-min;U1=(float)sum/8;U1=10.0*((U1*5.0)/255); //换成mvreturn U1;}void search (void)//查表子函数{unsigned int da=0,max,min,mid,j;unsigned int var;da=LvBo()*1000; //u1扩大1000倍da=da+798; //20度max=71;min=0;var=0;while(1){mid=(max+min)/2; //中心元素位置if(K_TABLE[mid]==da) {var=mid*10;break;} //中心元素等于查表元素,计算相应温度else if(K_TABLE[mid]>da) max=mid-1;else min=mid+1;if(max-min==1) /*线性插值计算温度值*/{j=(K_TABLE[max]-K_TABLE[min])/10; /*表中相邻两值对应温度相差10°C*/j=(da-K_TABLE[min])/j;var=10*min+j;break;}if(max==min){if(da>=K_TABLE[min]){j=(K_TABLE[min+1]-K_TABLE[min])/10;j=(da-K_TABLE[min])/j;}else if(da<K_TABLE[min]){j=(K_TABLE[min]-K_TABLE[min-1])/10;j=(da-K_TABLE[min-1])/j;min=min-1;}var=10*min+j;break;}}var=var+500;ViewTemperature[0]=var/1000+0x30;ViewTemperature[1]=var/100%10+0x30;ViewTemperature[2]=var/10%10+0x30;ViewTemperature[3]=var%10+0x30;}void LcdDisplay(void){unsigned char ViewMODESelect,ViewTongDao[5]={"0 "},ViewChangeTime[5]={"00(S)"};ViewMODESelect=MODESelect+0x30;ViewTongDao[0]=TongDao+0x30;if(MODESelect==1||MODESelect==2){if(MODESelect==1) Display(0,3,5,0,":自动切换");else if(MODESelect==2) Display(0,3,5,0,":手动切换");Display(0,0,2,0,"模式"); //液晶显示Display(0,2,1,1,&V iewMODESelect);Display(1,0,5,0,"温度通道:");Display(1,5,5,1,V iewTongDao);Display(2,0,4,0,"温度值:");Display(2,4,4,1,V iewTemperature);Display(2,6,2,1,"℃");}else if(MODESelect==3){ViewChangeTime[0]=ChangeTime/10+0x30;ViewChangeTime[1]=ChangeTime%10+0x30;Display(0,0,2,0,"模式");Display(0,2,1,1,&V iewMODESelect);Display(0,3,5,0,":设置时间");Display(1,0,5,0,"切换时间:");Display(1,5,5,1,V iewChangeTime);Display(2,0,14,1," "); //本行清屏}}void TDSelect(void) //AD通道设置{if(TongDao>=5) TongDao=1;if(TongDao<=0) TongDao=4;if(TongDao==1) {ADC=0;ADB=0;ADA=0;}else if(TongDao==2) {ADC=0;ADB=0;ADA=1;}else if(TongDao==3) {ADC=0;ADB=1;ADA=0;}else if(TongDao==4) {ADC=0;ADB=1;ADA=1;}}main(){unsigned char AdCount=0; //用来存放AD采集次数InitLCD();TMOD=0x11; //定时器0初始化TH0=THC0;TL0=TLC0;TR0=1;ET0=1;EA=1;P2|=0x07; //按键初始为高while(1){ADWR=1; /************/ADCS=0; /************/ADWR=0; /**AD初始化**/ADWR=1; /************/while(!EOC); //等待转换结束ADRD=0;GetAdData[AdCount]=P0; //读取转换结果AdCount++;if(AdCount>=10) //连续采集10次值{AdCount=0;search(); //查表LED1=!LED1;LcdDisplay(); //显示}}}void Timer0() interrupt 1{static unsigned char count=0,UPFlag=1,DOWNFlag=1; //按键标志位static unsigned int TimeCount=0;TH0=THC0;TL0=TLC0;if(MODE==0||UP==0||DOWN==0){count++;if(count>=30) //消抖处理{count=0;if(MODE==0) //按键按下{MODESelect++;if(MODESelect>=4) MODESelect=1;}else if(UP==0){UPFlag=0;if(MODESelect==2){TongDao++;TDSelect();}}else if(DOWN==0){DOWNFlag=0;if(MODESelect==2){TongDao--;TDSelect();}}}}else count=0;if(MODESelect==1){TimeCount++;if(TimeCount>=(ChangeTime*1000/5)){TimeCount=0;TongDao++;TDSelect();}}else if(MODESelect==3){if(UPFlag==0) {UPFlag=1;ChangeTime++;}else if(DOWNFlag==0){DOWNFlag=1;ChangeTime--;if(ChangeTime<=0) ChangeTime=1;}}}。
数字水平仪是一款用于测量物体水平度的仪器。
在工程实践中,数字水平仪被广泛应用于建筑、机械制造、地质勘探等领域。
基于STM32的数字水平仪设计,不仅能够实现高精度、高稳定性的测量,还可以通过数字化显示和数据存储功能提高工作效率和数据管理能力。
本课程设计旨在通过对STM32微控制器的学习和实践,帮助学生深入理解数字水平仪的工作原理和设计方法,并通过实际操作锻炼学生的电子设计和嵌入式系统开发能力。
本报告将详细介绍基于STM32的数字水平仪课程设计的内容和实施过程,以及学生的学习成果和反馈意见。
一、课程设计内容本课程设计主要包括以下内容:1. STM32微控制器介绍:包括STM32系列微控制器的基本特性、架构和外设功能。
2. 数字水平仪原理分析:介绍数字水平仪的工作原理、传感器原理、数据处理方法等内容。
3. 硬件设计与制作:包括电路原理图设计、PCB制作、传感器连接、外设接口设计等。
4. 软件程序设计:包括STM32固件库的使用、传感器数据采集与处理算法设计、显示与存储功能实现等。
5. 系统调试与测试:对设计的数字水平仪系统进行功能验证、性能测试和可靠性评估。
6. 实践应用与拓展:对数字水平仪系统进行实际应用测试,并对其功能进行拓展和完善。
二、课程设计实施过程1. 理论学习与基础实验:学生首先需要学习STM32微控制器的基本原理和编程方法,进行相关的基础实验,掌握其开发环境和编程工具的使用。
2. 课程大作业设计:老师布置数字水平仪课程设计的大作业,要求学生在一定时间内完成数字水平仪的硬件设计和软件程序开发,并提供相应的实验报告。
3. 老师指导与实验辅导:老师对学生在数字水平仪课程设计过程中遇到的问题进行指导和辅导,帮助学生解决技术难题和设计瓶颈。
4. 组织实际测试与应用:学生根据设计的数字水平仪系统进行实际测试,并在实际工程中应用,收集相关数据和反馈意见。
三、学生学习成果和反馈意见本课程设计在实施过程中取得了一定的成果,学生们不仅学习到了STM32微控制器的相关知识和技能,还掌握了数字水平仪的设计与制作方法。
摘要在使用电子元器件时,首先需要了解参数。
采用传统的仪表进行测量时,首先要从电路板上焊开器件,再根据元件的类型,手动选择量程挡位进行测量,这样不仅麻烦而且破坏了电路板的美观。
基于单片机控制实现的RLC测量仪可以在线测量、智能识别、量程自动转换等多种功能,大大提高测量仪的测量速度和精度,扩大了测量范围。
因此这种RLC测量仪既可改善系统测量的性能,又保持了印刷电路的美观,较传统的测量仪还具有高度的智能仪和功能的集成化,在未来的应用中将具有广阔的前景。
本课题主要研究内容为设计一个基于单片机的RLC智能测量仪器,能够智能地识别出待测元件是电容、电感还是电阻;能精确测量出电阻、电容、电感的参数值,同时还能加入语音播报的功能;可以实现量程电阻的自动转换,无须人工选择档位;对测量仪进行扩充后还实现了二极管、三极管的测量。
关键词:RLC测量仪;AT89S52;NE555AbstractIn the use of electronic components, the first need to understand ing the traditional instrument to measure, the first circuit board from a welding device, according to the type of components, manually select range Shift to measure, this is not only troublesome but also undermine The appearance of the circuit board. Based on SCM control to achieve the RLC-measuring instrument can measure, intelligent identification, range automatic conversion, and other features, thereby greatly increasing the meter measuring speed and accuracy, expanded the range. So this RLC measuring instrument can improve the performance measurement system, and maintain the appearance of the printed circuit, the more traditional measuring instrument also is highly intelligent and functional instrument of integration and application in the future will have broad prospects.The main topics for the design of research has been based on the RLC SCM smart measuring instruments, smart and able to identify components under test is capacitors, inductors or resistance; can be accurately measured resistors, capacitors, inductors of the parameters, while adding V oice of the broadcast function can be automatically converted range of the resistance, not artificial selection stalls; measuring instrument to carry out the expanded also to achieve the diodes, transistors measurement.Key words:RLC meter;AT89S52;NE555目录引言 (1)1 硬件电路 (2)1.1 设计要求 (2)1.2 电路方框图及说明 (2)1.3 各部分电路设计 (2)1.3.1 电阻测量电路 (2)1.3.2 电容测量电路 (3)1.3.3 电感测量电路 (4)1.3.4 多路选择开关电路 (4)1.3.5 按键及显示电路 (5)1.3.6 单片机模块 (6)1.3.7 量程选择模块 (7)1.3.8 电源模块 (8)2 软件部分 (8)2.1 主程序流程图 (8)2.2 程序清单 (9)3 相关元器件 (19)3.1 元件清单 (19)3.2 AT89S52资料 (20)3.3 ICM7218资料 (31)3.4 74LS390资料 (32)3.5 CD4052资料 (33)3.6 NE555资料 (33)3.7 共阳4位LED数码管资料 (39)3.8 三极管相关资料 (40)3.9 三端稳压管LM7805资料 (41)3.10 继电器资料 (42)4 调试总结 (43)5 结论 (44)谢辞 (45)参考文献 (46)附录 (47)引言测量电子元器件集中参数R、C、L的仪表种类较多,方法也各有不同,但都有其优缺点。
摘要电子水平仪是一种非常普遍的测量小角度的量具。
用它可测量对于水平位置的倾斜度。
基于传感器、数字信号处理、单片机技术的数字水平仪是当前倾角测试仪器数字化发展的方向。
本毕业设计就是采用STC89C52单片机和ADI公司生产的三轴加速度传感器ADXL345相结合,利用ADXL345三轴加速度传感器感应水平倾角,通过单片机的控制以及运算将倾角以数值的形式直接在LCD显示屏上进行显示、处理,从而使角度测量变得方便、快捷,实现了倾角的高精度测量。
通过ADXL345三轴加速度传感器原理,提出了使用软件和硬件结合的自动校正技术进行测量角度,最大限度简化了电路,提高了系统的稳定性和可靠性。
通过对本课题的研究,让我对水平仪有了一定的了解,在未来水平仪将在建筑方面起着重要作用,并且随着时代发展,水平仪对角度的测量将越来越精细,随着光学应用领域的不断扩展,也相应的产生了一些基于光电原理的光电式水平仪和激光式水平仪,光电原理的应用将是未来水平仪的发展方向。
关键词:智能水平仪;单片机;ADXL345;角度AbstractElectronic level gauge is a very common small angle measurement. Measurement for the horizontal position of the inclination to use it. Based on the digital level sensor, digital signal processing, computer technology is the current development of digital instrument tilt testing instrument in the direction of.This graduation design is the use of three axis accelerometer ADXL345 microcontroller STC89C52 and ADI company production of combination, using the ADXL345 three axis acceleration sensor level angle, processing through the MCU control and operation will dip in numerical form directly in the LCD screen display,, so that the angle measuring is convenient, quick, realize high precision measurement of angle. The principle of the ADXL345 three axis accelerometer, and proposes to use the combination of hardware and software of the automatic calibration technique for measuring the angle, the maximum simplifies the circuit, improves the stability and reliability of the system.This graduation design is the use of three axis accelerometer ADXL345 microcontroller STC89C52 and ADI company production of combination, using the ADXL345 three axis acceleration sensor level angle, processing through the MCU control and operation will dip in numerical form directly in the LCD screen display,, so that the angle measuring is convenient, quick, realize high precision measurement of angle. The principle of the ADXL345 three axis accelerometer, and proposes to use the combination of hardware and software of the automatic calibration technique for measuring the angle, the maximum simplifies the circuit, improves the stability and reliability of the system.Keywords: Intelligent level; MCU; ADXL345; angle目录1 绪论 (1)1.1 课题研究背景和意义 (1)1.2 国内外水平仪发展现状和趋势 (1)1.3 系统设计的主要工作 (1)1.4 论文结构及安排 (2)2 三轴加速度传感器感应原理 (3)2.1 ADXL345工作原理 (3)2.2 ADXL345寄存器映射 (5)2.3 ADXL345主要寄存器定义介绍 (6)2.4 测量倾斜角度原理 (8)2.4.1 加速度传感器进行倾角测量简介 (8)2.4.2 ADXL345测量角度原理 (9)3 水平仪总体设计 (12)3.1 水平仪硬件设计 (12)3.1.1 单片机模块 (13)3.1.2 LCD液晶显示模块 (14)3.1.3 ADXL345接口设计 (16)3.1.4 ADXL345加速度传感器模块 (18)3.2 水平仪软件设计 (20)3.2.1 I2C总线协议分析 (21)3.2.2 液晶显示驱动程序设计 (25)3.2.3 ADXL345加速度传感器软件模块 (27)3.2.4 ADXL345加速度传感器误差校准 (28)4 实验数据及总结 (30)结论 (33)致谢 (34)参考文献 (35)附录A 英文原文 (37)附录B 汉语翻译 (41)附录C 主程序 (44)附录D 电路原理图 (55)1 绪论1.1 课题研究背景和意义在高楼桥梁等建筑行业,对建筑物自身在水平面倾斜度的测量和处理,需要一个能连续工作几个月甚至一年以上采样进度很高的数字水平仪系统,这就要求该系统必须具有高精度微功耗的功能。
水平仪从过去简单的气泡水平仪到现在的电子水平仪已经历经多次更新。
电子水平仪是一种非常急需的测量小角度的量具。
随着精密制造技术的发展,已有的电子水平仪不能满足精度要求,国内数显式电子水平仪灵敏度,反应时间等与国外相比,差距较大。
研究分辨率更高,性能更好的智能电子水平仪具有重要意义。
为了提高水平仪的测量精度,摆脱传统水平仪智能化程度低、数据处理能力差、抗震能力差等缺点,必须利用现代科技设计一种新的水平仪。
基于MEMS传感器、数字信号处理、单片机的智能水平仪是今后水平仪的发展方向,可以应用于建筑、石油、煤矿和地质勘探等领域。
本毕业设计将STC89C52单片机和ADI公司生产的三轴加速度传感器ADXL345相结合,实现了高精度数显智能水平仪的设计。
1.2 国内外水平仪发展现状和趋势目前国内已有的水平仪不能很好的满足生产和应用的需求,国内电子水平仪的生产和研制能力与国外相比相对落后。
尤其是存在着智能化程度不高,对数据缺乏处理能力,无法一次性测量出被测面倾斜角和方位角等缺点。
近年来,国内在水平仪的研制开发方面取得了不少进展。
国外蒸蒸日上,厂家繁多,种类齐全,速度越来越快,功耗越来越低,性能越来越强,国内除台湾做的比较好外,大陆也有几家具备研发和生产能力,如上海华虹、海尔等,只不过大陆产品占的市场份额太小了1.3 系统设计的主要工作本毕业设计的主要目标是利用单片机和三轴加速度传感器,设计一种高精度、大角度测量范围、实时显示、便携式的智能水平仪。
该水平仪测量的角度显示在90º以内,并且能通过三个轴的加速度正负值,判断角度的倾斜方向,同时,由于本系统是基于MEMS技术,因此即使在恶劣的现场工业环境中,仍能表现出优秀可靠的性能。
经过文献的翻阅和芯片资料的对比,选择了一套可行的方案。
在硬件方面,可以用于测量倾角的芯片有三种类型,分别是ADXL345三轴加速度传感器、mma7455三轴加速度传感器、三轴陀螺仪。
通过对比,ADXL345具备数字输出,高精度(3.9mg/LSB),误差小等优点,因此选择了ADXL345芯片作为测量倾角的传感器。
同时选择了集成了单片机、LCD液晶显示屏和一些基本元件的开发板,减少设计的时间和复杂度。
在软件方面,采用C语言在Keil软件中编程,使用I2C通信方式实现单片机和传感器的数据传输;利用数学方法推倒出的角度计算公式计算角度大小;最后经过实际测量角度,计算出传感器的测量误差,在偏移寄存器中进行校准。
1.4 论文结构及安排本文将围绕设计一个完整的电容式传感器信号处理系统的过程展开,包括角度转换模块和数据处理模块。
本文主要内容如下:第1章,绪论,阐述了选题背景和意义,分析了国内外相关技术的发展动态及研究现状,并对本论文的主要工作进行了介绍。
第2章,通过对角度转换中涉及的三轴加速度传感器以及数据处理中涉及的A/D转换、数码显示等各部分综合分析,确定本系统的总体方案,并给出系统总体结构框图,为后续设计做准备。
第3章,先简单介绍了智能水平仪的硬件设计、软件技术,并对其选型和性能进行分析。
第4章,设计结果实现,分析数据。
2 三轴加速度传感器感应原理2.1 ADXL345工作原理ADXL345是一款小而薄的超低功耗三轴加速度测量系统(如图2.1所示),分辨率高达13位,可选择的测量范围有±2g,±4g,±8g或±16g。
数字输出数据格式为16位二进制补码。
ADXL345非常适合应用在移动设备中,它既能测量运动或冲击导致的动态加速度,也能测量静止加速度,例如重力加速度,使得器件可作为倾斜传感器使用。
其高分辨率(3.9mg/LSB)能够测量不到1.0º的倾斜角度变化。
ADXL345的主要特性如下: 超低功耗:V s=2.5V时(典型值),测量模式下为23μA,待机模式下为0.1μA;用户可以选择不同的量程和分辨率,±2g(10bit), ±4g(11bit), ±8g(12bit), ±16g(13bit);(1)电源电压范围:2.0V至3.6V;I/O电压范围:1.7V至3.5V S;(2)SPI模式(3线和4线)和I2C模式数字接口;(3)通过串行命令可选测量范围和带宽;(4)32级FIFO缓冲器;(5)使用温度范围:-40℃至+85℃;(6)抗冲击能力:10000g;(7)小而薄:3mm*5mm*1mm,LGA封装;(8)应用范围:手机、医疗仪器,工业仪器、仪表、个人导航设备等。