PID vadības algoritms ir plaši izmantots vadības algoritms, PID kontrolei ir regulējamu parametru priekšrocības, plašs lietojumu klāsts, augsta vadības precizitāte. Praktiskajā inženierijā PID algoritmu var izmantot elektromehāniskajai vadībai, rūpnieciskajai automatizācijai, robotu vadībai, mikroprocesoru vadībai un daudzām citām jomām.
Tiek regulēti trīs PID algoritma parametri: proporcionalitātes konstante Kp, integrālā laika konstante Ti, diferenciālā laika konstante Td. Dažādām sistēmām ir jāiestata dažādi PID parametri, un parasti ir nepieciešams iegūt optimālos parametrus, izmantojot eksperimentus un atkļūdošanu. Proporcionalitātes konstante Kp regulē proporciju, regulējot izejas un atgriezeniskās saites kļūdu attiecību vadības sistēmā; integrāļa laika konstante Ti pielāgo integrāli, regulējot kļūdu uzkrāšanos vadības sistēmā; diferenciālā laika konstante Td pielāgo diferenciāli, regulējot kļūdu izmaiņu ātrumu vadības sistēmā.
Kāda ir ideja realizēt pid algoritmu ar mikrokontrolleri
Lai realizētu PID vadības algoritmu uz mikrokontrollera, vispārīgā realizācijas ideja ir šāda:
1. **Nosakiet PID parametrus**:
- Atbilstoši faktiskā kontroles objekta īpašībām un vajadzībām izvēlieties atbilstošo proporcionalitātes koeficientu (Kp), integrācijas laiku (Ti) un diferenciācijas laiku (Td).
2. ** Sensoru datu iegūšana**:
- Izmantojiet atbilstošus sensorus (piem., temperatūras sensorus, pozīcijas sensorus utt.), lai reāllaikā savāktu atgriezeniskās saites datus no vadības objekta.
3. **Iestatītās vērtības un atgriezeniskās saites vērtību salīdzinājums**:
- Salīdziniet iestatīto vērtību (vēlamo vērtību) ar atgriezeniskās saites vērtību un aprēķiniet kļūdas vērtību (kļūda).
4. **PID aprēķins**:
- Kontroles apjoms (izvade) tiek aprēķināts pēc PID algoritma formulas: PID=Kp * Error + Ki * ∫ Error dt + Kd * d(Error)/dt.
- Kp, Ki un Kd ir PID parametri, Error ir kļūdas vērtība, ∫ Error dt apzīmē integrālo terminu un d(Error)/dt apzīmē diferenciālo terminu.
5. **Ierobežota apstrāde** (neobligāti):
- Dažām lietojumprogrammām var būt nepieciešams ierobežot izvades vērtības diapazonu, lai izvairītos no vadības objekta pieņemamā diapazona pārsniegšanas.
6. **Izejas vadības signāls**:
- Aprēķinātais vadības daudzums tiek izvadīts kā vadības signāls izpildmehānismam (piemēram, motoram, vārstam utt.), lai realizētu vadības objekta regulēšanu un vadību.
7. **Iestatiet vadības frekvenci**:
- Atbilstoši konkrētu lietojumprogrammu vajadzībām iestatiet atbilstošu vadības frekvenci, lai kontrolētu algoritma izpildes ciklu.
8. **PID algoritma izpildes cikla izpilde**:
- Reālā-laika ciklā iepriekš minētās darbības tiek izpildītas atkārtoti, lai nepārtraukti uzraudzītu atgriezeniskās saites vērtību, aprēķinātu kontroles daudzumu un izvadītu vadības signālu, lai realizētu objekta stabilu vadību.
Faktiskajā mikrokontrollera programmēšanā jūs varat izvēlēties atbilstošos izstrādes rīkus un programmēšanas valodu (piemēram, C vai montāžas valodu) atbilstoši konkrētajam mikrokontrollera modelim un izstrādes platformai. Jāpiebilst, ka praktiskajās pielietojumos būs daudz paņēmienu PID algoritma optimizēšanai un uzlabošanai, piemēram, integrālā atdalīšana, adaptīvais PID u.c., ko varēs tālāk pētīt un ieviest atbilstoši konkrētām vajadzībām.
PID regulatora princips un darbplūsma
PID regulators sastāv no trim daļām: proporcionālā (P), integrālā (I) un diferenciālā (D), un ģenerē vadības izvadi, apstrādājot sistēmas kļūdu, novirzi un izmaiņu ātrumu. Tās darbplūsma ietver šādas darbības:
- Mērķa un atgriezeniskās saites vērtību iegūšana
- Aprēķiniet kļūdu
- Aprēķiniet vadības izvadi, pamatojoties uz proporcionalitātes koeficientu, integrālvārdu un diferenciālvārdu.
- Kontroliera parametru atjaunināšana
- Vadības signālu izvadīšana
STM32 koda ieviešana
Šis ir koda paraugs PID kontrollera projektēšanai un ieviešanai, izmantojot STM32 mikrokontrolleri:
```c
#include "stm32f4xx.h"
// Definējiet PID regulatora parametrus
peldēt Kp=0.5; // mēroga koeficients
peldēt Ki=0.2; // Integrālais koeficients
peldēt Kd=0.1; // Diferenciālais koeficients
// Definējiet krātuves mainīgos
peldošā uzdotā vērtība=50.0; // mērķa vērtība
float atsauksmes=0.0; // atgriezeniskās saites vērtība
peldēšanas kļūda=0.0; // kļūda
peldēt pēdējā_kļūda=0.0; // pēdējā kļūda
pludiņa integrālis=0.0; // Integrāls termins
// PID regulatora izejas aprēķina funkcija
float pidController(float dt)
float pidController(float dt) {
// Aprēķiniet kļūdu
kļūda=setpoint - atsauksmes; // Aprēķināt integrāļa terminu.
// Aprēķināt integrāļa terminu
integrālā += kļūda * dt; // aprēķina diferenciālo terminu
// Aprēķināt diferenciāli
peldošais atvasinājums=(kļūda - pēdējā_kļūda) / dt; // aprēķina vadības izvadi.
// Aprēķināt vadības izvadi
pludiņa izvade=Kp * kļūda + Ki * integrālis + Kd * atvasinājums; // Aprēķināt vadības izvadi.
// Atjaunināt pēdējo kļūdu
last_error=error; // atjaunināt pēdējo kļūdu.
last_error=error; atgriešanas izeja; // Aprēķināt vadības izvadi.
}
int main (neesošs)
{
kamēr (1)
{
// Iegūstiet atgriezeniskās saites vērtību
// Iegūstiet laika intervālu
// Aprēķināt PID izvadi
peldēt dt=0.01; // 0,01 s kā laika intervāls piemērā
float control_output=pidController(dt); // izvada vadības signālu.
// Izvada vadības signālu
// Aizkavēt vadības signālu uz noteiktu laiku
for (int i=0; i 《 10000;i++).
}
atgriezties 0; }
}




