Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //implementacja wykorzystywanych bibliotek
- #include <OneWire.h>
- #include <DallasTemperature.h>
- #include <TimerOne.h>
- //definicja wyjść
- #define PWM 9
- #define OUT1 12
- //definicja wejść
- OneWire oneWire(8);
- OneWire oneWire2(7);
- DallasTemperature czujnik1(&oneWire);
- DallasTemperature czujnik2(&oneWire2);
- //definicja stałych i zmiennych
- double Tref, Tnaw, Tzad, Tmax;
- double Wyjscie1, Wyjscie2;
- int Okres = 1000;
- double Ti, Kp, C, e;
- int stala = 1023;
- unsigned long Wyjscie;
- double Wypelnienie;
- double regPI;
- void setup() {
- Serial.begin(9600); //rozpoczęcie transmisji szeregowej
- //inicjalizacja wyjść
- pinMode(PWM,OUTPUT);
- pinMode(OUT1,OUTPUT);
- //inicjalizacja czujników i ustalenie ich rozdzielczości
- czujnik1.begin();
- czujnik2.begin();
- czujnik1.setResolution(10);
- czujnik2.setResolution(11);
- //ustalenie okresu sygnału sterującego i jego inicjalizacja
- Timer1.initialize(1000000);
- Timer1.pwm(PWM,512);
- Tzad = 25; //temperatura zadana
- Tmax = 30; //maksymalna dopuszczalna temperatura w kanale nawiewnym
- e = Tzad-Tref; //uchyb
- C = 0; //wyzerowanie całki
- //nastawy regulatora PI
- Kp = 11;
- Ti = 30;
- digitalWrite(OUT1,HIGH); //ustawienie wyjścia OUT1 na stan wysoki wraz z załączeniem programu
- }
- void loop() {
- //odczytanie i wyświetlenie temperatury z czujników
- czujnik1.requestTemperatures();
- Serial.print("Temperatura referencyjna: ");
- Tref = czujnik1.getTempCByIndex(0);
- Serial.println(Tref);
- czujnik2.requestTemperatures();
- Serial.print("Temperatura w kanale: ");
- Tnaw = czujnik2.getTempCByIndex(0);
- Serial.println(Tnaw);
- delay(500);
- //obliczenie aktualnego uchyba i jego kumulacja w całce
- e = Tzad-Tnaw;
- C += e;
- //zerowanie uchybu, gdy będzie mniejszy od zera
- if(e<0)
- e = 0;
- //inicjalizacja regulatora
- regPI = Kp*(e + C/Ti);
- //zabezpieczenie przed przekroczeniem wartości maksymalnej
- if(regPI > 255)
- regPI = 255;
- //obliczanie wypełenienia PWM
- Wypelnienie = (regPI/255);
- //wyznaczanie wyjścia
- Wyjscie = Wypelnienie * stala;
- //podanie na wyjście PWM Arduino
- Timer1.setPwmDuty(PWM, Wyjscie);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement