Advertisement
Guest User

Untitled

a guest
Nov 17th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.69 KB | None | 0 0
  1. function [a,b,omega1,omega2,brojac] = funkcija(a_staro,b_staro,t,A,B,brojac_stari)
  2. % ova funkcija treba na osnovu ulaza A i B da izracuna ugaonu brzinu i
  3. % ugaoni pomak motora
  4.  
  5. % a, b, a_staro, b_staro vektori nx1
  6. % brojac, brojac_stari vektori 2x1
  7. % A, B, t, omega1, omega2 skalari
  8.  
  9. % ovdje pisete vas kod
  10.  
  11. P=2;
  12. Ts=1e-4;
  13. fc=10000;
  14. Td=1000*Ts;
  15. if brojac_stari(2)~=0
  16. S2=brojac_stari(2);
  17. else
  18. S2=Inf;
  19. end
  20.  
  21. if t==0 % moramo definirati neke pocetne vrijednosti izlaza
  22. a=A*ones(1000,1);
  23. b=B*ones(1000,1);
  24. omega1=0;
  25. omega2=0;
  26. brojac=zeros(2,1);
  27. else
  28. % ovdje pisete ostatak koda
  29. % mora uvijek biti definirana vrijednost
  30. % na izlazu ove funkcije
  31.  
  32. %azuriramo vektore a_staro i b_staro
  33. %tako sto izbacujemo pocetni clan, i na kraj
  34. %dodajemo novi, vrijednost A ili B
  35. a=[a_staro(2:end);A];
  36. b=[b_staro(2:end);B];
  37.  
  38. %vrijednost S1 predstavlja ukupan broj
  39. %promjena min->max vrijednosti amplitude
  40. S1=0;
  41. for i=1:(size(a,1)-1)
  42. if(a(i)<a(i+1))
  43. S1=S1+1;
  44. end
  45. end
  46.  
  47. %vektor c sadrzi odgovarajuce vrijednosti
  48. %za odgovarajucu kombinaciju vrijednosti
  49. %vektora a i b u trenutku t
  50. c=zeros(size(a));
  51. for i=1:size(c,1)
  52. if(a(i)==5 && b(i)==5)
  53. c(i)=3;
  54. elseif(a(i)==5 && b(i)==0)
  55. c(i)=2;
  56. elseif(a(i)==0 && b(i)==5)
  57. c(i)=1;
  58. elseif(a(i)==0 && b(i)==0)
  59. c(i)=0;
  60. end
  61. end
  62.  
  63. %za odredjivanje smjera kretanja efikasnije je
  64. %posmatrati samo vektor koji sadrzi redoslijed
  65. %ponavljanja elemenata vektora c samo po jedanput,
  66. %zato izbacujemo duplicirane elemente
  67. br1=1; br2=2;
  68. d=zeros(4,1);
  69. d(1)=c(1);
  70. while br1<4
  71. if(c(br2)~=c(br2-1))
  72. br1=br1+1;
  73. d(br1)=c(br2);
  74. end
  75. if(br2==1000)
  76. break;
  77. else
  78. br2=br2+1;
  79. end
  80. end
  81.  
  82. %pozitivan smjer: 3->1->0->2, ali i 2->3->1->0, i 0->2->3->1, i 1->0->2->3
  83. %negativan smjer: 3->2->0->1, ali i 1->3->2->0, i 0->1->3->2, i 2->0->1->3
  84. smjer=0;
  85. if (isequal(d,[3;1;0;2]) || isequal(d,[2;3;1;0]) || isequal(d,[0;2;3;1]) || isequal(d,[1;0;2;3]))
  86. smjer=1;
  87. elseif (isequal(d,[3;2;0;1]) || isequal(d,[1;3;2;0]) || isequal(d,[0;1;3;2]) || isequal(d,[2;0;1;3]))
  88. smjer=-1;
  89. end
  90.  
  91. %racunamo omega1 i omega2 po odgovarajucim formulama
  92. omega1=smjer*(2*pi*S1)/(P*Td);
  93. omega2=smjer*(2*pi*fc)/(P*S2);
  94.  
  95. %racunanje brojaca
  96. brojac=brojac_stari;
  97. if (A>a(end))
  98. brojac=[0;brojac_stari(1)];
  99. else
  100. brojac=[brojac(1)+1;brojac(2)];
  101. end
  102. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement