计算机控制课程设计

《计算机控制》课程设计报告

题目: 串联校正控制器设计 姓名: 学号:

2013年12月2日

4

《计算机控制》课程设计任务书

指导教师签字: 系(教研室)主任签字:

2013年 11 月 25 日

1、 模拟控制器的设计

原系统的开环传递函数为

K

,单位负反馈。

s (s +1)(s +4)

根据题目要求,系统阻尼比为0.5,无阻尼自然振荡频率2rad/s。因此期望主导极点为

s d =-ξωn ±j ω=-1±

用Matlab 绘制其根轨迹如下图所示:

R oot Locus

a g i n a r y A x i s (s e c o n d s ) I m

-1

----

-1

R eal A xi s (seconds )

图 1 校正前系统的根轨迹

由上图可知,期望闭环极点位于根轨迹左侧,可以采用相位超前校正,使根轨迹左移。

由图可见,开环几点之一,s =-1正好位于期望闭环极点s d 垂线下的负实轴上,如果令校正装置的零点设在紧靠s =-1这个开环极点的左侧,另z c =-1.2,这样做往往能增大s d 成为闭环主导极点的可能性。运用Matlab 编程求出对应于零点z c =-1.2的极点为p c =-5,因此校正后系统的开环传递函数为:

G (s ) =

K (s +1.2)

s (s +1)(s +2)(s +5)

其根轨迹如图2所

-1

a g i n a r y A x i s (s e c o n d s I m )

----

R eal A xi s (seconds )

-1

图 2 校正后系统根轨迹

根据幅值条件,可以求出系统工作于点s d 的K 值为30。 原系统及校正后系统的阶跃响应如图3所示:

1. S t ep R esponse

1. p l i t u d e A m

0. 0. 0. 0. [**************]20

Ti m e (seconds)

图 3 原系统阶跃响应

4

1. S t ep R esponse

1. p l i t u d e A m

0. 0. 0. 0. [**************]20

Ti m e (seconds)

图 4 校正后系统的阶跃响应

可以看出原系统阶跃响应单调递增变化,为过阻尼的情况;校正后系统衰减震荡,为欠阻尼,由其根轨迹曲线可以看出,工作点近似位于期望闭环极点上。至此,模拟控制器设计完毕。

2、 器件选取及电路设计

(1) 控制器选用STC89C52单片机,晶振选取12MHz 。P0口作为普通I/O口使用,故需接入上拉电阻。

(2) A/D选用ADC0804。其分辨率为8位,转换时间为100us ,输入电压范围为0~5V。芯片内部具有三态输出数据锁存器,可直接连接在数据总线上。

(3) D/A选用DAC0832。其为8位D/A转换器,其转换时间为1us 。数据输入可以采用双缓冲、单缓冲、或直通方式,以便适用于各种电路的需要。工作电压为+5V~+15V,基准电压为范围为-10V~+10V。D/A转换结果采用电流形式输出,可通过外接运算放大器将其转换成电压。

由上述器件可以计算出,完成一次A/D、D/A转换所需要的时间为101us ;单片机每执行一条指令所需时间为0.083us ,给定采样时间0.01s ,即10000us ,足够完成程序运算与A/D、D/A的转换。原理图如图5所示:

图 5 数字控制器原理图

3、 数字控制器的设计以及被控对象的离散化

由模拟控制器到数字控制器的实现有许多方法,比如一阶前向差分、一阶后向差分、双线性变换法、零极点匹配法等等。考虑到双线性变换发使用方便且有一定精度,故选取其作为离散化方法。上一步选取了采样周期为0.01s ,由Matlab 运算得到离散化之后的控制器脉冲传函为:

G c (z ) =

0.9815 z - 0.9698

z - 0.9512

求得相应的差分方程为:u (k ) =0.9815e (k ) -0.9698(k -1) +0.9512u (k -1) 。

被控对象采用零阶保持器离散化,最终的离散化系统方框图如图6所示:

图 6 离散系统方框图

用simulink 对系统进行仿真,可得到系统的阶跃响应曲线:

图 7 simulink仿真图

图 8 离散系统阶跃响应曲线

与原系统相比,相差不大。下面给出离散化前后的bode 图:

图 9 离散化前后bode 图

