PID kontrolni algoritam je široko korišten kontrolni algoritam, PID kontrola ima prednosti podesivih parametara, širok spektar primjena, visoku preciznost upravljanja. U praktičnom inženjerstvu, PID algoritam se može primijeniti na elektromehaničku kontrolu, industrijsku automatizaciju, upravljanje robotima, mikroprocesorsku kontrolu i mnoga druga polja.
Prilagođavaju se tri parametra PID algoritma: konstanta proporcionalnosti Kp, integralna vremenska konstanta Ti, diferencijalna vremenska konstanta Td. Različiti sistemi trebaju postaviti različite PID parametre i općenito je potrebno dobiti optimalne parametre kroz eksperimente i otklanjanje grešaka. Konstanta proporcionalnosti Kp podešava proporciju, prilagođavajući omjer izlazne i povratne greške u upravljačkom sistemu; integralna vremenska konstanta Ti prilagođava integral, prilagođavajući akumulaciju greške u upravljačkom sistemu; diferencijalna vremenska konstanta Td podešava diferencijal, prilagođavajući stopu promjene greške u upravljačkom sistemu.
Koja je ideja realizacije pid algoritma sa mikrokontrolerom
Da bi se PID upravljački algoritam realizovao na mikrokontroleru, sledeća je opšta ideja realizacije:
1. **Odredite PID parametre**:
- U skladu sa karakteristikama i potrebama stvarnog objekta upravljanja, odaberite odgovarajući koeficijent proporcionalnosti (Kp), vrijeme integracije (Ti) i vrijeme diferencijacije (Td).
2. **Prikupljanje podataka senzora**:
- Koristite odgovarajuće senzore (npr. senzore temperature, senzore položaja, itd.) za prikupljanje povratnih podataka od kontrolnog objekta u realnom vremenu.
3. **Poređenje podešene vrijednosti i povratne vrijednosti**:
- Uporedite postavljenu vrijednost (željena vrijednost) sa povratnom vrijednošću i izračunajte vrijednost greške (Greška).
4. **PID proračun**:
- Kontrolna količina (izlaz) se izračunava prema formuli 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 označava integralni član, a d(Greška)/dt označava diferencijalni član.
5. **Upravljanje ograničenjem** (opciono):
- Za neke aplikacije, možda će biti potrebno ograničiti opseg izlazne vrijednosti kako bi se izbjeglo prekoračenje prihvatljivog opsega kontrolnog objekta.
6. **Izlazni kontrolni signal**:
- Izračunata kontrolna veličina izlazi kao upravljački signal aktuatoru (npr. motoru, ventilu, itd.) radi realizacije regulacije i kontrole kontrolnog objekta.
7. **Podesite kontrolnu frekvenciju**:
- Prema potrebama specifičnih aplikacija, postavite odgovarajuću kontrolnu frekvenciju za kontrolu ciklusa izvršavanja algoritma.
8. **Izvođenje ciklusa PID algoritma**:
- U realnom-ciklusu, gornji koraci se izvode uzastopno kako bi se kontinuirano pratila povratna vrijednost, izračunala kontrolna količina i izdao kontrolni signal kako bi se ostvarila stabilna kontrola objekta.
U stvarnom programiranju mikrokontrolera, možete odabrati odgovarajuće razvojne alate i programski jezik (kao što je C ili asemblerski jezik) prema specifičnom modelu mikrokontrolera i razvojnoj platformi. Treba napomenuti da će u praktičnim primjenama postojati mnoge tehnike za optimizaciju i poboljšanje PID algoritma, kao što su integralno razdvajanje, adaptivni PID, itd., koje se mogu dalje istraživati i implementirati prema specifičnim potrebama.
Princip i tok rada PID regulatora
PID regulator se sastoji od tri dijela: proporcionalnog (P), integralnog (I) i diferencijalnog (D) i generiše upravljački izlaz obradom greške, odstupanja i brzine promjene sistema. Njegov radni tok uključuje sljedeće korake:
- Dobijanje ciljnih i povratnih vrijednosti
- Izračunajte grešku
- Izračunajte kontrolni izlaz na osnovu koeficijenta proporcionalnosti, integralnog člana i diferencijalnog člana.
- Ažuriranje parametara kontrolera
- Izlaz kontrolnih 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; // faktor skale
float Ki=0.2; // Integralni koeficijent
float Kd=0.1; // Diferencijalni koeficijent
// Definirajte varijable memorije
float setpoint=50.0; // ciljna vrijednost
plutajuća povratna informacija=0.0; // vrijednost povratne informacije
float greška=0.0; // greška
float last_error=0.0; // zadnja greška
float integral=0.0; // Integralni pojam
// Funkcija proračuna izlaza PID regulatora
float pidController(float dt)
float pidController(float dt) {
// Izračunaj grešku
greška=zadana vrijednost - povratna informacija; // Izračunaj integralni član.
// Izračunaj integralni član
integralna += greška * dt; // izračunati diferencijalni član
// Izračunaj diferencijal
float derivat=(greška - last_error) / dt; // izračunati kontrolni izlaz.
// Izračunati kontrolni izlaz
float output=Kp * greška + Ki * integral + Kd * izvod; // Izračunati kontrolni izlaz.
// Ažuriraj posljednju grešku
last_error=greška; // ažuriranje zadnje greške.
last_error=greška; povratni izlaz; // Izračunati kontrolni izlaz.
}
int main(void)
{
dok (1)
{
// Dobiva povratnu vrijednost
// Dobiva vremenski interval
// Izračunaj PID izlaz
float dt=0.01; // 0.01s kao vremenski interval u primjeru
float control_output=pidController(dt); // izlaz kontrolni signal.
// Izlaz upravljačkog signala
// Odgodi kontrolni signal za određeni vremenski period
za (int i=0; i 《 10000;i++).
}
return 0; }
}




