Algorithm kontwòl PID se yon algorithm kontwòl lajman itilize, kontwòl PID gen avantaj ki genyen nan paramèt reglabl, pakèt aplikasyon, presizyon kontwòl segondè. Nan jeni pratik, algorithm PID ka aplike nan kontwòl elektwomekanik, automatisation endistriyèl, kontwòl robo, kontwòl mikropwosesè ak anpil lòt jaden.
Twa paramèt algorithm PID yo ajiste: pwopòsyonalite konstan Kp, entegral tan konstan Ti, diferans tan konstan Td. Diferan sistèm bezwen mete diferan paramèt PID, epi li jeneralman nesesè pou jwenn paramèt optimal yo atravè eksperyans ak debogaj. Konstan pwopòsyonèl Kp ajiste pwopòsyon an, ajiste rapò pwodiksyon ak erè fidbak nan sistèm kontwòl la; konstan tan entegral Ti ajiste entegral la, ajiste akimilasyon erè nan sistèm kontwòl la; diferans lan tan konstan Td ajiste diferans lan, ajiste pousantaj chanjman erè nan sistèm kontwòl la.
Ki lide pou reyalize algorithm pid ak mikrokontroleur
Pou reyalize algorithm kontwòl PID sou yon mikrokontwolè, sa ki annapre yo se lide jeneral nan realizasyon:
1. **Detèmine paramèt PID yo**:
- Dapre karakteristik ak bezwen objè kontwòl aktyèl la, chwazi koyefisyan pwopòsyonèl apwopriye (Kp), tan entegrasyon (Ti) ak tan diferansyasyon (Td).
2. **Akizisyon done Capteur**:
- Sèvi ak detèktè apwopriye (egzanp, detèktè tanperati, detèktè pozisyon, elatriye) pou kolekte done fidbak nan objè kontwòl la an tan reyèl.
3. **Mete valè ak konparezon valè fidbak**:
- Konpare valè a mete (valè vle) ak valè fidbak la epi kalkile valè erè a (Erè).
4. **Kalkil PID**:
- Kantite kontwòl la (pwodiksyon) kalkile dapre fòmil algorithm PID la: PID=Kp * Erè + Ki * ∫ Erè dt + Kd * d(Erè)/dt.
- Kp, Ki ak Kd se paramèt PID yo, Erè se valè erè a, ∫ Erè dt vle di tèm entegral la epi d(Erè)/dt vle di tèm diferans lan.
5. **Manitasyon Limit** (si ou vle):
- Pou kèk aplikasyon, li ka nesesè pou limite ranje valè pwodiksyon an pou evite depase ranje akseptab objè kontwòl la.
6. **Siyal kontwòl pwodiksyon**:
- Kantite kontwòl kalkile a se pwodiksyon kòm yon siyal kontwòl nan actuator la (egzanp motè, valv, elatriye) reyalize règleman an ak kontwòl nan objè kontwòl la.
7. **Mete frekans kontwòl**:
- Dapre bezwen aplikasyon espesifik yo, mete frekans kontwòl apwopriye pou kontwole sik ekzekisyon algorithm la.
8. **Sik ekzekisyon algorithm PID**:
- Nan sik tan reyèl-, etap ki anwo yo yo egzekite repete pou kontwole valè fidbak la, kalkile kantite kontwòl la, ak pwodiksyon siyal kontwòl la pou reyalize kontwòl ki estab nan objè a.
Nan pwogramasyon mikrokontwolè aktyèl la, ou ka chwazi zouti devlopman apwopriye ak langaj pwogramasyon (tankou C oswa langaj asanble) dapre modèl espesifik mikrokontroleur ak platfòm devlopman. Li ta dwe remake ke nan aplikasyon pratik, pral gen anpil teknik pou optimize ak amelyore algorithm PID la, tankou separasyon entegral, adaptasyon PID, elatriye, ki ka plis rechèch ak aplike selon bezwen espesifik.
PID kontwolè prensip ak workflow
Kontwolè PID a konsiste de twa pati: pwopòsyonèl (P), entegral (I) ak diferans (D), ak jenere pwodiksyon kontwòl la pa trete erè, devyasyon ak pousantaj chanjman nan sistèm nan. Flux travay li gen ladan etap sa yo:
- Jwenn valè sib ak fidbak
- Kalkile erè a
- Kalkile pwodiksyon kontwòl la baze sou koyefisyan pwopòsyonalite, tèm entegral ak tèm diferans.
- Mete ajou paramèt kontwolè yo
- Pwodiksyon siyal kontwòl yo
STM32 kòd aplikasyon
Sa ki anba la a se echantiyon kòd pou konsepsyon ak aplike yon kontwolè PID lè l sèvi avèk yon mikrokontroleur STM32:
```c
#include "stm32f4xx.h"
// Defini paramèt kontwolè PID yo
flote Kp=0.5; // echèl faktè
flote Ki=0.2; // Koyefisyan entegral
flote Kd=0.1; // Koefisyan diferans
// Defini varyab depo
flote setpoint=50.0; // sib valè
flote fidbak=0.0; // valè fidbak
erè flote=0.0; // erè
flote dènye_erè=0.0; // dènye erè
flote entegral=0.0; // Tèm entegral
// PID kontwolè pwodiksyon fonksyon kalkil
float pidController (float dt)
float pidController(float dt) {
// Kalkile erè a
erè=fikse - fidbak; // Kalkile tèm entegral la.
// Kalkile tèm entegral la
entegral += erè * dt; // kalkile tèm diferans lan
// Kalkile diferans lan
flote derive=(erè - dènye_erè) / dt; // kalkile pwodiksyon kontwòl la.
// Kalkile pwodiksyon kontwòl la
flote pwodiksyon=Kp * erè + Ki * entegral + Kd * derive; // Kalkile pwodiksyon kontwòl la.
// Mete ajou dènye erè
last_error=erè; // mete ajou dènye erè.
last_error=erè; retounen pwodiksyon; // Kalkile pwodiksyon kontwòl la.
}
int prensipal (anile)
{
pandan (1)
{
// Jwenn valè fidbak la
// Jwenn entèval tan an
// Kalkile pwodiksyon PID la
flote dt=0.01; // 0.01s kòm entèval tan nan egzanp lan
float control_output=pidController(dt); // pwodiksyon siyal kontwòl la.
// Sortie siyal kontwòl la
// Reta siyal kontwòl la pou yon sèten peryòd tan
pou (int mwen=0; mwen 《 10000;i++).
}
retounen 0; }
}




