资源描述
武汉科技大学机电与控制学院学士学位论文加热炉多参数检测和炉温控制系统学士学位论文目录第一章 绪论11.1 概述11.2 MCS-51单片机的结构41.3键盘及其显示器方式9第二章 采样与滤波172.1 采样系统172.2 数字滤波182.3关于温度控制的PID算法24第三章 系统设计313.1硬件电路模块313.2软件系统设计33第四章 总结和展望384.1引言384.2 PID 控制38致谢50参考文献51湖北师范学院学士学位论文(设计)评审表53加热炉多参数检测和炉温控制系统第一章 绪论1.1 概述 随着现代工业的逐步发展,在工业生产中,温度、压力、流量和液位是四种最常见的过程变量。其中,温度是一个非常重要的过程变量。例如:在冶金工业、化工工业、电力工业、机械加工和食品加工等许多领域,都需要对各种加热炉、热处理炉、反应炉和锅炉的温度进行控制。然而,用常规的控制方法,潜力是有限的,难以满足较高的性能要求。采用单片机来对它们进行控制不仅具有控制方便、简单和灵活性大的优点,而且可以大幅度提高被测温度的技术指标,从而能够大大提高产品的质量和数量。因此,单片机对温度的控制问题是一个工业生产中经常会遇到的控制问题。单片机温度控制系统,是利用单片机作为系统的主控制器,测量电路中的温度反馈信号经A/D变换后,送入单片机中进行处理,经过一定的算法后,单片机的输出用来控制可控硅的通断,控制加热炉的输出功率,从而实现对温度的控制。本单片机温度控制系统的具体指标要求是,对加热器加热温度调整范围为6001000,温度控制精度小于3,系统的超调量须小于15%。软件设计须能进行人机对话,考虑到本系统控制对象为电炉,是一个大延迟环节,且温度调节范围较宽,所以本系统对过渡过程时间不予要求。单片机是一种集CPU、RAM、ROM、I/O接口和中断系统于一体的器件,只需要外加电源和晶振就可以实现对数字信号的处理和控制。本设计运用MCS-51系列单片集中的8051单片机为主控制器,对加热炉的温度进行智能化控制,最终通过软件设计来实现人机对话功能,实现对加热炉的温度控制。本论文主要介绍单片机温度控制系统,内容主要包括:采样、滤波、键盘显示、加热控制系统,单片机MCS-51的开发及系统应用软件的开发等。全文共分五章。第一章绪论介绍课题背景、目的、意义及设计的总体思路。第二章介绍主控电路核心部分MCS-51单片机8051的基本结构和配置。第三章介绍A/D采样技术和数字滤波技术。第四章介绍以PID为主的温度控制算法及系统加热控制系统。第五章主要是系统软件编程。设计思路 根据系统具体指标要求,可以对每一个具体部分进行分析设计。整个控制系统分为硬件电路设计和软件程序设计两部分。硬件电路见附录。分析硬件电路主要包括:加热及控制电路部分,数据采集和模/数(A/D)转换处理部分,键盘和显示器部分,单片机与各部分的接口处理部分。这些可用一个方框图来表示,如图1-1所示,显然,这是一个典型的单反馈控制系统。 图 1-1 单片机温度控制系统框图从框图上我们可以看出,整个系统也可划分为控制电路部分、加热电路部分和测量电路三部分。控制电路是由单片机来处理给定信号和反馈信号,发出相应的指令来控制可控硅,是系统的核心。测量电路功能为将测量到的信号经过处理变成数字信号送入单片机中进行处理。主要由温度检测和变送器组成。温度检测元件和变送器的类型选择和被控温度及精度等级有关。镍络/镍铝热电偶(2001000)适用于01000的温度测量范围,相应输出电压为0mV41.32mV。变送器由毫伏变送器和电流/电压变送器组成:毫伏变送器用于把热点偶输出的0mV41.32mV变换成0 mA10 mA范围内的电流;电流/电压变送器用于把毫伏变送器输出的0 mA10 mA电流变换成0 V5V范围内的电压。 为了提高测量精度,变送器可以进行零点漂移。本次设计的温度控制范围为6001000之间,温度误差要求在3左右,系统超调量不超过10%,采用8位转换器ADC0809就可以使温度误差保持在2.34以内,满足设计要求。除上述电路,89C51还要有8279DAC0832和ADC0809等芯片接口电路。其中8279用于键盘/LED显示器接口,DAC0832由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成,主要用于将最终输出电压值的数字信号转换成模拟信号。ADC0809为温度测量电路的输入接口,用于把连续变化的信号进行离散化。最终再通过控制电路中的键盘显示器电路实现人机对话功能。软件设计主要由温度控制的算法和温度控制程序组成。软件设计主要为控制器部分,即温度控制系统,采用PID算法,其原理是先求出实测炉温对所需炉温的偏差值,而后对偏差值处理而获得控制信号去调节加热炉的加热功率,以实现对炉温的控制。PID基本可满足系统要求。程序设计是本次设计的核心部分。整个程序包括管理程序和控制程序两部分。管理程序是对显示LED进行动态刷新,控制指示灯,处理键盘的扫描和响应,进行掉电保护,执行中断服务程序等。控制程序是用来对被控进行采样,数据处理,根据控制算法进行计算和输出等。1.2 MCS-51单片机的结构 89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器。AT89C2051的引脚图如图3-1所示,其引脚定义如下: 1、Vcc:,电源电压。2、GND:接地。3、P1口:P1口是一个8位双向I/O口。其中P1.0、P1.1是片内精密模拟比较器的同相输入端和反向输入端,P3.6固定用于该比较器的输出端(P3.6对外无引脚,不可作I/O口访问)。当不用该模拟比较器时,P1.0、P1.1经外接上拉电阻后,也可作为普通I/O口使用。P1.2P1.7为普通I/O口,内部已接上拉电阻。图3-1 AT89C51引脚图4、P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。但由于P3.6口固定用作片内精密模拟比较器的输出端,对外无引脚,所以真正可作为I/O口用的只有7个。除了作为一般的I/O口外,更重要的用途是它的第二功能.端口引脚第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INT0(外中断0)P3.3INT1(外中断1)P3.4T0(定时/计数器0)P3.5T1(定时/计数器1) 5、RST:复位输入,当振荡器工作时,RST引脚出现两个周期以上高电平将使单片机复位。6、XTAL1、 XTAL2:晶体振荡电路反相输入端和输出端。使用内部振荡电路时外接石英晶体;外振荡输入时,XTAL1接地,XTAL2接外部振荡脉冲单片机是由运算器、控制器、存储器、输入设备以及输出设备共五个基本部分组成的。单片机是把包括运算器、控制器、少量的存储器、最基本的输入输出口电路、串行口电路、中断和定时电路等都集成在一个尺寸有限的芯片上。 MCS-51单片机芯片内部有数据存储器和程序存储器两类存储器,即所谓的内部RAM和内部ROM。同学重点要掌握内部数据存储器的结构、用途、地址分配和使用特点。一是内部数据存储器的低128单元,它包括了寄存器区、位寻址区、用户RAM区,要掌握这些单元的地址分配、作用等。二是内部数据存储器高128单元,这是为专用寄存器提供的,地址范围为80HFFH。所谓专用寄存器是区别于通用寄存器而言的,即这些寄存器的功能或用途已作了专门的规定,用于存放单片机相应部件的控制命令、状态或数据等。在这些专用寄存器中,重点要掌握以下寄存器的使用:程序计数器、累加器A、B寄存器、程序状态字(PSW)、数据指针(DPTR)。堆栈是计算机的重要概念,要掌握以下几方面:1. 堆栈的功用2. 堆栈的设置3. 堆栈指示器4. 堆栈使用方式 89C51芯片内有4K ROM存储单元,其地址为0000H0FFFH,这就是我们所说的内部程序存储器(或简称“内部ROM”)。无论是片内或是片外存储器(对于无片内ROM的单片机),在程序存储器中有一组特殊的保留单元0000H002AH,使用时应特别注意。 系统的启动单元:0000H0002H五个中断源的中断地址区:0003H002AH0003H000AH 外部中断0中断地址区000BH0012H 定时器/计数器0中断地址区0013H001AH 外部中断1中断地址区001BH0022H 定时器/计数器1中断地址区0023H002AH 串行中断地址区中断响应后,系统能按中断种类,自动转到各中断区的首地址去执行程序。因此在中断地址区中本应存放中断服务程序。但通常情况下,8个单元难以存下一个完整的中断服务程序,因此一般也是从中断地址区首地址开始存放一条无条件转移指令,以便中断响应后,通过中断地址区,再转到中断服务程序的实际入口地址去。 MCS-51单片机系统的存储器结构特点单片机的存储器结构有两个重要的特点:一是把数据存储器和程序存储器截然分开,二是存储器有内外之分。总的来说,由芯片内存储器和芯片外扩展存储器构成了单片机应用系统的整个存储器系统。MCS-51单片机并行输入/输出口电路单片机芯片内还有一项重要内容就是并行I/O口电路。MCS-51共有四个8位的并行双向I/O口,分别记作P0、P1、P2、P3,实际上它们已被归入专用寄存器之列。这四个口除了按字节寻址之外,还可以按位寻址,四个口合在一起共有32位。在单片机中,口是一个集数据输入缓冲、数据输出驱动及锁存等多项功能于一体的I/O电路。MCS-51的四个口在电路结构上是基本相同的,但它们又各具特点,因此在功能和使用上各口之间有一定的差异。在学习中必须要掌握各个口的用途。定时器及其应用 MCS-51单片机时钟电路与时序时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。而时序所研究的则是指令执行中各信号之间的相互时间关系。要理解时钟电路的产生与作用,能根据外部所加入的晶体的振荡频率计算时序的定时单位。1. MCS-51的外部晶体的振荡频率范围:1.2MHz12MHz,2. MCS-51时序的定时单位共有4个,依次是:拍节、状态、机器周期和指令周期。 8279芯片简介利用软件的方法实现键扫描及动态显示的最大缺点是占用很多CPU时间,一旦程序进入 处理其它功能的程序段,键盘及显示器即停止工作。可编程键盘、显示器接口8279可在编程后对键盘、显示器进行扫描,记下按下键的坐标并显示数据。8279是一个40线的双列直插式器件,如下图所示。它最多可外接88的键盘及168的发光二极管显示器。8279与CPU之间的连线有:D0D7数据线IRQ中断申请信号,高电平有效/RD、/WR读、写信号RESET复位信号/CS片选信号A0缓冲器地址。0表示数据口,1表示命令、状态口CLK外部时钟输入,用以产生内部100KHz的信号,输入信号频率低于2MHz8279与外部的连线有:SL0SL3扫描信号,用于键盘与显示器的扫描RL0RL7键输入信号,由内部电阻拉成高电平SHIFT,CNTL/STB键控制线,由内部电阻拉成高电平OUTB03,OUTA03输出显示数据,OUTA3为最高位,OUTB0为最低位/BD消隐信号在8279内部,有8字节的先进先出的键输入缓冲器及16个字节的显示数据缓冲器。当外部有键闭合时,其键值存入键输入缓冲器,中断信号IRQ变为高电平,当CPU将键值读取后,IRQ信号变低。CPU向8279的显示数据缓冲器写入数据后,8279即自动地将此数据用动态显示的方式显示出来。2.工作方式和编程由缓冲器地址信号可以决定8279的两个端口,当A0=1时选中命令、状态口,8279的编程通过向其命令、状态口写入命令字来实现。8279的命令字包括:键盘、显示器方式设置;程序时钟设置;读FIFO/传感器RAM;读显示RAM;写显示RAM;显示器写入禁止/空格;清除;中断结束/出错方式设置。1.3键盘及其显示器方式 此命令用于设置键盘与显示器的工作方式,其格式为:000为此命令的特征位。000DDKKKDD为显示方式设置,定义如下:D D显示方式0 08个8段字符显示,左边输入0 116个8段字符显示,左边输入1 08个8段字符显示,右边输入1 116个8段字符显示,右边输入根据显示方式的设置,可外接8个或16个8段发光二极管显示器,向显示器RAM写入显示字型的方式有左边输入和右边输入两种。KKK为键盘操作方式,定义如下:K K K键盘操作方式0 0 0外部译码,双键互锁0 0 1内部译码,双键互锁0 1 0外部译码,N键巡回0 1 1内部译码,N键巡回1 0 0外部译码,传感器方式1 0 1内部译码,传感器方式1 1 0选通输入,外部译码显示扫描1 1 1选通输入,内部译码显示扫描根据键盘操作方式的选择,在选择外部译码方式时可外接88的键盘或88的传感器矩阵。在选择内部译码方式时,只能接48的键盘或48的传感器矩阵。此时显示器只能接4个8段的发光二极管显示器。在键盘方式时,SHIFT,CNTL/STB作为两个独立的键,其键值直接送入8279,在选用选通工作方式时,CNTL/STB为选通脉冲输入端,而RL0RL7为信号输入口。程序时钟设置此命令用来设置分频系数,其格式为:001PPPPP001为此命令的特征位。PPPPP为分频系数,其数值为231,用来产生一个100KHz的内部时钟。在复位后自动定为31。读FIFO/传感器RAM,其格式为010AIAAA010为此命令的特征位。AI为地址自动加1标志,AAA为FIFO/传感器RAM地址。在键扫描方式时,每次读取数据总按先进先出的原则依次读出,而与AI、AAA无关。在传感器方式及选通方式时,AAA为RAM地址。当AI=0时,CPU对地址为AAA的单元读数,读完后地址不变。当AI=1时,CPU对地址为AAA的单元读数,读完后其地址自动加1 。读显示RAM此命令用来设置读显示器RAM,其格式为:011AIAAAA011为此命令的特征位。AI、AAAA分别为地址自动加1 标记及显示器RAM的地址。写显示RAM此命令用来设置写显示器RAM,其格式为:100AIAAAA100为此命令的特征位。AI、AAAA分别为地址自动加1 标记及显示器RAM的地址。显示器写入禁止/空格此命令用来禁止数据写入显示器RAM或向显示器RAM写入空格,其格式为:101IWAIWBBLABLB101为此命令的特征位。此命令用在将一个8段显示分作两个4段显示的情况,在IWA置1、IWB置0时,将屏蔽半字节A,即CPU向显示器RAM写入数据时,只能更改半字节B,而不能更改半字节A。此时显示器仅将OUTB03的部分更改,而由OUTA03控制的显示器保持不变,即A的部分不允许新的数据写入。同样,当IWA=0、IWB=1时,屏蔽半字节B。如果要求显示一空格,则可将BLA置成1或BLB置成1,这时由OUTA或OUTB控制的显示器显示空格。如果要求两个半字节都为空格,则应将BLA与BLB均置1。清除此命令用来清除显示器RAM和FIFO状态。其格式为:110CDCDCDCFCA110为此命令的特征位。CD CD CD用来置清除方式,具体如下:CD CD CD1 0 显示器RAM清为全01 1 0显示器RAM置成十六进制数20H1 1 1显示器RAM置成全10此时为“1”时,允许清除显示器RAM(或用CA=1)显示器RAM清为全0或置成全1,要看硬件的连接来决定。如显示器在高电平时点亮,低电压时不亮,则应清为全0,当显示器在低电平时点亮,高电平时不亮,则应在清除时将其置为全1。CF=1时,清除FIFO状态,并将中断复位,对于传感器RAM的指示器也置为0。CA=1为CD与CF的结合,此时清除显示器RAM以及FIFO状态。中断结束/出错方式设置此命令用来置中断结束及出错方式,其格式为:DUS/EOUFNNNNNN为FIFO RAM中字符的个数;F为FIFO RAM满标记;U为FIFO RAM空标记,在FIFO RAM中无字符时,CPU读FIFO RAM时置位;0为FIFO RAM溢出标记。在FIFO RAM满时,再送入一个字符,此位置1.S/E 在传感器方式时,表示至少有一个传感器闭合,在特殊出错方式时,表示有多个按键同时按下。DU 在清显示或总清命令执行期间此位为“1”,此时不可对显示器RAM写入数据。从FIFO/传感器RAM中读回的数据格式根据键盘工作方式和传感器工作方式有所不同。在键盘工作方式时,其格式为:D7D6D5D4D3D2D1D0CNTLSHIFT行 号列 号CNTL指CNTL键的状态,按下为0,未按为1。SHIFT指SHIFT键的状态,按下为0,未按为1。行号指按下的键所在的行号,即扫描计数值。 列号指按下的键所在的列号,由RL07的状态决定。在传感器方式和选通输入方式时,其格式为:D7D6D5D4D3D2D1D0RL7RL6RL5RL4RL3RL2RL1RL0此数据由输入信号RL07决定。根据上述命令的设置,8279的扫描方式分为内部译码和外部译码两种。在内部译码方式时,扫描输出信号SL03经驱动后可直接对显示器及键盘进行扫描。此时,只允许外接4个8段的显示器以及48的键盘。在外部译码方式时,扫描输出信号SL03需经译码、驱动后,才能对显示器及键盘进行扫描。此时,只允许外接8或16个8段的显示器以及88的键盘。根据显示方式的编程,可分为左边输入与右边输入两种。当选择为左边输入方式时,写入数据的RAM地址与显示器从左到右的位置相对应。RAM地址0对应于最左边的显示器,而RAM地址15(在置为8个显示器时为7)则对应于最右边的一个显示器。当写命令置AI=1时,则按设定的地址AAAA写入数据,写入后地址自动加1,如果加1后地址大于17(或是7),则再从地址0开始送入。例如选择8个显示器,从左边输入。若设定AI=1,AAAA=0000,依次送入10个字符,其过程如下:01234567显示器RAM地址第1次送入1第2次送入12第8次送入12345678第9次送入92345678第10次送入910345678显示器位置12345678若设定AI=1,AAAA=0000,先送入2个字符:01234567显示器RAM地址第1次送入1第2次送入12然后设定AI=1,AAAA=0101,再送入2个字符:第3次送入123第4次送入1234当选择为右边输入时,显示器RAM的地址和实际显示器的不相对应,在初始状态,显示器RAM的地址0相当于最右边的显示器,以后每写入一个数,地址向左移动一次。例如选择8个显示器,从右边输入。若设定AI=1,AAAA=0000,依次送入10个字符。此时,第1个字符送入最右边的显示器,地址自动加1后,第2个字符送入显示器RAM的地址1.此时,地址0向左移一格,即第1个字符移到右面第2 个,显示器RAM 地址1在最右边的显示器,即第2个字符仍送入到最右面。在送入第8个字符后,显示器从左到右为1到8的次序,然后第9个字符送入RAM地址0,仍为最右面。而第1个字符被消除。第10个字符再送入后,第2个字符被消去,在显示器为3到10的次序。12345670显示器RAM地址第1次送入123456701第2次送入1201234567第8次送入1234567812345670第9次送入2345678923456701第10次送入345678910在右边输入时,由于显示器RAM地址与实际显示器位置不相对应,因而在几次写入以后往往很难确定此地址与实际位置的关系。在使用时为避免不必要的差错,应尽可能地从AAAA=0开始写入。根据键盘方式的设置,可置为双键互锁方式和N键巡回方式。在双键互锁方式时,在只有一个键按下的情形,将此键值连同CNTL及SHIFT的状态一起送入FIFO RAM。若有两个或两个以上的键都按下,如果一个按键在其它任何一个键释放之前先释放,则不管此键是否比其它按键先按下,都被忽略。如此键释放之前,其它的键均已释放,尽管此键可能是较迟按下的,此键的键值仍被差额主FIFO RAM。N键巡回方式时,对于每一个按下的键均将其键值送入FIFO RAM,此时。若用结束中断/错误方式置位命令时,对于多重键则设置出错标记。在传感器方式中,传感器开关的状态直接送到传感器RAM,在传感器阵列扫描结束时,如检测出任一只传感器状态发生变化,则中断申请信号IRQ变为高电平。在读数据时,若AI=0,则第一次读出后,IRQ变为低电平;若AI=1,则就用结束中断命令来清除中断申请信号。对8279进行编程可分为初始化,向显示器RAM写入数据以及读FIFO传感器RAM数据三部分。初始化过程包括清除命令、设定时钟分频系数、键盘显示器工作方式设置。在执行清除命令过程中,如果向显示器RAM写入数据则无效。向显示器写入数据必须在设置写命令后进行,在设置写命令后允许输入多个数据。读FIFO/传感器RAM时,应先读出FIFO状态字,若在FIFO/传感器RAM中有数据,才能进行读操作。第二章 采样与滤波2.1 采样系统 ADC0809是8路输入通道,8位A/D转换器,即分辨率为8位。2)具有转换起停控制端。3)转换时间为100s(时钟为640kHz时),130s(时钟为500kHz时)4)单个+5V电源供电 5)模拟输入电压范围0+5V,不需零点和满刻度校准。6)工作温度范围为-40+85摄氏度。7)低功耗,约15mW。 ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图1322所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。 ADC0809芯片有28条引脚,采用双列直插式封装。下面说明各引脚功能。IN0IN7:8路模拟量输入端。2-12-8:8位数字量输出端。ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路 。ALE:地址锁存允许信号,输入,高电平有效。START:A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。EOC: A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。REF(+)、REF(-):基准电压。Vcc:电源,单一+5V。GND:地。 ADC0809的工作过程:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。转换数据的传送 A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。为此可采用下述三种方式。(1)定时传送方式 对于一种A/D转换其来说,转换时间作为一项技术指标是已知的和固定的。例如ADC0809转换时间为128s,相当于6MHz的MCS-51单片机共64个机器周期。可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。(2)查询方式 A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。 (3)中断方式 把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。 不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。2.2 数字滤波 数字滤波器与模拟滤波器相比有以下优点: (1)数字滤波器是用软件实现的,不需要增加硬设备,因而可靠性高、稳定性好,不存在阻抗匹配问题。 (2)模拟滤波器通常是各通道专用,而数字滤波器则可多通道共享,从而降低了成本 (3)数字滤波器可以对频率很低(如0.01 Hz)的信号进行滤波,而模拟滤波器由于受电容容量的限制,频率不可能太低。 (4)数字滤波器可以根据信号的不同,采用不同的滤波方法或滤波参数,具有灵活、方便、功能强的特点。10种软件滤波方法的示例程序 OurWay 发表于 2005-9-2 22:24:00 10种软件滤波方法的示例程序(JKRL)假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();1、限副滤波A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时判断:如果本次值与上次值之差A,则本次值无效,放弃本次值,用上次值代替本次值 B、优点:能有效克服因偶然因素引起的脉冲干扰。 C、缺点:无法抑制那种周期性的干扰,平滑度差。 /* A值可根据实际情况调整 value为有效值,new_value为当前采样值 滤波程序返回有效的实际值 */#define A 10char value;char filter() char new_value; new_value = get_ad(); if ( ( new_value - value A ) | ( value - new_value A ) return value; return new_value; 2、中位值滤波法A、方法:连续采样N次(N取奇数),把N次采样值按大小排列,取中间值为本次有效值。 B、优点:能有效克服因偶然因素引起的波动干扰,对温度、液位的变化缓慢的被测参数有良好的滤波效果。 C、缺点:对流量、速度等快速变化的参数不宜。/* N值可根据实际情况调整 排序采用冒泡法*/#define N 11char filter() char value_bufN; char count,i,j,temp; for ( count=0;countN;count+) value_bufcount = get_ad(); delay(); for (j=0;jN-1;j+) for (i=0;ivalue_bufi+1 ) temp = value_bufi; value_bufi = value_bufi+1; value_bufi+1 = temp; return value_buf(N-1)/2;3、算术平均滤波法A、方法:连续取N个采样值进行算术平均运算。N值较大时:信号平滑度较高,但灵敏度较低;N值较小时:信号平滑度较低,但灵敏度较高。N值的选取:一般流量,N=12;压力:N=4 B、优点:适用于对一般具有随机干扰的信号进行滤波,这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动。 C、缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用,比较浪费RAM。#define N 12char filter() int sum = 0; for ( count=0;countN;count+) sum + = get_ad(); delay(); return (char)(sum/N);4、递推平均滤波法(又称滑动平均滤波法)A、方法:把连续取N个采样值看成一个队列,队列的长度固定为N,每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则),把队列中的N个数据进行算术平均运算,就可获得新的滤波结果。N值的选取:流量,N=12;压力:N=4;液面,N=412;温度,N=14#define N 12 char value_bufN;char i=0;char filter() char count; int sum=0; value_bufi+ = get_ad(); if ( i = N ) i = 0; for ( count=0;countN,count+) sum = value_bufcount; return (char)(sum/N);5、中位值平均滤波法(又称防脉冲干扰平均滤波法)A、方法:相当于“中位值滤波法”+“算术平均滤波法”。连续采样N个数据,去掉一个最大值和一个最小值,然后计算N-2个数据的算术平均值。N值的选取:314B、优点:融合了两种滤波法的优点,对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。 C、缺点:测量速度较慢,和算术平均滤波法一样,比较浪费RAM。#define N 12char filter() char count,i,j; char value_bufN; int sum=0; for (count=0;countN;count+) value_bufcount = get_ad(); delay(); for (j=0;jN-1;j+) for (i=0;ivalue_bufi+1 ) temp = value_bufi; value_bufi = value_bufi+1; value_bufi+1 = temp; for(count=1;countN-1;count+) sum += valuecount; return (char)(sum/(N-2);6、限幅平均滤波法A、方法:相当于“限幅滤波法”+“递推平均滤波法”,每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理。 B、优点:融合了两种滤波法的优点,对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。 C、缺点:比较浪费RAM。/*/ 略 参考子程序1、37、一阶滞后滤波法A、方法:取a=01,本次滤波结果=(1-a)*本次采样值+a*上次滤波结果。 B、优点:对周期性干扰具有良好的抑制作用,适用于波动频率较高的场合。 C、缺点: 相位滞后,灵敏度低,滞后程度取决于a值大小,不能消除滤波频率高于采样频率的1/2的干扰信号。/* 为加快程序处理速度假定基数为100,a=0100 */#define a 50char value;char filter() char new_value; new_value = get_ad(); return (100-a)*value + a*new_value; 8、加权递推平均滤波法A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权。通常是,越接近现时刻的数据,权取得越大。给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低。 B、优点:适用于有较大纯滞后时间常数的对象和采样周期较短的系统 C、缺点:对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号不能迅速反应系统当前所受干扰的严重程度,滤波效果差。/* coe数组为加权系数表,存在程序存储区。*/#define N 12char code coeN = 1,2,3,4,5,6,7,8,9,10,11,12;char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12;char filter() char count; char value_bufN; int sum=0; for (count=0,countN;count+) value_bufcount = get_ad(); delay(); for (count=0,countN;count+) sum += value_bufcount*coecount; return (char)(sum/sum_coe);9、 消抖滤波法A、方法:设置一个滤波计数器将每次采样值与当前有效值比较:如果采样值当前有效值,则计数器清零如果采样值当前有效值,则计数器+1,并判断计数器是否=上限N(溢出),如果计数器溢出,则将本次值替换当前有效值,并清计数器 。 10、 B、优点:对于变化缓慢的被测参数有较好的滤波效果,可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动。 11、 C、缺点:对于快速变化的参数不宜,如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统。#define N 12char filter()12、 13、 char count=0;14、 char new_value;15、 new_value = get_ad();16、 while (value !=new_value);17、 18、 count+;19、 if (count=N) return new_value;20、 delay();21、 new_value = get_ad();22、 23、 return value; 24、 2.3关于温度控制的PID算法 用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其他技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。即当我们不完全了解一个系统和被控对象或不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。PID控制,实际中也有PI和PD控制。PID控制器就是根据系统的误差,利用比例、积分、微分计算出控制量进行控制的。 比例(P)控制:比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。 比例调节作用:是按比例反应系统的偏差,系统一旦出现了偏差,比例调节立即产生调节作用用以减少偏差。比例作用大,可以加快调节,减少误差,但是过大的比例,使系统的稳定性下降,甚至造成系统的不稳定。积分(I)控制:在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。 积分调节作用:是使系统消除稳态误差,提高无差度。因为有误差,积分调节就进行,直至无差,积分调节停止,积分调节输出一常值。积分作用的强弱取决与积分时间常数Ti,Ti越小,积分作用就越强。反之Ti大则积分作用弱,加入积分调节可使系统稳定性下降,动态响应变慢。积分作用常与另两种调节规律结合,组成PI调节器或PID调节器。微分(D)控制:在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。 自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入“比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“项”,它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例+微分(PD)控制器能改善系统在调节过程中的动态特性。 微分调节作用:微分作用反映系统偏差信号的变化率,具有预见性,能预见偏差变化的趋势,因此能产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除。因此,可以改善系统的动态性能。在微分时间选择合适情况下,可以减少超调,减少调节时间。微分作用对噪声干扰有放大作用,因此过强的加微分调节,对系统抗干扰不利。此外,微分反应的是变化率,而当输入没有变化时,微分作用输出为零。微分作用不能单独使用,需要与另外两种调节规律相结合,组成PD或PID控制器5、PID控制器的参数整定 PID控制器的参数整定是控制系统设计的核心内容。它是根据被控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。PID控制器参数整定的方法很多,概括起来有两大类:一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。PID控制器参数的工程整定方法,主要有临界比例法、反应曲线法和衰减法。三种方法各有其特点,其共同点都是通过试验,然后按照工程经验公式对控制器参数进行整定。但无论采用哪一种方法所得到的控制器参数,都需要在实际运行中进行最后调整与完善。现在一般采用的是临界比例法。利用该方法进行 PID控制器参数的整定步骤如下:(1)首先预选择一个足够短的采样周期让系统工作;(2)仅加入比例控制环节,直到系统对输入的阶跃响应出现临界振荡,记下这时的比例放大系数和临界振荡周期;(3)在一定的控制度下通过公式计算得到PID控制器的参数。在电子数字计算机直接数字控制系统中,PID控制器是通过计算机PID控制算法程序实现的。计算机直接数字控制系统大多数是采样-数据控制系统。进入计算机的连续-时间信号,必须经过采样和整量化后,变成数字量,方能进入计算机的存贮器和寄存器,而在数字计算机中的计算和处理,不论是积分还是微分,只能用数值计算去逼近。 在数字计算机中,PID控制规律的实现,也必须用数值逼近的方法。当采样周期相当短时,用求和代替积分,用差商代替微商,使PID算法离散化,将描述连续-时间PID算法的微分方程,变为描述离散-时间PID算法的差分方程。数字PID 的实现 在连续-时间控制系统(模拟PID 控制系统)中,PID 控制器应用得非常广泛。其设计技术成熟,长期以来形成了典型的结构,参数整定方便,结构更改灵活,能满足一般的控制要求。随着计算机的快速发展,人们将计算机引入到PID 控制领域,也就出现了数字式PID 控制。 由于计算机基于采样控制理论,计算方法也不能沿袭传统的模拟PID 控制算法(如公式1 所示),所以必须将控制模型离散化,离散化的方法:以T 为采样周期,k 为采样序号,用求和的形式代替积分,用增量的形式(求差)代替微分,这样可以将连续的PID 计算公式离散: (2)式1 就可以离散为: (3)或者: (4) 这样就可以让计算机或者单片机通过采样的方式实现PID 控制,具体的PID 控制又分为位置式PID 控制和增量式PID 控制,公式4 给出了控制量的全部大小,所以称之为全量式或者位置式控制;如果计算机只对相邻的两次作计算,只考虑在前一次基础上,计算机输出量的大小变化,而不是全部输出信息的计算,这种控制叫做增量式PID 控制算法,其实质就是求的大小,而 k =k -k-1 ;所以将式4 做自减变换有: (5)其中 温度控制PID 算法设计 本设计利用了上面所介绍的位置式PID算法,将温度传感器采样输入作为当前输入,然后与设定值进行相减得偏差ek,然后再对之进行PID 运算产生输出结果fout,然后让fOut 控制定时器的时间进而控制加热器。为了方便PID 运算,首先建立一个PID 的结构体数据类型,该数据类型用于保存PID 运算所需要的P、I、D 系数,以及设定值,历史误差的累加和等信息:typedef struct PIDfloat SetPoint; / 设定目标 Desired Valuefloat Proportion; / 比例系数 Proportional Constfloat Integral; / 积分系数 Integral Constfloat Derivative; / 微分系数 Derivative Constint LastError; / 上次偏差int SumError; / 历史误差累计值 PID;PID stPID; / 定义一个stPID 变量 下面是PID 运算的算法程序,通过PID 运算返回fOut,fOut 的值决定是否加热,加热时间是多少。PID 运算的C 实现代码:float PIDCalc( PID *pp, int NextPoint )int dError,Error;Error = pp-SetPoint*10 - NextPoint; / 偏差,设定值减去当前采样值pp-SumError += Error; / 积分,历史偏差累加dError = Error-pp-LastError; / 当前的积分,偏差pp-PrevError = pp-LastError; / 保存pp-LastError = Error;+ pp-Integral * pp-SumError / 积分项- pp-Derivative * dError / 微分项)
展开阅读全文