上图中,实线为离散前系统的bode 图,点画线为离散化之后的bode 图,可以看出,两者差别不大,可以满足要求。

4、 程序设计

程序设计的总体思路是采用外部中断的方式进行。首先启动A/D转换,当转换完成时,触发单片机外部中断,进入中断服务子程序程序。在中断服务程序中,进行控制量的求取,然后再次启动A/D转换,中断返回。D/A采用直通工作方式,即只需要变化数据输入端,其模拟输出就紧跟着变化。由于D/A的转换时间为1us ,而A/D转换时间为100us ,故D/A芯片有足够的时间完成转换。

使用keil 开发环境进行程序编写调试。并且利用keil 的软件调试模式进行计算中断服务子程序运行一次所需要的时间。进而可以计算出每个周期内采样、转换与计算输出所需的总时间,然后与确定的采样周期相比较,确定采样周期的选取是否符合条件。

软件调试界面如图10所示:

图 10 Keil软件调试模式

分别对进入中断以及中断返回进行计时,即可得到中断服务子程序运行时间,如图11所示:

图 11 中断服务程序运行时间

由上图可以计算中断服务程序运行的时间为:

0.0011554-0.01076=0.000794s

A/D转换时间为100us ,故每周期总共用时为:

0.000794+0.001=0.001794s

故所选取的采样周期0.01s 完全足够其完成采样与运算。

程序流程图如下所示:

图 12 软件流程图

5、 心得体会

本次课程设计持续一周时间,在这一周内,我完成了从系统设计到控制器的具体编程实现等工作,有很大的收获。这次课设将以前学过的很多知识串联起来,形成整体化、系统化的思想,提高了我们综合运用所学知识解决实际问题的能力,也提升了我们有目的地查阅资料解决问题的能力。当然,这次课程设计更多的是让我识到自己的不足。作为一名大学生,掌握的知识确很过时,会用的只是课程中讲过的一些很简单很基本的芯片和控制器,不能与最新的只知识接轨,知识结构的老化,对所学专业认识的浅显,纸上谈兵,缺乏实践经验等等都是我们亟待解决的问题。在以后的学习工程中,我一定会积极拓宽自己的视野,多接触一些新知识,丰富自己,提升自己。我们的路还有很长。

6、 参考文献

[1] 张晋格主编. 自动控制原理. 哈尔滨:哈尔滨工业大学出版社,2003.

[2] 刘建昌等主编. 计算机控制系统. 北京:科学出版社,2009.

[3] 张毅刚主编. 单片机原理及应用. 北京:高等教育出版社,2004.

[4] 张晋格,陈丽兰主编. 控制系统CAD —基于MA TLAB 语言. 北京:机械工业出版社,2010.

[5] 郭天祥编著.51单片机C 语言教程. 北京:电子工业出版社,2009.

7、 附录

Matlab 程序:

程序一:

%%校正前根轨迹

clc,clear,close all ;

num=1;

den=conv([1 1 0],[1 4]);

G=tf(num,den);

figure(1);

rlocus(G);

T=feedback(G,1);

figure(2);

step(T,20);

程序二:

%%求取极点位置

clc,clear,close all ;

x=-20:0.001:-1;

angs=angle(-1+sqrt(3)*1i-(-1.2))*180/pi-90-angle(-1+sqrt(3)*1i-0)*180/pi-angle(-1+sqrt(3)*1i-(-4))*180/pi-angle(-1+sqrt(3)*1i-x)*180/pi;

p=spline(angs,x,-180)

程序三:

%%校正后根轨迹还未进行离散化

clc,clear,close all ;

G=tf([1 1.2],conv([1 1 0],[1 9 20]));

figure(1);

rlocus(G)

s=-1+sqrt(3)*1i;

k=abs(s*(s+1)*(s+4)*(s+5)/(s+1.2))

Gc=tf([k 1.2*k],[conv([1 1 0],[1 9 20])]);%期望极点处开环传函

T=feedback(Gc,1);%期望极点处闭环传函

figure(2);

step(T,20)

程序四:

%运用双线性变换,进行离散化, 判稳???

clc,clear,close all ;

num=[1 1.2];

den=[1 5];

Gs=tf(num,den);%连续系统的控制器

Gz=c2d(Gs, 0.01, 'tustin' ) %双线性离散化之后的控制器

Gp=tf([30],conv([1 1 0],[1 4]));%连续系统的被控对象传函

Gpz=c2d(Gp,0.01,'zoh' ); %采用零阶保持器离散化之后的被控对象脉冲传函

sysc=Gs*Gp;

sysd=Gz*Gpz;

%画出离散化前后系统的bode 图,比较性能差异

figure(1);

bode(sysc, 'r-' , sysd, 'b-.' );

axis();

grid;

T=feedback(sysd,1);%离散系统的闭环传函(单位反馈)

figure(2),step(T,20);

C 源程序:

#include

#include

#define uint unsigned int

sbit ADRD=P2^0;

sbit ADWR=P2^1;

sbit INTR=P2^2;

static float ek=0;

static float ek_1=0;

static float uk=0;

static float uk_1=0; //以上四个变量存储用于计算每次输出的值

void Init()

{

P0=0X00;//由于P0为D/A的输入口,而D/A为直通工作方式故初始化其为0 P1=0x00;//P1口为读A/D的数据口,将其初始化为全1

P2=0xff;//P2口控制A/D的读写端,将其初始化为全1,使A/D芯片不工作 P3=0xff;

}

void main()

{

Init(); //初始化 注意,一定要先声明变量,在进行其他操作,否则会出现许多奇怪的错误

TMOD=0x01;//设置定时器TO 为工作方式1

TH0=(65536-10000)/256;

TL0=(65535-10000)%256;

PT0=1;//设置定时器中断0优先级最高

EA=1; //开总中断

ET0=1;//开外部中断0

TR0=1;//启动定时器T0

while(1);//主程序进入循环,等待中断产生

}

void T0_time(void) interrupt 1

{

TH0=(65536-10000)/256; //重装初值

TL0=(65535-10000)%256;

INTR=1;//先将其置高,A/D转换结束时,其将变为低电平

//下面启动A/D转换

ADWR=1;

_nop_();

ADWR=0;//拉低WR ,启动A/D转换

_nop_();

ADWR=1;

while(INTR); //INTR低电平表示A/D转换完成

//下面进行读取A/D,并赋值给e(k)

P1=0xff;//P1、P2、P3口均为准双向I/O口,读取之前要向其先写1 ADRD=1;

_nop_();

ADRD=0;

_nop_();

ek=P1;

ADRD=1;

//下面计算u(k)的输出值

uk=0.9815*ek-0.9698*ek_1+0.9512*uk_1;

P0=uk;//计算得到的控制量,由P0口输出给D/A芯片

//更新数据

ek_1=ek;

uk_1=uk;

}

《计算机控制》课程设计报告

题目: 串联校正控制器设计 姓名: 学号:

2013年12月2日

4

《计算机控制》课程设计任务书

指导教师签字: 系(教研室)主任签字:

2013年 11 月 25 日

1、 模拟控制器的设计

原系统的开环传递函数为

K

,单位负反馈。

s (s +1)(s +4)

根据题目要求,系统阻尼比为0.5,无阻尼自然振荡频率2rad/s。因此期望主导极点为

s d =-ξωn ±j ω=-1±

用Matlab 绘制其根轨迹如下图所示:

R oot Locus

a g i n a r y A x i s (s e c o n d s ) I m

-1

----

-1

R eal A xi s (seconds )

图 1 校正前系统的根轨迹

由上图可知,期望闭环极点位于根轨迹左侧,可以采用相位超前校正,使根轨迹左移。

由图可见,开环几点之一,s =-1正好位于期望闭环极点s d 垂线下的负实轴上,如果令校正装置的零点设在紧靠s =-1这个开环极点的左侧,另z c =-1.2,这样做往往能增大s d 成为闭环主导极点的可能性。运用Matlab 编程求出对应于零点z c =-1.2的极点为p c =-5,因此校正后系统的开环传递函数为:

G (s ) =

K (s +1.2)

s (s +1)(s +2)(s +5)

其根轨迹如图2所

-1

a g i n a r y A x i s (s e c o n d s I m )

----

R eal A xi s (seconds )

-1

图 2 校正后系统根轨迹

根据幅值条件,可以求出系统工作于点s d 的K 值为30。 原系统及校正后系统的阶跃响应如图3所示:

1. S t ep R esponse

1. p l i t u d e A m

0. 0. 0. 0. [**************]20

Ti m e (seconds)

图 3 原系统阶跃响应

4

1. S t ep R esponse

1. p l i t u d e A m

0. 0. 0. 0. [**************]20

Ti m e (seconds)

图 4 校正后系统的阶跃响应

可以看出原系统阶跃响应单调递增变化,为过阻尼的情况;校正后系统衰减震荡,为欠阻尼,由其根轨迹曲线可以看出,工作点近似位于期望闭环极点上。至此,模拟控制器设计完毕。

2、 器件选取及电路设计

(1) 控制器选用STC89C52单片机,晶振选取12MHz 。P0口作为普通I/O口使用,故需接入上拉电阻。

(2) A/D选用ADC0804。其分辨率为8位,转换时间为100us ,输入电压范围为0~5V。芯片内部具有三态输出数据锁存器,可直接连接在数据总线上。

(3) D/A选用DAC0832。其为8位D/A转换器,其转换时间为1us 。数据输入可以采用双缓冲、单缓冲、或直通方式,以便适用于各种电路的需要。工作电压为+5V~+15V,基准电压为范围为-10V~+10V。D/A转换结果采用电流形式输出,可通过外接运算放大器将其转换成电压。

由上述器件可以计算出,完成一次A/D、D/A转换所需要的时间为101us ;单片机每执行一条指令所需时间为0.083us ,给定采样时间0.01s ,即10000us ,足够完成程序运算与A/D、D/A的转换。原理图如图5所示:

图 5 数字控制器原理图

3、 数字控制器的设计以及被控对象的离散化

由模拟控制器到数字控制器的实现有许多方法,比如一阶前向差分、一阶后向差分、双线性变换法、零极点匹配法等等。考虑到双线性变换发使用方便且有一定精度,故选取其作为离散化方法。上一步选取了采样周期为0.01s ,由Matlab 运算得到离散化之后的控制器脉冲传函为:

G c (z ) =

0.9815 z - 0.9698

z - 0.9512

求得相应的差分方程为:u (k ) =0.9815e (k ) -0.9698(k -1) +0.9512u (k -1) 。

被控对象采用零阶保持器离散化,最终的离散化系统方框图如图6所示:

图 6 离散系统方框图

用simulink 对系统进行仿真,可得到系统的阶跃响应曲线:

图 7 simulink仿真图

图 8 离散系统阶跃响应曲线

与原系统相比,相差不大。下面给出离散化前后的bode 图:

图 9 离散化前后bode 图

上图中,实线为离散前系统的bode 图,点画线为离散化之后的bode 图,可以看出,两者差别不大,可以满足要求。

4、 程序设计

程序设计的总体思路是采用外部中断的方式进行。首先启动A/D转换,当转换完成时,触发单片机外部中断,进入中断服务子程序程序。在中断服务程序中,进行控制量的求取,然后再次启动A/D转换,中断返回。D/A采用直通工作方式,即只需要变化数据输入端,其模拟输出就紧跟着变化。由于D/A的转换时间为1us ,而A/D转换时间为100us ,故D/A芯片有足够的时间完成转换。

使用keil 开发环境进行程序编写调试。并且利用keil 的软件调试模式进行计算中断服务子程序运行一次所需要的时间。进而可以计算出每个周期内采样、转换与计算输出所需的总时间,然后与确定的采样周期相比较,确定采样周期的选取是否符合条件。

软件调试界面如图10所示:

图 10 Keil软件调试模式

分别对进入中断以及中断返回进行计时,即可得到中断服务子程序运行时间,如图11所示:

图 11 中断服务程序运行时间

由上图可以计算中断服务程序运行的时间为:

0.0011554-0.01076=0.000794s

A/D转换时间为100us ,故每周期总共用时为:

0.000794+0.001=0.001794s

故所选取的采样周期0.01s 完全足够其完成采样与运算。

程序流程图如下所示:

图 12 软件流程图

5、 心得体会

本次课程设计持续一周时间,在这一周内,我完成了从系统设计到控制器的具体编程实现等工作,有很大的收获。这次课设将以前学过的很多知识串联起来,形成整体化、系统化的思想,提高了我们综合运用所学知识解决实际问题的能力,也提升了我们有目的地查阅资料解决问题的能力。当然,这次课程设计更多的是让我识到自己的不足。作为一名大学生,掌握的知识确很过时,会用的只是课程中讲过的一些很简单很基本的芯片和控制器,不能与最新的只知识接轨,知识结构的老化,对所学专业认识的浅显,纸上谈兵,缺乏实践经验等等都是我们亟待解决的问题。在以后的学习工程中,我一定会积极拓宽自己的视野,多接触一些新知识,丰富自己,提升自己。我们的路还有很长。

6、 参考文献

[1] 张晋格主编. 自动控制原理. 哈尔滨:哈尔滨工业大学出版社,2003.

[2] 刘建昌等主编. 计算机控制系统. 北京:科学出版社,2009.

[3] 张毅刚主编. 单片机原理及应用. 北京:高等教育出版社,2004.

[4] 张晋格,陈丽兰主编. 控制系统CAD —基于MA TLAB 语言. 北京:机械工业出版社,2010.

[5] 郭天祥编著.51单片机C 语言教程. 北京:电子工业出版社,2009.

7、 附录

Matlab 程序:

程序一:

%%校正前根轨迹

clc,clear,close all ;

num=1;

den=conv([1 1 0],[1 4]);

G=tf(num,den);

figure(1);

rlocus(G);

T=feedback(G,1);

figure(2);

step(T,20);

程序二:

%%求取极点位置

clc,clear,close all ;

x=-20:0.001:-1;

angs=angle(-1+sqrt(3)*1i-(-1.2))*180/pi-90-angle(-1+sqrt(3)*1i-0)*180/pi-angle(-1+sqrt(3)*1i-(-4))*180/pi-angle(-1+sqrt(3)*1i-x)*180/pi;

p=spline(angs,x,-180)

程序三:

%%校正后根轨迹还未进行离散化

clc,clear,close all ;

G=tf([1 1.2],conv([1 1 0],[1 9 20]));

figure(1);

rlocus(G)

s=-1+sqrt(3)*1i;

k=abs(s*(s+1)*(s+4)*(s+5)/(s+1.2))

Gc=tf([k 1.2*k],[conv([1 1 0],[1 9 20])]);%期望极点处开环传函

T=feedback(Gc,1);%期望极点处闭环传函

figure(2);

step(T,20)

程序四:

%运用双线性变换,进行离散化, 判稳???

clc,clear,close all ;

num=[1 1.2];

den=[1 5];

Gs=tf(num,den);%连续系统的控制器

Gz=c2d(Gs, 0.01, 'tustin' ) %双线性离散化之后的控制器

Gp=tf([30],conv([1 1 0],[1 4]));%连续系统的被控对象传函

Gpz=c2d(Gp,0.01,'zoh' ); %采用零阶保持器离散化之后的被控对象脉冲传函

sysc=Gs*Gp;

sysd=Gz*Gpz;

%画出离散化前后系统的bode 图,比较性能差异

figure(1);

bode(sysc, 'r-' , sysd, 'b-.' );

axis();

grid;

T=feedback(sysd,1);%离散系统的闭环传函(单位反馈)

figure(2),step(T,20);

C 源程序:

#include

#include

#define uint unsigned int

sbit ADRD=P2^0;

sbit ADWR=P2^1;

sbit INTR=P2^2;

static float ek=0;

static float ek_1=0;

static float uk=0;

static float uk_1=0; //以上四个变量存储用于计算每次输出的值

void Init()

{

P0=0X00;//由于P0为D/A的输入口,而D/A为直通工作方式故初始化其为0 P1=0x00;//P1口为读A/D的数据口,将其初始化为全1

P2=0xff;//P2口控制A/D的读写端,将其初始化为全1,使A/D芯片不工作 P3=0xff;

}

void main()

{

Init(); //初始化 注意,一定要先声明变量,在进行其他操作,否则会出现许多奇怪的错误

TMOD=0x01;//设置定时器TO 为工作方式1

TH0=(65536-10000)/256;

TL0=(65535-10000)%256;

PT0=1;//设置定时器中断0优先级最高

EA=1; //开总中断

ET0=1;//开外部中断0

TR0=1;//启动定时器T0

while(1);//主程序进入循环,等待中断产生

}

void T0_time(void) interrupt 1

{

TH0=(65536-10000)/256; //重装初值

TL0=(65535-10000)%256;

INTR=1;//先将其置高,A/D转换结束时,其将变为低电平

//下面启动A/D转换

ADWR=1;

_nop_();

ADWR=0;//拉低WR ,启动A/D转换

_nop_();

ADWR=1;

while(INTR); //INTR低电平表示A/D转换完成

//下面进行读取A/D,并赋值给e(k)

P1=0xff;//P1、P2、P3口均为准双向I/O口,读取之前要向其先写1 ADRD=1;

_nop_();

ADRD=0;

_nop_();

ek=P1;

ADRD=1;

//下面计算u(k)的输出值

uk=0.9815*ek-0.9698*ek_1+0.9512*uk_1;

P0=uk;//计算得到的控制量,由P0口输出给D/A芯片

//更新数据

ek_1=ek;

uk_1=uk;

}


相关文章

  • 纺织工程系
  • 纺织工程系 纺织工程 主要课程:高等数学.大学英语.大学物理.计算机应用基础.机械设计基础.电工电子.纺织材料学.纺纱学.织造学.针织学.染整工艺学.非织造技术:纺纱工艺与质量控制.织造工艺与质量控制.纺织CAD.织物组织与结构.纺织厂设计 ...查看


  • 电子信息类毕业设计课题
  • 电子信息类毕业设计课题 [电子通讯] 出租车计价系统 [过程控制] 基于单片机实现单回路智能调节.. [电子通讯] 脉冲数字频率计 [机床仪表] 仪表机床数控系统的设计(论文.. 磁流体发电论文 [电子通讯] 基于VC++6.0的PC 机与 ...查看


  • 三峡大学人才培养方案
  • 电气信息类 一.学科门类:工学 专业名称.专业代码: 电气工程及其自动化 080601 自动化 080602 电子信息工程 080603 通信工程 080604 授予学位:工学学士 标准学制:4年 在校修业年限:3-8年 二.培养目标 1. ...查看


  • 探测制导与控制技术本科专业培养方案(1)
  • 西 北 工 业 大 学 本 科 生 培 养 方 案 专业名称 探测.制导与控制技术 专业代码 082103 学院名称 航天学院,航海学院,电子信息学院 培养方案制定人签字 年 月 日 院长签字 年 月 日 校长签字 年 月 日 西 北 工 ...查看


  • 过程控制课程设计题目
  • 指导教师 李世涛 一.设计题目 1.单容水箱液位定制控制系统 二.设计目的 1)了解系统的工作原理. 2)通过课程设计培养学生自学能力和分析问题.解决问题的能力. 3)通过设计使学生具有一定的计算能力.制图能力以及查阅手册.使用国家技术标准 ...查看


  • 浙大电气工程及其自动化培养方案
  • 2012级电气工程及其自动化专业培养方案 20130605版 培养目标 培养具有扎实的自然科学基础知识,具有良好的人文社会科学.管理科学基础和外语综合能力,从事电力系统和电机系统的运行与控制.研制出发.自动控制.信息处理.试验分析.以及电力 ...查看


  • 电子信息工程2
  • 子信息工程专业 04023001 高等数学 Advanced Mathematics [192-10-1.2] 内容提要:高等数学是高等学校理工科专业的一门必修的重要基础课.通过这门课程的学习,使学生系统地获得函数.极限.连续.一元函数微积 ...查看


  • 电气工程及其自动化专业课程体系的改革
  • 第30卷第4期2011年8月郑州航空工业管理学院学报(社会科学版) JournalofZhengzhouInstituteofAeronauticalIndustryManagement(SocialScienceEdition)Vo.l3 ...查看


  • 清华大学课程学习
  • 电机工程与应用电子技术系 00220012 高档单片机原理及应用 2学分 32学时 The Principles and Application of Advanced Single-Chip Computer 本课程受日本瑞萨科技公司资助 ...查看


  • 西安工程大学本科专业情况简介
  • 西安工程大学本科专业情况简介 纺织工程专业 专业概况:本专业是我校特色专业之一,国家级特色专业建设点.省级特色专业建设点.省级名牌专业.该专业涵盖了纤维材料.纺织品设计.纺织品加工设备.纺织生产质量控制.纺织品经营与贸易.计算机应用等多方面 ...查看


热门内容