Pcomp.m
上传用户:eighthdate
上传日期:2014-05-24
资源大小:270k
文件大小:3k
源码类别:

其他行业

开发平台:

Matlab

  1. function [numopen, denopen, denclsd] = pcomp(num, den, zeta)
  2. % Hadi Saadat,  1998
  3. discr=[
  4. '                                                                         '
  5. '  The function pcomp(num, den, zeta) is used for the design of gain      '
  6. '  factor compensation.  num and den are row vectors of polynomial        '
  7. '  coefficients of the uncompensated open-loop plant transfer function.   '
  8. '  zeta is the desired damping factor.  K0 for the required damping ratio '
  9. '  is found.  The function returns the open-loop and the closed-loop      '
  10. '  numerator and denominator of the compensated system transfer function. '
  11. '                                                                         '];
  12. %disp(discr);
  13. c1=0:.1:10; c2=11:1:100; c3=110:10:1000;
  14. k=[c1 c2 c3]; kk=k';
  15. j=0;
  16. r=rlocus(num,den,k);
  17.  ri=imag(r);  risum=sum(ri);
  18. costhta=cos([pi-angle(r)]);
  19. j= find (risum > .5);
  20. if isempty(j)==1;
  21.         disp('Warning: zeta line does not cross root-locus')
  22.         return,else, end
  23.  l=length(costhta);
  24.  for i=1:l for c=1:j
  25.      if costhta(i,c) ==-1 costhta(i,c)=1; end,end,end
  26. cost=(costhta(:,j));
  27. l=length(cost);
  28. if cost(1) > zeta
  29.         i = find(cost < zeta);
  30. else
  31.         i = find(cost > zeta);
  32. end
  33. if length(i) == 0
  34.         disp('Warning: zeta line does not cross root-locus'),return
  35. else
  36. while i(1)>l i(1)=i(1)-l; end
  37.         i2 = i(1);
  38.         i1 = i2 - 1;
  39.         k1 = min(kk(i1,:));
  40.         k2 = min(kk(i2,:)) ;
  41.         m1 = min(cost(i1,:));
  42.         m2 = min(cost(i2,:));
  43.         K0 = k1 + (m1-zeta)*(k2-k1)/(m1-m2);
  44. end
  45. K0=round(100*K0)/100;
  46. clc
  47. fprintf('Controller gain:    K0 = %g',K0),
  48. fprintf('nn')
  49. % the following statements will form the characteristic Equation
  50. % of the compensated system.
  51. m=length(num); n=length(den);
  52. if n > m
  53. o=zeros(1,n-m); mk=[o,1]; num1=conv(num,mk);
  54. else, num1=num, end
  55. numgc=K0; numopen=conv(numgc,num1);
  56. denopen= den;
  57. denclsd=denopen+numopen;
  58. numopen=numopen(n-m+1:length(numopen));
  59. %fprintf('Row vectors of polynomial coefficients of the compensated system:nn')
  60. %fprintf('Open-loop num. '),disp(numopen)
  61. %fprintf('Open-loop den. '),disp(denopen)
  62. %fprintf('Closed-loop den'),disp(denclsd)
  63. fprintf('Compensated open-loop ')
  64. GH = tf(numopen, denopen)
  65. fprintf('Compensated closed-loop ')
  66. T = tf(numopen, denclsd)
  67. discr2=[
  68. 'Roots of the compensated characteristic equation:       '
  69. '                                                        '];
  70. disp(discr2)
  71. R=roots(denclsd);
  72. disp(R)
  73. rreal=real(R);
  74.   for l=1:n-1
  75.   if rreal(l) >=0
  76.   fprintf('   Root on the RHP, system is unstable. nn')
  77.   else,end
  78.   end