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




