还剩64页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
毕业设计论文题目名称曼彻斯特编解码电路设计学生姓名熊香春院系电子信息学院专业班级电气10602指导教师__平__教师__平时间2010年3月15日至2010年6月10日目录TOC\o1-2\h\z\u长江大学毕业设计论文任务书I毕业设计论文开题报告II长江大学毕业设计论文指导教师审查意见III长江大学毕业设计论文评阅教师评语IV毕业设计(论文)答辩记录及成绩评定V中文摘要VI英文摘要VII前言11选题背景
21.1普通NRZ码存在的问题
21.2应用背景22方案论证
32.1曼彻斯特码简介
32.2曼彻斯特编解码解析
32.3曼彻斯特编解码具体实现方法
42.4方案选择53硬件电路设计
83.1系统实物照片展示
83.2系统的硬件框图
93.3AT__S52单片机简介
103.4单片机__电路
113.5__调理电路164软件设计
184.1资源使用
184.2曼彻斯特码编解码方法分析
204.3程序流程图
214.4编码实现
234.5解码实现
254.6LCD1602驱动程序实现275数据测试与分析
315.1测试环境及设备
315.2数据记录
315.3数据处理与数据分析326课题总结
346.1取得的成绩
346.2设计中所遇到的问题及解决的办法
346.3改进方向36____37致谢38附录1地下液位测量系统实物照片39长江大学毕业设计(论文)任务书学院(系)电子信息学院专业电气工程及自动化班级电气10602学生姓名熊香春指导教师/职称__平/讲师1.毕业设计(论文)题目曼彻斯特编解码电路设计2.毕业设计(论文)起止时间2010年3月15日-2010年6月10日3.毕业设计(论文)所需资料及原始数据(指导教师选定部分)所需资料1《MCS-51单片机原理与应用》2《单片机的C语言编程》3通信原理原始数据传输速率为20Kb/S,一帧数据有16个字节,一帧的命令有2个字节4.毕业设计(论文)应完成的主要内容
(1)利用C语言编程实现曼彻斯特编码、解码模块,并在PROTUES软件中仿真;
(2)设计曼彻斯特__调理电路;
(3)毕业论文中必须包含如下内容基本原理介绍、整体框图、软件流程图、软件原理介绍、源程序清单5.毕业设计(论文)的目标及具体要求利用单片机和C语言编程实现曼彻斯特编码、解码模块,并在PROTUES软件中仿真通过;通过单片机最小系统,辅以__电路,能够实现编解码6.毕业设计(论文)所需的条件及上机时数所需条件微型计算机一台单片机最小系统上机时数(3小时)*(60天)=180小时任务书批准日期2010年3月10日教研室系主任签字任务书下达日期2010年3月15日指导教师签字完成任务日期2010年6月10日学生(签名)长江大学毕业设计论文开题报告题目名称曼彻斯特编解码电路设计题目类别毕业设计学院(系)电子信息学院专业班级电气10602班学生姓名熊香春指导教师吴爱平辅导教师吴爱平开题报告日期2010年3月27日
1、题目来源曼彻斯特编解码电路设计一题来源于生产实际与指导老师科研项目的结合
2、研究目的和意义曼彻斯特码是一种数据通讯线性码,它的每一个数据比特都是由至少一次电压转换的形式所表示的曼彻斯特编码因此被认为是一种自定时码自定时意味着数据流的精确同步是可行的每一个比特都准确的在一预先定义的时间中被传送曼彻斯特编码已经被许多高效率且被广泛使用的__标准所采用,例如以太网电讯标准曼彻斯特编码是一种超越传统数字传输的信道编码技术,由于其具有隐含时钟、去除了零频率__的特性使得它在石油勘探测井中也得到广泛的应用
3、阅读的主要____及资料名称____:
[1]2000
[2]徐爱均编著.单片机原理使用教程.北京:电子工业出版社.2009
[3]__平.基于FPGA的等精度频率计的设计.石油仪器2005,4:17~19
[4]谭浩强编著.C语言程序设计北京清华大学出版社.2005
[5]1991
[6]康华光.数字电子技术基础.北京:高等教育出版社.1991
[7]孙传友编.感测技术基础.北京:电子工业出版社.2001
[8]马忠梅等编著.单片机的C
1997.3
[9]张培仁等编著.基于C语言编程MCS-512002
[10]何立民编著.单片机应用技术选编
(5).第一版.北京北京____大学出版社.
1997.10
[11]郭观七编著.基于C语言的MCS-
511997.2
[12]
1998.4
[13]马忠梅等编著.单片机的C
1998.10
[14]孙传友编.测控系统原理与设计.北京:北京____大学出版社.
20014、彻斯特编解码发展趋势与应用方向曼彻斯特码由于其特殊的性能,在许多领域得到广泛的应用,如__业,工业控制,__军事领域,石油勘探测井等等!在工业现场控制网络中,曼彻斯特码由于带有时钟信息、无直流,且实现简单,常被用作高速的基带数传曼彻斯特码在LAN中的应用,曼彻斯特编码是串行数据传输的一种重要的编码方式曼彻斯特编码最大的优点是数据和同步时钟统一编码,曼码中含有丰富的时钟__,直流分量基本为零,___能够较容易恢复同步时钟,并同步解调出数据,具有很好的抗干扰性能,这使它更适合于信道传输IEEE
802.4令牌总线标准采用了此种传输技术曼彻斯特编码被使用作一个以太网局域网的物理层对于一个以太网局域网用同轴电缆作为传输介质,额外的带宽不是重要的问题曼彻斯特码在测井系统中应用广泛,目前,在实际的工程测井中,常采用曼彻斯特编译码器HD-15530把测井数据转换为曼彻斯特码及把曼彻斯特码解码为数据.由于HD-15530发送数据输入及接受数据输出均为串行方式,并且曼彻斯特编解码是以16位数据为基本单位,逻辑上要求使用16位的并入串出移位寄存器和16位的串入并出移位寄存器与单片机接口,这样硬件结构比较复杂,仪器成本较高考虑到测井数据传输速率不高,可用单片机软件来实现曼彻斯特编解码功能
5、主要研究内容、需重点研究的关键问题及解决思路
1.主要研究的内容本项目主要研究曼彻斯特码编码器的硬件设计和实现为了能顺利完成曼彻斯特码的编解码任务,实现数据传输它应该包括这样几个部分编码电路(上位机),解码电路(下位机),__调理电路为了验证电路能否顺利完成曼彻斯特码的编解码功能,我们用硬件验证的方式,将这一部分的研究内容放在项目“地下液位测量系统”中实际制作地下液位测量系统,通过最后实际测量结果来验证曼彻斯特编解码电路设计效果2.重点研究的关键问题a曼彻斯特编解码的软件实现b硬件制作,包括上位机,下位机,__调理电路的制作c将曼彻斯特编解码电路与实际硬件结合起来,通过硬件验证的方式测实设计效果3.解决思路以AT__S52单片机为核心设计曼彻斯特编解码电路,实际制作上位机,下位机和__调理电路地下液位测量系统系统框图软件框图如下
6、完成毕业设计论文所必须具备的工作条件
1.工作条件相关技术资料和手册、计算机、相关实验仪器和AT__S52__板等工作环境2.解决办法在图书馆和网络查阅文献资料和各种手册;利用电子阅览室了解当前技术前沿和编辑相关文字、__及绘制原理图;利用电子电工实验室进行硬件制作,__调试和数据测定
7、工作的主要阶段进度与时间安排
1.准备阶段:第3周:查阅和搜集毕业设计题目的相关资料,完成毕业设计开题报告;第4周:查阅资料,完成一篇外文翻译;
2.设计阶段:第5周:查阅资料第6-9周:按照软件流程图编写出能实现基本功能的曼彻斯特编解码电路第10-11周:编写__显示,按键,串口通讯模块程序,综合上下位机程序第12周:利用AltiumDesigner
6.0绘制原理图,PCB并配合完成硬件制作进行初步调试第13周:调试程序,硬件,完成数据测试,数据分析第14周:完成毕业设计初稿,修改毕业设计、定稿并录入、出图第15周:审查、评阅、答辩准备
3.完成阶段:第16周:答辩、将图纸、文件录入电子档案
8、指导老师审查意见曼彻斯特编解码电路设计学生熊香春,长江大学电子信息学院指导老师__平,长江大学电子信息学院[摘要]曼彻斯特码是一种数据通讯线性码,它的每一个数据比特都是由至少一次电压转换的形式所表示的它是一种超越传统数字传输的信道编码技术,被认为是一种自定时码由于其具有隐含时钟、去除了零频率__的特性使得它在石油勘探测井中得到广泛的应用本设计论述了曼彻斯特码的原理,介绍了其编码规则对其特点和应用范围进行了说明提出了曼彻斯特编解码电路设计方案,重点运用KeilC51单片机高级语言对曼彻斯特编解码电路进行软件设计,并基于此实际制作了地下液位测量系统系统成功实现了曼彻斯特码数据传送的要求而且性能稳定,实际测量结果表明该电路设计很好地实现了曼彻斯特编解码而且该编解码方式具有抗干扰能力强传输速率高等优点[关键词]曼彻斯特码;单片机;地下液位测量系统;编解码器;Manchesterencodinganddecodingcircuit学 生熊香春,长江大学电子信息学院Student:xiongxian__hunElectronicsInformationCollegeTeacher:WuAipingElectronicsInformationCollege[摘要]曼彻斯特码是一种数据通讯线性码,它的每一个数据比特都是由至少一次电压转换的形式所表示的[Abstract]:Manchestercodeisadatacommunicationcodeswhicheachdatabitbyatleastoneformofvoltageconversionexpressed.曼彻斯特编码因此被认为是一种自定时码自定时意味着数据流的精确同步是可行的曼彻斯特编码是一种超越传统数字传输的信道编码技术,由于其具有隐含时钟、去除了零频率__的特性使得它在石油勘探测井中得也到广泛的应用Manchesterencodingisadigitaltran__issionbeyondthetraditionalchannelcodingtechniquesandisconsideredaself-timedcode.becauseofitsimplicitclocktozerofrequencysignalcharacteristicsinadditionto__kingitintheoilexplorationandloggingwerealsotoawiderangeofapplications.本设计论述了曼彻斯特码的原理,介绍了其编码规则Thispaperdiscussesthedesignprinciplesof__nchesterandintrodu__sthecodingrulesandit’s对其特点和应用范围进行了说明characteristicsandapplications.What’smoreraisethecircuitdesignofencodinganddecodingand提出了曼彻斯特编解码电路设计方案,重点运用KeilC51单片机高级语言对曼彻斯特编解码电路进行软件设计,并基于此实际制作了地下液位测量系统focusesonhigh-levellanguageusingKeilC51SingleChipcomputeronthe__nchesterencodinganddecodingsoftwaredesignandbasedontheactual__nufacturesanundergroundliquidlevelmeasuringsystem.The系统成功实现了曼彻斯特码数据传送的要求而且性能稳定,实际测量结果表明该电路设计很好地实现曼彻斯特编解码而且该编解码方式具有抗干扰能力强传输速率高等优点systemsuc__ssfullyachievestheManchestercoderequirementsofdatatransferandstableperfor__n__theactualmeasurementresultsshowthatthecircuitrealizestheManchestercodeverywellandthedecodingmethodhasananti-interferen__abilityandhightransferrateadvantage.[关键词]曼彻斯特码;单片机;地下液位测量系统;编解码器;[Keywords]:Manchester;SingleChipcomputer;groundlevelmeasurementsystem;codec.前言测井技术发展到今天,已经发生了很大的变化一是由模拟测井技术发展到了数字测井技术;二是由数字测井技术发展到了数控测井技术进入90年代,成像测井技术获得了较大的发展,测井系统中需要传送的数据信息量越来越大,为此必须解决数据的高速传输与正确接收两个问题,如相关编码技术、缆芯多路复用技术、基带均衡技术等用以提高数据传输速率和降低误码率在测井数据传输系统中,由于曼彻斯特码既能提供足够的定时分量,又无直流漂移,编码过程相对简单,因而曼彻斯特(__nchester)码是测井数据传输中常用的编码方式之一曼彻斯特码,又称数字双相码或分相码在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作时钟__,又作数据__;从高到低跳变表示“1”,从低到高跳变表示“0”曼彻斯特编码是将时钟和数据包含在数据流中,在传输代码信息的同时,也将时钟同步__一起传输到对方,每位编码中有一跳变,不存在直流分量,因此具有自同步能力和良好的抗干扰性能由于曼彻斯特码有如此多的优点,所以在现代通信中得到了广泛的应用曼彻斯特编解码电路设计1选题背景
1.1普通NRZ码存在的问题普通NRZ码存在许多缺陷a.难以分辨一位的结束和另一位的开始;b.发送方和接收方必须有时钟同步;若__中“0”或“1”连续出现,__直流分量将逐步累加;c.NRZ码含有丰富的直流分量,改变设备性能所以在通讯时容易产生传播错误于是通信领域迫切需要一种简单而又不存在NRZ码缺陷的编码方法,曼彻斯特码就是其中一个比较实用的编码方式
1.2应用背景曼彻斯特编码是串行数据传输的一种重要的编码方式曼彻斯特编码最大的优点是数据和同步时钟统一编码,曼码中含有丰富的时钟__,直流分量基本为零,___能够较容易恢复同步时钟,并同步解调出数据,具有很好的抗干扰性能,这使它更适合于信道传输IEEE
802.4令牌总线标准采用了此种传输技术曼彻斯特编码被使用作一个以太网局域网的物理层对于一个以太网局域网用同轴电缆作为传输介质,额外的带宽不是重要的问题曼彻斯特码由于其特殊的性能,在许多领域得到广泛的应用,如__业,工业控制,__军事领域,石油勘探测井等等在工业现场控制网络中,曼彻斯特码由于带有时钟信息、无直流,且实现简单,常被用作高速的基带数传曼彻斯特码在测井系统中应用广泛,目前,在实际的工程测井中,常采用曼彻斯特编译码器HD-15530把测井数据转换为曼彻斯特码及把曼彻斯特码解码为数据.由于HD-15530发送数据输入及接受数据输出均为串行方式,并且曼彻斯特编解码是以16位数据为基本单位,逻辑上要求使用16位的并入串出移位寄存器和16位的串入并出移位寄存器与单片机接口,这样硬件结构比较复杂,仪器成本较高考虑到测井数据传输速率不高,可用单片机软件来实现曼彻斯特编解码功能2方案论证
2.1曼彻斯特码简介__nchester码又称双向码它是对每个二进制代码分别利用两个具有2个不同相位的二进制新码去取代的码编码规则之一是:0--01零相位的一个周期的方波1--10n相位的一个周期的方波双向码的特点是只用两个电平,而不像前面的三种码具有三个电平与用高、低电平表示0,1的非归零二进制码相比,在连0或连1的情况下在传真通信以及图象数据传输等方面,这种情况经常发生,更易于提取同步时钟信息,又无直流漂移,且有强的抗干扰能力,编、译码过程比较简单
2.2曼彻斯特编解码解析根据实际场合的要求曼彻斯特编解码分为广义的编解码和狭义的编解码广义曼彻斯特编解码广义曼彻斯特编解码不区分数据格式,不须要检测编码周期是否开始,并辨别同步字命令/数据,不须要识别数据位、附加奇偶校验位编解码时把任何__当成有效数据狭义曼彻斯特编解码在一些应用中实际对曼彻斯特编解码器设定了固定的格式,并要求编码器产生同步字、校验位功能,相应解码器有识别同步字、校验位功能例如在油田测井领域广泛用到的PCM3508__就是狭义上的曼彻斯特码数据下面是上述模式的一种典型格式每帧信息由同步头、数据及校验位三部分组成共20位同步类型有两种,都占用3个位周期先高电平后低电平的为命令同步,各自平宽度均为
1.5个周期,反之则为数据同步;中间是数据占16位,在每个位的中间有跳变,高到低跳变表示“1”,低到高跳变表示“0”;最后有一位校验位曼彻斯特码在测井电缆上的传送速率为20kbps,每帧数据占1ms时间图1为典型曼彻斯特__格式
2.3曼彻斯特编解码具体实现方法在这里主要讨论狭义上曼彻斯特码PCM3508__的编解码实现方法
2.
3.1集成方法实现集成方法实现曼彻斯特数据的编解码功能一般用专用的曼彻斯特编码译码器HD—15530或HD—6408实现,数据的串并转换与__合成都通过数字电路完成但这种方法都有许多不足之处第一,在利用集成芯片方法实现曼彻斯特编解码传输时,对编解解码器时序要求很高,使得上下位机配合比较困难第二,这种方法不但导致硬件电路过于庞大、复杂,而且也增加了系统调试的难度
2.
3.2软件编解码软件方法实现曼彻斯特编解码主要有高速单片机实现和FPGA/CPLD实现两种1)单片实现曼彻斯特码在测井电缆上的传送速率为20kbps,每帧数据占1ms时间则发送每位数据的时间为T=1S/20K=50us,而发送一位数据需要两次中断过程,则理论上每次中断时间最大为t=T/2=25us,对于AT__S52单片机而言,由于每个机器周期为12个时钟震荡周期,所以定时的分辨率是时钟震荡频率的1/12,当单片机接入24晶振时,每个机器周期T1=1S/24M*12=
0.5us,可以满足要求AT__S52内部资源也比较丰富,有8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路,足可以满足本设计要求,并且该单片机运行稳定可靠性高,成本低,基于此在本设计中选用了单片机实现方法2)FPGA/CPLD实现在现代电子设计领域,VHDL和现场可编程逻辑器件的广泛应用使数字系统设计更为灵活,大大缩短了__周期FPGA现场可编程逻辑门阵列是新型的高密度可编程逻辑器件它是可编程阵列逻辑(PAL),门阵列逻辑(GAL)等逻辑器件的基础上发展起来的,同以往的PAL,GAL想比较,FPGA的规模较大,适合于时序,组合等逻辑电路应用场合,它可以替代几十甚至上百块通用ASIC芯片,这种芯片具有可编程性和实现方案容易改动的特点FPGA器件的主要优点功能集成度高,系统设计快,设计灵活,可靠性高,费用低这类高速资源强大的芯片当然也可以满足本设计要求,但运用到此设计中,其内部资源利用率低,成本还相对较高
2.4方案选择综合以上考虑确定本设计实施方案,基于AT__S52芯片采用软件方法实现编解码,所要实现的曼彻斯特码格式如图2,包括三部分,同步字、数据、校验位图2帧数据格式a.产生同步字,同步字发射时钟跟基本时钟一致,从图1曼彻斯特码格式中可以看出,无论是数据同步头还是命令同步头都是占三个位周期(
1.5T),如果我们每半个位周期T/2即25us对同步头电平实时检测一次,就可以得到一个六位的数据来表示同步头,“111000”表示命令同步头,“000111”表示数据同步头相反我们将这六位数据以每半个位周期T/2即一个基本时钟周期发射一位的速度发射出去,就会得到相应的同步头b.数据的编码和解码,由32个基本时钟构成一个曼彻斯特编解码时钟,编码时,编码时钟的前半周期输出NRZ码的原码,后半周期输出NRZ码的反码,从而实现编码;解码时,解码时钟的1/4和3/4时钟处对接受到的电平采样,检测前后两个半周期的值,若由“0”变为“1表示“0,而用它的反相波形由“1”变为“0”表示“1”c.产生并发送校验码,将前面要发送的16位数据异或就得到奇偶校验位,当第16位数据输出完后,按b的方法发送奇偶校验位;同样解码端按b方法解码奇偶校验位,解码完毕,又将前面解码的16位数据异或,得到的值与奇偶校验位比较,看是否相等,若等,就表示接收的数据没错误,反之,则有错误,相应发出错误__
2.
4.1编码编码过程具体可分为三部分1检测编码周期是否开始,并辨别同步字__命令/数据产生相应的同步__;2对16位数据进行编码;3附加奇偶校验位,编码周期结束编码器结构框图如下图3编码器结构框图发送一帧数据,首先将命令头/数据头放在发送中间缓冲区MidBuff中,初始化计数变量chPointNum,奇偶检验位bOdd,初始化定时器,启动定时器T0编码周期开始每进入一次定时中断,就将中间缓冲区的第六位MidBuff^5取出,发送出去,发出半位数据之后,MidBuff右移一位,在进入第奇数个定时中断时,将发送缓冲区SendBuff的最高位取出来放在发送中间缓冲区的最低位并通过按位与求的奇偶校验位bOdd,若是在进入偶数个定时中断时,我们将SendBuff的最高位反向后放在发送中间缓冲区的最低位,并将发送缓冲区SendBuff右移一位在进入16个定时中断时,前半字节数据发送完毕,此时将要发送的的下半字节数据放在发送缓冲区中,经过37个定时中断周期,将一帧数据完整的编码发送出去
2.
4.2解码解码的过程分为三个部分1检测同步字;2解码;
(3)检验传输是否正确并扣除同步字解码的关键在于首先必须检测出同步字,才可开始解码周期,故解码器必须不停地监视输入数据是否已有同步字以接收数据为例,前面章节已经讨论过,当每个基本时钟周期(半个位周期)检测一次同步头电平,数据同步头可以表示为“000111”,当检测到输入脚出现低电平说明可能有数据输入,检测低电平之后出现的高电平有几个基本时钟周期数chPointNum来判断是否是出现同步字,若chPointNum为三个或者四个定时周期说明是检测到同步字,chPointNum为4,则说明传输的第一位数据是1并且在延时一个同步头检测周期再跳出在检测到正确的同步头之后开始解码周期,由于曼码中由‘0’到‘1’跳变表示0,由‘1’到‘0’跳变表示1,说明在曼码__中前半个周期电平代表实际传输的数据在解码过程中定时周期为同步头检测定时周期的两倍,每接收到8位数据存储一次编码器与解码器__工作,编码器按数据编码的方式产生一个同步脉冲和校验位;解码器识别同步脉冲、解码数据并检查校验位,恢复数据解码总体框图如下图4解码器结构框图3硬件电路设计
3.1系统实物照片展示图5系统实物照片
3.2系统的硬件框图图6地下液位测量系统硬件框图如图6,该地下液位测量系统主要有六个部分组成PC机控制和显示部分,上位机,下位机,曼码调理电路,FPGA频率测量模块和地下液位__采集模块PC机控制和显示部分在PC机上用Labview软件来制作显示液位高度的实时画面和测量数据通过不同的按键来设计液位测量和仪器自检的命令控制从而将整个系统中需要测量的数据及相关信息在Labview界面中展现出来,同时也可以控制下位机操作上位机由AT__S52单片机组成,用串口与PC机通讯,用曼彻斯特编码及按键切换命令来实现数据及命令的收发,同时向LCD输出液位高度和所收发的命令是实现液位信息远距离传输的组成部分下位机由AT__S52单片机组成,用曼彻斯特编码来实现数据及命令的收发,同时向LCD输出由FPGA测量的频率__同时有指示灯来指示下位机处于数据接收还是发送的状态可通过命令来控制是校验还是测量液位高度是实现液位信息远距离传输的组成部分曼码调理电路连接在上位机和下位机之间以实现__的收发及处理该电路能够将所测的频率__经过压缩,放大从而处理掉误差__和外部干扰,使有用__不失真的远距离传输FPGA频率测量模块该模块是将地下液位__采集模块采集来的频率__精确的测量出来,用NiosII作为系统控制单元,实现等精度的测量使液位信息可以精确的反应出来地下液位__采集模块该模块有3部分组成,分别是传感器,555方波产生电路,__处理电路和继电器驱动控制电路传感器是由一根比较粗的铜丝和一个钢管组成一个电容,固定其两极板间的距离因此液位高度的变化引起电容值大小的变化再通过555方波产生电路输出不同频率值的方波,经74s08处理出来的方波__再传给FPGA通过继电器驱动控制电路来控制系统自检与液位高度测量的切换该系统整体工作流程PC机通过串口发送命令给上位机,接收上位机传输的液位数据并显示出来;上位机将接收到命令编码发送之后,通过曼码调理电路传输到下位机,接收下位机传输的液位编码__,解码数据并通过LCD显示出来;下位机接收到上位机的命令__之后,根据不同的命令发出一个继电器控制__,选择测量或者校验状态,并向FPGA频率测量模块读取频率数据__,通过LCD显示之后,将数据__编码发送到上位机;FPGA频率测量模块主要是向液位采集模块采集一个频率信息该系统是在电子信息学院吴爱平老师的指导下,和另外一名同学共同完成硬件的制作我主要负责曼彻斯特编码通讯这一块,包括与PC机控制和显示部分,上位机,下位机,__调理电路这四个部分的制作
3.3AT__S52单片机简介AT__S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容片上Flash允许程序存储器在系统可编程,亦适于常规编程器在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT__S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案AT__S52具有以下标准功能8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路另外,AT__S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止AT__S52单片机管脚图如下图7AT__S52管脚图P3口亦作为AT__S52特殊功能(第二功能)使用,如下表所示表1P3口管脚第二功能表端口引脚第二功能P
3.0RXD串行输入口P
3.1TXD串行输出口P
3.2INT0外部中断口1P
3.3INT1外部中断口2P
3.4T0定时/计数器0P
3.5T1定时/计数器1P
3.6WR外部数据存储器写选通P
3.7RD外部数据存储器读选通
3.4单片机__电路
3.
4.1复位电路AT__S52单片机复位高电平有效,其有效电平应维持至少2个机器周期为了便于最后调试,在该设计中上下位机都是采用按键手动复位电路复位电路如下图8按键手动复位电路复位操作有上电自动复位和按键手动复位两种上电自动复位时通过外部复位电容充电来实现的,如上图通过在VCC和RST之间加一个10uf的电容,RST和地之间加一个10K的电阻就可以实现自动复位原因是电容电压不能突变,在上电后9脚在电容的作用下电压立即变高且会维持低短时间,即实现了高电平复位按键复位电路是在上电自动复位电路的基础上增加一个按键S1和一个电阻R11来实现的,它不仅具有上电自动复位的功能,在按下按钮后,电容C通过R11放电,同时电源上大部分电压见落在R12上,从而使RST端得到一个高电平导致单片机复位
3.
4.2键盘设计由于方便测试(测试时只是用按键发送命令),在上位机上设置了两个__按钮,它们分别实现切换命令,和重复发送命令功能键盘电力如下图9键盘电路键盘中每个按键都是一个常开关电路,当键未被按下时,输入为高电平;当键闭和时,输入为低电平通常的按键所用的开关为机械弹性开关,当机械触电断开、闭和时,电压__波形不稳定由于机械触电的弹性作用,一个按键开关在闭和时不会马上稳定地接通,在断开时也不会马上断开因而在闭和和断开的瞬间均伴随有一连串的抖动抖动时间的长短由按键的机械特性决定,一般为5-10ms,这是一个很重要的参数,在很多场合都要用到按键的闭和稳定时间的长短由操作人员的按键动作决定,一般为零点几秒到数秒键抖动会引起一次按键被误读多次,为了确保单片机对键的一次闭和仅做一次处理,必须去除键抖动,在键闭和稳定时取键状态,并且必须判别到键释放稳定后再做处理
3.
4.3液晶显示器接口设计点阵式液晶显示器是新一代的液晶显示器,它通过液晶点阵的组合能显示大量的字符、曲线及图形,所以它能提供的显示信息量非常大,相应它的接口与控制电路都非常复杂但是生产厂家通常都给点阵液晶模块本身配有智能型接口控制电路及字符存储器,所以用户只对点阵液晶模块进行控制,使用起来也非常方便目前点阵式液晶模块分为两类一类为字符型液晶显示模块,另一类为字符、曲线、图形液晶显示模块本系统的显示单元选用的是精电蓬远公司的MDLS16265B点阵字符液晶显示模块,显示屏是以16╳2个5╳8点阵块组成的显示字符群每个点阵块为一个字符位,字符间距和行距都为一个点的宽度MDLS16265B具有字符发生器ROM(CGROM)可显示192种字符,并且具有64个字节的自定义字符RAMCGROM,可自定义8个5╳8点阵字符该模块单+5V电源供电,结构紧凑、装配容易,低功耗、长寿命,高可靠性其电源电流工作是最大只有
0.2__接口特性如表2表2MDLS16265B液晶显示模块接口特性表引脚号符号状态功能1Vss电源地2Vdd5V逻辑电源3VO液晶驱动电源4RS输入寄存器选择1数据;2指令5R/W输入使能__6E输入使能__1读取信息;1到0执行指令7DB0三态数据总线8DB1三态数据总线9DB2三态数据总线10DB3三态数据总线11DB4三态数据总线12DB5三态数据总线13DB6三态数据总线14DB7三态数据总线15E1输入背光电源16E2输入背光电源液晶显示模块的接口方式有很多种,本系统选用的8位数据线的I/O线选连接方式,显示单元的接口如图10图10显示单元的接口电路
3.
4.4上位机与PC通讯设计在本设计中,利用PC机通过串口通讯发送命令给上位机,然后接收上位机返回数据与微机进行串行通信时,要求通信双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通信EIARS-232C串行接口是微机系统中常用的外部总线标准接口,它的规范标准收录在美国电子工业协会工程部的建议标准第232号修改版C中,故称之为EIARS-232C由于RS-232C是早期为促进公用__网络进行数据通信而制定的标准,为了增加抗干扰能力,接口的电气特性采用负逻辑关系,与TTL、MOS逻辑电平完全不同逻辑0电平规定为+3~+15V,逻辑1电平为-3~-15V之间,过度不确定区-3~+3V,允许发送器和接受器之间的噪声容限为2VRS-232C驱动器与TTL电平连接必须经过电平转换,这由专门的电平转换芯片来实现RS-232C__传输的最大电缆长度为30米,数据传输率有50,75,110,150,300,600,1200,2400,4800,9600等标准的波特率RS-232C接口的机械指标规定RS-232C接口通向外部的连接器一般使用两种型号的接口DB-9的9芯插头座、DB-25的25芯插头座在本系统与PC机连接的RS-232C接口,采用DB-9的9芯插头座,不使用微机传送的控制__,共连接了三条接口线,即“发送数据”、“接收数据”和“__地”,传输线采用屏蔽双绞线RS-232C常用__线见表3表3RS-232C接口常用引线__定义、分类及功能引脚号__名称简称引脚号__名称简称8数据载波检测DCD1数据载波检测DCD3接收数据RxD2接收数据RxD2发送数据TxD3发送数据TxD20数据终端就绪DTR4数据终端就绪DTR7__地GND5__地GND6数传设备就绪DSR6数传设备就绪DSR4请求发送RTS7请求发送RTS5清除发送CTS8清除发送CTS22振铃指示DELL9振铃指示DELL本设计采用德州仪器公司(TI)推出的一款兼容RS232标准的芯片该器件包含2驱动器、2___和一个电压发生器电路提供TIA/EIA-232-F电平该器件符合TIA/EIA-232-F标准,每一个___将TIA/EIA-232-F电平转换成5-VTTL/CMOS电平每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平该产品是由主要特点1.单5V电源工作2.LinBiCMOSTM工艺技术3.两个驱动器及两个___4.±30V输入电平5.低电源电流典型值是8__6.符合甚至优于ANSI标准EIA/TIA-232-E及ITU推荐标准V.287.ESD保护大于MIL-STD-883(方法3015)标准的2000V主控的上位机单片机与PC机的串行通信接口通过__X232实现电平转换,电路接口原理图如图12图12串口通信接口电路图
3.5__调理电路
3.
5.1__调理电路结构框图图13__调理电路结构框图工作原理在上位机和下位机两端各有一个__调理电路,下位机的__经过调理电路的处理,__经过压缩以消除噪声__,再放大之后保证有效__不失真地传输,经远距离传输到上位机的调理电路中,从而在上位机和PC上显示下位机的信息同理,PC和上位机的__也已同样的方式使__不失真传输到下位机,实现双向通讯
3.
5.2__调理电路部分原理图图14__调理电路原理图该原理图为实际电路原理图的一半,下面就以下行数据传输(命令传输)来说明该电路的功能命令信息经过差分输出之后,一路接接到PCM+另一路接到PCM-经过三极管隔离,变压器升压,__传输到OUTPCM+和OUTPCM-,然后__经远距离传输进入下位机__调理电路的OUTPCM1+和OUTPCM1-,再经过变压降压,然后传输到PCMINT1+和PCMINT1-然后__经过压缩,减低噪声干扰,之后放大获得有效__,稳压之后接到下位机的接收引脚,实现了命令的传输4软件设计
4.1资源使用寄存器1)看门狗定时器WDT看门狗定时器的作用是当器件由于程序错误、电气噪声或干扰而进入错误状态时,在一定时间后产生一个复位或中断__当WDT控制寄存器WDCON中WDE位置“0”时,禁止看门狗定时器功能,否则,当WDE置“1”时,看门狗有效,此时如果用户程序在预设的数据间隔内没有刷新看门狗定时器的值,那么WDT电路将产生一个系统复位__或中断__WDIR位WDT本身是一个16位计数器,它由PLL直接提供时钟fPLL=32.768kHzWDT的溢出时间可以通过WDCON中的PRE3~PRE0位设置WDT的所有控制、状态操作都是通过控制专用寄存器WDCON完成2)定时器0定时器1定时器2在AT__S52中,定时器0定时器1的操作与AT__C51和AT__C52中一样定时器2是一个16位定时/计数器,它既可以做定时器,又可以做__计数器其工作方式由特殊寄存器T2CON中的C/T2位选择定时器2有三种工作模式捕捉方式、自动重载(向下或向上计数)和波特率发生器如表4所示,工作模式由T2CON中的相关位选择定时器2有2个8位寄存器TH2和TL2在定时工作方式中,每个机器周期,TL2寄存器都会加1由于一个机器周期由12个晶振周期构成,因此,计数频率就是晶振频率的1/12表4定时器2工作模式RCLK+TCLKCP/RL2TR2MODE00116位自动重载01116位捕捉1X1波特率发生器XX0不用单片机高级语言KeilC51本系统电路设计中,采用单片机高级语言KeilC51编写程序,对硬件进行操作随着计算机技术的发展和集成电路工艺的改进,广泛用于工业测控领域的单片机性能日益提高,对于单片机应用系统的__要求已从单纯追求程序代码优化、硬件操作方便,发展到提高编程效率、实时多任务并行操作等现代化编程手段,采用高级语言编程已成为当前单片机应用系统的发展趋势与其它计算机高级语言相比,C语言具有它自身的特点C语言更适合于编写计算机的操作系统程序以及其它一些需要对机器硬件进行操作的场合,有的大型应用软件也采用C语言进行编写主要因为C语言具有很好的可移植性和硬件控制能力,表达和运算能力也较强C语言具有以下一些特点1.语言简洁,使用方便灵活2.可移植性好3.表达能力强4.表达方式灵活5.可进行结构化程序设计6.可以直接操作计算机硬件7.生成的目标代码质量高软件平台本设计中软件平台主要基于Proteus电路仿真软件,Keiluvision3C51编译器,和AltiumDesigner6硬件电路设计软件在曼彻斯特编码电路设计初期,需要进行一些必要的电路仿真,如单片机最小定时周期的检测,__调理电路设计,lCD1602接口设计及其驱动程序的调试利用Proteus电路仿真软件进行电路软件仿真,方便快捷地设计完成一些模块电路和模块软件设计,大大提到设计效率uVision3是KeilSoftware公司推出的一款可用于多种8051MCU的集成__环境IDE,该IDE同时也是PK51及其它__套件的一个重要组件除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision3还提供了一个配置向导功能,加速了启动代码和配置文件的生成此外其内置的仿真器可模拟目标MCU,包括指令集、片上__设备及外部__等uVision3提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量uVision3提供对多种最新的8051类微处理器的支持,包括____ogDevi__s的ADuC83x和ADuC84x,以及Infineon的XC866等该编译器支持与Protues电路仿真软件联调和在线硬件调试,这为设计者提供了方便的程序编译调试环境AltiumDesigner
6.0是业界首例将设计流程、集成化PCB设计、可编程器件(如FPGA)设计和基于处理器设计的嵌入式软件__功能整合在一起的产品是经典电路设计软件Protel的最新升级版本,内部带有丰富的原理图库文件和封装库文件相对于Protel其具有更强大的设计功能,支持多国语言(中文、英文、德文、法文、日文)任意字体和大小的汉字字符输入,光标跟随在线信息显示功能,光标点可选器件列表,总线布线功能,器件精确__,快速铺铜等功能交互式编辑、出错查询、布线和可视化功能,从而能更快地实现电路板布局支持高速电路设计,具有成熟的布线后__完整性分析工具在本设计硬件制作过程中,上位机系统模块,__调理模块,下位机系统模块的原理图绘制,和PCB板设计都是在次软件环境下完成的
4.2曼彻斯特码编解码方法分析解码的关键是同步识别的问题,因为只有在识别了同步之后,才能正确确定数据接收的起始位置,从而正确接收数据根据曼彻斯特编码格式,同步识别可以通过检测单极性码高、低电平的宽度实现曼彻斯特码__经过差分后,线路上将存在三个电平,空闲时的0电平和发送数据时的正、负电平曼彻斯特码__处理电路把空闲时的0电平变为正电平,把负电平变为0电平,由此把双极性__变为单极性__,便于单片机检测同步同步识别的具体方法是检测单极性码的低电平宽度T1和其后的高电平宽度T2当检测到低脉冲宽度大于或等于
1.5个位周期时,则说明一帧数据开始同步出现时,T
1、T2和数据位宽度T的关系分为以下四种情况
(1)T1=2T,这是命令同步后跟一位数据0的情况如下图(a)
(2)T1=
1.5T,T2=
0.5T这是命令同步后跟一位数据1的情况如下图(b)
(3)T1=
1.5T,T2=
1.5T,这是数据同步后跟一位数据0的情况如下图(c)
(4)T1=
1.5T,T2=2T,这是数据同步后跟一位数据1的情况如下图(d)图15PCM3508同步识别的四种情况同步类型确定后,就可以确定随后各位数据的到达时间,通过对各位编码定时采样即可以得到其余数据位
4.3程序流程图该系统流程图分为上位机程序流程图和下位机流程图1上位机程序流程图图16上位机程序流程图程序开始执行之后首先进入初始化,初始化包括命令、数据缓冲区的初始化,液晶驱动初始化,以及让液晶显示初始化显示字符“WELCOME!”进入一个大循环之后,首先执行命令选择函数,通过按键或者PC机传送得到命令,然后将命令编码再差分输出,之后用LCD将命令显示出来,判断命令是否发送完毕,未完继续发送命令,若发送完毕则去判断下位机是否有数据传输上来,有则接收数据,解码并保存到数据缓冲区,之后通过液晶将数据显示出来,并通过串口传输到PC机上显示2)下位机程序流程图图17下位机程序流程图程序开始执行之后首先进入初始化,初始化包括命令,数据缓冲区的初始化,液晶驱动初始化,以及让液晶显示初始化字符“WELCOME!”初始化之后去判断有上位机命令下来,没有命令则返回继续检测是否有命令数据传入,若有则接收命令,将命令解码之后存放在命令缓冲区之中,并通过液晶显示出来,下一步进入模式选择函数,根据接收到的命令发出一个继电器驱动__选择校验模式或者测试模式然后判断是否要向FPGA测量模块读取频率数据,是则读取数据,将数据存放在数据缓冲之后,首先经过必要处理将频率数据显示在LCD上,然后将数据编码,差分输出,发送完毕则返回检测是否有命令输入,若不读取数据则返回检测是否有命令输入
4.4编码实现实现同步头编码编码__中的同步头如图18所示图18同步头格式同步类型有两种,都占用3个位周期先高电平后低电平的为命令同步,各点平宽度均为
1.5个周期(三个基本周期),反之则为数据同步文章中前面已经说明过,当我们以半个位周期(一个基本定时周期)来检测同步头,命令同步头可表示为“111000”,数据同步头可表示为“000111”,通过把这一串数字作为一个字节数据先放入发送中间变量MidBuff中,然后每次将该变量的第六位取出发送出去,经过六个基本定时周期,就可以将同步头全部发送出去,之后再进入数据发送了主要变量说明charbdataSendBuff;//发送缓冲区__itbBuf=SendBuff^7;//取出发送字节的高位,中间变量charbdataMidBuff;//发送中间变量__itbOut=MidBuff^5;//发送一位数据__itbIn=MidBuff^0;//取一位数据放在发送中间变量中MidBuff=0x07;//发送数据同步头MidBuff=0x38;//发送命令同步头实现数据位编码编码周期开始之后即开始发送数据,每进入一次定时中断,就将中间缓冲区的第六位MidBuff^5取出,发送出去,发出半位数据之后,MidBuff右移一位,在进入第奇数个定时中断时,将发送缓冲区SendBuff的最高位取出来放在发送中间缓冲区的最低位,若是在进入偶数个定时中断时,将SendBuff的最高位取反后放在发送中间缓冲区的最低位,并将发送缓冲区SendBuff右移一位在进入16个定时中断时,上半个字节的数据一发送完毕,此时我们将要发送的的下半字节数据放在发送缓冲区中,经过37个定时中断周期,将一帧数据完整的编码发送出去voidtime0interrupt1{TH0=0xff;TL0=0xd8;ifchPointNum==40{__POut0=0;__POut1=0;//输出0电平}else{ifbOut==1{__POut1=1;__POut0=0;}ifbOut==0{__POut1=0;__POut0=1;}}MidBuff=MidBuff1;ifchPointNum1==0//前半位{bIn=bBuf;bOdd=bIn^bOdd;}else//后半位{bIn=~bBuf;SendBuff=SendBuff1;}ifchPointNum==15//一帧数据的前一个字节已经输出完毕{SendBuff=ComdFrTop[DataLine][NoCom+1];}ifchPointNum==37{ifbOdd{MidBuff=0x10;}else{MidBuff=0x20;}}chPointNum++;}校验位编码奇偶检验位初始化之后为0,在发送一位数据的前半部时,通过按位与(我觉得程序里面是按照安位异或)求得奇偶校验位bOdd,当一个字节(8位)的数据发送完毕之后,若bOdd为1,则将0x10写入发送中间变量MidBuff中;若bOdd为0,则将0x20写入发送中间变量MidBuff中ifchPointNum==37{ifbOdd{MidBuff=0x10;}else{MidBuff=0x20;}}
4.5解码实现接收一帧数据数据程序流程图如图19和定时器1中断程序流程图如图20同步头解码解码的关键在于首先必须检测出同步字,才可开始解码周期,故解码器必须不停地监视输入数据是否已有同步字当以接收数据为例,数据头为000111,我们检测低电平之后出现的高电平有几个定时周期数chPointNum来判断是否是同步头,若chPointNum为三个或者四个定时周期说明是同步头检测到同步头之后将同步有效位置1,跳出同步头检测进入数据解码接收同步头检测程序如下do{while__PIn{ifbOverTimebreak;}//等待低电平while~__PIn{ifbOverTimebreak;}//等待高电平chPointNum=0;//重复赋值是延时作用TR1=1;while__PIn{ifbOverTimebreak;}//等待低电平while__PIn{ifbOverTimebreak;}//等待低电平TR1=0;ifchPointNum==3{bSynValid=1;chPointNum=0;TL1=0xa3;//}ifchPointNum==4{bSynValid=1;chPointNum=1;Dat__alid=1;bOdd2=!bOdd2;TMOD=0x21;TH1=0xc9;//重复赋值是延时作用TL1=0xfe;//}chPointNum=0;ifbOverTimebreak;}while~bSynValid;数据位解码在正确检测到同步头之后开始数据解码周期,由于曼码中由‘0’到‘1’跳变表示0,由‘1’到‘0’跳变表示1,说明在曼码__中前半个周期电平代表实际传输的数据所以在解码过程中定时周期为同步头检测定时周期的两倍当接收到8位数据存储一次数据解码函数及定时器1中断函数如下ifbSynValid{TR1=1;whilechPointNum18{;}//等待一帧数据接收完TR1=0;}voidtime1interrupt3{chPointNum++;ifbSynValid{ifchPointNum1{0TL1=0x9e;Dat__alid=Dat__alid1;bValid=~__PIn;//存储一位数据bOdd2=bValid^bOdd2;//按位异或}ifchPointNum==8//采够一个字节存一次{checkNumH=Dat__alid;//存储通信字节数据的高位}ifchPointNum==16//采够一个字节存一次{checkNumL=Dat__alid;//存储通信字节数据的低位}ifchPointNum==17bOdd2==0//奇偶校验bDataError=1;}}校验位解码奇偶检验位bOdd2初始化为1,数据出错位bDataError为0在每次解码接收到一位数据时,将bOdd2与数据按位与,当数据解码完毕并存储之后,此时chPointNum为17,我们检测奇偶检验位bOdd2,若它为0则数据奇偶校验出错,将数据校验位置1当数据出错则要重复接收数据bOdd2=1;bDataError=0;…bOdd2=bValid^bOdd2;//按位异或…ifchPointNum==17bOdd2==0//奇偶校验bDataError=1;
4.6LCD1602驱动程序实现LCD1602已很普遍了,市面上字符液晶绝大多数是基于HD44780液晶芯片的,HD44780内置了DDRAM、CGROM和CGRAMDDRAM就是显示数据RAM,用来寄存待显示的字符代码共80个字节,其地址和屏幕的对应关系如下表5表5DDRAM地址和屏幕的对应关系表要想在LCD1602屏幕某个位置显示字符,那么就在DDRAM中的对应地址里面写入要显示字符的代码就可以了那么如何对DDRAM的内容和地址进行具体操作呢?在硬件设计章节里面已经详细介绍了LCD模块接口特性,主要有三个控制脚,主要功能如下表6表6LCD控制脚功能表RS输入寄存器选择1数据;0指令R/W输入0写入数据或者命令1表读取信息E输入使能__1读取信息;1到0执行指令下面介绍LCD主要驱动程序的编写1)写指令函数要向LCD中写入一条指令,主要步骤为使能__置0,R/W置0选择写入信息,然后RS置0选择指令寄存器,为写指令做好准备,之后将命令信息放在数据端口,然后将使能E置1,稍作延时之后再将E置0,这样使能__端产生一个下降沿,LCD将数据端口的命令信息读入,这样就完成了一条指令的写入写指令函数代码如下所示voidwrite_instructucharinstruct{E=0;delay100;RW=0;RS=0;lcd_data=instruct;E=1;delay3;E=0;}2)写数据函数同样要想向LCD中写入一个数据,主要步骤为使能__置0,R/W置0选择写入信息,然后RS置1选择数据寄存器,为写入数据做好准备,之后将数据信息放在数据端口,然后将使能E置1,稍作延时之后再将E置0,这样使能__端产生一个下降沿,LCD将数据端口的数据信息读入,这样就完成了一个数据的写入写数据函数代码如下所示voidwrite_dataucharshuju{delay100;E=0;RS=1;RW=0;lcd_data=shuju;E=1;delay3;E=0;}3)获取显示地址函数为了方便显示,当我们确定了要显示字符的位置,就可以直接求取该位置在DDRAM中的地址设置DDRAM地址命令的编码格式80H+相对地址,那么获取显示地址函数可以编写为x表示是第几行显示(0-1),y表示某行的第几个字符(0-15)uchargetchar_adressucharxuchary{ucharaddress;ifx==0address=0x80+y;//第一行elseaddress=0xc0+y;//第二行returnaddress;}4)LCD初始化函数LCD初始化就是向LCD写入一些命令,来控制液晶的显示开关模式,光标是否闪烁,数据指针初始化,显示清零等等voidlcd_init{E=0;//根据操作时序说明来设置write_instruct0x38;//写入显示模式设置指令write_instruct0x0c;//写入显示开/关及光标设置指令write_instruct0x06;//显示器立即显示DDRAM中的数据write_instruct0x80;//数据指针初始化指令write_instruct0x01;//在没写数据之前让所有的显示清零}5)向CGRAM自定义字符写入数据函数怎样显示自定义字符呢?步骤如下
1.先将自定义字符写入CGRAM
2.再将CGRAM中的自定义字符送到DDRAM中显示查看LCD1602的CGROM字符代码表,可以发现从00000000B~00000111B,(00H~07H)地址的内容是没有定义的,它是留给用户自己定义的,用户可以通过先定义LCD1602的CGRAM中的内容,然后就可以同调用CGROM字符一样来调用voidwrite_cgramunsignedcharadressunsignedchar*p{chari;fori=0;i8;i++{write_instructadress+i;write_datap[i];}}6)显示CGRAM自定义字符数据//x表示是第几行显示(0-1),y表示某行的第几个字符(0-15)voiddisplay_cgramunsignedcharxucharyuchar*CgramData{ucharaddresscgram_addressp;address=getchar_adressxy;//获CGRAM字符显示位置cgram_address=0x40+address0x07*8;//CGRAM初始地址p=address0x07;write_cgramcgram_addressCgramData;write_instructaddress;//设置DDRAM地址write_datap;-}7)显示字符串voiddisplay_strucharxucharychar*p{charitemp0;temp0=getchar_adressxy;write_instructtemp0;fori=0;i16;i++{if*p==\0break;write_data*p;p++;}delay10;}5数据测试与分析
5.1测试环境及设备时间2010年6月2日地点长江大学国家级电工电子实验教学示范中心建设单位六楼实验室天气温度15-25度,天气阴设备示波器,__发生器,万用表,水桶,自作电容,PC机,AT__s52__板,地液位测量系统测试人员吴爱平老师,黎学超同学,熊香春
5.2数据记录表7实际液位与测量频率对照表液位高度Hcm单片机测量f值(KHz)值一值二平均值
274.
47878474.
48845674.
48362372.
77723272.
92425272.
85074470.
71915070.
91693871.
10660569.
57347269.
40092069.
48720667.
76767167.
67649667.
72208766.
66031266.
61965866.
63999864.
93503264.
94347664.
93925964.
14870064.
12781264.
138261063.
29574063.
23241663.
264081161.
92320061.
88862461.
905911260.
79661460.
68160060.
739111359.
87777859.
91845859.__
8121458.
55292658.
54188458.
547411557.
42139657.
40915257.
415271656.
44824056.
42901256.4___
31754.
86983254.
91242454.__
1131853.
98307653.
97305253.
978061952.
92829852.__
172652.
910012051.71__
5651.
74017851.
729572150.
75970450.
93599650.
847852249.
72902049.
73348049.
731252348.__
064448.
88458448.
887612448.
07122048.
08207248.07665表8实际液位与测量液位对照表实际液位Hcm液位高度测量值Hcm误差比较值一值二值三平均值
5.
05.
0230555.
0178565.
0292405.
0233840.47%
8.
58.
5456548.
5312488.
5353658.
5374220.44%
10.
010.
05842010.
0935109.
98654010.
0461570.46%
15.
015.
06352115.
07084715.
08359815.
0726550.48%
18.
018.
07258018.
08658318.
09875218.
0859720.48%
20.
020.
08654020.
12845020.
07769020.
0975600.49%
5.3数据处理与数据分析液位的高度与频率F的倒数(周期T)存在一个比例关系,我们利用上面表一的数据来拟合一条直线,来反映液位高度(H)与周期(T)的关系利用表7的数据绘制了一条曲线和拟合的方程如图21图21液位测量曲线图从绘制的曲线图,及拟合的曲线可以看出,几个测量点基本上都在拟合的曲线上,说明采集的数据比较理想在该系统中,我们采集并传输的数据一直是一个频率信息,但是为了能够直观地反映测量的液位高度,我们将传回到上位机的频率数据依据拟合的直线换算成液位高度显示在上位机LCD上表8是利用该拟合曲线将上位机频率__换算成液位高度显示后,测量的液位高度与实际液位高度对照表从表8中数据可以看出第一测量的液位高度很稳定,每次波动不会超过
0.1cm,在实际测试过程中,我们发现当液面波动越小,测量的数据波动也就越小第二测量的液位高度与实际液位高度非常接近,一般误差不超过
0.05cm综合以上两点,可以说明该地下液位测量系统测量结果真实,基本达到设计要求,曼彻斯特编解码电路设计基本成功,利用该电路传输数据比较稳定,能准确的发送接收命令,数据6课题总结
6.1取得的成绩经过几个月的努力准备,终于完成了一个有实际意义的创新性毕业设计,在软硬件的完成过程中,吴爱平老师的鼎力支持,为我们排忧解难及解决问题的方式是我本次设计的最大收获;完成一个实际系统让我更加懂得与同学的配合重要性下位机可以准确的接收上位机传输的命令数据,下位机也能将数据信息传输到准确地传输到上位机在测试过程中,上位机和下位机显示的都是一个频率数据,但是为了在上位机上直观的显示出液位信息,所以将传回到上位机的频率信息转换成液位显示同时也证明该曼彻斯特编码电路能够准确地传输信息该系统有如下主要特点
1.测量精度高该系统基于FPGA高速处理芯片,采用等精度测频法,测量频率精度高,可以达到,这样使系统测量液位高度精度高,在液面波动较小的情况下,测量液面高度波动在
0.05CM以内
2.系统自检在测量之前通过系统自检来判断系统是否处在正常工作状态下
3.远距离操控通过PC机发送命令,曼彻斯特编码__经电缆远距离传输到下位机,下位机采集液面高度信息并将数据通过曼码返回到PC机上显示
4.测量范围大由于该系统测频率的范围大,最大可至上百兆赫兹,这样使系统动态测量范围大
6.2设计中所遇到的问题及解决的办法硬件部分在硬件调试过程中遇到很多“奇怪”的问题,如继电器有驱动电路却不能正常工作,因数据线中某一根线连接不牢靠使测量的数据结果难以理解,在通过__板调试程序时,FPGA不能有效识别单片机输出的地址__等等但是对这些“奇怪”的问题,我们没有放弃,通过仔细分析检查,最后都一一解决了这些问题下面对部分问题的解决方法做一下说明
1.继电器有驱动电路却不能正常工作我们仔细查阅了相关资料,发现驱动电路设计不对,改进继电器驱动电路,继电器能够正常工作修改后的驱动电路如下图22继电器驱动电路
2.FPGA不能有效识别单片机输出的地址__在确定单片机地址__输出脚定义和FPGA接收地址__的引脚定义无误,但是单片机通过改变地址读取FPGA中信息时,结果显示接收的数据一直不变,说明FPGA不能有效识别单片机输出的地址__,最后通过检查,发现问题在于__板引脚标注不对这个问题似乎很小,但是说明了一个很重要的规则,在硬件制作中每一个环节都必须要仔细检查软件部分
1.在频率测量时,通过继电器的切换不同频率值而LCD显示却不能变换成当前频率值解决方法单片机程序中,将数据送往显示用的h,e在循环一次后一直为零,没有重新赋初值
2.LCD1602显示屏高位没有清零,当测高频率后再测低频率高位消失不了解决方法在频率显示完加一个清屏命令
3.在系统联调的过程中,(当时频率信息以整数显示)发现测量值与实际值相差很大解决方法通过仔细检查程序,发现在数据处理过程中用到的一个用来存放两个数据相除结果的中间变量,其数据类型设置为了整型,这样使结果小数部分数据全部丢失掉了,最后导致测量误差较大解决方法就是把该中间变量的数据类型改为浮点型数据整体联调部分
1.下位机测的频率值与实际值(示波器测量值)偏差很大,不能准确测其频率,但是__发生器输出的方波__却能准确测量解决方法经检查发现74ls00把FPGA测量模块的输入电压拉到低于
3.6v(2V左右)不能正常测量频率值,更换FPGA的输入端口,原端口可能烧坏
2.当液位深度采集模块的地与其他模块共地时,测量的液位深度有很大的偏差;当与示波器共地时,测量的液位深度就较稳定解决方法将555输出的方波__经74ls00整形的74ls00换成74s08输出波形稳定,与地接在何处没有关系输出的液位深度也很稳定看技术资料发现,74s08带负载能力比74ls00强
6.3改进方向经过吴爱平老师和我们的努力,虽然该地下液位测量系统初见成效,但由于时间紧迫,还有很多需要继续发展与改进的地方
1.在PC机上用Labview界面将该系统的相关液位信息和控制命令更直观的展示出来
2.用UART实现系统与PC机进行通讯串口通讯部分程序已经编写,但是没有与硬件结合
3.将调理电路加入整个系统中实现远距离数据及命令控制
4.在命令切换控制方面更灵活____
[1]2000
[2]徐爱均编著.单片机原理使用教程.北京:电子工业出版社.2009
[3]__平.基于FPGA的等精度频率计的设计.石油仪器2005,4:17~19
[4]谭浩强编著.C语言程序设计北京清华大学出版社.2005
[5]1991
[6]康华光.数字电子技术基础.北京:高等教育出版社.1991
[7]孙传友编.感测技术基础.北京:电子工业出版社.2001
[8]马忠梅等编著.单片机的C
1997.3
[9]张培仁等编著.基于C语言编程MCS-512002
[10]何立民编著.单片机应用技术选编
(5).第一版.北京北京____大学出版社.
1997.10
[11]郭观七编著.基于C语言的MCS-
511997.2
[12]
1998.4
[13]马忠梅等编著.单片机的C
1998.10
[14]孙传友编.测控系统原理与设计.北京:北京____大学出版社.2001致谢首先我要在这里感谢我的家人,没有他们对我的抚养和教育,没有他们在经济上对我的支持,我不可能坐在这里学习,更不用说毕业设计他们给予我的爱、理解、关心和支持是我不断前进的动力在毕业设计的整个过程中,指导老师吴爱平老师一直给予我很大的帮助和支持他凭着深厚的学识,超强的能力,丰富的经验,严谨的治学态度对我的毕业设计做了详细认真的指导,在做毕业设计期间,我经常需要请教吴老师一些问题,他总能够不厌其烦的解答我的疑问在学习方法方面,鼓励我培养自学能力,遇到一些问题要多思考,同时激励我们致力于专业钻研,打好扎实基础在此谨向指导老师致以我最诚挚的敬意和衷心的感谢!在地下液位测量系统硬件的制作过程中,和黎学超同学一起配合协作,相互鼓励,使得最终达到了基本效果,再次一并感谢!在做毕业设计期间,罗明章老师也对我的毕业设计给予很大的帮助,提出了许多很好的建议,我在这里表示感谢最后向所有关心和帮助过我的人致以衷心的感谢,祝你们一生安康!在这离校的时刻,我衷心祝愿各位老师身体健康,万事如意,工作顺利!2010年6月6日附录1地下液位测量系统实物照片附录2系统模块原理图及PCB图上位机原理图下位机原理图上位机PCB图下位机PCB图调理电路原理图附录3曼彻斯特编解码部分原程序
1.上位机主程序清单void__in{ucharD[m1]={0};ucharD2[m2]={0};D
[6]=\0;D2
[10]=\0;lcd_init;delay50;display_str00table0;delay2400;display_str00;while1{SwichCom;display_str00table2;delay2100;whileFlag==2Flag2==0{LED_S=0;SendData;delay1ms;__POut1=1;temp++;D
[0]=0+48;//0D
[1]=88;//XD
[2]=ComdFrTop[DataLine][NoCom]/16+48;ifD
[2]57D
[2]=D
[2]+7;D
[3]=ComdFrTop[DataLine][NoCom]%16+48;ifD
[3]57D
[3]=D
[3]+7;D
[4]=ComdFrTop[DataLine][NoCom+1]/16+48;ifD
[4]57D
[4]=D
[4]+7;D
[5]=ComdFrTop[DataLine][NoCom+1]%16+48;ifD
[5]57D
[5]=D
[5]+7;display_str05D;delay30ms;SwichCom;iftemp==32{Flag2=1;LED_S=1;temp=0;}}if!__PInFlag2==1{LED_R=0;Flag=1;GetGroupData;Flag2=0;__PIn=1;form=0;m12;m++{ifDataToTop[m]==0x03DataToTop[m+2]==0x01{Stemp=DataToTop[m+4]*65536*256+DataToTop[m+6]*65536+DataToTop[m+8]*256+DataToTop[m+10];stempdata=
3070605.500000/Stemp-
39.1127;getdata=unsignedlong
3070605.500000/Stemp-
39.1127;break;}}ifgetdata0getdata=99{display_str113table3;ifgetdata=9{D2
[0]==;D2
[1]=getdata+48;D2
[2]=46;D2
[3]=unsignedlongstempdata*10%10+48;D2
[4]=unsignedlongstempdata*100%10+48;D2
[5]=unsignedlongstempdata*1000%10+48;D2
[6]=unsignedlongstempdata*_____%10+48;D2
[7]=unsignedlongstempdata*_____0%10+48;D2
[8]=unsignedlongstempdata*_____00%10+48;D2
[9]=unsignedlongstempdata*_____000%10+48;display_str10H;//显示Fxdisplay_str12D2;//显示}elseifgetdata=99{D2
[0]==;D2
[1]=getdata%100/10+48;D2
[2]=getdata%10+48;D2
[3]=46;D2
[4]=unsignedlongstempdata*10%10+48;D2
[5]=unsignedlongstempdata*100%10+48;D2
[6]=unsignedlongstempdata*1000%10+48;D2
[7]=unsignedlongstempdata*_____%10+48;D2
[8]=unsignedlongstempdata*_____0%10+48;D2
[9]=unsignedlongstempdata*_____00%10+48;display_str10H;//显示Fxdisplay_str12D2;//显示}}elseifgetdata99{delay10;display_str10Overload.......;delay240;}LED_R=1;}__PIn=1;}}
2.下位机主程序清单void__in{unsignedlongNs=0;unsignedlongNx=0;doubleStemp=0;ucharD[m1]={0};ucharD2[m2]={0};D2
[10]=\0;D
[6]=\0;DAd=0x40;lcd_init;delay50;while1{SwichCom;//命令选择函数(发送模式选择)ifFlag==4Flag2==2{Flag2=0;Flag=3;}ifFlag==3{redata;Nx=DAT
[3]*65536*256+DAT
[2]*65536+DAT
[1]*256+DAT
[0];Ns=DAT
[7]*65536*256+DAT
[6]*65536+DAT
[5]*256+DAT
[4];Stemp=
240000000.000000/Ns;getdata=unsignedlongStemp*Nx/
10.000000;//用于判断档位stempdata=Stemp*Nx/
10.000000;//精确DA2
[4]=unsignedlongstempdata/65536*256;DA2
[6]=unsignedlongstempdata%65536*256/65536;DA2
[8]=unsignedlongstempdata%65536/256;DA2
[10]=unsignedlongstempdata%256;ifgetdata0getdata=999{display_str113table2;//显示单位HZifgetdata=9{D2
[0]==;D2
[1]=getdata+48;D2
[2]=46;D2
[3]=unsignedlongstempdata*10%10+48;D2
[4]=unsignedlongstempdata*100%10+48;D2
[5]=unsignedlongstempdata*1000%10+48;D2
[6]=unsignedlongstempdata*_____%10+48;D2
[7]=unsignedlongstempdata*_____0%10+48;D2
[8]=unsignedlongstempdata*_____00%10+48;D2
[9]=unsignedlongstempdata*_____000%10+48;display_str10Fx;//显示Fxdisplay_str12D2;//显示}elseifgetdata=99{D2
[0]==;D2
[1]=getdata%100/10+48;D2
[2]=getdata%10+48;D2
[3]=46;D2
[4]=unsignedlongstempdata*10%10+48;D2
[5]=unsignedlongstempdata*100%10+48;D2
[6]=unsignedlongstempdata*1000%10+48;D2
[7]=unsignedlongstempdata*_____%10+48;D2
[8]=unsignedlongstempdata*_____0%10+48;D2
[9]=unsignedlongstempdata*_____00%10+48;display_str10Fx;//显示Fxdisplay_str12D2;//显示}elseifgetdata=999{D2
[0]==;D2
[1]=getdata%1000/100+48;D2
[2]=getdata%100/10+48;D2
[3]=getdata%10+48;D2
[4]=46;D2
[5]=unsignedlongstempdata*10%10+48;D2
[6]=unsignedlongstempdata*100%10+48;D2
[7]=unsignedlongstempdata*1000%10+48;D2
[8]=unsignedlongstempdata*_____%10+48;D2
[9]=unsignedlongstempdata*_____0%10+48;display_str10Fx;//显示Fxdisplay_str12D2;//显示}}elseifgetdata=999999{display_str113table3;//显示单位KHZifgetdata=9999{D2
[0]==;D2
[1]=unsignedlongstempdata/1000+48;D2
[2]=46;D2
[3]=unsignedlongstempdata/100%10+48;D2
[4]=unsignedlongstempdata/10%10+48;D2
[5]=unsignedlongstempdata%10+48;D2
[6]=unsignedlongstempdata*10%10+48;D2
[7]=unsignedlongstempdata*100%10+48;D2
[8]=unsignedlongstempdata*1000%10+48;D2
[9]=unsignedlongstempdata*_____%10+48;display_str10Fx;//显示Fxdisplay_str12D2;//显示}elseifgetdata=99999{D2
[0]=:;D2
[1]=unsignedlongstempdata/_____+48;D2
[2]=unsignedlongstempdata/1000%10+48;D2
[3]=46;D2
[4]=unsignedlongstempdata/100%10+48;D2
[5]=unsignedlongstempdata/10%10+48;D2
[6]=unsignedlongstempdata%10+48;D2
[7]=unsignedlongstempdata*10%10+48;D2
[8]=unsignedlongstempdata*100%10+48;D2
[9]=unsignedlongstempdata*1000%10+48;display_str10Fx;//显示Fxdisplay_str12D2;//显示}………………}elseifgetdata9999999{delay10;display_str10Overload.......;delay240;}}display_str00table1;delay24;//显示R_CN:whileFlag==3Flag2==0//发送一行数据{LED_S=0;SendData;delay30ms;__POut1=1;temp++;delay5ms;iftemp==36{Flag2=1;temp=0;LED_S=1;}}if!__PIn{LED_R=0;Flag=1;GetGroupData;Flag2=2;LED_R=1;D
[0]=0+48;D
[1]=88;D
[2]=DataToTop
[0]/16+48;ifD
[2]57D
[2]=D
[2]+7;D
[3]=DataToTop
[0]%16+48;ifD
[3]57D
[3]=D
[3]+7;D
[4]=DataToTop
[1]/16+48;ifD
[4]57D
[4]=D
[4]+7;D
[5]=DataToTop
[1]%16+48;ifD
[5]57D
[5]=D
[5]+7;}display_str05D;//显示接收的命令数据__PIn=1;//将数据接收引脚置高}附录2系统模块原理图及PCB图40附录3曼彻斯特编解码部分源程序44上位机调理电路传感器__处理继电器驱动控制电路油水界面PC机AT__S52曼彻斯特编解码编解码串口通讯模块按键命令切换LCD显示液位H,命令显示上位机AT__S52曼彻斯特编解码编解码LCD显示液位高度H,命令显示状态指示下位机Nios高精度频率测量液位__采集模块D[
0..7]Adr[
0..3]控制__ffdr[
0..3]FPGA频率测量模块下位机调理电路开始初始化是否有上位机命令发送?NY解码,保存在命令缓冲区液晶显示接收的命令向FPGA模块读取数据NY模式选择(校验/检测)发出继电器控制__是否读取频率__?液晶显示采集的数据将数据编码,再差分输出数据是否发送完毕NY开始初始化命令选择(按键/PC机)将命令编码,再差分输出液晶显示命令数据命令是否发送完?毕NY是否有下位机数据传回?NY解码,保存在数据缓冲区液晶显示接收的数据通过串口将数据传输到PC机图1曼彻斯特码格式中间发送缓冲区发送缓冲区并行数据输入计数器编码周期开始前读入命令头数据头偶数周期取反,右移一次取出第五位串行输出chPointNum1==0chPointNum1==1chPointNum==15定时器根据计数器值来确定第一位数据存储接收到的高位字节计数器检测同步头chPointNum==8chPointNum==16定时器存储接收到的低位字节上位机调理电路传感器__处理继电器驱动控制电路油水界面PC机AT__S52曼彻斯特编解码编解码串口通讯模块按键命令切换LCD显示液位H,命令显示上位机AT__S52曼彻斯特编解码编解码LCD显示液位高度H,命令显示状态指示下位机Nios高精度频率测量液位__采集模块D[
0..7]Adr[
0..3]控制__ffdr[
0..3]FPGA频率测量模块下位机调理电路__x23212345678161514131211109VccGNDT1OUTR1INR1OUTT1INT2INR2OUTC1+V+C1-C2+C2-V-T2OUTR2IN图11__x232的引脚图__调理电路下行数据处理__调理电路上行数据处理上位机下位机__调理电路Pout10Pout11理电路In2Pout20Pout21理电路In1开始初始化命令选择(按键/PC机)将命令编码,再差分输出液晶显示命令数据命令是否发送完?毕NY是否有下位机数据传回?NY解码,保存在数据缓冲区液晶显示接收的数据通过串口将数据传输到PC机开始初始化是否有上位机命令发送?NY解码,保存在命令缓冲区液晶显示接收的命令向FPGA模块读取数据NY模式选择(校验/检测)发出继电器控制__是否读取频率__?液晶显示采集的数据将数据编码,再差分输出数据是否发送完毕NY检测同步头重置定时器TR1开定时器是否检测到正确同步头?NY等待一帧数据接收完毕开始接收八位数据存储一次结束图19接收一帧数据程序流程图图20定时器1中断程序流程图进入中断数据缓冲区右移一位读取一位数据按位与取得bOdd2定时周期变量加1数据是否同步?bSynValid=1?Y关定时器器结束奇偶校验器N。