博文
自动控制所面临的挑战(2006-09-22 17:20:00)
摘要:
自动控制所面临的挑战
作者:冯纯伯 (东南大学)
冯纯伯,自动控制专家。1928年4月16日出生于江苏金坛。1953年于哈尔滨工业大学电机系研究生毕业。1958年在列宁格勒工业大学获技术科学副博士学位。历任东南大学自动化研究所所长,研究生院副院长。1994年获俄罗斯联邦自然科学院外籍院士称号,1995年当选为中国科学院院士。主要从事自动控制领域研究。自动控制学科自建立以来一直就是一门很活跃的学科。二战期间由于军工技术的需要,以伺服系统为主要内容的反馈控制得到了迅速发展。二战之后的冷战期间军工技术竞争剧烈,特别是各类飞行器对控制系统提出了很高的要求。在此形势的推动下以状态变量为基础的所谓现代控制理论得以建立,它的一个主要特点是依赖于精确的数学分析计算。随着时间的推移,自动控制应用的领域愈来愈扩大,无论国防、工农业生产、社会经济、环保等等,凡是存在系统的地方都宜用系统学的观点加以分析,都可用控制理论方法加以适当的人为改造和处理。在这种日益扩大的应用过程中,人们发现原有的所谓现代控制理论有很大的局限性。这就提出了新的更高的要求,当前计算机科学和技术的高度发展也为更复杂更高层次的控制理论的发展提供了物质条件,因此,国际上普遍认为当前控制理论面临新的挑战,酝酿着新的发展。概括地说,当前控制理论所要解决的主要问题是研究复杂系统的有效控制。所谓复杂系统可认为是具有以下一些主要特征的系统:1.系统具有很强的时变和非线性。几乎任何真实系统都具有非线性,只是强弱不同而已。为了实现深层次、高性能的控制,就不能不充分考虑系统特性的时变性和非线性。举例来说,我国引进的SU-27战斗机可实现超机动飞行,其攻角可在极短时间内达到接近90°的程度,在此情况下它的气动特性全变了,用常规的线性化处理方法无法设计这样的控制系统。在民用方面,许多化工过程都有很强的非线性,其特性常随工况改变而改变,有时环境变了,特性起根本性的变化,即使仍然回到原来的环境和条件,原来的工况也无法恢复,造成灾难性后果,对于这类对象常规的PID调节常常不能满足要求。众所周知,由于时变非线性动态方程没有通用的解法,因此和线性定常动态系统不同,远远未能建立起有效的控制系统设计方法,近年来由于微分几何、微分代......
标准的PID处理例程(C)(2006-09-22 17:15:00)
摘要:
标准的PID处理例程
/*======================================================================================== 这是从网上找来的一个比较典型的PID处理程序,在使用单片机作为控制cpu时,请稍作简化,具体的PID参数必须由具体对象通过实验确定。由于单片机的处理速度和ram资源的限制,一般不采用浮点数运算,而将所有参数全部用整数,运算到最后再除以一个2的N次方数据(相当于移位),作类似定点数运算,可大大提高运算速度,根据控制精度的不同要求,当精度要求很高时,注意保留移位引起的“余数”,做好余数补偿。这个程序只是一般常用pid算法的基本架构,没有包含输入输出处理部分。=============================================================================================*/#include <string.h>#include <stdio.h>/*==================================================================================================== PID Function The PID (比例、积分、微分) function is used in mainly control applications. PIDCalc performs one iteration of the PID algorithm. While the PID function works, main is just a dummy program showing a typical usage.=====================================......
增量式PID控制算法程序 (A51)(2006-09-22 17:12:00)
摘要:;********增量式PID控制算法程序***********;T、TD、TI、KP依次从30H,33H,36H,39H开始。;A,B,C的值依次存在BLOCK1,BLOCK2,BLOCK3的地址里; 这里R(k)给的是定值;ORG 0000HBLOCK1 EQU 43H ;A,B ,CBLOCK2 EQU 46HBLOCK3 EQU 49HUK EQU 4CH ;存结果UKRK EQU 50HEK EQU 53H ;存放偏差值E(k)的始址EK1 EQU 56H ;存放E(k-1)的始址EK2 EQU 59H ;存放E(k-2)的始址CK EQU 5CH ;采样数据始址BUFF EQU 60H ;暂存区BUFF1 EQU 63HBUFF2 EQU 66HREC EQU 69HTEST:MOV RK,#01H ;常数Rk的BCD码浮点数MOV RK+1,#12H ;1.25MOV RK+2,#50HMOV 3CH,#01H ;常数1的BCD码浮点数MOV 3DH,#10HMOV 3EH,#00HMOV 40H,#01H ;常数2的BCD码浮点数MOV 41H,#20HMOV 42H,#00HMOV 30H,#01H ;T的BCD 码浮点数MOV 31H,#23H ;2.34MOV 32H,#40HMOV 33H,#01H ;Td的BCD码浮点数MOV 34H,#35H ;3.54MOV 35H,#40HMOV 36H,#01H ;Ti的BCD码浮点数MOV 37H,#11H ;1.12MOV 38H,#20HMOV 39H,#01H ;Kp的BCD码浮点数MOV 3AH,#12H ;1.25MOV 3BH,#50HMOV R0,#RK ;指向BCD码浮点操作数LCALL BTOF ;将其转换成二进制浮点操作数MOV R0,#3CHLCALL BTOFMOV R0,#40HLCALL BTOFMOV R0,#39HLCALL BTOFMOV R0,#36H ;指向BCD码浮点操作数TiLCALL BTOF ;将其转换成二进制浮点操作数MOV R0,#33H ;指向BCD码浮点操作数TdLCALL BTOF ;将其转换成二进制浮点操作数MOV R0,#30H ;指向BCD码浮点操作数TLCALL BTOF ;将其转换成二进制浮点操作数MOV R1, #BUFF1 ;保......
积分分离PID控制算法程序 (A51)(2006-09-22 17:11:00)
摘要:;**********积分分离PID控制算法程序 ********;T、TD、TI、KP依次从30H,33H,36H,39H开始。;A,B,C,A',的值依次存在BLOCK1,BLOCK2,BLOCK3 BLOCK4 的地址里;这里B'与C值相同; 这里R(k)给的是定值ORG 0000HE EQU 20H ; 一阈值GK EQU 23H ;G(k)GK1 EQU 26H ;G(k-1)FK EQU 29H ;F(k)FK1 EQU 2CH ;F(k-1)BLOCK1 EQU 50H ;ABLOCK2 EQU 53H ;BBLOCK3 EQU 56H ;CBLOCK4 EQU 5AH ;A'UK EQU 5DH ;存放结果BUFF EQU 43H ;暂存区BUFF1 EQU 46HBUFF2 EQU 49HBUFFR0 EQU 4CHREC EQU 63H ;采样次数RK EQU 66H ;R(k)CK EQU 69H ;采样数据始址EK EQU 6CH ;存放偏差值E(k)的始址EK1 EQU 70H ;存放E(k-1)的始址TEST: MOV RK,#01H ;常数Rk 1.25的BCD码浮点数MOV RK+1,#12HMOV RK+2,#50H; MOV E,#7EH ;设定一阈值0.001的BCD码浮点数; MOV E+1,#10H; MOV E+2,#00HMOV E,#00H ;阈值为0.3MOV E+1,#30HMOV E+2,#00HMOV 3CH,#01H ;常数1的BCD码浮点数MOV 3DH,#10HMOV 3EH,#00HMOV 40H,#01H ;常数2的BCD码浮点数MOV 41H,#20HMOV 42H,#00HMOV 30H,#01H ;T 2.34的BCD 码浮点数MOV 31H,#23HMOV 32H,#40HMOV 33H,#01H ;Td 3.54的BCD码浮点数MOV 34H,#35HMOV 35H,#40HMOV 36H,#01H ;Ti 1.12的BCD码浮点数MOV 37H,#11HMOV 38H,#20HMOV 39H,#01H ;Kp 1.25的BCD码浮点数MOV 3AH,#12HMOV 3BH,#50HMOV R0,#E ; 将其转换成二进制浮点操作数LCALL BTOFMOV R0,#RKLCALL BTOF......
PID控制C源程序(2006-09-22 17:08:00)
摘要:
PID控制C源程序
BC31 TC30 编译过,可运行。 #include <stdio.h> #include<math.h> struct _pid { int pv; /*integer that contains the process value*/ int sp; /*integer that contains the set point*/ float integral; float 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 setpoint. *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; } /*-------------------------......
