《基于单片机的恒压供水系统设计(共22页).docx》由会员分享,可在线阅读,更多相关《基于单片机的恒压供水系统设计(共22页).docx(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上摘要建设节约型社会,合理开发、节约利用和有效保护水资源是一项艰巨任务。根据高校用水时间集中,用水量变化较大的特点,分析了校园原供水系统存在了耗能高,可靠性低,水资源浪费严重,管网系统待完善的问题。提出利用自来水恒压供水和水泵提水相结合的方式,并配以变频器、软启动器、单片机、微泄露补偿器、压力传感器、液位传感器等不同功能传感器,根据管网的压力,通过变频器控制水泵的转速,使管网中的压力始终保持在合适的范围。从而解决因楼层太高而导致压力不足及小流量时能耗大的问题。另外水泵耗电功率与电机转速的三次方成正比关系,所以水泵调速运行的节能效果非常明显,平均耗电量较通常供水方式节省近
2、四成。结合使用可编程控制器,可实现主泵变频,副泵软启动,具有短路保护、过流保护功能,工作稳定可靠,大大延长了电机的使用寿命。关键字:恒压变频供水,单片机,差压供水,自动专心-专注-专业第一章 引言1.1 变频恒压供水系统主要特点1.节能,可以实现节电20%40%,能实现绿色省电。2.占地面积小,投资少,效率高。3.配置灵活,自动化程度高,功能齐全,灵活可靠。4.运行合理,由于是软启和软停,不但可以消除水锤效应,而且电机轴上的平均扭矩和磨损减小,减小了维修量和维修费用,并且水泵的寿命大大提高。5.由于变频恒压调速直接从水源供水,减少了原有供水方式的二次污染,防止了很多传染疾病。6.通过通信控制,
3、可以实现五人职守,节约了人力物力。1.2 恒压供水设备的主要应用场合1.高层建筑,城乡居民小区,企事业等生活用水。2.各类工业需要恒压控制的用水场合,冷却水循环,热力网水循环,锅炉补水等。3.中央空调系统。4.自来水厂增压系统。5.农田灌溉,污水处理,人造喷泉。6.各种流体恒压控制系统。第二章 变频恒压调速供水系统的工作原理在变频调速供水系统中,是通过变频调速来改变水泵的转速从而改变水泵工作点来达到调节供水流量的目的。反应水泵运行工程的水泵工作点也称为水泵工况点,是指水泵在确定的管路系统中,实际运行时所具有的扬程、流量以及相应的效率、功率等参数。在调节水泵转速的过程中,水泵工况点的调节是一个十
4、分关键的问题。如果水泵工况点偏离设计工作点较远,不仅会引起水泵运行效率降低、功率升高或者发生严重的气穴现象,还可能导致管网压力不稳定而影响正常的供水。水泵在实际运行时的工作点取决于水泵性能、管路水力损失以及所需实际扬程,这三种因素任一项发生变化,水泵的运行工况都会发生变化因此水泵工况点的确定和工况调节与这三者密切相关。图2-1 变频恒压供水系统组成框图图3-1就是一个典型的由8051单片机控制的恒压调速供水系统。系统由微机控制器、交流变频调速器、水泵机组、供水管网和压力传感器等组成,控制系统结构原理如图3.2所示。8051单片计算机在这里主要起压力采集,PID调节器计算、功能判断处理、消防处理
5、、逻辑切换、压力显示和声光报警等作用。图2-2 单片机的变频恒压调速系统原理框图2.1系统工作过程根据现场生产的实际状况,白天一般只需开动一台水泵,就能满足生产生活需要,小机工频运行作恒速泵使用,大机变频运行作变量泵;晚上用水低峰时,只需开动一台大机就能满足供水需要,因此可以采用一大一小搭配进行设计,即把1#水泵电机(160KW)和2#水泵电机(220KW)为一组,自动控制系统可以根据运行时间的长短来调整选择不同的机组运行。分析自动控制系统机组(1#、2#水泵机组)工作过程,可分为以下三个工作状态:(1)1#电机变频启动;(2)1#电机工频运行,2#电机变频运行;(3)2#电机单独变频运行,一
6、般情况下,水泵电机都处于这三种工作状态中,当管网压力突变时,三种工作状态就要发生相应变换,因此这三种工作状态对应着三个切换过程。1. 切换过程1#电机变频启动,频率达到50Hz,1#电机工频运行,2#电机变频运行。系统开始工作时,管网水压低于设定压力下限P。按下相应的按钮,选择机组运行,在PLC可编程控制器控制下,KM2得电,1#电机先接至变频器输出端,接着接通变频器FWD端。变频器对拖动1#泵的电动机采用软启动,1#电机启动,运行一段时间后,随着运行频率的增加,当变频器输出频率增至工频f0可编程控制器发出指令,接通变频器BX端,变频器FWD端断开,KM2失电,1#电机自变频器输出端断开,KM
7、1得电,1#电机切换至工频运行,1#电机自变频器输出端断开,KM1得电1#电机切换至工频运行。1#电机工频运行后,开启1#泵阀门,1#泵工作在工频状态。接着KM3得电,2#电机接至变频器输出端,接通变频器FWD端,变频器BX端断开,2#电机开始软启动,运行一段时间后,开启2#泵阀门,2#水泵电机工作在变频状态。从而实现1#水泵由变频切换至工频电网运行,2#水泵接入变频器并启动运行,在系统调节下变频器输出频率不断增加,直到管网水压达到设定值(PiPPm)为止。2. 切换过程由1#电机工频运行,2#电机变频运行转变为2#电机单独变频运行状态。当晚上用水量大量减少时,水压增加,2#水泵电机在变频器作
8、用下,变频器输出频率下降,电机转速下降,水泵输出流量减少,当变频器输出频率下降到指定值fmin,电机转速下降到指定值,水管水压高于设定水压上限Pk时(2#电机,f=fmin,PPk),在PLC可编程控制器控制下,1#水泵电机在工频断开,2#水泵继续在变频器拖动下变频运行。3切换过程由2#电机变频运行转变为2#电机变频停止,1#电机变频运行状态。当早晨用水量再次增加时,2#电动机工作在调速运行状态,当变频器输出频率增至工频fi(即50Hz),水管水压低于设定水压上限Pi时(2#电机f=fi,PPi),接通变频器BX端,变频器FWD断开,KM3断开,2#电机自变频器输出端断开;KM2得电,1#电机
9、接至变频器输出端;接通变频器FWD端,于此同时变频器BX端断开。1#电机开始软启动。控制系统又回到初始工作状态,开始新一轮循环。图2-3 1#和2#机组工作过程流程图2.2变频调速的基本调速调速原理水泵机组应用变频调速技术。即通过改变电动机定子电源效率来改变电动机转速可以相应的改变水泵转速及工况,使其流量与扬程适应管网用水量的变化,保持管网最不利点压力恒定,达到节能效果。如图2.4所示,n为水泵特性曲线,A管路特性曲线,H0为管网末端的服务压力,H1为泵出口压力。当用水量达到最大Qmax时,水泵全速运转,出口阀门全开,达到了满负荷运行,水泵的特性n0和用水管特性曲线A0汇交于b点,此时,水泵输
10、出口压力为H,末端服务压力刚好为H0.当用水量从Qmax减少到Q1的过程中,采用不同的控制方案,其水泵的能耗也不同。图2-4节能分析曲线图(1)水泵全速运转,靠关小泵出口阀门来控制;此时,管路阻力特性曲线变陡(A2),水泵的工况点由b点上滑到c点,而管路所需的扬程将由b点滑到d点,这样c点和d点扬程的差值即为全速水泵的能量浪费。(2)水泵变速运转,靠泵的出口压力恒定来控制;此时,当用水量由Qmax下降时,控制系统降低水泵转速来改变其特性。但由于采用泵出口压力恒量方式工作。所以其工况点是在H上平移。在水量到达Q1时,相应的水泵特性趋向为nx。而管路的特性曲线将向上平移到A1,两线交点e即为此时的
11、工况点,这样,在水量减少到Q1时,将导致管网不利点水压升高到H0H1,则H1即为水泵的能量浪费。(3)水泵变速运转,靠管网取不利点压力恒定来控制;此时,当用水量由Qmax下降到Q1时,水泵降低转速,水泵的特性曲线n1,其工况点为d点,正好落在管网特性曲线A0上,这样可以使水泵的工作点式中沿着A0滑动,管网的服务压力H0恒定不变,其扬程与系统阻力相适应,没有能量的浪费。此方案与泵出口恒压松散水相比,其能耗下降了h1.根据水泵相似原理:Q1/Q2=n1/n2 H1/H2=(n1/n2)*2 P1/P2=(n1/n2)*3式中,Q、H、P、n分别为泵流量、压力、轴功率和转速。即通过控制转速可以减少轴
12、功率。根据以上分析表明,选择供水管网最不利点允许的最低压力为控制参数,通过压力传感器以获得压力信号,组成闭环压力自控调速系统,以使水泵的转速保持与调速装置所设定的控制压力相匹配,使调速技术和自控技术相结合,达到最佳节能效果。此外,最不利点的控制压力还保证了用户水压的稳定,无论管路特性等因素发生变化,最不利点的水压是恒定的,保证了供水压力的可靠。采用变频恒压供水系统除可节能外,还可以使水泵组启动,降低了起动电流,避免了对供电系统产生冲击负荷,提高了供水供电的安全可靠性。另外,变频器本身具有过电流、过电压、失压等多种保护功能,提高了系统的安全可靠性。目前水泵电机绝大部分是三相交流异步电动机,根据交
13、流电机的转速特性,电机的转速n为:n=120(1-s)/p (2.3.1)式中s为电机的滑差(s=0.02),p为电机极对数,f为定子供电频率。当水泵电机选定后,p和s为定值,也就是说电机转速与电源的频率高低成正比,频率越高,转速越高,反之,转速越低,变频调速时是根据这一公式来实现无级调速的。由流体力学知:管网压力P、流量Q和功率N的关系为N=PQ由功率与水泵电机转速成三次方正比关系,基于转速控制比,基于流量控制可以大幅度降低轴频率。第三章 变频恒压调速供水系统硬件设计系统单元设计主要包括CPU基本控制单元、电路定时复位电路、A/D转换电路、D/A转换电路、显示电路和相应的开关电路。图3-1
14、系统硬件结构框图3.1硬件总体说明单片机系统的硬件结构框架图如图3-1所示。本系统以8951单片机为核心,它有4KEPROM,所以不用外扩EPROM,这样可以利用P0、P2口作为输入、输出I/O口,简化了硬件结构。系统的显示采用4片74LS164驱动LED,使用8951的串行通讯口TXD,DXD。93C46为串行EEPROM,用于保存开机设定的原始参数。采用NE555组成硬件定时复位电路,可以有效防止程序死机现象。74LS273用于对继电器输出状态硬件锁存,以防止输出状态被干扰。ULN2003为反向驱动芯片,同时在74LS273的CLEAR管脚外接RC电路,用于开机时使74S273的输出端清零
15、,用于防止继电器的误动作,对变频器起到了保护作用。在报警输入端与CPU之间采用光耦隔离,以消除外部干扰。系统A/D输入采用8位TLC0831逐次逼近模数转换器,D/A输出采用了光耦离式D/A输出,并采用LM358双运放组成D/A输出及驱动电路。P3.3定时输出占空比与频率相对应的PWM调制信号,通过二极运算放大电路后,在LM358的第7引脚输出与频率相对应的电压信号。在输出端调节电位器可以调节输出电压的大小,两放大器之间的RC电路起到了滤波的作用。3.2 555定时器复位电路图3-2 NE555封装图如图3-3和图3-4上可知,NE555定时电路V0口输出连续的脉冲信号至RST,达到定时复位的
16、效果。电路使用电阻电容产生RC定时电路,用于设定脉冲的周 期和脉冲的宽度。调节RW或者电容C,可以得到不同的时间常数。脉冲宽度计算公式:TW =0.7(R1+RW+R2)C 振荡周期计算公式:T=0.7(R1+ RW+2*R2)C从而通过控制振荡周期和脉冲宽度就可以控制定时时间。图3-3 NE555内部结构图 3-4 NE555定时电路及工作波形3.3 5V单片机供电电源电路如图3-5所示电路为输出电压+5V、输出电流1.5A的稳压电源。它由电源变压器B,桥式整流电路D1D4,滤波电容C1、C3,防止自激电容C2、C3和一只固定式三端稳压器(7805)极为简捷方便地搭成的。220V交流市电通过
17、电源变压器变换成交流低压,再经过桥式整流电路D1D4和滤波电容C1的整流和滤波,在固定式三端稳压器LM7805的Vin和GND两端形成一个并不十分稳定的直流电压(该电压常常会因为市电电压的波动或负载的变化等原因而发生变化)。此直流电压经过LM7805的稳压和C3的滤波便在稳压电源的输出端产生了精度高、稳定度好的直流输出电压。本稳压电源可作为TTL电路或单片机电路的电源。三端稳压器是一种标准化、系列化的通用线性稳压电源集成电路,以其体积小、成本低、性能好、工作可靠性高、使用简捷方便等特点,成为目前稳压电源中应用最为广泛的一种单片式集成稳压器件。图3-5 LM7805稳压电源第四章 变频恒压调速供
18、水系统软件设计4.1 变频恒压调速供水系统软件设计总体说明系统软件程序由主程序,定时中断显示和频率输出子程序组成。采用软件模块化设计,引入了先进的模糊逻辑控制技术,并增加了容错技术和抗干扰算法。系统采用了定时复位软件设计方案(1秒钟复位一次),以消除程序运行时的死机现象。数字滤波采用平均值滤波方法,以消除干扰对输入信号的影响。4.2 8051系列单片的编程语言51单片机在有四种语言支持,即汇编、PL/MC、C和BASIC。C语言是一种源于编写UNIX操作系统的语言,是一种结构化语言,可产生紧凑代码。C语言结构是以括号而不是以字和特殊符号表示的语言。C语言可以进行许多机器级函数控制而不用汇编语言
19、。与汇编语言相比,C语言有很多优点。(1)对单片机指令系统不要求了解,仅要求了解对8051的存储器结构有初步了解;(2)寄存器的分配、不同存储器的寻址及数据类型等细节可有编译器管理;程序规范的结构,可分为不同的函数,这种方式可使程序结构化(3)具有将可变选择和特殊操作组合在一起的能力,改善了程序的可读性;关键字及运算函数可用于近似人的思维过程方式使用;(4)编程和程序调试时间显著缩短,从而提高效率;(5)提供的库包括许多标准子程序,具有较强的数据处理能力;(6)已编好的程序可以很容易地移植入新程序,因为C语言具有方便的模块化编程技术;虽然C语言有诸多优点,但是并不是说汇编语言就要被抛弃,懂得汇
20、编语言指令就可使用在片RAM作为变量的优势,因为片外变量需要几条几条指令才能设置累加器和数据指针进行存取。要求使用浮点和启用函数时,只有具备汇编编程经验,才能避免生成庞大的、效率低的程序,所有现在所有的对速度要求高的内核程序都是用汇编编写完成的。4.3 编程软件4.3.1 C051编译器介绍现在比较流行的51系列编程软件(1)American Automation:编译器通过#asm和endasm预处理选择支持汇编语言。(2)IAR: 瑞典的IAR是支持分体切换的编译器。(3)Bso/Tasking:是Intel,LSI,Motorola,Philips,Simens和Texas Instru
21、ments嵌入式系统的配套软件工具(4)Dunfield Shareware:非专业的软件包,不支持floats,longs或结构等(5)KEIL:KEIL在代码生成方面处于领先地位,可以产生最少的代码。它支持浮点或长整数、重入和递推。使用单片机模式,KEIL是最好的选择(6)Intermetrics:使用起来比较困难,要由可执行的宏语句控制编译、汇编和链接,且选项很多。编译器的算法技术支持(float和long)很重要。生成代码的大小比编译速度重要,这里KEIL具有性能领先、紧凑的代码和使用方便等优点,所以本系统采用KEIL编译器。4.3.2 KEIL编译器KEIL开发工具套件可用于编译C源
22、程序、汇编源程序、链接和定位目标文件及库,创建HEX文件以及调试目标程序。(1)uVision2 for Windows:是一个集成开发环境。它将项目管理、源代码编辑和程序调试等组合在一个强大功能的环境中。(2)CX51国际标准优化C交叉编译器:从C源代码产生可重定位的目标模块。(3)AX51宏汇编器:从8051汇编源代码产生可重定位的目标模块。(4)BL51链接器/定位器:组合有CX51和AX51产生的可重定位的目标模块,生成绝对目标模块。(5)LIB51库管理器:从目标模块生成链接器可以使用的库文件。(6)OH51目标文件至HEX格式的转换器:从绝对目标模块生成Intel HEX文件。(7
23、)RTX-51实时操作系统:简化了复杂的实时应用软件项目的设计。4.4 单片机资料单片微型计算机简称为单片机,有称为微型控制器,是微型计算机的一个重要分支。单片机是70年代中期发展起来的一种大规模集成电路芯片,是CPU、RAM、ROM、I/O接口和中断系统于同一硅片的器件。80年代以来,单片机发展迅速,各类新产品不断涌现,出现了许多高性能新型机种,现已逐渐成为工厂自动化和各控制领域的支柱产业之一。引脚功能: MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照-单片机引脚图: l P0.0P0.7 P0口8位双向口线(在引脚的3932号端子)。 l P1.0P1.7 P1口8位双
24、向口线(在引脚的18号端子)。 l P2.0P2.7 P2口8位双向口线(在引脚的2128号端子)。 l P3.0P3.7 P2口8位双向口线(在引脚的1017号端子)。P0口有三个功能: 1、外部扩展存储器时,当做数据总线(如图1中的D0D7为数据总线接口) 2、外部扩展存储器时,当作地址总线(如图1中的A0A7为地址总线接口) 3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。 P1口只做I/O口使用:其内部有上拉电阻。 P2口有两个功能: 1、扩展外部存储器时,当作地址总线使用;2、做一般I/O口使用,其内部有上拉电阻。 P3口有两个功能: 除了作
25、为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。 有内部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的, 即:编程脉冲:30脚(ALE/PROG) 编程电压(25V):31脚(EA/Vpp) 接触过工业设备的兄弟可能会看到有些印刷线路板上会有一个电池,这个电池是干什么用的呢?这就是单片机的备用电源,当外接电源下降到下限值时,备用电源就会经第二功能的方式由第9脚(即RST/VPD)引入,以保护内部RAM中的信息不会丢失。 在介绍这四个I/O口时提到了一个“上拉电阻”那
26、么上拉电阻又是一个什么呢?他起什么作用呢?当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。 ALE/PROG 地址锁存控制信号:在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。(在后面关于扩展的课程中我们就会看到8051扩展 EEPROM电路, ALE与74LS373锁存器的G相连接,当CPU对外部进行存取时,用以锁住地址的低位地址,即P0口输出。ALE有可能是高电平也有可能是低电平,当ALE是高电平时,允许地址锁存信号,当访问外部存储器时,ALE信号
27、负跳变(即由正变负)将P0口上低8位地址信号送入锁存器。当ALE是低电平时,P0口上的内容和锁存器输出一致。在没有访问外部存储器期间,ALE以1/6振荡周期频率输出(即6分频),当访问外部存储器以1/12振荡周期输出(12分频)。当系统没有进行扩展时ALE会以1/6振荡周期的固定频率输出,因此可以做为外部时钟,或者外部定时脉冲使用。 PORG为编程脉冲的输入端:在8051单片机内部有一个4KB或8KB的程序存储器(ROM),ROM的作用就是用来存放用户需要执行的程序的,那么我们是怎样把编写好的程序存入进这个ROM中的呢?实际上是通过编程脉冲输入才能写进去的,这个脉冲的输入端口就是PROG。 P
28、SEN 外部程序存储器读选通信号:在读外部ROM时PSEN低电平有效,以实现外部ROM单元的读操作。 1、内部ROM读取时,PSEN不动作; 2、外部ROM读取时,在每个机器周期会动作两次; 3、外部RAM读取时,两个PSEN脉冲被跳过不会输出; 4、外接ROM时,与ROM的OE脚相接。 (8051扩展2KB EEPROM电路, PSEN与扩展ROM的OE脚相接) EA/VPP 访问和序存储器控制信号 1、接高电平时: CPU读取内部程序存储器(ROM) 扩展外部ROM:当读取内部程序存储器超过0FFFH(8051)1FFFH(8052)时自动读取外部ROM。 2、接低电平时:CPU读取外部程
29、序存储器(ROM)。 在前面的学习中我们已知道,8031单片机内部是没有ROM的,那么在应用8031单片机时,这个脚是一直接低电平的。 3、8051写内部EPROM时,利用此脚输入21V的烧写电压。 RST 复位信号:当输入的信号连续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作,当复位后程序计数器PC=0000H,即复位后将从程序存储器的0000H单元读取第一条指令码。 XTAL1和XTAL2 外接晶振引脚。当使用芯片内部时钟时,此二引脚用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。 VCC:电源+5V输入 VSS:GND接地。 AVR和pic都是跟
30、8051结构不同的8位单片机,因为结构不同,所以汇编指令也有所不同,而且区别于使用CISC指令集的8051,他们都是RISC指令集的,只有几十条指令,大部分指令都是单指令周期的指令,所以在同样晶振频率下,较8051速度要快。另PIC的8位单片机前几年是世界上出货量最大的单片机,飞思卡尔的单片机紧随其后。ARM实际上就是32位的单片机,它的内部资源(寄存器和外设功能)较8051和PIC、AVR都要多得多,跟计算机的CPU芯片很接近了。常用于手机、路由器等等。DSP其实也是一种特殊的单片机,它从8位到32位的都有。它是专门用来计算数字信号的。在某些公式运算上,它比现行家用计算机的最快的CPU还要快
31、。比如说一般32位的DSP能在一个指令周期内运算完一个32位数乘32位数积再加一个32位数。应用于某些对实时处理要求较高的场合。参考文献1 何立民.MCS-51系列单片机应用系统设计,北京航空航天大学出版社,1990.2 李华.MCS-51系列单片机使用接口技术,北京航空航天大学出版社,1992.3 解宏基,任光.一种多功能变频恒压供水单片机供水控制系统,大连海事大学轮机工程研究所,.4 周黎辉,冯正进.变频器在多泵并联调速系统中的应用,机电一体化,1999年第4期.5 秦进平,官英双.基于单片机的恒压供水系统,黑龙江工程学院学报(自然科学版),Vol.19,No.1MAR,20056 马忠梅
32、,籍顺心,张凯.单片机的C语言应用程序设计(第3版权),北京航空航天大学出版社,20037 苏夯.控制恒压供水系统的设计,大连交通大学,2009-12-18.8 童占.新概念51单片机C语言教程,电子工业出版社,2003.9 王幸之,钟爱琴.AT89系列单片机原理及接口技术M.北京:北京航空航天大学出版社,2004:489-504.10 南建辉、熊鸣、王军茹.MCS-51单片机原理及应用实例,北京:清华大学出版社,2003.11 方彦军,孙健. 智能仪器技术及其应用M,西安:化学工业出版社,2006:98-105.附录附录一:A/D数据采集转化及显示子程序#include #define uc
33、har unsigned char#define uint unsigned intsbit st=P32;sbit oe=P31;sbit eoc=P30;uchar codetab=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09;/数码管显示段码uchar codetd=0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70;/通道先择数组uint ad_0809,ad_data1,ad_data2,ad_data3,ad_data0;uchar m,number;uchar x8;/八通道数据待存数组void d
34、elaynms(uint x);/nms延时程序void display();/显示程序void ad0809();/芯片启动程序void key();/键扫描程序main()number=1;P1=0x00;while(1)ad0809();/调AD0809 启动子程序key();/调按键子程序ad_0809=xnumber;/把相关通道数据给ad_0809display();/调显示/nms 延时程序void delaynms(uint x)uchar i;while(x-0)for(i=0;i125;i+);void display()uchar a;ad_data1=(ad_0809*
35、49/25)/100;/读得的数据乘以2 再乘以98%除以100 得百位ad_data2=(ad_0809*49/25)%100)/10;/读得的数据乘以2 再乘以98%再分出十位ad_data3=(ad_0809*49/25)%100)%10);/读得的数据乘以2 再乘以98%再分出个位for(a=0;a10;a+)P0=tabad_data3;/送小数点后第二位显示P2=0x07;/选通第一个数码管delaynms(3);P0=tabad_data2;/送小数点后第一位显示P2=0x0b;/选通第二个数码管delaynms(3);P0=tabad_data1;/送整数显示P0_7=0;/点
36、亮第三个数码管小数点P2=0x0d;/ 选通第三个数码管delaynms(3);P0=tabnumber;/送通道号显示P2=0x0e;delaynms(3);void ad0809()uchar i,m=1;for(i=0;i8)number=1;/八通道附录二:PID控制子程序#include #include#includestruct _pid int pv; /*integer that contains the process value*/ int sp; /*integer that contains the set point*/ float integral; float
37、pgain; float igain; float dgain; int deadband; int last_error;struct _pid warm,*pid;int process_point, set_point,dead_band; float p_gain, i_gain, d_gain, integral_val,new_integ; /*- pid_init DESCRIPTION This function initializes the pointers in the _pid structure to the process variable and the setp
38、oint. *pv and *sp are integer pointers. -*/ void pid_init(struct _pid *warm, int process_point, int set_point) struct _pid *pid; pid = warm; pid-pv = process_point; pid-sp = set_point; /*- pid_tune DESCRIPTION Sets the proportional gain (p_gain), integral gain (i_gain), derivitive gain (d_gain), and
39、 the dead band (dead_band) of a pid control structure _pid. -*/ void pid_tune(struct _pid *pid, float p_gain, float i_gain, float d_gain, int dead_band) pid-pgain = p_gain; pid-igain = i_gain; pid-dgain = d_gain; pid-deadband = dead_band; pid-integral= integral_val; pid-last_error=0; /*- pid_setinte
40、g DESCRIPTION Set a new value for the integral term of the pid equation. This is useful for setting the initial output of the pid controller at start up. -*/ void pid_setinteg(struct _pid *pid,float new_integ) pid-integral = new_integ; pid-last_error = 0; /*- pid_bumpless DESCRIPTION Bumpless transf
41、er algorithim. When suddenly changing setpoints, or when restarting the PID equation after an extended pause, the derivative of the equation can cause a bump in the controller output. This function will help smooth out that bump. The process value in *pv should be the updated just before this functi
42、on is used. -*/ void pid_bumpless(struct _pid *pid) pid-last_error = (pid-sp)-(pid-pv); /*- pid_calc DESCRIPTION Performs PID calculations for the _pid structure *a. This function uses the positional form of the pid equation, and incorporates an integral windup prevention algorithim. Rectangular integration is used, so this functi