版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业设计(论文)爆轰性能测试系统软件设计SoftwareDesignofDetonationPerformanceTestSystem总计:毕业设计(论文)26页表格:2个插图:20幅学院(系):电子与电气工程系专业:电子信息工程爆轰性能测试系统软件设计[摘要]火药性能测试系统主要是对炸药爆炸时的各种性能参数进行有效的测试,并将这些测试参数上传给PC机,进行数据存储记录。整个炸药性能测试系统包括爆轰波数据测试和爆速数据测试两个方面。本文对爆轰波波形数据存储,根据实际中的条件和要求,本论文中选择了ADC、CPLD、RAM、AT89C52单片机等模块和串口传输的方案。该方案的主要思路是ADC芯片完成数据采集,CPLD模块用于控制ADC工作及数据传输。RAM模块负责数据的存储。单片机控制模块用于数据的读取,然后通过串口传输上传到PC机。当PC机得到所采集的数据后,对数据进行存储。本文首先对系统功能进行了详细分析,提出系统总体结构和设计原则。然后对高速数据采集系统、存储器等相关控制电路进行了设计、仿真和调试。[关键词]CPLD;采样;高速数据采集;系统调试SoftwareDesignofDetonationPerformanceTestSystemAbstract:Powderperformancetestsystemmainlyforexplosiveperformanceparametersduringthetestefficiently,anduploadthemtothePC,testparameters,datastoragerecords.Performancetestsystem,includingtheexplosivedetonationandthedetonationvelocitydatatestingdatatestingtwoaspects.Thisformofdatastorageonthedetonationwave,inaccordancewiththeactualconditionsandrequirements,thepaperselectedADC,CPLD,RAM,AT89C52microcontrollermoduleandserialtransmissionofsuchprogram.Theprogram'smainideaistocompletethedataacquisitionADCchip,CPLDmoduleisusedtocontroltheADCworkanddatatransmission.RAMmodulesresponsiblefordatastorage.SCMcontrolmodulefordataread,andthenuploadedtothePCthroughtheserialportmachine.WhenthePC,thedataarecollected,thedatastorage.Thispaperfeaturesadetailedsystemanalysis,systemarchitectureanddesignprinciples.Thenhigh-speeddataacquisitionsystem,memoryandotherrelatedcontrolcircuitdesign,simulationanddebugging.Keywords:CPLD;sampling;highspeeddataacquisition;systemcommissioning
目录1引言 12炸药性能测试系统的设计概述 13爆轰波波形数据的采集、存储、处理及通讯的具体实现 33.1数据采集系统的基本方案 33.1.1A/D转换电路 33.2CPLD电路部分设计 43.2.1可编程逻辑器件 53.2.2VHDL语言 53.2.3可编程逻辑器件的开发工具 63.2.4CPLD控制器的详细设计 63.3单片机控制模块设计 93.3.1AT89C52的体系结构和硬件描述 93.3.2中断系统 93.3.3RS232通讯接口的设计 104.软件设计 104.1CPLD控制程序部分 104.1.1CPLD最小控制系统各模块程序及仿真 114.1.2CPLD最小控制系统流程图 184.2单片机控制程序部分 20结束语 24参考文献 25致谢 261引言随着无线通信与计算技术、信号处理与分析技术的发展,军事、卫星通信等信号不断向高频、宽带、数字化发展。高速采集成为制约信号处理的关键因素之一。今天高速数据采集技术已在雷达、通信、地震勘探、智能仪器、科学实验等各个方面有着广泛的应用。本文介绍了以CPLD为核心处理芯片的多路数据采集系统的实现方法。该系统通过CPLD控制ADC转换,将采样数据储存到静态存储器(RAM)中,再由单片机从RAM中取出数据经MAX232串口上传到PC机,由PC机完成对数据的处理。由于实验条件,论文中实现的最高采样率为20MSPS。本设计系统主要是完成对炸药爆速及爆轰波数据的采集和数据处理工作,形象的反映出炸药爆炸时的性能。具体到本文,主要是实现爆轰波数据的采集和处理。在具体的实现上,主要解决了传感器的数据测量、模数的转换、高速信号的缓冲处理、数据的存储、看门狗、单片机与PC机的通信等问题。论文中侧重分析了CPLD芯片FLEX10K30E在系统中的硬件应用以及软件实现,另一个重点是主CPU模板的单片机对整个系统的控制,以及PC机的终端数据库软件的设计。在器件的选择上,主要采用了FLEX10K30E和AT89C52[1]。这是从本设计的实际要求出发而考虑的。由于数据处理方面的高速要求,考虑到成本,采用了CPLD器件来作为数据缓冲的设计器件,这样达到电路保密以及减小系统的PCB面积的目的。采用AT89C52可以以最小的成本来达到对系统全面控制的要求。本文针对炸药性能——爆轰波数据采集的要求,首先阐明了本设计的产生和应用背景,接着讨论了整个高速数据采集系统的整体实现原理,接下来主要具体讲述了如何设计一种基于CPLD和单片机的卡式测试仪器。讲述了可编程器件CPLD及VHDL语言的原理和设计实现,单片机及汇编语言的原理和设计实现,PC终端数据的处理。在文章的最后给出了具体设计中应该注意的一些问题。2炸药性能测试系统的设计概述单独使用单片机作为存储测试系统主控元件发送数据采集和数据传输的指令时,单片机的工作速度很难完成采样率达到1MS/s的数据采集工作,而且单片机的端口数目、内部定时器和中断源的数目都有限,在应用中往往要加外围扩展芯片,这就增加了系统硬件的复杂程度;若选择CPLD作为系统控制核心,不仅可以简化系统设计,而且提高了系统的整体性能和系统稳定性,但若单独通过CPLD完成整个系统的控制功能,则需选用内部容量大,可用门数多的CPLD器件,这势必使系统功耗和成本都有所提高[2]。而且控制时序的设计也相当复杂,应用者开发起来比较费力。因此,本设计在传统存储测试系统的基础上,采用高速ADC与高速静态随机存取存储器(RAM)构成的设计方案结合采用CPLD与单片机技术相结合的存储测试系统。由于考虑研究中主要还是实验室研究阶段,是采用信号发生器产生被测信号,省去了ADC前端的滤波、放大等信号调理电路部分。经全面衡量对比,选择了ADC+CPLD+RAM+AT89C52单片机+串口传输的方案。该方案的主要思路是,先采用CPLD控制高速AD转换器把信号采集进来并同时存储到RAM存储器中,当RAM存储器存满以后,认为CPLD及ADC和RAM完成一次采集存储任务,此为前一阶段任务完成;然后通知并等待单片机将存储器中采集的数据取走,通过串口传输上传到PC机。当PC机得到所采集的数据后,对数据进行存储。其方案框图如图1所示。图1爆轰性能测试系统方案框图该系统能够以较高的采样率完成对信号的采集存储。模拟信号在CPLD时序控制下经AD转换器转换为数字信号,并实时存储于静态存储器中。现场采集完成后(即RAM已经存储满),单片机将数据从存储器中读取出来,通过RS-232串口上传至PC计算机作进一步的处理[3]。在通常的数据采集系统中,每次数据采集过程,单片机和A/D转换之间都由执行指令完成数据的传送,由于受单片机执行指令时间的限制,采集一个数据往往需要几到几十微秒的时间,这样的数据采集系统难以适应高速信号采集的需要。本系统是在单片机控制下,完全由硬件自动实现数据采集的全过程。在该系统中单片机只控制数据采集的启动和采集结束后对数据的传输,在数据采集的过程中,单片机并不对采集通道进行任何干预,这样就使系统的采集速率完全不受单片机速度的限制,从而实现高速数据采集的目的。该系统具体工作原理是:作为控制器的CPLD上电以后即输出连续的定时脉冲给A/D转换器(ADC0809)的CLK端,使其每接受一个时间脉冲即进行一次A/D转换,同时将CPLD内部地址发生器产生的依次连续变化的地址信号在每一定时脉冲期间经地址选择器(在CPLD内部)直接送到存储器,同时在每一定时脉冲期间A/D转换器将所采集到的第n一3次的数据经数据总线直接输入到两片SRAM存储器中保存,如此连续循环,完成一个一个采样周期。重复上述过程,直到存储器存满,由CPLD器件引起单片机外部中断,结束数据采集,转入中断处理程序进行数据处理,单片机从RAM中读取数据并送PC机处理。系统工作原理可由图1描述[4]。3爆轰波波形数据的采集、存储、处理及通讯的具体实现3.1数据采集系统的基本方案开机后,CPLD发出时钟脉冲ADCLK给ADC,控制AD转换。每ADCLK脉冲ADC转换一次,CPLD即刻给出OE输出数据使能信号,将8位数据写入存储器中。这样一直循环采集,直到存储器满。然后CPLD置低INTO通知单片机读取数据,得到通知后,单片机将工作状态信号置为有效以应答,然后单片机直接控制RAM读取数据,并不断通过串口RS232将数据上传到PC机,当读取完数据后,再将工作状态信号置为无效。CPLD一直处于工作状态,当工作状态信号置为无效后,又开始下一次的数据写入到存储器。此时,PC机对上传的数据进行处理、波形回放,如此循环。详细原理逻辑框图如图2。图2数据采集系统逻辑框图3.1.1A/D转换电路A/D转换是将模拟量电信号转换为数字信号。本文中A/D转换单元采用ADC0809芯片实现模数转换功能,下面分别对这种芯片的工作原理做出介绍。ADC0809是CMOS工艺,采用8位逐次逼近型8路模数转换器,ADC0809集成了8路地址锁存地址锁存与译码8位模拟量输入IN0~IN7ADDCALE启动START输出允许OE时钟CLOCKVREF+VREF-8位输出数字量转换结束(中断)EOC8路模拟开关8位A/D转换器三态输出缓冲器ADDAADDB图3芯片的内部结构模拟开关,地址锁存与译码器、8位A/D转换器以及8位三态输出锁存器。其中IN0--IN7为8路模拟量输入端口,D0~D0为8为数字量输出端口,VREF(+)与VREF(9是基准参考电压,用于确定输入模拟量的量程范围。CLK为时钟信号输入端,一个转换周期需要64个时钟信号。START为转换启动引脚,高电平有效。ALE是地址锁存允许信号,在它的下降沿将地址打入锁存器[5]。EOC为转换结束信号,在转换期间该信号为低电平,转换结束后变为高电平。OE为数字量输出允许信号,高电平有效。A、B、C为地址输入端口,通过他们的二进制编码组合选择输入模拟量的通道。ADC0809在一个转换周期内,首先在ALE的作用下读入A、B、C的数据,进而控制8路模拟开关接通所要转换的通道,然后EOC变为低电平,被转换信号在转换器内同多个参考值相比较,直至找到最为接近的一个参考值,并将该参考值对应的数字量送到三态输出锁存器,然后EOC变为高电平,表示转换结束。这时如果OE收到高电平信号,便将输出锁存起开放,送出转换后的数字量。这一部分电路的功能是将输入模拟信号高速数字化,并将结果存储在RAM中,供CPU处理。本设计采用双通道输入。由两个信号发生器发出的信号,通过两路A/D转换后,由CPLD控制送入两片RAM中存储。该电路的工作原理是:CPLD发出时钟脉冲ADCLK给ADC,控制AD转换。每ADCLK脉冲ADC转换一次,CPLD同时即刻给出0E输出数据使能信号,将两路8位数经8根数据总线输送至存储器中。与此同时,CPLD在同时给存储器送9位相同地址信号后再送写信号WE,将数据同时写入RAM中。这种并行处理方式也在一定程度上提高了系统的速度。3.2CPLD电路部分设计高速数据采集系统中,一般采用DMA方式,由于单片机本身并不支持DMA接口方式,必须外加DMA控制器和总线仲裁电路:数据采集电路中,时序控制电路、地址发生器、多路控制驱动器等芯片众多,从而提高了硬件电路的复杂性,降低了系统的灵活性和可靠性,并且占用了大部分体积,逻辑时序复杂。用CPLD实现这些电路则使开发简单、灵活、方便。3.2.1可编程逻辑器件在数字化的道路上,电子设计技术的发展经历了并将继续经历许多重大的变革和飞跃。从应用通用数字电路芯片构成电路与系统、广泛应用的MPU(徼处理单元)等到可编程逻辑器件(包括现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)在电子设计自动化(EDA)中广泛应用,使得电路系统在设计上发生了~系列具有里程碑意义的飞跃[6]。如果说MPU在逻辑的实现上是无限的话,那么FPCA/CPLD不但包括了MPU这一特点,而且还触及硅片电路的物理极限,并兼有高速、大容量、高可靠性以及很宽的适用性等诸多特点。其不可替代的地位及伴随而来的极具知识经济特征的IP核技术的发展越来越受到电路设计人员的关注。可编程逻辑器件(FLD)是由用户编程实现所需逻辑功能的数字集成电路。在20世纪80年代初,简单的PLD主要用于集成多个分立逻辑器件,还可用它来实现布尔方程。如今,高密度PLD不仅可以实现系统级的电路集成,而且被看作是ASIC和ASSP的替代品。ASIC是用户根据某一专门应用设计的,ASSP是用来实现特定功能的器件。由于大批量的生产采用了先进的工艺技术,使PLD的价格不断降低。Altera公司提供的器件在集成度、密度、性能和成本方面都可与ASIC相比。这些因素与产品投放市场的时间和可编程的灵活性相结合,不断地推动着高密度PLD在电子系统开发和生产中的应用[7]。在可编程逻辑器件的学习和使用中,我认识到可编程逻辑器件的学习和应用已不仅仅是单纯地基于某种特定器件的开发过程,而是一种极富挑战性和创造性的劳动,使目前许多处于计算机辅助设计(CAD)和规划的纯软件活动变成了实实在在的设计和实体,这些设计在计算机上仿真通过后,几乎即可应用于实际电路,大大地简化了设计方法和调试过程。3.2.2VHDL语言VHDL最早是由美国国防部提出的。1987年12月,IEEE接受VHDL为标准的IIDL,这就是今天我们所了解的IEEESTDl076—1987[LRM87]。此后又做了一些修改,增加了一些功能,后来形成了新的版本IEEESTDl0761993。VHDL主要用于描述数字系统的结构、行为、功能和接口,其语言形式和描述风格与句法十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件、一个电路模块或一个系统)分成外部(或称可视部分及端口)和内部(或称不可视部分),即涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦内部开发完成,其他的设计就可以直接调用这个实体。随着数字电路的发展,VHDL语言将承担更多数字系统设计任务。3.2.3可编程逻辑器件的开发工具开发Altera公司的可编程逻辑器件有两种软件,QuartuslI和MAX+PLUSII。本设计采用QuartusII可编程逻辑器件开发软件,它提供了一种与结构无关的全集成化设计环境,使设计者能对Altera公司的各种产品系列方便地进行设计输入、快速处理和器件编程[8]。QuartusII开发系统具有强大的处理能力和高度的灵活性,它的优点主要表现在以下方面:(1)与结构无关:QuartusII系统的编译程序,支持从Class到FLEXI的Altera全部系列的PLD产品,提供与结构无关的设计开发坏境,具有强大的逻辑综合与优化功能。(2)多平台:QuartusII可在基于Pc机的WINDOWS或WINDOWSNT环境下运行。全集成化:QuartusII的设计输入、处理、优化和校验功能全部集成在统一的开发环境下,可以加快动态调试,缩短开发周期。(3)硬件描述语言(HDL):Quartus11支持各种HDL输入选项,包括ⅧDL,VerilongHDL和Altera公司自己的硬件描述语言VHDL。(4)丰富的设计库:OuartusII提供丰富的库单元提供设计者调用,其中包括74系列的全部器件和多种特殊的逻辑宏单元(Macro—Funtion),以及新型的参数化宏单元(Maga-Function)。调用库单元进行设计,可以大大减轻设计工作量,设计周期成倍缩短。(5)开放的界面:QuartustI提供标准的接口,可以与其它工业标准的EDA软件协同使用。设计者可以使用其他的EDA软件工具进行设计输入.再利用QuartusII的Compiler进行编译处理,并使用其它工具进行器件和板级仿真晰朝。3.2.4CPLD控制器的详细设计在整个高速采集系统中,CPLD起着决定性的控制作用,因为CPLD本身具有高速、并行工作的特点,所以具有很好的控制能力。下面具体说CPLD内部的工作机制。所设计的CPLD控制程序是针对基本方案的。CPLD的主要任务是:CPLD对AD进行时序控制,以采集模拟信号到CPLD,在AD进行采集的同时,CPLD将采集到的数据,按RAM的写时序,将数据并行写入RAM中,这样AD每采集一次数据,CPLD立即将采集到的数据写入RAM,直到RAM存储满为止,然后CPLD发出数据已满的低跳变信号给单片机的外部中断INTO口(通知线),通知单片机可以读取数据了。单片机得到通知,当做好读取数据的准备后,立刻将工作状态置为有效以应答CPLD,表示正在采集数据,这时CPLD等待单片机从RAM取走数据。当单片机取走数据后,置工作状态信号为无效。一旦CPLD检测到工作状态信号无效后,则说明单片机己读取完数据,CPLD就立即控制AD进入下一轮的采集工作当中。经过对AD和RAM的详细时序分析,可以据此很精确的对它们进行时序控制设计了。在CPLD中设计了两大部分。分别是AD转换部分与存储控制模块和地址计数器部分。(1)AD转换与存储控制模块的功能是对AD进行时序控制和对RAM的写时序控制。(2)地址计数器模块的功能是输出9位地址信号,实现对RAM寻址。引脚及功能介绍,详细连接图见图4。图4AD转换与存储控制模块和地址计数器模块框图CLK:CPLD的全局时钟信号输入端,实验初期暂时采用20MHz,以免对于调试过程给予过高苛求。D[7..0]:AD转换器输入到CPLD的数据端口。EOC:转换状态指示,低电平表示正在转换。ALE:8个模拟信号通道地址锁存信号。START:转换开始信号。OE:CPLD输送给AD转换器的AD数据输出使能信号。当为低时,ADC输出所锁存的采集的数据信号ADDA:信号通道最低位控制信号。LOCK0:观察数据锁存时钟。Q[7..0]:8位数据输出。CPLD输出到RAM的AD转换数据输出端口。通过它将数据写入RAM数据端口。WREN:RAM的写脉冲。当为高电平时,写有效。INTERRUPT:读取通知信号,连接到单片机的INTO口,下跳沿有效。(4)时序和状态机设计说明根据时序图的特点,AD只需要供给固定的时钟节拍就可以进行控制,同时按照RAM的写时序的特点,设计了如下状态机来进行基本的采集和存储,存储是与AD的采集时钟完全同步的,也就是说,在每一个AD采样周期内实现的数据存储。设计了状态机如图5所示。st0st0st1st2st3st4reset图5采集存储状态机图当系统复位后,进入状态stO,根据一定的状态转移条件进入下一个状态。下面分别说明每个状态的主要任务。stO:初始化各端口信号和等待作用。如检测是否开始采集,复位地址计数器,将外部输出端口信号进行复位。stl:ALE<=’1’,地址锁存信号有效。START<=’1’,启动AD采样。LOCK<=’0’,转换后数据输出锁存时钟信号,此时无效。OE<=st2:ALE<=’0’;START<=’1’;LOCK<=’0’;OE<=’0’;状态跟stl基本一样,所不同的是在st2状态中还要检测EOC是否为高电平st3:ALE<=’0’;START<=’0’;LOCK<=’0’;OEst4:ALE<=’0’;START<=’0’;LOCK<=’1’,输出数据锁存时钟信号;OE<=’(5)时序仿真结果与分析由时序仿真图7可以看到,当FULL置高时,说明地址计数器到顶了,这是RAM存储已经满了。CPLD立刻将INTERRUPT置低产生下降沿通知单片机可以读取数据了,此时CPLD什么都不做,除了等待单片机的应答信号。单片机响应中断,置WREN为低电平,RAM进入读出状态。单片机此时进入串口通信状态,等待串口中断,发送数据,当数据发送完,继续等待串口中断,直到把RAM中的数据读完,才关闭串口中断。这里有个中断优先级的区别,必须先响应外部中断后,置RAM为读出状态时,再执行串口中断程序,发送数据。之后,CPLD一直处于等待单片机读取数据的状态,直到检测到WREN为高,说明单片机已经读取完了数据。此时,CPLD将进入stO的复位状态,为下一轮采集做好准备,又开始采集。AC0809采样状态工作时序仿真图如图6所示。图6ADC0809采样状态工作时序仿真图3.3单片机控制模块设计单片机作为主控元件完成对RAM中数据读取并进行通过RS一232口向Pc机上传的功能。当单片机接收到CPLD发送的外部中断触发信号之后开始数据上传工作,该中断信号通过边沿触发单片机INT0引脚[9]。在数据传输过程中,上位机和下位机需要具有完备的握手通信协议才能保证上位机及时、准确地接收数据。单片机以校验和的方式发送数据,以8B数据为一帧发送。3.3.1AT89C52的体系结构和硬件描述本设计中所采用的CPU为ATMEL公司生产的8位FLASH单片机系列中的AT89C52。AT89C52是一种低功耗/低电压、高性能的8位单片机,它是ATMEL公司在AT89C51的基础上,存储容量、定时器和中断能力等得到改进的型号[10]。它的主要性能如下:(1)8KB的FLASH存储器;(2)256字节的片内RAM;(3)32条可编程I/O线;(4)3个16位定时器/计数器;(5)6个中断源;(6)3级程序存储器保密;(7)可编程串行接口;(8)片内时钟振荡器。3.3.2中断系统AT89C52总共具有6个中断源,两个外部中断(INT0、INT1)和三个内部定时器中断(定时器0、1、2),另外还有一个串行口中断。所有的这些中断都属于可屏蔽中断,即可以通过软件对片内特殊功能寄存器IE的设置,实现对各个中断源中断请求的开放(允许)或屏蔽(禁止)的控制。中断控制寄存器IE的字节地址为A8H,可进行位寻址操作。本设计中,将用到两个外部中断,来实现主CPU模板对波形数据采集板和爆速数据采集板的控制[11]。3.3.3RS232通讯接口的设计RS-232C接口标准简述:RS-232C标准时美国电子工业协会(EIA)与BELL等公司一起开发的1969年公布的通信协议[12]。它适合于数据传输率在0至20000b/s范围内的通信,它具有机械特性:RS-232C接口是单端发送,单端接收,传输线上允许一个驱动器和一个发送器。RS-232C标准接口有25条线,其中4条数据线,11条控制线,3条定时线,7条备用线和未定义线。它所采用的电缆传输长度与传输的电容有关。它的最大传输距离可达30m,最大速率20kb/s,适于相距较近设备的通信。电气特性:RS-232C标准定义-15V~-3V表示逻辑“1”,+3V~+15V表示逻辑“0”。它选择-15V~-3V和+3V~+15V这个范围而不采用TTL逻辑(0V~5V)的原因是为了提高抗干扰能力和增加传输距离,因此与TTL设备连接时需加电平转换接口。MAX232芯片是常用的RS-232C与TTL电平转换芯片,它的内部有电压倍增电路和转换电路,只需+5V电源便可实现RS-232C与TTL电平转换,芯片连接图如图7:图7采用MAX232接口的串行通信电路图图中TXD和RXD与AT89C52的串行通讯引脚相连接,而PCTXD和PCRXD与一9针插头插座相连接,具体连接为PCRXD(2)、PCTXD(3)。同时,9针插头插座的第5管脚接地,形成一个最简单的串行异步通讯的连接方式。这个串口就是单片机与PC进行数据通讯的通信接口。4.软件设计4.1CPLD控制程序部分本设计是利用FPGA直接控制0809对模拟信号进行采样,然后将转换好的8位二进制数据迅速存储到存储器中,在完成对模拟信号一个或数个周期的采样后,由外部电路系统(如单片机)将存储器中的采样数据读出处理。(1)元件ADCINT是控制0809的采样状态机。(2)元件CNT10B中有一个用于RAM的9位地址计数器,此计数器的工作时钟CLK0由WE控制:当WE=’1’时,CLK0=LOCK0:LOCK0来自0809采样控制器的LOCK0(每一采样周期产生一个锁存脉冲),(3)当WE=’0’时,处于采样禁止阶段,此时允许读出RAM中的数据,CLKOUT=CLK0=CLK=采样状态机的工作时钟(一般取65536Hz)图8CPLD最小控制系统框图4.1.1CPLD最小控制系统各模块程序及仿真(1)ADC采样模块图9ADCINT采样状态机模块图由状态图也可以看出,在状态st2中需要对0809工作状态信号EOC进行测试,如果为低电平,表示转换没有结束,在下一时钟脉冲到来时转向状态3。在状态3,由状态机向0809发出转换好的8位数据输出允许命令,这一状态周期同时可作为数据输出稳定周期,以便能在下一状态中向锁存器中锁入可靠的数据。在状态st4,由状态机向FPGA中的锁存器发出锁存信号,将0809输出的数据进行锁存[13]。由lock信号锁存转换好的数据OE=1,数据输出有效由lock信号锁存转换好的数据OE=1,数据输出有效采样周期等待中EOC=1,转换结束EOC=0,正在转换启动A/D转换对0809初始化st0st3st4st2st1图10控制ADC0809采样状态图在时序图中START为转换启动信号,高电平有效;ALE为模拟信号输入选通端口地址锁存信号,上升沿有效;一旦START有效后,状态信号EOC即变为低电平,表示进入转换状态。转换结束后,EOC将变为高电平。此后外部控制可以使OE由低电平变为高电平,此时0809的输出数据总线D[7..0]从原来的高阻态变为输出数据有效。图11ADC0809采样状态机工作时序图libraryieee;useieee.std_logic_1164.all;entityadcintisport(D:instd_logic_vector(7downto0);--来自0809转换的8位数据CLK:instd_logic;--状态机工作时钟EOC:instd_logic;--转换状态指示,低电平表示正在转换ALE:outstd_logic;--8个模拟信号通道地址锁存信号START:outstd_logic;--转换开始信号OE:outstd_logic;-数据输出三态控制信号ADDA:outstd_logic;--信号通道最低位控制信号LOCK0:outstd_logic;--观察数据锁存时钟Q:outstd_logic_vector(7downto0)--8位数据输出);endadcint;architecturebehavofadcintistypestateis(st0,st1,st2,st3,st4);--定义各状态子类型signalcurrent_state,next_state:state;signalregl:std_logic_vector(7downto0);signallock:std_logic;--转换后数据输出锁存时钟信号beginadda<='1';--ADDA<='0',模拟信号进入通道INO;当ADDA<='1',则进入通道IN1q<=regl;lock0<=lock;COM:process(current_state,eoc)--规定各状态转换方式begincasecurrent_stateiswhenST0=>ALE<='0';START<='0';LOCK<='0';OE<='0';next_state<=st1;--0809初始化whenST1=>ALE<='1';START<='1';LOCK<='0';OE<='0';next_state<=st2;--启动采样whenST2=>ALE<='0';START<='0';LOCK<='0';OE<='0';if(EOC='1')thennext_state<=st3;--EOC=1表明转换结束elsenext_state<=st2;endif;--转换未结束,继续等待whenST3=>ALE<='0';START<='0';LOCK<='0';OE<='1';next_state<=st4;--开启OE,输出转换好的数据whenST4=>ALE<='0';START<='0';LOCK<='1';OE<='1';next_state<=st0;whenothers=>next_state<=st0;endcase;endprocessCOM;REG:process(CLK)beginIF(CLK'eventandCLK='1')thencurrent_state<=next_state;endif;endprocessREG;--由信号current_state将当前状态值带出此进程:regLATCH1:process(lock)--此进程中在LOCK的上升沿,将转换好的数据锁入beginif(lock'eventandlock='1')thenregl<=d;endif;endprocessLATCH1;endbehav;(2)地址计数器模块图12RAM地址计数器模块图地址计数器模块有两个时钟信号输入LOCK0和CLK,LOCK0为写时钟信号,CLK为读时钟信号。WE为读写控制端,CLR为复位端。当WE为高电平的时候,CLKOUT=LOCK0,地址计数端DOUT[8..0]在时钟上升沿开始计数,对SRAM进行寻址,计满后DOUT[8..0]同时清零,INTERRUPT置位向单片机申请中断请求。单片机响应中断,控制CNT10B的WE为低电平,此时CLKOUT=CLK,CLK由单片机提供。地址计数端DOUT[8..0]又开始计数,对SRAM进行寻址,此时为单片机读取数据提供地址。Libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityCNT10Bisport(LOCK0,CLR,CLK,WE:instd_logic;CLKOUT:outstd_logic;DOUT:outstd_logic_vector(8downto0);INTERRUPT:outstd_logic);ENDCNT10B;architecturebehavofCNT10BissignalDOUT0:std_logic_vector(8downto0);signalfull:std_logic;beginDOUT<=DOUT0;INTERRUPT<=full;process(CLK,CLR,WE)beginifCLR='0'thenDOUT0<="000000000";elseifWE='1'thenif(LOCK0'eventandLOCK0='1')thenifDOUT0="111111111"thenDOUT0<="000000000";full<='1';elseDOUT0<=DOUT0+1;full<='0';endif;endif;CLKOUT<=LOCK0;elseifDOUT0="111111111"thenDOUT0<="000000000";elseDOUT0<=DOUT0+1;endif;CLKOUT<=CLK;endif;endif;endprocess;DOUT<=DOUT0;endbehav;图13RAM地址计数器写工作时序仿真图由图可知WE为读写时钟信号选择端。当WE为高电平,CLKOUT=LOCK0。当WE为低电平,CLKOUT=CLK。在两种时钟信号下,地址计数器都进行计数,给数据的写入或者读出提供地址信号。图14RAM地址计数器读工作时序仿真图当地址计数模块接读时钟信号时,此时提供读出数据的地址,需从写地址开始。(3)存储器模块存储器模块是在QuartusII环境下定制的RAM,此RAM的数据宽度选择为8位,地址宽度为9位,有一个地址锁存时钟clock和一个写使能控制线wren。Wren为高电平时SRAM进入写状态,在写时钟控制下将数据由data[7..0]写入。当wren为低电平时SRAM进入读状态,在读时钟控制下将数据由q[7..0]读出[14]。存储器模块如图17所示。图15RAM模块图RAM在LOCK0时钟上升沿时将数据写入,地址计数器将LOCK0作为写时钟信号,在其上升沿时地址自加一,RAM写时序如图18所示。图16RAM写时序图当写入数据的地址加满时,产生一个溢出信号,向单片机申请中断信号。图17RAM写时序中断信号图RAM进入读状态时,此时由单片机提供读时钟信号,RAM写时序如图19所示。图18RAM读时序图LIBRARYieee;USEieee.std_logic_1164.all;LIBRARYaltera_mf;USEaltera_mf.altera_mf_components.all;ENTITYRAMIS PORT (address :INSTD_LOGIC_VECTOR(8DOWNTO0); clock :INSTD_LOGIC; data :INSTD_LOGIC_VECTOR(7DOWNTO0); wren :INSTD_LOGIC; q :OUTSTD_LOGIC_VECTOR(7DOWNTO0) );ENDRAM;ARCHITECTURESYNOFRAMIS SIGNALsub_wire0 :STD_LOGIC_VECTOR(7DOWNTO0); COMPONENTaltsyncram GENERIC( intended_device_family :STRING; width_a :NATURAL; widthad_a :NATURAL; numwords_a :NATURAL; operation_mode :STRING; outdata_reg_a :STRING; outdata_aclr_a :STRING; width_byteena_a :NATURAL; clock_enable_input_a :STRING; clock_enable_output_a :STRING; power_up_uninitialized :STRING; lpm_hint :STRING; lpm_type :STRING ); PORT( wren_a :INSTD_LOGIC; clock0 :INSTD_LOGIC; address_a :INSTD_LOGIC_VECTOR(8DOWNTO0); q_a :OUTSTD_LOGIC_VECTOR(7DOWNTO0); data_a :INSTD_LOGIC_VECTOR(7DOWNTO0) ); ENDCOMPONENT;BEGIN q<=sub_wire0(7DOWNTO0); altsyncram_component:altsyncram GENERICMAP( intended_device_family=>"CycloneII", width_a=>8, widthad_a=>9, numwords_a=>512, operation_mode=>"SINGLE_PORT", outdata_reg_a=>"CLOCK0", outdata_aclr_a=>"NONE", width_byteena_a=>1, clock_enable_input_a=>"BYPASS", clock_enable_output_a=>"BYPASS", power_up_uninitialized=>"FALSE", lpm_hint=>"ENABLE_RUNTIME_MOD=YES,INSTANCE_NAME=RAM", lpm_type=>"altsyncram" ) PORTMAP( wren_a=>wren, clock0=>clock, address_a=>address, data_a=>data, q_a=>sub_wire0 );ENDSYN;4.1.2CPLD最小控制系统流程图CPLD最小控制系统包括ADCINT模块,地址计数器模块和RAM存储器模块。ADCINT模块控制ADC0809启动采集数据,输出数据锁存时钟信号(用于单片机读取数据的时钟信号)。地址计数器模块控制RAM数据的写入和读出的地址计数。RAM存储器模块用于将ADC0809采样的数据存储和作为单片机的片外数据存储器[15]。RAM存储器的读入和写出状态由WREN控制,写入状态下的时钟信号由CPLD的LOCK0输出数据锁存信号提供,读出状态下的时钟信号为状态机的的工作时钟信号。图19CPLD最小控制系统流程图4.2单片机控制程序部分AT89C51内部有一个可编程的全双工串行接口SBUF,具有UART(通用异步接受和发送器)的全部功能。串行接口的控制寄存器有两个,串行控制寄存器SCON和能改变波特率的特殊功能寄存器PCON,其作用如下:(1)串行控制寄存器SCON,字节地址98HSCON寄存器用于设定串行口的工作方式、接收发送控制以及设置状态标志。各位的含义如表:表1专用寄存器SCON各位含义表D0D1D0D1D2D3D4D5D6D7RITIRB8TB8RENSM2SM1SM1SM0、SMl一串口的方式选择位,其编码如表2所示。REN.允许串行接受控制位。REN=l:允许串行接受,REN=0:禁止串行接受。SM2一允许方式2和方式3进行多机通信控制位。SM2=0:单机对单机,SM2=I多机通信。TB8--发送数据第9位。RB8--接收数据第9位。TI--发送中断标志。RI--接收中断标志。表2串口的工作方式方式SM0方式SM0SM1功能说明012300110101移位寄存器方式,波特率为fosc/128位UART,波特率可变(T=溢出率/n)8位UART,波特率为fosc/64或fosc/329位UART,波特率可变(T=溢出率/n)表中fosc为晶振频率;UART为通用异步接受和发送器。(2)特殊功能寄存器PCON,字节地址87HPCON是电源控制寄存器,其中SMOD为串行接口波特率系数选择位。当SMOD=1时波特率加倍。(波特率:串行接口每秒发送或接收的位数)串行口工作方式1将串行口配置为波特率可变的通用异步接收发送UART方式。本方式的数据格式为10位:一个起始位(0),8个数据位(LSB在前),一个停止位(1)。接收时,停止位进入SCON特殊功能寄存器的RB8位。工作方式1时的波特率是可变的。在51型中方式1的波特率取决于定时器1溢出率。波特率确定采用定时器1的方式2,即自动重装的8位定时器。图20单片机最小控制系统流程图#include<reg952.h>#include<stdio.h>unsignedchargetdata;unsignedinttemp;inti;intj;sbitP11=P1^1;sbitP10=P1^0;//串口初始化voidcorn_initialize(void){TMOD=0x20;//设置波特率为9600的定时器1方式和初始值TLl=0xf3;THl=0xf3;SCON=0xd8;//设置串口工作方式3PCON=0x80;IT0=1;TRl=l;EA=1;EX0=1;)main(){getdata=P0;temp=getdata;corn_initialize();while(1){ SBUF=ternp;}voidint0_interrupt(void)interrupt0{ P10=0; ES=1;}voidserial_interrupt(void)interrupt4{ TI=0; i++;P11=~P11;if(i==512){ ES=0; P10=0; }}单片机的P0口用来读取存储器的数据,P1.0接地址计数器的WE读写时钟信号选择端和存储器的WREN读写使能端,当计数器在写时钟状态计满时,申请中断,单片机响应外部中断,并在中断服务子程序中将P1.0置零,即使存储器进入读出状态,同时开串口中断,准备发送数据到PC机中,读出时钟由单片机的P1.1提供。当读地址计到512时,关闭串口中断,同时使存储器进入写入状态。这里存在中断嵌套问题,必须先执行由
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026精准医疗时代下再生医学的转型与升级路径
- 2026中国废塑料再生行业产业链整合及投资价值评估报告
- 热点题型17 多官能团有机物的结构与性质
- 网络教育统考冲刺卷(真题汇编)
- 2026年创新产品高级策划师招聘笔试试卷 招录13人大全
- Unit 5 Power of Ideas (Period 6)教案2026-2027学年人教版九年级上册英语
- 2026 年乐业县疾控检验岗招聘考试招 4 人
- 2026年医疗卫生行业结构化面试标准培训试题及答案
- 2026年海量高质量学教育学试题(附答案)
- 2026年新保安考试题库及答案
- 2026年秋季学期人教版(新教材)初中生物学八年级上册教学计划及进度表
- 2026年医师处方权高频试题(完整版)及答案
- 2026年秋季开学高中开学第一课(交通安全)课件
- 2026年中国老挝磨憨一磨丁经济合作区管委会(35人)考试备考题库及答案详解
- 2026年第二次广东省普通高中学业水平合格性考试化学试题(含答案)
- 2026年秋季学期小学统编版四年级语文上册(新教材)教学计划含进度表
- 养老服务面试常见问题及解答
- 医患康复纠纷案例分享
- 2026中国智能机器人操作系统市场现状分析研究报告
- 4.2《进入新时代的意义》课件- 2026-2027学年统编版道德与法治 九年级上册
- 2026年秋新教材统编版小学二年级上册道德与法治教学计划及进度表
评论
0/150
提交评论