Advertisement
MSlomiany

MiUP_Reglator PID

Oct 25th, 2019
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.47 KB | None | 0 0
  1. //Regulator PID
  2. //Funkcja w jezyku C
  3.  
  4. /******Biblioteki******/
  5. #include <reg1210.h>
  6.  
  7. /******Definicje******/
  8. #define KP 0.1              // wzmocnienie czlonu proporcjonalnego
  9. #define KI 0.01             // wzmocnienie czlonu calkujacego
  10. #define KD 0.0              // wzmocnienie czlonu rozniczkujacego
  11. #define DELTA_T 0.02        // krok calkowania i rozniczkowania
  12. #define MAX_OUT 100         //ograniczenie maksymalnej wartosci wyjscia
  13. #define MIN_OUT -100        //ograniczenie minimalnej wartosci wyjscia
  14.  
  15. /******Zmienne globalne*******/
  16. float wynik_poprz;  // wynik calkowania
  17. float error_poprz;  // poprzednia wartosc uchybu
  18.  
  19. /*******Dzialanie czlonu calkujacego******
  20. 0. 0+C
  21. 1. f(t1) * delta_t + A(t) = A(t1)
  22. 2. f(t2) * delta_t + A(t1) = A(t2)
  23. /*******/
  24.  
  25. /************************************************************/
  26. /*                                                          */
  27. /*  integral(float error)                                   */
  28. /*  funkcja calkujaca                                       */
  29. /*                                                          */
  30. /************************************************************/
  31.  
  32. float calka(float error){
  33.     float wynik;  
  34.     /*
  35.     static float wynik_poprz;
  36.     //zmienna statyczna majaca zarezerwowane miejsce w pamieci
  37.     //zle rozwiazanie poniewaz przy pierwszym wykonaniu petli program nie zna jej wartosci
  38.     */
  39.     wynik = error * DELTA_T + wynik_poprz;
  40.     wynik_poprz = wynik;
  41.     return wynik;
  42. }
  43.  
  44. /******Dzialanie czlonu rózniczkujacego******
  45. pochodna = (f(t)-f(t-delta_t))/delta_t
  46. /*******/
  47.  
  48. /************************************************************/
  49. /*                                                          */
  50. /*  derivative(float error)                                 */
  51. /*  funkcja rozniczkowania                                  */
  52. /*                                                          */
  53. /************************************************************/
  54.  
  55. float pochodna(float error){
  56.     float wynik;
  57.     wynik = (error - error_poprz)/DELTA_T;
  58.     error_poprz = error; // nadpisanie poprzedniego wyniku;
  59.     return wynik;
  60. }
  61.  
  62. float PID(float error){
  63.     float y = KP * error + KI * calka(error) + KD * pochodna(error);
  64.     return y;
  65. }
  66.  
  67. void delay(){
  68.     unsigned int i;
  69.     for(i=0;i<30000;i++)
  70.     {
  71.     }
  72. }
  73.  
  74. /******Funkcja glowna******/
  75.  
  76. void main(){
  77.     //Blok inicjalizacji
  78.     error_poprz = 0;
  79.     wynik_poprz = 0;   
  80.    
  81.     // Petla glowna
  82.     while(1){
  83.         delay();
  84.         PID(5);
  85.     }
  86.  
  87. }
  88.  
  89. /******Koniec funkcji glownej******/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement