Hur implementerar en mikrokontroller PID-kontroll?

Jul 23, 2026 Lämna ett meddelande

PID-kontrollalgoritmen är för närvarande en av de mest använda kontrollalgoritmerna. PID-kontroll erbjuder fördelar som justerbara parametrar, ett brett utbud av applikationer och hög kontrollnoggrannhet. Inom praktisk teknik kan PID-algoritmen tillämpas på olika områden, inklusive elektromekanisk styrning, industriell automation, robotik och mikroprocessorstyrning.


De tre parametrarna för PID-algoritmen är: den proportionella förstärkningen Kp, den integrala tidskonstanten Ti och den derivativa tidskonstanten Td. Olika system kräver olika PID-parametrar, och optimala parametrar erhålls vanligtvis genom experiment och felsökning. Den proportionella konstanten Kp justerar den proportionella förstärkningen och styr förhållandet mellan systemets uteffekt och återkopplingsfelet under drift; integraltidskonstanten Ti justerar integralförstärkningen, kontrollerar ackumuleringen av fel under systemdrift; och den derivata tidskonstanten Td justerar derivatförstärkningen, kontrollerar ändringshastigheten för fel i styrsystemet.


Vad är tillvägagångssättet för att implementera PID-algoritmen på en mikrokontroller?


För att implementera en PID-kontrollalgoritm på en mikrokontroller är det allmänna tillvägagångssättet som följer:

1. **Fastställ PID-parametrar**:

- Välj lämplig proportionell förstärkning (Kp), integraltid (Ti) och derivattid (Td) baserat på egenskaperna och kraven för det faktiska kontrollerade objektet.


2. **Sensordatainsamling**:

- Använd lämpliga sensorer (som temperatursensorer, positionssensorer, etc.) för att samla in realtids-feedbackdata från det kontrollerade objektet.


3. **Jämförelse av börvärden och återkopplingsvärden**:

- Jämför börvärdet (önskat värde) med återkopplingsvärdet för att beräkna felet (fel).


4. **PID-beräkning**:

- Beräkna kontrollvariabeln (utdata) med PID-algoritmformeln: PID=Kp * Error + Ki * ∫ Error dt + Kd * d(Error)/dt.

- Kp, Ki och Kd är PID-parametrar; Error är felvärdet; ∫ Fel dt representerar integraltermen; och d(Fel)/dt representerar derivattermen.


5. **Begränsande** (valfritt):

- För vissa applikationer kan det vara nödvändigt att begränsa intervallet för utdatavärdet för att förhindra att det överskrider det acceptabla intervallet för det kontrollerade objektet.


6. **Utgångskontrollsignal**:

- Den beräknade styrvariabeln används som en styrsignal och skickas till ställdonet (som en motor eller ventil) för att reglera och styra det kontrollerade objektet.


7. **Ställ in kontrollfrekvensen**:

- Ställ in en lämplig kontrollfrekvens-körningscykeln för kontrollalgoritmen-baserat på de specifika applikationskraven.


8. **Iterera PID-algoritmen**:

- I en realtidsslinga, kör upprepade gånger ovanstående steg för att kontinuerligt övervaka återkopplingsvärdet, beräkna styrvariabeln och mata ut styrsignalen för att uppnå stabil kontroll av systemet.


I faktisk mikrokontrollerprogrammering kan du välja lämpliga utvecklingsverktyg och programmeringsspråk (som C eller assemblerspråk) baserat på den specifika mikrokontrollermodellen och utvecklingsplattformen. Det bör noteras att i praktiska tillämpningar finns det många tekniker för att optimera och förbättra PID-algoritmen, såsom integral separation och adaptiv PID, som kan undersökas ytterligare och implementeras enligt specifika krav.

 

Principer och drift av PID-regulatorer


En PID-regulator består av tre komponenter: proportionell (P), integral (I) och derivata (D). Den genererar en kontrollutgång genom att bearbeta systemets fel, avvikelse och förändringshastighet. Dess funktion innefattar följande steg:


- Få börvärdena och återkopplingsvärden

- Beräkna felet

- Beräkna kontrollutgången baserat på proportionell förstärkning, integralterm och derivatterm

- Uppdatera styrenhetens parametrar

- Mata ut styrsignalen


Implementering av STM32-kod

 

Följande är exempelkod för att designa och implementera en PID-kontroller med en STM32-mikrokontroller:

```c

#include "stm32f4xx.h"

// Definiera PID-regulatorparametrar

flyta Kp=0.5; // Proportionell vinst

flyta Ki=0.2; // Integral förstärkning

flyta Kd=0.1; // Derivatvinst

// Definiera lagringsvariabler

flytande börvärde=50.0; // Börvärde

flytåterkoppling=0.0; // Feedback värde

flytfel=0.0; // Fel

float last_error=0.0; // Tidigare fel

flytande integral=0.0; // Integral term

// Funktion för beräkning av PID-regulatorns utgång

float pidController(float dt)

{

// Beräkna fel

fel=börvärde - feedback;

// Beräkna integralterm

integral += fel * dt;

// Beräkna derivatterm

floatderivata=(fel - last_error) / dt;

// Beräkna kontrollutgång

flytande utgång=Kp * fel + Ki * integral + Kd * derivata;

// Uppdatera tidigare fel

last_error=fel;

returnera utgång;

}

int main(void)

{

medan (1)

{

// Hämta feedback värde

// Ställ in tidsintervall

// Beräkna PID-utgång

float dt=0.01; // I det här exemplet är tidsintervallet 0,01 s

float control_output=pidController(dt);

// Mata ut styrsignalen

// Försening under en period

for (int i=0; i < 10000; i++);

}

returnera 0;

}

Skicka förfrågan

whatsapp

Telefon

E-post

Förfrågning