湖南大学-大三暑假-机电课程设计报告

第三章 SIMULINK仿真

3.1 建立仿真模型

根据图2-1所示的控制系统框图,在SIMULINK 中选择相应的控件,用数学模型代替相应的食物环节,建立控制系统的仿真模型。如下图3-1所示:

图3-1 直流伺服电机位置控制系统SIMULINK 仿真模型图

其中PID 子系统模型图如下图3-2所示:

图3-2 PID子系统仿真模型图

为了便于分析观察PID 参数对输出的影响,以及方便参数整定,我将建立两个系统,使用相同输入,并用一个示波器展示出来观察,其系统仿真模型如图3-3所示:

图3-3直流伺服电机位置控制系统SIMULINK 仿真模型图(输出信号对比)

3.2 阶跃信号输入的PID 参数整定 通过对理论课上,PID 参数整定方法的复习,按照课堂总结的口诀:

参数整定找最佳,从小到大顺序查。 先是比例后积分,最后再把微分加。 曲线振荡很频繁,比例度盘要放大。 曲线漂浮绕大弯,比例度盘往小扳。 曲线偏离回复慢,积分时间往下降。 曲线波动周期长,积分时间再加长。 曲线振荡频率快, 先把微分降下来。 动差大来波动慢,微分时间应加长。 理想曲线两个波, 前高后低四比一。 一看二调多分析,调节质量不会低。

对于PID 参数整定,我的方法是先调节比例参数,从小到大,直到输出能够很快做出响应并且又一定超调,最终能够稳定的时候,保持比例参数P 不变,调节积分参数,渐渐消除静态偏差,如此慢慢使得PID 的参数准确使的输出能够较好的响应,做到快、准、稳。仿真对比曲线如下图3-4所示:

图3-4 阶跃信号输入输出响应曲线

输出数据如下:

0.0031737 1.3002

0.011146 0.029587 0.059223 0.097357 0.12935 0.18944

0.96551

2.0671

1.6349

1.7425

1.8022

1.95 1.9695

0.25774 0.29619 0.43128 0.46352 0.63087 0.73944 0.79818 0.9465 1.0606

1.1328

1.4675

2.1368 3.1408 4.1448 4.9473 5.4407 5.9422 6.444 6.946 7.448 8.3641 8.6809 8.9785 9.2507 9.4348 9.5733 9.6774 9.7558 9.8144 9.8584 9.8916 9.9166 9.9355 9.9497 9.9604 9.9685 9.9746 9.9792 9.9829 9.9854 9.9874 9.9888 9.9899 9.9908 9.9914 9.9919 9.9922 9.9925 9.9927 9.993 9.9931 9.9932 9.9933 9.9933

2.3042 3.3082 4.3122 4.9815 5.4835 5.9855 6.4875 6.9895 7.4915 8.4036 8.7271 9.006 9.2771 9.4532 9.586 9.6862 9.7617 9.8186 9.8616 9.8939 9.9184 9.9368 9.9507 9.9611 9.969 9.975 9.9795 9.9832 9.9857 9.9876 9.989 9.9909 9.9915 9.992 9.9923 9.9926 9.9927 9.993 9.9931 9.9932 9.9933 9.9933

2.4715 3.4755 4.4795 5.0157 5.5455 6.0475 6.5494 7.0514 7.5534 8.457 8.7338 9.0436 9.298 9.4696 9.5989 9.6963 9.7696 9.8247 9.8661 9.8974 9.921 9.9388 9.9522 9.9623 9.9699 9.9756 9.9836 9.986 9.9878 9.9891 9.991 9.9915 9.992 9.9923 9.9926 9.9928 9.993 9.9931 9.9932 9.9933 9.9933

2.6389 3.6429 4.6116 5.0841 5.6076 6.1095 6.6114 7.1133 7.6153 8.4731 8.7664 9.318 9.4854 9.6113 9.7061 9.7773 9.8305 9.8706 9.9007 9.9235 9.9407 9.9536 9.9634 9.9707 9.9763 9.9838 9.9861 9.9879 9.9892 9.9911 9.9916 9.992 9.9923 9.9926 9.9928 9.993 9.9931 9.9932 9.9933 9.9933

2.7452 3.7468 4.6468 5.1488 5.6508 6.1528 6.6548 7.1568 7.6588 8.5113 8.8004 9.3414 9.5017 9.6226 9.7137 9.7825 9.8343 9.8734 9.9029 9.9251 9.9418 9.9545 9.964 9.9712 9.9766 9.9841 9.9864 9.9881 9.9894 9.9911 9.9917 9.9921 9.9924 9.9926 9.9928 9.993 9.9932 9.9932 9.9933 9.9933

2.8062 3.8102 4.8142 5.2092 5.7129 6.2148 6.7167 7.2187 7.7207 8.5481 8.8469 9.3607 9.5169 9.6345 9.7231 9.7898 9.8398 9.8776 9.906 9.9275 9.9437 9.9559 9.9651 9.972 9.9772 9.9845 9.9866 9.9883 9.9895 9.9912 9.9917 9.9921 9.9924 9.9926 9.9928 9.9931 9.9932 9.9932 9.9933 9.9933

2.9532 3.9557 4.9235 5.2696 5.7749 6.2767 6.7787 7.2806 7.7827 8.5976 8.8779 9.3792 9.5314 9.646 9.7321 9.7968 9.8451 9.8816 9.9091 9.9298 9.9454 9.9572 9.9661 9.9727 9.9778 9.9846 9.9868 9.9884 9.9896 9.9913 9.9918 9.9921 9.9924 9.9927 9.9929 9.9931 9.9932 9.9933 9.9933 9.9933

2.9735 3.9775 4.9473 5.3161 5.8181 6.3201 6.8221 7.3241 7.8261 8.6096 8.9077 9.3999 9.5459 9.6559 9.7388 9.8014 9.8486 9.8841 9.911 9.9312 9.9465 9.958 9.9666 9.9732 9.9781 9.985 9.987 9.9885 9.9897 9.9913 9.9918 9.9922 9.9925 9.9927 9.9929 9.9931 9.9932 9.9933 9.9933 9.9933

3.07484.08654.94735.37845.88026.38216.88417.38617.8881

8.32328.64598.9499

9.2299.41779.55989.66699.74759.8089.85369.88799.91399.93349.94819.95929.96769.97399.9787

9.98279.98539.98729.98879.9898

9.99079.99149.99189.99229.99259.99279.9939.99319.99329.99339.99339.9933

7.95 7.9935 8.0554 8.0875 8.0875 8.1495 8.1608 8.2163 8.2698

9.07 9.0955 9.1288 9.1533 9.1768 9.2065

9.98 9.9805 9.9807 9.9812 9.9816 9.9818 9.9823

9.99 9.9902 9.9902 9.9903 9.9904 9.9905 9.9906 9.9907

9.9957 9.9957 9.9958 9.9957 9.9958 9.9957 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9959 9.9958 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.996 9.9959 9.996 9.9959 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.9961 9.996 9.9961

9.996

9.9957 9.9957 9.9957 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.9961 9.9961

9.9961

9.9957 9.9957 9.9957 9.9957 9.9957 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.9961 9.9961

9.9961

9.9957 9.9957 9.9958 9.9957 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9959 9.9958 9.9959 9.9958 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.996 9.9959 9.996 9.9959 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.9961 9.996 9.9961 9.996 9.9961

9.9961

9.99579.99589.99589.99589.99589.99589.99589.99589.99589.99589.99589.99589.99589.99589.99589.99599.99599.99599.99599.99599.99599.99599.99599.99599.99599.99599.99599.99599.9969.9969.9969.9969.9969.9969.9969.9969.9969.9969.9969.9969.9969.9969.99619.9961

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962 9.9962 9.9962 9.9962

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962 9.9962

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962 9.9962 9.9962

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962 9.9962 9.9962 9.9962

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962 9.9962

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962 9.9962 9.9962

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962 9.9962

9.99619.99619.99619.99619.99619.99619.99619.99619.99619.99619.99619.99619.99629.99629.99629.9962

由于数据量太大,故只截留了一部分数据打印出来。

3.2 方波信号输入的PID 参数整定 根据同样的方法,替换原仿真系统的输入信号源为阶跃信号,整定PID 参数,最终输出曲线对比图如下图3-5:

图3-5 方波信号输入的输出曲线对比图

3.2 正弦信号输入的PID 参数整定 根据同样的方法,替换原仿真系统的输入信号源为正弦信号,整定PID 参数,最终输出曲线对比图如下图3-6:

图3-6 正弦信号输入的输出曲线对比图

为了清晰的看出输出对输入的跟随,将局部放大图做出,如下图3-7所示:

图3-6 正弦信号输入的输出曲线局部放大对比图

第四章 物理系统的控制

4.1 物理系统的组成与控制原理

4.2 实时控制程序流程图

进行控制程序的编写之前,先要有一个清晰的思路,使用流程图的方式能够较好的将编程思路理清楚,并且提高编程效率,减少出错率。实时控制程序流程图如下图4-1所示:

4.2 程序代码的编写

基于课堂理论知识以及实验成果的累积,采样滤波子程序已经在上学期的实验课堂上编写完毕,现在只需要编写输入信号,PID 控制子程序,AC6011的D/A输出程序即可。在我的编程,我将阶跃、方波、正弦输入输出的PID 控制编写在了一个大的主程序中,通过程序的运行,使用人机交互的形式选择输入信号,设置PID 参数,进行PID 参数整定。代码粘贴如下:

#include "stdafx.h"// 必须加入的头文件 #include "conio.h"

#include "windows.h"// 应加入的头文件 #include "stdio.h" #include "io_nt.h" #include "AC6011.h" #include "math.h"

HINSTANCE hDLL; //DLL句柄

HANDLE NTportio=NULL; //NT IO驱动 句柄--->暂定为全局变量,自定义时,可以自己传递参数

unsigned long idd[100]; float CYLB(); void init();

floatPID_realize(float ad);

voidarrive_distance(float setd); voidzf_arrive_distance(float setd); voiddf_arrive_distance(float setd); void DA(intsetd);

float sum=0.0,u,pid0,pid1=0.0,kp=10,ki=0,kd=0,p,aim=100; float e0=0.0,e1=0.0,e2=0.0;

float num1,fuzhi,zhouqi,err,err1,out,zero_plot,zero_plot1; intflag,addata,datada,i,num,k; int wave;

const float pi=3.14;

floatset,actdistance,t,T,A,ave;

FILE *fp1; FILE *fp2; FILE *fp3; FILE *fp4; void main() {

unsigned long cardc;

char *dll_name="acpci.dll";//动态连接库名

hDLL=LoadLibrary(dll_name); //调入DLL ,动态调用 #include "ac6011_func.h" #include "io_nt_func.h"

#include "math.h"

NTportio=AC_OpenDriver(); //获取IO 驱动句柄

cardc=AC_6011_INIT(NTportio,idd);//初始化AC6011卡

//------------------用户主函数可以写在以下区域----------------

flag=1; charchr;

while(flag) {

if((fp1=fopen("E:\\set.txt","w"))==NULL)

{printf("\nERROR:Can't open file,press any key to return!"); exit(0); }

if((fp2=fopen("E:\\act.txt","w"))==NULL)

{printf("\nERROR:Can't open file,press any key to return!"); exit(0); } init(); wave=0; DA(1300);

printf("请选择输入的波形? ( 阶跃:j ;方波:f ;正弦:z ) :\n"); printf("\n"); chr=getch();

if(chr=='j'){wave=1;} if(chr=='f'){wave=2;} if(chr=='z'){wave=3;} switch (wave) {

case 1:

DA(1300);

printf("Kp= 9 Ki= 0.005 \n"); scanf("%f %f",&kp,&ki);

printf("请指定到达的位置(0--200 mm):" ); scanf("%f",&set); for(j=0;j

arrive_distance(set);

printf("%d\n",j); } DA(2048); break; case 2: printf("Kp= 30 Ki= 0.005 \n"); scanf("%f %f",&kp,&ki); printf("方波幅值和周期:如:80 400\n"); scanf("%f %f",&fuzhi,&zhouqi); printf("\n"); num1=3; while(num1>0) { for(k=0;k0) {

for(t=0;t

{

set=A*sin(2*pi/T*t)+100;

arrive_distance(set);

}

num1--;

}

DA(2048);

break;

default:

DA(1300);

break;

}

fclose(fp1);

fclose(fp2);

flag=0;

printf("Kp=%.3f ; Ki=%.3f ; Kd=%.3f\n",kp,ki,kd);

printf("需要再运行一次吗? (y/n)\n");

printf("\n");

if(getch()=='y'){flag=1;printf("下一次运行前,请保存数据!\n");} }

DA(1300);

//}

//------------------------------------------------------------------------ AC_CloseDriver(NTportio);//关闭AC6011卡驱动

FreeLibrary(hDLL);//清DLLgetch();

}

floatPID_realize(float setd)

{

aim=setd;

sum=0;

for(i=0;i

{

addata=AC_6011_AD(NTportio,idd[0],14,1);

u=(addata*5.0)/4095.0;

sum=sum+u;

}

ave=sum/300.0-1.22;

p=ave*400/5;

e0=aim-p;

sum_e0+=e0;

pid0=kp*(e0-e1)+ki*e0+kd*(e0-2*e1+e2);

pid0=pid1+pid0;

pid1=pid0;

u=pid0*5/400.0;

printf("pid_out=%.3f\n",u);

if(u>10) u=9;

if(u

if(u0&&e0>0) u=u+0.63;

if(u>-0.8&&u

e2=e1;

e1=e0;

return u;

}

voidarrive_distance(float setd)

{

if(setd>=175){setd=175;}

if(setd

out=PID_realize(setd);

datada=2048*(u/10.0)+2048;

printf("设定位移:");

printf("%.2f",setd);

printf("\n");

printf("当前位移:");

printf("%.2f",p);

printf("\n");

err1=setd-p;

printf("误差: ");

printf("%.4f",err1);

printf("\n");

fprintf(fp1,"%f ",setd);

fprintf(fp2,"%f ",p);

DA(datada);

}

void DA(intsetd)

{

datada=setd;

if(setd>4095) datada=4095;

if(setd

AC_6011_DA(NTportio,idd[0],1,datada

}

voidinit()

{

sum=0.0;u=0;pid0=0;pid1=0.0;

kp=10;ki=0;kd=0;aim=0;

e0=0.0;e1=0.0;e2=0.0;

err1=0;out=0;

flag=0;wave=0;

}

4.4 物理系统下控制程序的PID 参数整定

由于物理系统的复杂性,非线性,导致之前在仿真模型上所整定的参数完全无法再物理系统上使用,但是其整定的方法却可以沿用,使用C 语言导出输出数据,使用Matlab 的绘图功能,调入数据绘图,反复调整参数,观察图形变化,确定最佳响应的PID 参数即可。保存数据,绘图即可。

4.5 物理系统下阶跃信号输入的PID 参数整定

根据上述方法,运行程序,选择阶跃输入,设定PID 参数,设置阶跃值,导出数据绘图,观察图像,重复上述步骤,直至整定到合适的PID 参数,最终输出曲线对比图如下图4-2:

图4-2 阶跃信号输入输出曲线图

根据上述方法,运行程序,选择方波输入,设定PID 参数,设置方波幅值及周期,导出数据绘图,观察图像,重复上述步骤,直至整定到合适的PID 参数,最终输出曲线对比图如下图4-3:

图4-3方波信号输入输出曲线图

根据上述方法,运行程序,选择正弦输入,设定PID 参数,设置正弦波幅值及周期,导出数据绘图,观察图像,重复上述步骤,直至整定到合适的PID 参数,最终输出曲线对比图如下图4-4:

图4-4方波信号输入输出曲线图

第三章 SIMULINK仿真

3.1 建立仿真模型

根据图2-1所示的控制系统框图,在SIMULINK 中选择相应的控件,用数学模型代替相应的食物环节,建立控制系统的仿真模型。如下图3-1所示:

图3-1 直流伺服电机位置控制系统SIMULINK 仿真模型图

其中PID 子系统模型图如下图3-2所示:

图3-2 PID子系统仿真模型图

为了便于分析观察PID 参数对输出的影响,以及方便参数整定,我将建立两个系统,使用相同输入,并用一个示波器展示出来观察,其系统仿真模型如图3-3所示:

图3-3直流伺服电机位置控制系统SIMULINK 仿真模型图(输出信号对比)

3.2 阶跃信号输入的PID 参数整定 通过对理论课上,PID 参数整定方法的复习,按照课堂总结的口诀:

参数整定找最佳,从小到大顺序查。 先是比例后积分,最后再把微分加。 曲线振荡很频繁,比例度盘要放大。 曲线漂浮绕大弯,比例度盘往小扳。 曲线偏离回复慢,积分时间往下降。 曲线波动周期长,积分时间再加长。 曲线振荡频率快, 先把微分降下来。 动差大来波动慢,微分时间应加长。 理想曲线两个波, 前高后低四比一。 一看二调多分析,调节质量不会低。

对于PID 参数整定,我的方法是先调节比例参数,从小到大,直到输出能够很快做出响应并且又一定超调,最终能够稳定的时候,保持比例参数P 不变,调节积分参数,渐渐消除静态偏差,如此慢慢使得PID 的参数准确使的输出能够较好的响应,做到快、准、稳。仿真对比曲线如下图3-4所示:

图3-4 阶跃信号输入输出响应曲线

输出数据如下:

0.0031737 1.3002

0.011146 0.029587 0.059223 0.097357 0.12935 0.18944

0.96551

2.0671

1.6349

1.7425

1.8022

1.95 1.9695

0.25774 0.29619 0.43128 0.46352 0.63087 0.73944 0.79818 0.9465 1.0606

1.1328

1.4675

2.1368 3.1408 4.1448 4.9473 5.4407 5.9422 6.444 6.946 7.448 8.3641 8.6809 8.9785 9.2507 9.4348 9.5733 9.6774 9.7558 9.8144 9.8584 9.8916 9.9166 9.9355 9.9497 9.9604 9.9685 9.9746 9.9792 9.9829 9.9854 9.9874 9.9888 9.9899 9.9908 9.9914 9.9919 9.9922 9.9925 9.9927 9.993 9.9931 9.9932 9.9933 9.9933

2.3042 3.3082 4.3122 4.9815 5.4835 5.9855 6.4875 6.9895 7.4915 8.4036 8.7271 9.006 9.2771 9.4532 9.586 9.6862 9.7617 9.8186 9.8616 9.8939 9.9184 9.9368 9.9507 9.9611 9.969 9.975 9.9795 9.9832 9.9857 9.9876 9.989 9.9909 9.9915 9.992 9.9923 9.9926 9.9927 9.993 9.9931 9.9932 9.9933 9.9933

2.4715 3.4755 4.4795 5.0157 5.5455 6.0475 6.5494 7.0514 7.5534 8.457 8.7338 9.0436 9.298 9.4696 9.5989 9.6963 9.7696 9.8247 9.8661 9.8974 9.921 9.9388 9.9522 9.9623 9.9699 9.9756 9.9836 9.986 9.9878 9.9891 9.991 9.9915 9.992 9.9923 9.9926 9.9928 9.993 9.9931 9.9932 9.9933 9.9933

2.6389 3.6429 4.6116 5.0841 5.6076 6.1095 6.6114 7.1133 7.6153 8.4731 8.7664 9.318 9.4854 9.6113 9.7061 9.7773 9.8305 9.8706 9.9007 9.9235 9.9407 9.9536 9.9634 9.9707 9.9763 9.9838 9.9861 9.9879 9.9892 9.9911 9.9916 9.992 9.9923 9.9926 9.9928 9.993 9.9931 9.9932 9.9933 9.9933

2.7452 3.7468 4.6468 5.1488 5.6508 6.1528 6.6548 7.1568 7.6588 8.5113 8.8004 9.3414 9.5017 9.6226 9.7137 9.7825 9.8343 9.8734 9.9029 9.9251 9.9418 9.9545 9.964 9.9712 9.9766 9.9841 9.9864 9.9881 9.9894 9.9911 9.9917 9.9921 9.9924 9.9926 9.9928 9.993 9.9932 9.9932 9.9933 9.9933

2.8062 3.8102 4.8142 5.2092 5.7129 6.2148 6.7167 7.2187 7.7207 8.5481 8.8469 9.3607 9.5169 9.6345 9.7231 9.7898 9.8398 9.8776 9.906 9.9275 9.9437 9.9559 9.9651 9.972 9.9772 9.9845 9.9866 9.9883 9.9895 9.9912 9.9917 9.9921 9.9924 9.9926 9.9928 9.9931 9.9932 9.9932 9.9933 9.9933

2.9532 3.9557 4.9235 5.2696 5.7749 6.2767 6.7787 7.2806 7.7827 8.5976 8.8779 9.3792 9.5314 9.646 9.7321 9.7968 9.8451 9.8816 9.9091 9.9298 9.9454 9.9572 9.9661 9.9727 9.9778 9.9846 9.9868 9.9884 9.9896 9.9913 9.9918 9.9921 9.9924 9.9927 9.9929 9.9931 9.9932 9.9933 9.9933 9.9933

2.9735 3.9775 4.9473 5.3161 5.8181 6.3201 6.8221 7.3241 7.8261 8.6096 8.9077 9.3999 9.5459 9.6559 9.7388 9.8014 9.8486 9.8841 9.911 9.9312 9.9465 9.958 9.9666 9.9732 9.9781 9.985 9.987 9.9885 9.9897 9.9913 9.9918 9.9922 9.9925 9.9927 9.9929 9.9931 9.9932 9.9933 9.9933 9.9933

3.07484.08654.94735.37845.88026.38216.88417.38617.8881

8.32328.64598.9499

9.2299.41779.55989.66699.74759.8089.85369.88799.91399.93349.94819.95929.96769.97399.9787

9.98279.98539.98729.98879.9898

9.99079.99149.99189.99229.99259.99279.9939.99319.99329.99339.99339.9933

7.95 7.9935 8.0554 8.0875 8.0875 8.1495 8.1608 8.2163 8.2698

9.07 9.0955 9.1288 9.1533 9.1768 9.2065

9.98 9.9805 9.9807 9.9812 9.9816 9.9818 9.9823

9.99 9.9902 9.9902 9.9903 9.9904 9.9905 9.9906 9.9907

9.9957 9.9957 9.9958 9.9957 9.9958 9.9957 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9959 9.9958 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.996 9.9959 9.996 9.9959 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.9961 9.996 9.9961

9.996

9.9957 9.9957 9.9957 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.9961 9.9961

9.9961

9.9957 9.9957 9.9957 9.9957 9.9957 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.9961 9.9961

9.9961

9.9957 9.9957 9.9958 9.9957 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9958 9.9959 9.9958 9.9959 9.9958 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.9959 9.996 9.9959 9.996 9.9959 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.996 9.9961 9.996 9.9961 9.996 9.9961

9.9961

9.99579.99589.99589.99589.99589.99589.99589.99589.99589.99589.99589.99589.99589.99589.99589.99599.99599.99599.99599.99599.99599.99599.99599.99599.99599.99599.99599.99599.9969.9969.9969.9969.9969.9969.9969.9969.9969.9969.9969.9969.9969.9969.99619.9961

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962 9.9962 9.9962 9.9962

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962 9.9962

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962 9.9962 9.9962

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962 9.9962 9.9962 9.9962

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962 9.9962

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962 9.9962 9.9962

9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9961 9.9962 9.9962 9.9962

9.99619.99619.99619.99619.99619.99619.99619.99619.99619.99619.99619.99619.99629.99629.99629.9962

由于数据量太大,故只截留了一部分数据打印出来。

3.2 方波信号输入的PID 参数整定 根据同样的方法,替换原仿真系统的输入信号源为阶跃信号,整定PID 参数,最终输出曲线对比图如下图3-5:

图3-5 方波信号输入的输出曲线对比图

3.2 正弦信号输入的PID 参数整定 根据同样的方法,替换原仿真系统的输入信号源为正弦信号,整定PID 参数,最终输出曲线对比图如下图3-6:

图3-6 正弦信号输入的输出曲线对比图

为了清晰的看出输出对输入的跟随,将局部放大图做出,如下图3-7所示:

图3-6 正弦信号输入的输出曲线局部放大对比图

第四章 物理系统的控制

4.1 物理系统的组成与控制原理

4.2 实时控制程序流程图

进行控制程序的编写之前,先要有一个清晰的思路,使用流程图的方式能够较好的将编程思路理清楚,并且提高编程效率,减少出错率。实时控制程序流程图如下图4-1所示:

4.2 程序代码的编写

基于课堂理论知识以及实验成果的累积,采样滤波子程序已经在上学期的实验课堂上编写完毕,现在只需要编写输入信号,PID 控制子程序,AC6011的D/A输出程序即可。在我的编程,我将阶跃、方波、正弦输入输出的PID 控制编写在了一个大的主程序中,通过程序的运行,使用人机交互的形式选择输入信号,设置PID 参数,进行PID 参数整定。代码粘贴如下:

#include "stdafx.h"// 必须加入的头文件 #include "conio.h"

#include "windows.h"// 应加入的头文件 #include "stdio.h" #include "io_nt.h" #include "AC6011.h" #include "math.h"

HINSTANCE hDLL; //DLL句柄

HANDLE NTportio=NULL; //NT IO驱动 句柄--->暂定为全局变量,自定义时,可以自己传递参数

unsigned long idd[100]; float CYLB(); void init();

floatPID_realize(float ad);

voidarrive_distance(float setd); voidzf_arrive_distance(float setd); voiddf_arrive_distance(float setd); void DA(intsetd);

float sum=0.0,u,pid0,pid1=0.0,kp=10,ki=0,kd=0,p,aim=100; float e0=0.0,e1=0.0,e2=0.0;

float num1,fuzhi,zhouqi,err,err1,out,zero_plot,zero_plot1; intflag,addata,datada,i,num,k; int wave;

const float pi=3.14;

floatset,actdistance,t,T,A,ave;

FILE *fp1; FILE *fp2; FILE *fp3; FILE *fp4; void main() {

unsigned long cardc;

char *dll_name="acpci.dll";//动态连接库名

hDLL=LoadLibrary(dll_name); //调入DLL ,动态调用 #include "ac6011_func.h" #include "io_nt_func.h"

#include "math.h"

NTportio=AC_OpenDriver(); //获取IO 驱动句柄

cardc=AC_6011_INIT(NTportio,idd);//初始化AC6011卡

//------------------用户主函数可以写在以下区域----------------

flag=1; charchr;

while(flag) {

if((fp1=fopen("E:\\set.txt","w"))==NULL)

{printf("\nERROR:Can't open file,press any key to return!"); exit(0); }

if((fp2=fopen("E:\\act.txt","w"))==NULL)

{printf("\nERROR:Can't open file,press any key to return!"); exit(0); } init(); wave=0; DA(1300);

printf("请选择输入的波形? ( 阶跃:j ;方波:f ;正弦:z ) :\n"); printf("\n"); chr=getch();

if(chr=='j'){wave=1;} if(chr=='f'){wave=2;} if(chr=='z'){wave=3;} switch (wave) {

case 1:

DA(1300);

printf("Kp= 9 Ki= 0.005 \n"); scanf("%f %f",&kp,&ki);

printf("请指定到达的位置(0--200 mm):" ); scanf("%f",&set); for(j=0;j

arrive_distance(set);

printf("%d\n",j); } DA(2048); break; case 2: printf("Kp= 30 Ki= 0.005 \n"); scanf("%f %f",&kp,&ki); printf("方波幅值和周期:如:80 400\n"); scanf("%f %f",&fuzhi,&zhouqi); printf("\n"); num1=3; while(num1>0) { for(k=0;k0) {

for(t=0;t

{

set=A*sin(2*pi/T*t)+100;

arrive_distance(set);

}

num1--;

}

DA(2048);

break;

default:

DA(1300);

break;

}

fclose(fp1);

fclose(fp2);

flag=0;

printf("Kp=%.3f ; Ki=%.3f ; Kd=%.3f\n",kp,ki,kd);

printf("需要再运行一次吗? (y/n)\n");

printf("\n");

if(getch()=='y'){flag=1;printf("下一次运行前,请保存数据!\n");} }

DA(1300);

//}

//------------------------------------------------------------------------ AC_CloseDriver(NTportio);//关闭AC6011卡驱动

FreeLibrary(hDLL);//清DLLgetch();

}

floatPID_realize(float setd)

{

aim=setd;

sum=0;

for(i=0;i

{

addata=AC_6011_AD(NTportio,idd[0],14,1);

u=(addata*5.0)/4095.0;

sum=sum+u;

}

ave=sum/300.0-1.22;

p=ave*400/5;

e0=aim-p;

sum_e0+=e0;

pid0=kp*(e0-e1)+ki*e0+kd*(e0-2*e1+e2);

pid0=pid1+pid0;

pid1=pid0;

u=pid0*5/400.0;

printf("pid_out=%.3f\n",u);

if(u>10) u=9;

if(u

if(u0&&e0>0) u=u+0.63;

if(u>-0.8&&u

e2=e1;

e1=e0;

return u;

}

voidarrive_distance(float setd)

{

if(setd>=175){setd=175;}

if(setd

out=PID_realize(setd);

datada=2048*(u/10.0)+2048;

printf("设定位移:");

printf("%.2f",setd);

printf("\n");

printf("当前位移:");

printf("%.2f",p);

printf("\n");

err1=setd-p;

printf("误差: ");

printf("%.4f",err1);

printf("\n");

fprintf(fp1,"%f ",setd);

fprintf(fp2,"%f ",p);

DA(datada);

}

void DA(intsetd)

{

datada=setd;

if(setd>4095) datada=4095;

if(setd

AC_6011_DA(NTportio,idd[0],1,datada

}

voidinit()

{

sum=0.0;u=0;pid0=0;pid1=0.0;

kp=10;ki=0;kd=0;aim=0;

e0=0.0;e1=0.0;e2=0.0;

err1=0;out=0;

flag=0;wave=0;

}

4.4 物理系统下控制程序的PID 参数整定

由于物理系统的复杂性,非线性,导致之前在仿真模型上所整定的参数完全无法再物理系统上使用,但是其整定的方法却可以沿用,使用C 语言导出输出数据,使用Matlab 的绘图功能,调入数据绘图,反复调整参数,观察图形变化,确定最佳响应的PID 参数即可。保存数据,绘图即可。

4.5 物理系统下阶跃信号输入的PID 参数整定

根据上述方法,运行程序,选择阶跃输入,设定PID 参数,设置阶跃值,导出数据绘图,观察图像,重复上述步骤,直至整定到合适的PID 参数,最终输出曲线对比图如下图4-2:

图4-2 阶跃信号输入输出曲线图

根据上述方法,运行程序,选择方波输入,设定PID 参数,设置方波幅值及周期,导出数据绘图,观察图像,重复上述步骤,直至整定到合适的PID 参数,最终输出曲线对比图如下图4-3:

图4-3方波信号输入输出曲线图

根据上述方法,运行程序,选择正弦输入,设定PID 参数,设置正弦波幅值及周期,导出数据绘图,观察图像,重复上述步骤,直至整定到合适的PID 参数,最终输出曲线对比图如下图4-4:

图4-4方波信号输入输出曲线图


相关文章

  • 关于在校大学生考研情况的社会调查报告
  • 湖北理工学院考研及考研培训机构的调查报告 所在学院:经济与管理学院 专业班级:国际经济与贸易2012级1班 调查小组成员:张家成 [1**********]1 刘 齐 [1**********]9 詹 凯 [1**********]5 张 ...查看


  • 西安交通大学工业设计系学生实习要求
  • 寒假实习 一. 基本要求 1. 实习时间: 学校一月中旬放假.2月18号和19号报到.寒假实习要求至少不少于四周. 2. 到什么样的企业? 一定要去正规企业,所去的实习单位必须具有工伤事故保险.医疗保险.退休保险和住房保险,否则企业缺乏职业 ...查看


  • 我的大学四年职业生涯规划书
  • 大学四年规划一: 总述 这是我的大学四年的一个整体规划.本规划分为学习生活规划.社会活动规划和面向未来的准备计划.其中,"学习生活"." 社会活动"两部分是规划,只建立一个大概的发展方向,除少数目标外 ...查看


  • 返校思想调研报告
  • 2014年光电工程学院\重庆国际半导体学院 学生暑假返校思想状态调研报告 一.调查基本情况: (一)调查背景及目的 新学期伊始,为充分了解我院学生暑假返校思想动态.掌握我院学生在新学期的思想定位和学习目标,增强学院学生工作针对性.确定学生管 ...查看


  • 大三暑假社会实践报告
  • 暑假社会实践报告 12电子信息工程 趁此放假之际,没有了纷繁的作业任务,也没有了往日忙碌的补习课程...一切显的是那么的悠闲,自己不是即刻去享乐着悠闲时光,而是让自己置身社会,积累社会经验,提前适应社会.为了不让这短短寒假在节日聚会中哈哈一 ...查看


  • 学业生涯规划设计书
  • 山东建筑大学 第二届学业生涯规划设计大赛 第二届学业生涯规划设计大赛 作品名称 姓 学 班 名 院 级 学业规划设计书 张亚辉 土木工程学院 土木 101 2010 年 11 月 16 日 学业生涯规划设计书内容简介表 时间: 时间 : 月 ...查看


  • 保研申请书范文
  • 篇一:保研申请书 范文 保研 申请书 尊敬的xx学院领 导.老师: 我叫xx(学号: xxx),是xx大学xx学院xx级xx专业x班学生.通过在校的三年努力学习,我各门功课均 取得优良成绩,英语已通过国家六级考试,并且始终保持着积极向上的思 ...查看


  • 我的整体职业生涯目标
  • 个人职业生涯规划报告 我的基本资料 姓名: 性别: 女 出生: 学校: 上海师范大学 院系:信息与机电工程学院 电话: 电子邮件: 撰写时间: 2014年10月 26 日 目 录 1.职业方向和总体目标 2.自我认知(可结合正式评估与非正式 ...查看


  • 机电制专业大学生入党申请书范文2013
  • 这篇关于机电制专业大学生入党申请书范文2013,是本站特地为大家整理的,希望对大家有所帮助! 尊敬的党支部领导: 你好!! 我是来自x机制的xxx,入校以来,加入中国共产党一直是我的心愿,行至大四,名额突降,然而机制班人才济济,很遗憾我不是 ...查看


热门内容