Advertisement
Guest User

Untitled

a guest
Sep 17th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //implementacja wykorzystywanych bibliotek
  2. #include <OneWire.h>
  3. #include <DallasTemperature.h>
  4. #include <TimerOne.h>
  5.  
  6. //definicja wyjść
  7. #define PWM 9
  8. #define OUT1 12
  9.  
  10. //definicja wejść
  11. OneWire oneWire(8);
  12. OneWire oneWire2(7);
  13. DallasTemperature czujnik1(&oneWire);
  14. DallasTemperature czujnik2(&oneWire2);
  15.  
  16. //definicja stałych i zmiennych
  17. double Tref, Tnaw, Tzad, Tmax;
  18. double Wyjscie1, Wyjscie2;
  19. int Okres = 1000;
  20. double Ti, Kp, C, e;
  21. int stala = 1023;
  22. unsigned long Wyjscie;
  23. double Wypelnienie;
  24. double regPI;
  25.  
  26. void setup() {
  27.   Serial.begin(9600); //rozpoczęcie transmisji szeregowej
  28.   //inicjalizacja wyjść
  29.   pinMode(PWM,OUTPUT);
  30.   pinMode(OUT1,OUTPUT);
  31.   //inicjalizacja czujników i ustalenie ich rozdzielczości
  32.   czujnik1.begin();
  33.   czujnik2.begin();
  34.   czujnik1.setResolution(10);
  35.   czujnik2.setResolution(11);
  36.   //ustalenie okresu sygnału sterującego i jego inicjalizacja
  37.   Timer1.initialize(1000000);
  38.   Timer1.pwm(PWM,512);
  39.   Tzad = 25; //temperatura zadana
  40.   Tmax = 30;  //maksymalna dopuszczalna temperatura w kanale nawiewnym
  41.   e = Tzad-Tref; //uchyb
  42.   C = 0; //wyzerowanie całki
  43.   //nastawy regulatora PI
  44.   Kp = 11;
  45.   Ti = 30;
  46.   digitalWrite(OUT1,HIGH); //ustawienie wyjścia OUT1 na stan wysoki wraz z załączeniem programu
  47. }
  48.  
  49. void loop() {
  50.   //odczytanie i wyświetlenie temperatury z czujników
  51.   czujnik1.requestTemperatures();
  52.   Serial.print("Temperatura referencyjna: ");
  53.   Tref = czujnik1.getTempCByIndex(0);
  54.   Serial.println(Tref);
  55.   czujnik2.requestTemperatures();
  56.   Serial.print("Temperatura w kanale: ");
  57.   Tnaw = czujnik2.getTempCByIndex(0);
  58.   Serial.println(Tnaw);
  59.   delay(500);
  60.   //obliczenie aktualnego uchyba i jego kumulacja w całce
  61.   e = Tzad-Tnaw;
  62.   C += e;
  63.   //zerowanie uchybu, gdy będzie mniejszy od zera
  64.   if(e<0)
  65.   e = 0;
  66.   //inicjalizacja regulatora
  67.   regPI = Kp*(e + C/Ti);
  68.   //zabezpieczenie przed przekroczeniem wartości maksymalnej
  69.   if(regPI > 255)
  70.   regPI = 255;
  71.   //obliczanie wypełenienia PWM
  72.   Wypelnienie = (regPI/255);
  73.   //wyznaczanie wyjścia
  74.   Wyjscie = Wypelnienie * stala;
  75.   //podanie na wyjście PWM Arduino
  76.   Timer1.setPwmDuty(PWM, Wyjscie);
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement