计算机控制技术实验报告(杭电)

杭州电子科技大学

实验报告

课程名称:                      

指导老师:                        

学生姓名:                   

学生学号:                   

学生班级:                   

所学专业:                   

实验日期:                   

实验1、常规PID控制算法仿真

1.实验参数:

shiyanpid  Ts=0.1s,b为班号1~5,x为学号后2位,1~99

2.实验要求:

(1)画Simulinnk框图  

(2)设计或凑试PID三个参数,进行仿真

(3)使稳态误差为0,且动态性能较满意

3.实验结果:

(1)Simulinnk框图  b=1, x=3

(2)凑试PID三个参数,进行仿真

a)   经过设计以及试凑,先令Ki=0,Kd=0,调节Kp,逐渐增大Kp,观察系统的响应,直到得到静差几乎为零,经不断调试得Kp=3,响应曲线如下:

b)   在比例调节的基础上系统的静差不能满足要求,加入积分环节。令Kd=0,调节Ki,

Kp。Ki先选小,然后再逐渐增大,得到良好动态性能且静差得到消除的响应曲线。此时经试后得到Kp=3,Ki=2,响应曲线如下

c)   在以上基础上再进一步调试Kd,以进一步提高响应速度,减少调整时间。经调试得到Kd=0.5,响应曲线如下:

 (3)使稳态误差为0,且动态性能较满意

最后PID三个参数的值,其中Kp=3, Ki=2, Kd=-0.5。响应曲线如上图。

实验2、积分分离PID控制算法仿真

1.实验参数:

shiyanpidjffl  Ts=0.1s,b为班号1~5,x为学号后2位,1~99

2.实验要求:

(1)画Simulinnk框图

(2)使稳态误差为0,且动态性能较满意

(3)尝试不同的积分分离的阈值(比如ε=0,0.1,0.2,……,0.9,1),观察阶跃响应,并确定最佳的阈值

3.实验结果

(1)Simulinnk框图 b=1, x=3

(2)使稳态误差为0,且动态性能较满意

根据实验1的方法不断调试得到动态特性和静态特性都比较满意的响应曲线,即

Kp=2,Ki=20,Kd=0.1。此时为采用积分分离。仿真曲线如下图:

(3)尝试不同的积分分离的阈值(比如ε=0,0.1,0.2,……,0.9,1),观察阶跃响应,并确定最佳的阈值。

a)  当阈值ε=1时,仿真曲线如下:震荡的比较严重。

b)  当阈值ε=0.5时,仿真曲线如下:

c)  当阈值ε=0.2时,仿真曲线如下:

d)  当阈值ε=0时,仿真曲线如下:系统的超调量几乎为零,响应速度也有所减少。

所以由以上可知,最佳阈值为ε=0。

实验3、组态王软件练习

1.实验要求:

(1)画如图1所示模拟水箱图,系统运行后水位逐渐上升

(2)画如图2所示常量寄存器操作界面,当在“写数据框”写入某个数后,“读数据框”即显示该数

2.实验结果

(1)模拟水箱图

(2)常量寄存器操作界面

 

第二篇:计算机控制技术实验一实验报告

实验内容:

1、  八字段LED数码管驱动显示工作原理

2、  74LS138三—八译码器工作原理及如何控制数码管工作原理

3、  数码管动态显示工作原理分析与计算

4、  数码管多种显示实验

实验任务:

1、让Y0所对应的数码管显示“0”—“9”,间隔1秒

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

int a,num;

sbit A0=P2^0;

sbit A1=P2^1;

sbit A3=P2^2;

void init();

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void main()

{

       init();

       num=0;

       P0=table[0];

       while(1)

       {

              A0=0;

              A1=0;

              A3=0;

              if(a==20)

                     {    

                            a=0;

                            num++;

                            if(num==10)

                                   num=0;

                            P0=table[num];

                           

                     }

       }

}

void timer0() interrupt 1

{

       TH0=(65536-50000)/256;

       TL0=(65536-50000)%256;

       a++;

      

}

void init()

{

       TMOD=0x01;

       TH0=(65536-50000)/256;

       TL0=(65536-50000)%256;

       EA=1;

       ET0=1;

       TR0=1;

      

}

2、让Y0所对应的数码管显示“0”,Y1显示“1”,Y2显示“2”…………以此类推最后Y7显示“7”,间隔1秒

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

int a,num;

sbit A0=P2^0;

sbit A1=P2^1;

sbit A2=P2^2;

void init();

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void main()

{

       init();

       num=0;

       P0=table[0];

       while(1)

       {

              if(a==20)

                     {    

                            a=0;

                            num++;

                            if(num==8)

                                   num=0;  

                           

                     }

                     switch(num)   //位选,选择点亮的数码管,

              {

                     case(0):

                            A0=0;A1=0;A2=0; break;

                     case(1):

                            A0=1;A1=0;A2=0; break;

                     case(2):

                            A0=0;A1=1;A2=0; break;

                     case(3):

                            A0=1;A1=1;A2=0; break;

                     case(4):

                            A0=0;A1=0;A2=1; break;

                     case(5):

                            A0=1;A1=0;A2=1; break;

                     case(6):

                            A0=0;A1=1;A2=1; break;

                     case(7):

                            A0=1;A1=1;A2=1; break;    

              }

              P0=table[num];

       }

}

void timer0() interrupt 1

{

       TH0=(65536-50000)/256;

       TL0=(65536-50000)%256;

       a++;

      

}

void init()

{

       TMOD=0x01;

       TH0=(65536-50000)/256;

       TL0=(65536-50000)%256;

       EA=1;

       ET0=1;

       TR0=1;

      

}

3、让Y0所对应的数码管显示“0”,Y1显示“1”,Y2显示“2”…………以此类推最后Y7显示“7”,间隔4毫秒,注意观察现象,和实验2有何区别

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

int a,num;

sbit A0=P2^0;

sbit A1=P2^1;

sbit A2=P2^2;

void init();

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void main()

{

       init();

       num=0;

       P0=table[0];

       while(1)

       {

              if(a==4)

                     {    

                            a=0;

                            num++;

                            if(num==8)

                                   num=0;  

                           

                     }

                     switch(num)   //位选,选择点亮的数码管,

              {

                     case(0):

                            A0=0;A1=0;A2=0; break;

                     case(1):

                            A0=1;A1=0;A2=0; break;

                     case(2):

                            A0=0;A1=1;A2=0; break;

                     case(3):

                            A0=1;A1=1;A2=0; break;

                     case(4):

                            A0=0;A1=0;A2=1; break;

                     case(5):

                            A0=1;A1=0;A2=1; break;

                     case(6):

                            A0=0;A1=1;A2=1; break;

                     case(7):

                            A0=1;A1=1;A2=1; break;    

              }

              P0=table[num];

       }

}

void timer0() interrupt 1

{

       TH0=(65536-1000)/256;

       TL0=(65536-1000)%256;

       a++;

      

}

void init()

{

       TMOD=0x01;

       TH0=(65536-50000)/256;

       TL0=(65536-50000)%256;

       EA=1;

       ET0=1;

       TR0=1;

      

}

4、让Y0所对应的数码管显示“5”,停留1秒,再让Y1显示“5”,…………以此类推最后Y7显示“5”,移动字幕

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

int a,num;

sbit A0=P2^0;

sbit A1=P2^1;

sbit A2=P2^2;

void init();

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void main()

{

       init();

       num=0;

       P0=table[0];

       while(1)

       {

              if(a==20)

                     {    

                            a=0;

                            num++;

                            if(num==8)

                                   num=0;  

                           

                     }

                     switch(num)   //位选,选择点亮的数码管,

              {

                     case(0):

                            A0=0;A1=0;A2=0; break;

                     case(1):

                            A0=1;A1=0;A2=0; break;

                     case(2):

                            A0=0;A1=1;A2=0; break;

                     case(3):

                            A0=1;A1=1;A2=0; break;

                     case(4):

                            A0=0;A1=0;A2=1; break;

                     case(5):

                            A0=1;A1=0;A2=1; break;

                     case(6):

                            A0=0;A1=1;A2=1; break;

                     case(7):

                            A0=1;A1=1;A2=1; break;    

              }

              P0=table[5];

       }

}

void timer0() interrupt 1

{

       TH0=(65536-50000)/256;

       TL0=(65536-50000)%256;

       a++;

      

}

void init()

{

       TMOD=0x01;

       TH0=(65536-50000)/256;

       TL0=(65536-50000)%256;

       EA=1;

       ET0=1;

       TR0=1;

      

}

5、在8个数码管上稳定显示“i love you”

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

int a,num;

sbit A0=P2^0;

sbit A1=P2^1;

sbit A2=P2^2;

void init();

uchar code table[]={0x30,0x38,0x3f,0x3e,0x79,0x6e,0x3f,0x3e};

void main()

{

       init();

       num=0;

       P0=table[0];

       while(1)

       {

              if(a==2)

                     {    

                            a=0;

                            num++;

                            if(num==8)

                                   num=0;  

                           

                     }

                     switch(num)   //位选,选择点亮的数码管,

              {

                     case(0):

                            A0=0;A1=0;A2=0; break;

                     case(1):

                            A0=1;A1=0;A2=0; break;

                     case(2):

                            A0=0;A1=1;A2=0; break;

                     case(3):

                            A0=1;A1=1;A2=0; break;

                     case(4):

                            A0=0;A1=0;A2=1; break;

                     case(5):

                            A0=1;A1=0;A2=1; break;

                     case(6):

                            A0=0;A1=1;A2=1; break;

                     case(7):

                            A0=1;A1=1;A2=1; break;    

              }

              P0=table[num];

       }

}

void timer0() interrupt 1

{

       TH0=(65536-1000)/256;

       TL0=(65536-1000)%256;

       a++;

      

}

void init()

{

       TMOD=0x01;

       TH0=(65536-50000)/256;

       TL0=(65536-50000)%256;

       EA=1;

       ET0=1;

       TR0=1;

      

}

相关推荐