PID kontrolni algoritam je trenutno jedan od najčešće korištenih algoritama upravljanja. PID kontrola nudi prednosti kao što su podesivi parametri, širok spektar primjena i visoka preciznost upravljanja. U praktičnom inženjeringu, PID algoritam se može primijeniti na različita polja, uključujući elektromehaničku kontrolu, industrijsku automatizaciju, robotiku i mikroprocesorsku kontrolu.
Tri parametra PID algoritma su: proporcionalni dobitak Kp, integralna vremenska konstanta Ti i vremenska konstanta derivacije Td. Različiti sistemi zahtevaju različite PID parametre, a optimalni parametri se obično dobijaju eksperimentisanjem i otklanjanjem grešaka. Proporcionalna konstanta Kp podešava proporcionalno pojačanje, kontrolišući odnos izlaza sistema i greške povratne sprege tokom rada; integralna vremenska konstanta Ti podešava integralno pojačanje, kontrolišući akumulaciju grešaka tokom rada sistema; a vremenska konstanta derivacije Td prilagođava derivacioni dobitak, kontrolišući stopu promene grešaka u sistemu upravljanja.
Kakav je pristup implementaciji PID algoritma na mikrokontroler?
Za implementaciju PID upravljačkog algoritma na mikrokontroler, opći pristup je sljedeći:
1. **Odredite PID parametre**:
- Odaberite odgovarajuće proporcionalno pojačanje (Kp), integralno vrijeme (Ti) i vrijeme derivacije (Td) na osnovu karakteristika i zahtjeva stvarnog kontroliranog objekta.
2. **Prikupljanje podataka senzora**:
- Koristite odgovarajuće senzore (kao što su senzori temperature, senzori položaja, itd.) za prikupljanje-povratnih podataka u stvarnom vremenu od kontroliranog objekta.
3. **Poređenje zadanih i povratnih vrijednosti**:
- Uporedite zadatu vrijednost (željena vrijednost) sa vrijednošću povratne informacije da izračunate grešku (Greška).
4. **PID proračun**:
- Izračunajte kontrolnu varijablu (izlaz) koristeći formulu PID algoritma: PID=Kp * Greška + Ki * ∫ Greška dt + Kd * d(Greška)/dt.
- Kp, Ki i Kd su PID parametri; Greška je vrijednost greške; ∫ Greška dt predstavlja integralni pojam; a d(Greška)/dt predstavlja derivatni pojam.
5. **Ograničavanje** (opciono):
- Za određene aplikacije, možda će biti potrebno ograničiti opseg izlazne vrijednosti kako bi se spriječilo da ona premaši prihvatljivi opseg kontroliranog objekta.
6. **Izlazni kontrolni signal**:
- Izračunata kontrolna varijabla se koristi kao kontrolni signal i šalje se aktuatoru (kao što je motor ili ventil) za regulaciju i kontrolu kontroliranog objekta.
7. **Postavite kontrolnu frekvenciju**:
- Postavite odgovarajuću kontrolnu frekvenciju-ciklus izvršenja kontrolnog algoritma-na osnovu specifičnih zahtjeva aplikacije.
8. **Ponovite PID algoritam**:
- U petlji u realnom vremenu-uzastopno izvršavajte gore navedene korake kako biste kontinuirano pratili povratnu vrijednost, izračunali kontrolnu varijablu i izbacili kontrolni signal kako biste postigli stabilnu kontrolu sistema.
U stvarnom programiranju mikrokontrolera, možete odabrati odgovarajuće razvojne alate i programske jezike (kao što je C ili asemblerski jezik) na osnovu specifičnog modela mikrokontrolera i razvojne platforme. Treba napomenuti da u praktičnim primenama postoje mnoge tehnike za optimizaciju i poboljšanje PID algoritma, kao što su integralno razdvajanje i adaptivni PID, koji se mogu dalje istraživati i implementirati prema specifičnim zahtevima.
Principi i rad PID regulatora
PID regulator se sastoji od tri komponente: proporcionalne (P), integralne (I) i derivative (D). On generiše kontrolni izlaz obradom sistemske greške, odstupanja i stope promjene. Njegov rad uključuje sljedeće korake:
- Dobijte zadanu vrijednost i povratne vrijednosti
- Izračunajte grešku
- Izračunajte kontrolni izlaz na osnovu proporcionalnog dobitka, integralnog člana i derivativnog člana
- Ažurirajte parametre kontrolera
- Izlaz kontrolnog signala
Implementacija STM32 koda
Slijedi primjer koda za dizajniranje i implementaciju PID kontrolera pomoću STM32 mikrokontrolera:
```c
#include "stm32f4xx.h"
// Definirajte parametre PID regulatora
float Kp=0.5; // Proporcionalni dobitak
float Ki=0.2; // Integralni dobitak
float Kd=0.1; // Dobitak derivata
// Definirajte varijable memorije
float setpoint=50.0; // Zadana vrijednost
plutajuća povratna informacija=0.0; // Vrijednost povratne informacije
float greška=0.0; // Greška
float last_error=0.0; // Prethodna greška
float integral=0.0; // Integralni pojam
// Funkcija proračuna izlaza PID regulatora
float pidController(float dt)
{
// Izračunaj grešku
greška=zadana vrijednost - povratna informacija;
// Izračunaj integralni član
integralna += greška * dt;
// Izračunaj derivirani pojam
float derivat=(greška - last_error) / dt;
// Izračunaj kontrolni izlaz
float output=Kp * greška + Ki * integral + Kd * izvod;
// Ažuriraj prethodnu grešku
last_error=greška;
povratni izlaz;
}
int main(void)
{
dok (1)
{
// Dohvati povratnu vrijednost
// Postavi vremenski interval
// Izračunaj PID izlaz
float dt=0.01; // U ovom primjeru, vremenski interval je 0,01 s
float control_output=pidController(dt);
// Izlaz upravljačkog signala
// Odgoda na određeno vrijeme
for (int i=0; i < 10000; i++);
}
return 0;
}




