版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-1-水质监测数据传输网络设计摘要:随着电子技术的不断进步,新概念的不断提出,人们对于生活的要求也在不断的提高,智能化自动化的概念也逐渐的深入人心。伴随着生命之源的不断消耗,人们对于淡水资源的关注度也在提高。本课题就是以智能检测为主题进行设计的一款集检测、监测于一体的水质在线监测系统。本系统能够实时监测温湿度、水位、浑浊度值,并可以通过无线模块传输此时的监测值。用户采用手机APP即可查看此时检测的数据,非常方便。系统的硬件设计包括STM32系统处理器电路、温湿度传感器模块、水位监测模块、WIFI模块、浑浊度监测模块设计;软件设计主要包括系统主程序、温湿度采集程序、WIFI传输子子程序。最终通过实测表明系统设计达到设计要求,所有功能均实现。关键词:STM32;WIFI;温湿度;水位;浑浊度
WaterqualitymonitoringdatatransmissionnetworkdesignChenmengzhuschoolofElectronicInformationEngineering,Electronicinformationengineering,Class06Grade2016Instructor:PengTingAbstract:Withthecontinuousprogressofelectronictechnology,newconceptsareconstantlyputforward,people'srequirementsforlifearealsoconstantlyimproving,theconceptofintelligentautomationisalsograduallydeeplyrootedinpeople'sminds.Alongwiththecontinuousconsumptionofthesourceoflife,people'sattentiontofreshwaterresourcesisalsoincreasing.Thissubjectisanonlinewaterqualitymonitoringsystemwithintelligentdetectionasthetheme.Thesystemcanmonitortemperatureandhumidity,waterlevelandturbidityinrealtime,andcantransmitthemonitoringvaluethroughwirelessmodule.TheusercancheckthedetecteddatabyusingthemobileAPP,whichisveryconvenient.ThehardwaredesignofthesystemincludesSTM32systemprocessorcircuit,temperatureandhumiditysensormodule,waterlevelmonitoringmodule,WIFImoduleandturbiditymonitoringmodule.Thesoftwaredesignmainlyincludesthemainprogramofthesystem,temperatureandhumidityacquisitionprogram,WIFItransmissionsub-subroutine.Finally,thetestshowsthatthesystemdesignmeetsthedesignrequirementsandallthefunctionsarerealized.Keywords:STM32;WIFI;Temperatureandhumidity;Thewaterlevel;turbidity
目录1绪论 -5-1.1设计背景 -5-1.2设计现况和意义 -6-1.3本文主要内容 -6-2系统的方案设计 -7-2.1系统主要模块 -7-2.2系统结构 -7-3系统的硬件设计 -9-3.1主处理器系统电路 -9-3.2温湿度模块 -9-3.3水位监测模块 -10-3.4浑浊度检测模块 -10-3.5Wifi模块接口 -11-4系统的软件设计 -13-4.1主程序 -13-4.2温湿度检测子程序 -14-4.3Wifi传输子程序 -15-5系统测试 -18-5.1测试流程 -18-5.2测试结果 -19-结论 -21-参考文献 -22-附录 -23-致谢 -52-
1绪论1.1设计背景水是生命之源,人类在生产生活中都离不开水。在地球水圈中,水资源的总量为1.37×,其中海水约占总量的97.3%,淡水仅占其2.7%。淡水所占比例不但少,而且大部分分布在地球南北极冰雪覆盖下的冰川、冰盖中,而可利用的淡水资源就只有河流、淡水湖和地下水的一部分,还不到总量的1%[1]。现如今随着社会经济的发展、科学的进步和人民生活水平的提高,环境污染越来越严重,其中,水环境污染最为严重。在水资源日益短缺的今天,水质问题受到了更多地关注,因此对水质进行测试能使我们更好地保护水资源,保证合格的水质,这对正常生产、保证产品质量和人们健康具有非常重要的意义。随着我国社会经济的高速发展,城市化、工业化进程的加速,导致城市生活污水和工业废水大量排入江河、湖泊和水库,造成地表水和地下水的严重污染,水污染的问题日益突出。根据中国环境状况公报的数据,2005年在我国长江、黄河、珠江等七大水系100个国控省界重点监测断面中,I.Ⅲ类水质断面占36%,1V、V类水质断面占40%,劣v类水质断面占24%t21,与2003年统计数据相比,2005年七大水系重点监测断面中I.Ⅲ类水质断面所占比例下降了17.4%,而劣v类水质断面则上升了15.3%,这说明我国水污染状况逐年恶化的趋势明显。另外,我国28个国控重点湖(库)中,劣v类水质所占比例高达43%,而满足II类水质的湖(库)仅占7%。2007年的统计数据表明:全国每年因为水污染造成的经济损失高达300亿元,与发达国家相比,我国面临着更严重、更紧迫的水污染危机。加强我国的水环境保护和水污染的治理工作成了我国国民经济发展亟待解决的问题。地球上的土地面积很少,大部分的部分都是水,所以说地球还可以成为一颗水星,但是尽管水占地球的大部分区域,而其中的淡水资源却很少,整体的淡水资源只占地球的百分之一。就在这仅有的百分之一的淡水资源随着工业化的破坏和人们的不节约,在很多淡水都是冰山的时候,人们可用的淡水也越来越急缺。随着电子技术、传感器技术、计算机技术、现代通信技术等高新技术的发展,使安全技术逐渐发展起来。人们也开始逐渐关注节约水资源和针对污染水质进行治理。对于水质的检测国家和社会也是逐渐增加了关注度和支持力度,技术人员也不断地更新检测技术,对于检测方案也是越来越多。1.2设计现况和意义进入二十一世纪以来,电子技术的概念不断进步和发展,人们对于计算机,物联网都有了一定的认识和基础,慢慢接受并享受电子技术带来的方便和快捷,人们的生活水平也在不断的提高,随着温饱问题的解决,生活的质量要求也随之升高,人们更多地注重于安全,这个安全包括:生活安全和食品安全,尤其是水质安全问题。这时,电子技术和人们需求相结合就诞生了水质在线检测的这个新概念,以一个大型的物联网城市,进行分别连接各家各户的智能点,进而形成一个智慧城市的大框架,在这个大框架下,智能水质监测是最基础也是最重要的点,国家也在积极支持和发展这方面的技术和方法,智能检测成为时代的主题。水质监测就是以特定水体为对象(如江、河、湖泊、水库、海洋等),通过对水体的一系列参数的测定和分析,了解水体中污染物的种类和污染物的浓度状况,从而对水质状况进行评价15J;通过对不同时期水质检测参数的分析,掌握水体水质变化的趋势。水质监测的数据不仅为各类污染源的管理、水污染突发事件的应急处理提供科学依据,而且为政府制定发展规划、为环保部大强对水环境的保护提供数据支持。因此水质监测对于加强水环境保护和治理工作,解决我国水污染危机具有重要意义。目前,水质监测得到了世界各国的普遍重视,各国针对本国的实际情况制定了相应的水环境质量标准及水质监测规范16J。我国也制定了相关的水环境质量标准和水质监测技术规范,如《国家标准地表水环境质量标准》(GB3838.2002)、《国家标准地下水环境质量标准》(GB/T14848.93)及《水质监测规范》(SDl27.84)目前市场上的主要的水质监测探测器是人工进行化学监测,消耗人工和资源,而且要得到水质的结果不及时。针对这种情况,实时水质监测系统就显得尤为重要。经过特定的水质检测器进行定点水质检测,经过微系统处理器获得该点的水质信息,并实时传输到液晶显示模块上。该系统将实时显示水质情况,可以做到在线观看。水质在线监测系统是针对水质的安全风险而设计的,如水的一些参数:温度,浑浊度,湿度,水位等。1.3本文主要内容本文所设计的水质数据监测系统以STM32单片机为控制核心,电路按照实际电路功能划分,通过具体的硬件电路设计结合软件编程,实现了所需要的基本功能。每一章的具体内容如下:第一章绪论主要讲述了课题研究的背景、研究意义以及国内外研究现状,通过对比表明了当前研究的必要性;第二章主要讲述了系统总体设计过程,首先阐明了系统设计要求,随后介绍了系统设计的各个模块,最后介绍了系统整体结构;第三章主要是讲述了系统的硬件设计过程,包括STM32系统处理器电路、温湿度传感器模块、水位监测模块、WIFI模块、浑浊度监测模块设计;第四章主要讲述了软件设计,主要包括系统主程序、温湿度采集程序、WIFI传输子子程序;第五章讲述了系统的测试过程以及测试结果,并给出相应详细的分析过程。
2系统的方案设计2.1系统主要模块1.处理器采用STM32单片机作为系统控制器,STM32F103RCT6是由意法半导体公司出品的STM32F103系列的微处理器。STM32最高频率可达72MHz,它有零等待的存储器访问、基于哈佛结构并带有3级流水线特性和其高效的处理效率保证能够实时高效的处理水表取数和上传数据。STM32自带64k字节Flash,它具有多种低功耗模式:等待、活跃停机、停机模式,外设的时钟可单独关闭。在停机模式下,STM32的功耗仅仅4.5uA左右,完全能够满足智能控制的供电要求,这实现并保证了整个系统的低功耗特性[9]。2.无线通信模块Esp8266ex是一个完整且集成的WLAN网络解决方案,可以独立运行,也可以作为另一个主机MCU上的从属运行,如果Esp8266ex配备了应用处理器作为设备中唯一的应用处理器,则可以直接从外部闪存启动。内存有助于提高系统性能并减少内存需求。如果esp8266ex负责WLAN适配器的任务,则可以将其添加到任何基于微控制器的设计中。只需通过SPI/SDIO或I2C/UART即可轻松实现连接。esp8266ex除了具有WLAN功能外,还集成了32位处理器和Tensilial106钻孔系列的SRAM,具有强大的处理和存储选项。乐信提供的软件开发套件(SDK)包含各种示例代码。Esp8266ex§122200Grad§2;内部集成包括天线开关,RF巴伦,功率放大器,低噪声接收器放大器,滤波器和电源管理模块,因此整个解决方案只需很少的外部电路,并且占用的电路板空间最小。ESP8266模块非常小(19mm*29mm),模块通过6个2.54mm间距的排针与外部连接,方便大家安装到自己的设备里面;相比TC35i,ATK-ESP8266体积更小,速率更高,功耗更低,支持的频段也更为丰富,因此系统采用该模块进行设计。3.温湿度监测模块在传统的信号测量标准系统中,必须以惊人的方式解决诸如不正确信息排序之类的技术问题,例如变量中的误差转换和电路中的电路偏差。另外,正常观察点是产生强信号干扰的弱电磁环境,并且模拟的温度信号易于失真,失真和指定。结果,用于测量温度的解决方案对于系统中的新数字温度的干扰是有效的;这些问题的解决方案是一种有效的解决方案,非常适合新的数字热传感器和更小,更精确和更高的电压,以及更广泛的电缆应用和网络。2.2系统结构该系统由监测终端和手机APP组成,监测终端负责监测水质数据,当开启时,WIFI通信自动连接,将采集的数据通过无线传输的方式传递到手机APP端,用户可以随时查看此时测量的实时数据。同时,监测系统可安装干电池和蓄电池两种电源,两种电源可自动切换,也可以只安装一种电源,供电方式多样。系统原理框图如下图所示。温湿度模块水位模块主控芯片WIFI模块手机APP温湿度模块水位模块主控芯片WIFI模块手机APP浑浊度模块浑浊度模块图2.2系统结构系统的监测终端由主控芯片、温湿度模块、水位模块、浑浊度模块以及WIFI模块构成,WIFI模块和手机APP进行通信。
3系统的硬件设计3.1主处理器系统电路本系统的主控芯片采用的STM32系列,具体型号本系统采用的是STM32103C8T6,其作为主控芯片一方面对传感器数据进行采集,另一方面将数据通过算法进行处理,在电路设计时将两个ADC接口接入传感器。对于STM32系统,其必要组成部分还包括了启动模式选择电路、晶振复位电路等,在设计时还我另外加入了指示灯与按键作为备用。本设计中需要设计系统以及其外部电路,设计的原理图如图3.1所示。图3.1处理器系统电路STM32F103RCT6有3种复位方式:外部RST引脚复位,软件复位,看门狗复位。如图3.1,外部RST引脚从外部复位到NRST引脚复位脉冲一定宽度,从实现的微控制器的复位[10]。NRST引脚出厂配置为RST复位引脚应被配置为I/O端口,在ISP编程设定。如果NRST不在STC-ISP编程设置的I/O端口输入引脚NRST是芯片复位。RST复位引脚为高电平并保持至少24个时钟加为10μs,单片机将进入复位状态时,RST复位引脚回到低电平时,单片机结束复位状态,并从0000H部门的用户程序区启动正常工作。STM32F103RCT6单片机有两个时钟源:内部的R/C振荡器时钟和外部晶振时钟。工厂标准配置是使用芯片的R/C振荡器,其频率为8MHz,则内部的R/C振荡频率将会存在一个数字温度漂移[12],再加上制造错误的,因此内部的R/C振荡器只适合的时钟的频率不要求高精度的场合。除上文之外选择这款单片机的主要原因还有很多,如:1.本单片机独特的P1.1口外部中断设计,对于计时具有良好的作用,相对于其他的51单片机这是相当于多增加了一个外部中断,而且是优先级很高的中断;2.本单片机可以调节时钟频率,相当于可以有多个运行速度,完全可以超频完成程序,我们都知道在电机控制上需要的是瞬时间的控制,足够的处理速度是最大的保障;3.本单片机的工作电压广泛,因为需要离线控制,即很难实现电源恒压输出,特别是电池会随放电时间的增长产生电压降,所以本设计需要的是一款稳定的单片机;4.本单片机可以提供32个自由的I/O口,而本设计刚好需要做矩阵键盘,所以本设计无疑解决了很大的问题。3.2温湿度模块温湿度测量模块的引脚图和STM32的接口电路如图所示,其中SHT20工作在外部电源模式,STM32使用PA0和SHT20进行通信,如图3.5所示。当测温程序运行时,仅在一个1中的温度读数值,然后调用读取的程序的温度测量值。通过在读取数据时读取单片机单线接口、低电平和高电平。温湿度检测模块的外形及管脚排列如下3.2所示。图3.2温湿度检测模块3.3水位监测模块水位监测模块主要是利用三极管的电流放大原理,当液位高度使三极管的基极与电源正极导通的时候,在三极管的基极和发射极之间就会产生一定大小的电流,此时在三极管的集电极和发射极之间就会产生一个一定放大倍数的电流,该电流经过发射极的电阻产生电压供AD转换器采集。原理:该模块主要是利用三极管的电流放大原理,当液位高度使三极管的基极与电源正极导通的时候,在三极管的基极和发射极之间就会产生一定大小的电流,此时在三极管的集电极和发射极之间就会产生一个一定放大倍数的电流,该电流经过发射极的电阻产生电压供AD转换器采集。水位监测模块如下图所示。图3.3水位监测模块3.4浑浊度检测模块浊度传感器TS-300B型测量洗涤水中的浊度(悬浮物的计数器),传感器基于光学原理,利用发光二极管和光电三极管对特定波长的接收作用,来测量脏水的不透光度或者其他物质的浓度。通过使用光电三极管和发光二极管,传感器通过发光二极管光源发出的光经污水反射,部分光传播到光电三极管,根据接收到的光线量,计算出水的浊度。KIE浊度传感器的工作原理:当光线穿过一定量的水时,光线的穿透量取决于该水中的脏物的量。当脏物的量增加时,穿透水样的光线随之减少,浊度传感器测量透过的光线量来计算洗涤水的浊度传感器将这些浊度测量值提供给洗衣机或洗碗机控制器,由洗衣机和洗碗机控制器决定各个洗涤周期的时间。这些判断基于净水的测量值(在洗涤周期开始时测量得)和洗涤结束时测量的洗涤水的测量值之间的比较。通过测量洗涤水的浊度,在洗涤不是很脏的衣物时,洗衣机可以只洗需要的时间,从而节省了能源,这样最终用户节省了能源图3.4浑浊度监测模块3.5Wifi模块接口Wifi模块和STM32的通信采用串口232通信,RS-232采用差分信号负逻辑,+2V~+6V表示“0”,-6V~-2V表示“1”。RS232有两线制和四线制两种接线,四线制是全双工通讯方式,两线制是半双工通讯方式。在RS232通信网络中一般采用的是主从通信方式,即一个主机带多个从机。很多情况下,连接RS-232通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来。而忽略了信号地的连接,这种连接方法在许多场合是能正常工作的,但却埋下了很大的隐患,这有二个原因:(1)共模干扰问题:RS-232接口采用差分方式传输信号方式,并不需要相对于某个参照点来检测信号,系统只需检测两线之间的电位差就可以了。但人们往往忽视了收发器有一定的共模电压范围,RS-232收发器共模电压范围为-7~+12V,只有满足上述条件,整个网络才能正常工作。当网络线路中共模电压超出此范围时就会影响通信的稳定可靠,甚至损坏接口。(2)EMI问题:发送驱动器输出信号中的共模部分需要一个返回通路,如没有一个低阻的返回通道(信号地),就会以辐射的形式返回源端,整个总线就会像一个巨大的天线向外辐射电磁波。WiFi模块原理图如图3.5所示,ESP8266芯片通过串行通信方式与主控模块进行数据通信,MCU通过指令配置WiFi模块接入局域网。如果要实现主控模块与云平台建立连接,实现数据交互,还需要让WiFi模块烧录机智云提供的与ESP8266模组配套的固件GAgent。向WiFi模块烧录固件时需要将GPl00接地,完成后将GPl00引脚悬空,模块才能正常工作图3.5Wifi模块
4系统的软件设计程序设计是一件复杂的工作,为了把复杂的工作条理化,就要有相应的步骤和方法。其步骤可概括为以下三点:首先需要分析系统控制要求,确定算法:对复杂的问题进行具体的分析,找出合理的计算方法及适当的数据结构,从而确定编写程序的步骤。这是能否编制出高质量程序的关键。其次是根据算法画流程图:画程序框图可以把算法和解题步骤逐步具体化,以减少出错的可能性。最后就是编写程序:根据程序框图所表示的算法和步骤,选用适当的指令排列起来,构成一个有机的整体,即程序。程序数据的一种理想方法是结构化程序设计方法。结构化程序设计是对利用到的控制结构类程序做适当的限制,特别是限制转向语句(或指令)的使用,从而控制了程序的复杂性,力求程序的上、下文顺序与执行流程保持一致性,使程序易读易理解,减少逻辑错误和易于修改、调试。首先编写的是软件主程序,然后依据主程序的要求对各功能子程序分别进行编写和调试,然后通过主程序把各模块连接起来,对主程序进行调试,,最后构成整个系统的软件。4.1主程序系统软件采用stm32单片机作为主芯片进行设计,采用C语言进行编程,实现了储能监测的过程。通图4.1为正常状态下软件运行的程序流程图,系统上电之后首先进行初始化工作,随后采集温湿度、水位以及水的浑浊度,采集完这些信息之后,将这些信息进行打包,打包之后通过WIFI进行传输,用户通过手机APP即可查看测量的实时数据。图4.1主程序软件流程图4.2温湿度检测子程序温湿度测量程序主要功能是读出传感器的温度值。要正确地读出温度值必须严格遵守单总线器件的命令序列,否则单总线器件不会响应主机。温湿度传感器模块程序流程图如图4.2所示。开始开始发写入指令初始化发读取指令结束图4.2温湿度检测子程序流程图4.3Wifi传输子程序STM32通过串口和WIFI芯片进行通信,控制WIFI模块首先应确定串口的硬件连接,然后启动串口,将串口初始化。将存储区数据取出并由串口发送出去,所有数据发送完毕,等待PC机发送命令数据,最终获取数据并返回。图4.3数据传输子程序流程图单片机通过AT指令控制无线模块。下面对AT指令进行一些介绍。文档中的所有命令行都必须在“AT”或“AT”开头,回车符作为结束。命令返回后立即返回,它的样式是“<输入>包装>响应内容>输入>换行”(<><><>>>响应内容>“>>><>>>>”).在命令过程中,仅详细地描述<响应内容>,故意省略过程“<包装>”。所有AT具有以下四种基类命令:在命令的格式为“在<><>>”或“在”>“x”>“>”时,命令是“<X>”,意思是“命令”支持一个或多个参数。例如:“吃<n>”命令是用来关闭或启用回声功能,DCE将根据“<n>”值确定是否接收到的字符返回DTE。“参数”是可选的,如果未赋值,则为默认值。参数命令:这些AT指令格式“ATS<n>二[<m>叮”,其中“<n>”指标的登记,“<m>”参数值了。在AT命令中,“参数”是可选的,如果未赋值,则为默认值。扩展类命令:一般来说,根据操作命令格式扩展类和应用程序可分为以下类型:在这命令语法:他默认值在方括号([])是可用的,命令的参数必须配备可选的参数必须设置与参数之间的安排操作的参数规定一定要用逗号隔开。例如:“12345”、“互联网”等,双引号可以看作符号位于括号内不使用双引号,每个可选的子字符串参数字符串命令或TA返回结果空间的特征可以忽略不计的实践,之间的一个可选部分<>,[]没有进入所有AT命令本身是不区分大小写,但其参数是区分大小写的。在使用命令操作的过程中,AT命令的数量可以放在同一命令行输入中。所以,在命令的前方可以在”或“在”字去掉,只在命令行输入“开始”或“在”。需要注意的是,在扩展命令加类,为在一个分号(;)命令写作为分隔符,都在一步一步地通过命令结扎线一样。例如:ATE1&W、F+ICF+cfun;和W命令可以操作最多355个字符。当值超出范围时,输入AT命令将不执行“错误”。当需要执行多个连续的AT命令时,必须等待,直到AT命令做出最后响应(例如:返回ok、错误、CME错误、CMS错误等),以便继续在命令下操作。在本程序的设计中,主要使用该模块发送数据信息,使用到的AT指令如下图所示。首先发送AT+CMGF=1,使模块处于TEXT模式,当模块返回OK代表设置成功,随后发送AT+CSCS="GSM"来设置字符格式,发送的字符将以GSM模式发出,接着用AT+CMGS="33"指令来设置要发出的IP地址,当模块返回>时代表已经准备就绪,随后发送想要发出的信息,以1A作为结束符结尾。发送指令的程序流程图如图4-3所示。图4.4无线模块AT指令数据点设计是云平台开发中最为重要的环节,数据点定义了设备上报信息与事件,手机APP下传控制与设置命令的数据格式,保证数据可靠安全的传输到另一端。数据点主要由四部分组成:标识名,读写类型,数据类型,数据长度。标识名遵循程序语言变量命名规范,用于设备与手机APP程序中定义数据点的变量。读写类型包括只读、可写、报警与故障。只读、报警与故障类型只接收家用报警控制器上报的数据,不能对数据进行下传;可写类型既支持数据从报警控制器上报,也支持数据从手机APP下发。设置“报警”与“故障”类型是方便机智云对相关信息进行统计与处理。读写类型包括布尔型、枚举型、数值型与扩展类型,其中扩展类型可以自定义数据长度与数据内容。图4.5单片机控制wifi模块流程图
5系统测试5.1测试流程按照约定俗成的调节步骤,按照先硬件后软件,先掉电检测再上电检测的顺序开始调试,大致流程下图:图5.1系统调试示意图按照上述流程图的顺序对整机分别进行单机检测、上电检测、分模块功能实现以及总机调试。在进行这些检测之前需要对电源进行单独的调试。硬件调试的目的是为了包管硬件体系的精确性。根据原理图举行焊接的实物不能包管不出现错误,以是必要先举行验证后才气举行软硬件团结调试。这是整个体系可以大概正常事情的根本,同样也是要害。硬件调试分为上电前的调试和上电后的调试。通电前调试是为了保证电路中不存在短路、开路和焊缝,主要设备使用数字式万用表,在检查时还应注意元器件的放置是否正确,尤其是电容的极性没有防焊,因为通电后如果有防焊条件可能发生爆炸等危险情况危及人身安全。上电后的调试有待进一步确认。必要测量各测试点的电压值是否正常,特别是要包管体系电源电路的正常运行,任何电路都离不开电源。在没有软件的环境下,体系只能测量体系电源电路的输入输出及各模块的成果是否正常。简要介绍了测量要领。电源电路紧张测量输出电压是否正常。用数字万用表的电压档测量电压,每个模块电路用于检测输入和输出是否精确,数字万用表用于测量。比如,用于红外传感器,还应把传感器安排在差别的环境中,观察网络到的数据是否与相应的趋势划一;对于本系统,在不同的应用背景和环境下,判断其是否正常工作,满足功能需求。该单元的调试包括静态和动态调试。通常,静态调试包括测试电路中每个点的电位而没有附加信号,特别是有源器件的静态工作点。它可以检测已经损坏且处于危险状态的组件。动态调试包括确定用于先前输出信号或清洁信号测试单元的不同指示器是否满足设计要求,包括信号幅度,波形,相位关系,放大和频率。对于信号发生电路,它通常限于动态指示器。将静态和动态测试的结果与设计指标进行比较,经过仔细分析,提出了对电路和参数的合理校正。在调试期间必须全面记录。调试单元电路后,不能确定组成电路的整体性能是否良好,因此有必要将电路作为一个整体进行调试。电路的整体调试主要是观察和测量动态性能,将测量结果与设计指标进行比较,找出问题和解决方案,并对电路及其参数进行校正,直至整个电路的性能完全满足设计要求。5.2测试结果下面对系统进行实际测试。首先对系统进行上电,系统正常运转,如下图所示。图5.2系统上电通过手机APP,我们可以看出此时的测量信息,如图5.3所示。图5.3系统测试信息随后,我们将水位传感器和浑浊度传感器放入测试杯子中,如图5.4所示。图5.4测试杯子随后我们可以看出测试的数据相应发生了改变,如图5.5所示。图5.5测试数据
结论本文所设计水质检测传输网络系统以STM32单片机为控制核心,电路按照实际电路功能可划分为STM32系统处理器电路、温湿度传感器模块、水位监测模块、WIFI模块、浑浊度监测模块,并进行了单元电路的具体设计,通过具体的硬件电路设计,实现了系统所需要的基本功能。本次设计虽然完成了主要的任务,基本达到设计的要求和目标。但是,由于个人在知识面和能力方面还有限,再加上条件的限制,诸多功能的完善还需要进一步的研究和开发,此外在完成基本功能的基础上,还需要努力提高软件的效率、硬件系统的稳定性、进一步降低系统功耗等。未来的锂电池能量比更高,体型更便捷化,相应的储能监测系统更完善。对于调试方面,在制作的过程中遇到了很多的问题。比如说一开始在选取头文件的时候,选择的是STM32的通用头文件<stm32f1xx.c>。后来,由于需要用到这款单片机的内部资源,所以只能从ISP的烧写器里面下载头文件。下载完毕后,等到添加的时候,由于“”下包含的头文件和<>下包含的头文件有区别,所以在索引的过程中会发生问题,需要自己去在那个文件夹下去添加好才能使用,不然会出现很大的问题。对于数模这块遇到的问题主要是引脚的地址选择,由于一开始索引的时候就有问题,所以导致没有正确地索引到需要的采集端口。在程序的书写上,因为需要用到中断的协同,所以也是遇到了很多问题,由于中断优先级的顺序不一样,所以出现的问题比较大,比如串口中断和定时器中断就是因为优先级不一样,所以执行的顺序不一样。比如,如果定时器中断执行的时间比较短,串口中断就会被打断,那么造成的后果就是串口的发送数据会出现问题。通过这段时间自己动手努力,终于完成了对该课题的设计,总结自己几个月以来的工作,主要包括以下几个方面。1、在设计仿真的过程中,我慢慢明白了选材以及对器件了解的重要性,这样就不会盲目地进行不必要的设计,也节约了时间。2、从理论分析上来看,我们遇到的很多问题从理论分析来看,都想得很明白,但在实际的操作过程中却不像我们想的那么简单。依旧会出现各种各样的问题,比如不确定或者是不准确,我们需要进行多次调试才能逐渐逼近理论的设想。3、在程序设计上,虽然有很多开发语言可供我们选择,但我选择了C语言来进行开发,因为其可移植性能强大而且编程相对比较简单,适合进行模块化的编程开发。在完成了仿真图的设计,编写好软件并将程序下载到主控制芯片之后,经过调试与合理分析。参考文献[1]周建阳;陈家乐.《基于STM32四轴飞行器的设计》.钦州学院学报,2015.2[2]刘宝琦;黄雪峰;关禄君.《煤矿气体监测通讯系统研究》.通信世界.2016.5[3]黄京.《现代电子技术在煤矿智能管理系统中的应用研究》.煤炭技术,2014.2[4]丁玲玲.《基于单片机的瓦斯检测报警仪的研究和设计》.数字技术与应用,2016.[5]赵大成,贾海燕.手机短信收发的AT指令控制[J],信息工程大报.2004.02.[6]赖寿宏微型计算机控制技术.机械工业出版社,2000.5.[7]李国勇.何小刚.阎高伟.过程控制系统.电子工业出版社,2013.1[8]姜志海.单片机原理及应用.北京:电子工业出版社,2005.7.[9]夏露易,石宗义.电路原理图与电路板设计教程.北京希望电子出版,2002.6.[10]化成英,童诗白.模拟电子技术基础.北京:高等教育出版社,2001.1.[11]阎石.数字电子技术基础.北京:高等教育出版社,2008.5.[12]李鸿.用单片机控制手机发短信息.电子技术应用,2002(1).[13]李朝青.PC机与单片机数据通讯技术[M].北京航空航天大学出版社,2000.[14]李娜;牛晓飞.《基于STM32的智能家居无线激光报警系统》.激光杂志,2013.10[15]王艳林;李东.单片机原理及应用教学实践系统设计.教育教学论坛,2014.6[16]RealTimeBiometricsbasedVehicleSecuritySystemwithGPSandGSMTechnology.N.Kiruthiga,L.latha,S.Thangasamy.[17]GSMRysioSistemuTaikymoErdvinemsKoordinatemsNustatytiAnaliC8JonasSkeivalas;DaliusRadis;VidmantasLiutkauskas.
附录程序#include"stm32f10x.h"#include"delay.h"#include"led.h"#include"bsp_uart.h"#include"gizwits_product.h"#include"common.h"#include"pwm.h"unsignedintgui10msCount=0;unsignedintgui2sCount=0;externunsignedchargucUartRcvData;externunsignedchargucdest_temprature;externunsignedchargucdest_humidity;externunsignedchargucyellow_light;externunsignedchargucgreen_light;externunsignedchargucred_light;unsignedcharack=0;staticvoidAD8591_DataPin_Configure_Output(void){ GPIO_InitTypeDefGPIO_InitStructure; //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,DISABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PA端口时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;//PA.0端口配置 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure);}staticvoidAD8591_DataPin_Configure_Input(void){ GPIO_InitTypeDefDataPin; DataPin.GPIO_Pin=GPIO_Pin_4; DataPin.GPIO_Mode=GPIO_Mode_IN_FLOATING;//悬空 DataPin.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&DataPin);}staticvoidAD8591_ClkPin_Configure_Output(void){ GPIO_InitTypeDefGPIO_InitStructure; //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,DISABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PA端口时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//PA.0端口配置 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure);}/*******************************************************************起动总线函数函数原型:voidStart_I2c();功能:启动I2C总线,即发送I2C起始条件.********************************************************************/voidStart_I2c(){GPIO_SetBits(GPIOA,GPIO_Pin_4);/*发送起始条件的数据信号*/delay_us(30);GPIO_SetBits(GPIOA,GPIO_Pin_5);delay_us(150);GPIO_ResetBits(GPIOA,GPIO_Pin_4);/*发送起始信号*/delay_us(150);/*起始条件锁定时间大于4μs*/GPIO_ResetBits(GPIOA,GPIO_Pin_5);/*钳住I2C总线,准备发送或接收数据*/delay_us(60);}/*******************************************************************结束总线函数函数原型:voidStop_I2c();功能:结束I2C总线,即发送I2C结束条件.********************************************************************/voidStop_I2c(){GPIO_ResetBits(GPIOA,GPIO_Pin_4);/*发送结束条件的数据信号*/delay_us(30);/*发送结束条件的时钟信号*/GPIO_SetBits(GPIOA,GPIO_Pin_5);/*结束条件建立时间大于4μs*/delay_us(150);GPIO_SetBits(GPIOA,GPIO_Pin_4);/*发送I2C总线结束信号*/delay_us(120);}/*******************************************************************字节数据发送函数函数原型:voidSendByte(UCHARc);功能:将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作.(不应答或非应答都使ack=0)发送数据正常,ack=1;ack=0表示被控器无应答或损坏。********************************************************************/voidSendByte(unsignedcharc){unsignedcharBitCnt;for(BitCnt=0;BitCnt<8;BitCnt++)/*要传送的数据长度为8位*/{if((c<<BitCnt)&0x80)GPIO_SetBits(GPIOA,GPIO_Pin_4);/*判断发送位*/elseGPIO_ResetBits(GPIOA,GPIO_Pin_4);delay_us(30);GPIO_SetBits(GPIOA,GPIO_Pin_5);/*置时钟线为高,通知被控器开始接收数据位*/delay_us(150);/*保证时钟高电平周期大于4μs*/GPIO_ResetBits(GPIOA,GPIO_Pin_5);}delay_us(60);AD8591_DataPin_Configure_Input();/*8位发送完后释放数据线,准备接收应答位*/delay_us(60);GPIO_SetBits(GPIOA,GPIO_Pin_5);delay_us(60);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4)==1)ack=0;elseack=1;/*判断是否接收到应答信号*/GPIO_ResetBits(GPIOA,GPIO_Pin_5);delay_us(60); AD8591_DataPin_Configure_Output();}/*******************************************************************字节数据接收函数函数原型:UCHARRcvByte();功能:用来接收从器件传来的数据,并判断总线错误(不发应答信号),发完后请用应答函数应答从机。********************************************************************/unsignedcharRcvByte(){unsignedcharretc;unsignedcharBitCnt;retc=0;AD8591_DataPin_Configure_Input();for(BitCnt=0;BitCnt<8;BitCnt++){delay_us(30);GPIO_ResetBits(GPIOA,GPIO_Pin_5);/*置时钟线为低,准备接收数据位*/delay_us(150);/*时钟低电平周期大于4.7μs*/GPIO_SetBits(GPIOA,GPIO_Pin_5);/*置时钟线为高使数据线上数据有效*/delay_us(60);retc=retc<<1;if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4)==1)retc=retc+1;/*读数据位,接收的数据位放入retc中*/delay_us(60);}GPIO_ResetBits(GPIOA,GPIO_Pin_5);AD8591_DataPin_Configure_Output();delay_us(60);return(retc);}/********************************************************************应答子函数函数原型:voidAck_I2c(bita);功能:主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)********************************************************************/voidAck_I2c(unsignedchara){if(a==0)GPIO_ResetBits(GPIOA,GPIO_Pin_4);/*在此发出应答或非应答信号*/elseGPIO_SetBits(GPIOA,GPIO_Pin_4);delay_us(90);GPIO_SetBits(GPIOA,GPIO_Pin_5);delay_us(150);/*时钟低电平周期大于4μs*/GPIO_ResetBits(GPIOA,GPIO_Pin_5);/*清时钟线,钳住I2C总线以便继续接收*/delay_us(60);}/*******************************************************************ADC发送字节[命令]数据函数*******************************************************************/unsignedcharISendByte(unsignedcharsla,unsignedcharc){ AD8591_DataPin_Configure_Output();Start_I2c();//启动总线SendByte(sla);//发送器件地址if(ack==0)return(0);SendByte(c);//发送数据if(ack==0)return(0);Stop_I2c();//结束总线return(1);}/*******************************************************************ADC读字节数据函数*******************************************************************/unsignedcharIRcvByte(unsignedcharsla){unsignedcharc;Start_I2c();//启动总线SendByte(sla+1);//发送器件地址if(ack==0)return(0);c=RcvByte();//读取数据0Ack_I2c(1);//发送非就答位Stop_I2c();//结束总线return(c);}#definePCF85910x90//PCF8591地址unsignedchargucShuiwei=0;unsignedchargucHunzhuo=0;voidAdPro(void){ ISendByte(PCF8591,0x40);IRcvByte(PCF8591);//ADC0模数转换4 可调0-5vbatteryPowergucShuiwei=IRcvByte(PCF8591);//ADC0模数转换4 可调0-5vbatteryPower ISendByte(PCF8591,0x41); IRcvByte(PCF8591);gucHunzhuo=IRcvByte(PCF8591);//ADC1模数转换4 可调0-5vbatteryPower}voidShowCheLiangStatus(void){//OLED_ShowCheSu(0,0,0); //OLED_ShowCheSu(18,0,1); //OLED_ShowCheSu(36,0,2); OLED_ShowNum(54,0,gucUartRcvData,3,16); }voidLampDetailInfoShow(unsignedintuiLampNum){}externunsignedintguiDistance1;//到另一个设备的距离externunsignedintguiDistance2;//到本设备的距离unsignedintguiDistanceReal2=0;unsignedintguiDistanceReal1=0;#defineBITBAND(addr,bitnum)((addr&0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2))#defineMEM_ADDR(addr)*((volatileunsignedlong*)(addr))#defineBIT_ADDR(addr,bitnum)MEM_ADDR(BITBAND(addr,bitnum))//IO口地址映射#defineGPIOA_ODR_Addr(GPIOA_BASE+12)//0x4001080C#defineGPIOB_ODR_Addr(GPIOB_BASE+12)//0x40010C0C#defineGPIOC_ODR_Addr(GPIOC_BASE+12)//0x4001100C#defineGPIOD_ODR_Addr(GPIOD_BASE+12)//0x4001140C#defineGPIOE_ODR_Addr(GPIOE_BASE+12)//0x4001180C#defineGPIOF_ODR_Addr(GPIOF_BASE+12)//0x40011A0C#defineGPIOG_ODR_Addr(GPIOG_BASE+12)//0x40011E0C#defineGPIOA_IDR_Addr(GPIOA_BASE+8)//0x40010808#defineGPIOB_IDR_Addr(GPIOB_BASE+8)//0x40010C08#defineGPIOC_IDR_Addr(GPIOC_BASE+8)//0x40011008#defineGPIOD_IDR_Addr(GPIOD_BASE+8)//0x40011408#defineGPIOE_IDR_Addr(GPIOE_BASE+8)//0x40011808#defineGPIOF_IDR_Addr(GPIOF_BASE+8)//0x40011A08#defineGPIOG_IDR_Addr(GPIOG_BASE+8)//0x40011E08#definePBin(n)BIT_ADDR(GPIOB_IDR_Addr,n)//输入#defineRDATA PBin(9) //红外数据输入脚//红外遥控识别码(ID),每款遥控器的该值基本都不一样,但也有一样的.//我们选用的遥控器识别码为0#defineREMOTE_ID0 externu8RmtCnt; //按键按下的次数externvoidHourAdd(void);externvoidMinuteAdd(void);externvoidDayAdd(void);externvoidMonthAdd(void);externvoidYearAdd(void);externunsignedintguiYear;externunsignedchargucUartRcvData1[50];//数据定义://以下变量均为全局变量//温度高8位==U8T_data_H//温度低8位==U8T_data_L//湿度高8位==U8RH_data_H//湿度低8位==U8RH_data_L//校验8位==U8checkdatau8U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;u8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;#defineBOOLunsignedchar#ifndefTRUE#defineTRUE1#endif#ifndefFALSE#defineFALSE0#endifstaticvoidDHT11_DataPin_Configure_Output(void){GPIO_InitTypeDefGPIO_InitStructure;//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,DISABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PA端口时钟GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//PA.0端口配置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);}staticvoidDHT11_DataPin_Configure_Input(void){GPIO_InitTypeDefDataPin;DataPin.GPIO_Pin=GPIO_Pin_0;DataPin.GPIO_Mode=GPIO_Mode_IN_FLOATING;//悬空DataPin.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&DataPin);}BOOLDHT11_get_databit(void){uint8_tval;val=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);if(val==Bit_RESET){returnFALSE;}else{returnTRUE;}}voidDHT11_set_databit(BOOLlevel){if(level==TRUE){GPIO_SetBits(GPIOA,GPIO_Pin_0);}else{GPIO_ResetBits(GPIOA,GPIO_Pin_0);}}voidmdelay(u16ms){if(ms!=0){delay_ms(ms);}}voidudelay(u16us){if(us!=0){delay_us(us);}}staticuint8_tDHT11_read_byte(void){uint8_ti;uint8_tdata=0;for(i=0;i<8;i++){data<<=1;while((!DHT11_get_databit()));udelay(10);udelay(10);udelay(10);if(DHT11_get_databit()){data|=0x1;while(DHT11_get_databit());}else{}}returndata;}staticuint8_tDHT11_start_sampling(void){DHT11_DataPin_Configure_Output();//主机拉低18ms??DHT11_set_databit(FALSE);mdelay(18);DHT11_set_databit(TRUE);//总线由上拉电阻拉高主机延时20usudelay(10);udelay(10);//???udelay(10);//???udelay(10);//主机设为输入判断从机响应信号DHT11_set_databit(TRUE);DHT11_DataPin_Configure_Input();//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行????if(!DHT11_get_databit())//T!{//判断从机是否发出80us的低电平响应信号是否结束???while((!DHT11_get_databit()));//printf("DHT11answers.\r\n");//判断从机是否发出80us的高电平,如发出则进入数据接收状态while((DHT11_get_databit()));return1;}return0;}voidDHT11_get_data(void){u8temp;if(DHT11_start_sampling()){//printf("DHT11isreadytotransmitdata\r\n");//数据接收状态??????U8RH_data_H_temp=DHT11_read_byte();U8RH_data_L_temp=DHT11_read_byte();U8T_data_H_temp=DHT11_read_byte();U8T_data_L_temp=DHT11_read_byte();U8checkdata_temp=DHT11_read_byte();/*Datatransmissionfinishes,pullthebushigh*/DHT11_DataPin_Configure_Output();DHT11_set_databit(TRUE);//数据校验temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);if(temp==U8checkdata_temp){U8RH_data_H=U8RH_data_H_temp;U8RH_data_L=U8RH_data_L_temp;U8T_data_H=U8T_data_H_temp;U8T_data_L=U8T_data_L_temp;U8checkdata=U8checkdata_temp;//printf("DHT11tempature%d.%d?humidity%d.%d\r\n",U8T_data_H,U8T_data_L,U8RH_data_H,U8T_data_L);}else{}}else{}}typedefunsignedcharBYTE;unsignedcharCY;BYTEBUF[8];//接收数据缓存区unsignedintdis_data=65535;//变量unsignedintguiGuangzhaodu=0;#defineBH_1750_SCL_Clr()GPIO_ResetBits(GPIOB,GPIO_Pin_11)#defineBH_1750_SCL_Set()GPIO_SetBits(GPIOB,GPIO_Pin_11)#defineBH_1750_SCL_Get()GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)#defineBH_1750_SDA_Clr()GPIO_ResetBits(GPIOB,GPIO_Pin_10)#defineBH_1750_SDA_Set()GPIO_SetBits(GPIOB,GPIO_Pin_10)#defineBH_1750_SDA_Get()GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)voidBH_1750_SDA_OUT(void){ GPIO_InitTypeDefGPIO_InitStructure;/*第一步:打开外设的时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOB,&GPIO_InitStructure);}voidBH_1750_SDA_IN(void){ GPIO_InitTypeDefGPIO_InitStructure;/*第一步:打开外设的时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB,&GPIO_InitStructure);}voidBH_1750_IO_Init(void){ GPIO_InitTypeDefGPIO_InitStructure;/*第一步:打开外设的时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOB,&GPIO_InitStructure);}voidDelay5us(){delay_us(5);}/**************************************起始信号**************
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流管理手册之仓储规划方案
- 新能源汽车电池维护管理操作指南
- 2026年老年患者跌倒坠床防控专项护理计划
- 建筑设计院建筑装饰工程预算编制指南
- 职场新人职场沟通技巧入门级指南
- 企业团队沟通效果评估体系模板
- 行政办公文件归档与管理流程手册
- 2026年医务人员职业暴露预防与处置考核试题及答案
- 康复医学与护理技术作业指导书
- 企业会议纪要撰写标准化手册
- 第3课《可爱的小鸟》课件-一年级美术下册(湘美版2024)
- 从事精神科护理十余年感悟
- 办公楼装修改造工程施工方案
- DB51-T 2973-2022 航电系统产品用芳纶纸蜂窝制件工艺质量控制要求
- 全过程工程咨询项目部管理制度
- 模拟电子技术基础 第4版黄丽亚课后参考答案
- 泌尿外科学(医学高级)-案例分析题
- 陕西特色美食文化介绍推介PPT图文课件
- 物理爆炸爆炸冲击波计算
- 地理七年级下册7.2南亚3市公开课一等奖省优质课赛课一等奖课件
- 737NG飞机液压管路材料及力矩介绍
评论
0/150
提交评论