PID valdymo algoritmas yra plačiai naudojamas valdymo algoritmas, PID valdymas turi reguliuojamų parametrų, plataus pritaikymo spektro, didelio valdymo tikslumo privalumus. Praktinėje inžinerijoje PID algoritmas gali būti taikomas elektromechaniniam valdymui, pramoninei automatikai, robotų valdymui, mikroprocesorių valdymui ir daugeliui kitų sričių.
Koreguojami trys PID algoritmo parametrai: proporcingumo konstanta Kp, integralinė laiko konstanta Ti, diferencinė laiko konstanta Td. Skirtingoms sistemoms reikia nustatyti skirtingus PID parametrus ir paprastai reikia gauti optimalius parametrus atliekant eksperimentus ir derinant. Proporcingumo konstanta Kp koreguoja proporciją, reguliuoja išėjimo ir grįžtamojo ryšio paklaidos santykį valdymo sistemoje; integralo laiko konstanta Ti koreguoja integralą, koreguojant paklaidų kaupimąsi valdymo sistemoje; diferencialinė laiko konstanta Td sureguliuoja skirtumą, koreguojant paklaidos kitimo greitį valdymo sistemoje.
Kokia idėja realizuoti pid algoritmą su mikrovaldikliu
Norint realizuoti PID valdymo algoritmą mikrovaldiklyje, bendra realizavimo idėja yra tokia:
1. **Nustatykite PID parametrus**:
- Pagal faktinio valdymo objekto charakteristikas ir poreikius pasirinkite atitinkamą proporcingumo koeficientą (Kp), integravimo laiką (Ti) ir diferenciacijos laiką (Td).
2. **Jutiklio duomenų gavimas**:
- Naudokite tinkamus jutiklius (pvz., temperatūros jutiklius, padėties jutiklius ir kt.), kad realiuoju laiku rinktumėte grįžtamojo ryšio duomenis iš valdymo objekto.
3. **Nustatytos vertės ir grįžtamojo ryšio verčių palyginimas**:
- Palyginkite nustatytą vertę (norimą vertę) su grįžtamojo ryšio reikšme ir apskaičiuokite klaidos reikšmę (klaida).
4. **PID skaičiavimas**:
- Kontrolinis kiekis (išvestis) apskaičiuojamas pagal PID algoritmo formulę: PID=Kp * Klaida + Ki * ∫ Klaida dt + Kd * d(Klaida)/dt.
- Kp, Ki ir Kd yra PID parametrai, Error yra klaidos reikšmė, ∫ Error dt reiškia integralinį terminą, o d(Klaida)/dt – diferencialinį terminą.
5. **Apribojimų tvarkymas** (neprivaloma):
- Kai kurioms programoms gali prireikti apriboti išvesties vertės diapazoną, kad nebūtų viršytas priimtinas valdymo objekto diapazonas.
6. **Išėjimo valdymo signalas**:
- Apskaičiuotas valdymo dydis išvedamas kaip valdymo signalas į pavarą (pvz., variklį, vožtuvą ir pan.), kad būtų galima reguliuoti ir valdyti valdymo objektą.
7. **Nustatykite valdymo dažnį**:
- Atsižvelgdami į konkrečių programų poreikius, nustatykite tinkamą valdymo dažnį, kad galėtumėte valdyti algoritmo vykdymo ciklą.
8. **PID algoritmo vykdymo ciklas**:
- Realiojo-laiko cikle pirmiau minėti veiksmai atliekami pakartotinai, siekiant nuolat stebėti grįžtamojo ryšio vertę, apskaičiuoti valdymo kiekį ir išvesti valdymo signalą, kad būtų užtikrintas stabilus objekto valdymas.
Faktiniame mikrovaldiklio programavime galite pasirinkti tinkamus kūrimo įrankius ir programavimo kalbą (pvz., C arba surinkimo kalbą) pagal konkretų mikrovaldiklio modelį ir kūrimo platformą. Pažymėtina, kad praktikoje PID algoritmui optimizuoti ir tobulinti bus daug technikų, tokių kaip integralinis atskyrimas, adaptyvusis PID ir kt., kurias bus galima toliau tirti ir diegti pagal konkrečius poreikius.
PID valdiklio principas ir darbo eiga
PID valdiklis susideda iš trijų dalių: proporcinio (P), integralo (I) ir diferencialinio (D) ir generuoja valdymo išvestį apdorodamas sistemos paklaidą, nuokrypį ir pokyčio greitį. Jo darbo eiga apima šiuos veiksmus:
- Tikslinių ir grįžtamojo ryšio verčių gavimas
- Apskaičiuokite klaidą
- Apskaičiuokite valdymo išvestį pagal proporcingumo koeficientą, integralinį narį ir diferencialinį narį.
- Valdiklio parametrų atnaujinimas
- Valdymo signalų išvedimas
STM32 kodo diegimas
Toliau pateikiamas PID valdiklio projektavimo ir įdiegimo naudojant STM32 mikrovaldiklį pavyzdys:
```c
#include "stm32f4xx.h"
// Apibrėžkite PID valdiklio parametrus
plūduriuoti Kp=0.5; // mastelio koeficientas
plūduriuoti Ki=0.2; // Integralinis koeficientas
plūduriuoti Kd=0.1; // Diferencialinis koeficientas
// Apibrėžkite saugyklos kintamuosius
plūdės nustatymo taškas=50.0; // tikslinė vertė
plaukiojantis atsiliepimas=0.0; // grįžtamojo ryšio reikšmė
float error=0.0; // klaida
float last_error=0.0; // paskutinė klaida
plūdinis integralas=0.0; // Integralus terminas
// PID valdiklio išėjimo skaičiavimo funkcija
float pidController (float dt)
float pidController(float dt) {
// Apskaičiuokite klaidą
klaida=setpoint - atsiliepimas; // Apskaičiuokite integralo narį.
// Apskaičiuokite integralo narį
integralinė += klaida * dt; // apskaičiuokite diferencialinį terminą
// Apskaičiuokite skirtumą
plaukiojanti išvestinė=(klaida - paskutinė_klaida) / dt; // apskaičiuoja valdymo išvestį.
// Apskaičiuokite valdymo išvestį
float output=Kp * klaida + Ki * integralas + Kd * išvestinė; // Apskaičiuokite valdymo išvestį.
// Atnaujinti paskutinę klaidą
paskutinė_klaida=klaida; // atnaujinti paskutinę klaidą.
paskutinė_klaida=klaida; grąžinti išvestį; // Apskaičiuokite valdymo išvestį.
}
int main (tuščia)
{
kol (1)
{
// Gaukite grįžtamojo ryšio vertę
// Gaukite laiko intervalą
// Apskaičiuokite PID išvestį
float dt=0.01; // 0,01 s kaip laiko intervalas pavyzdyje
float control_output=pidController(dt); // išveda valdymo signalą.
// Išveda valdymo signalą
// Atidėti valdymo signalą tam tikram laikui
už (int i=0; i 《 10000;i++).
}
grąžinti 0; }
}




