Kā realizēt pid vadību ar mikrokontrolleru

Jun 25, 2025 Atstāj ziņu

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; }

}

Nosūtīt pieprasījumu

whatsapp

Telefons

E-pasts

Izmeklēšana