Implementasi D (diferensiasi) dalam PID

8

Saya menerapkan kontroler PID untuk kontrol kecepatan motor. Saya sudah selesai dengan menerapkan kontrol PI dan itu berfungsi dengan baik untuk saya. Dalam spesifikasi saya telah diberitahu untuk menerapkan teknik penyaringan dengan menggunakan persamaan berikut untuk bagian D:

masukkan deskripsi gambar di sini

Sekarang apa yang saya pahami sejauh ini, adalah yang secara umum smewakili "dx/dt"yang sesuai dengan tingkat perubahan kesalahan, tetapi di sini saya dapat menghubungkannya dengan tingkat perubahan umpan balik. Td/Nadalah untuk membatasi output gain secara keseluruhan (harap saya mendapatkan hak ini). Sekarang untuk mewakili ini dalam hal kode C, saya mencoba cara berikut:

        s = (CurrentFeedback()-Old_Feedback)*100/(MaxFeedback()); //to calculate the % change in feedback
        s = s*1000/sampleTime;      //1000 is multiplied because sampleTime is in milliseconds
        D = (Td*s)/(1+(s*Td/N));
        D = D*KP;   //Kp is multiplied as per the standard pid equation.

        Old_Feedback = CurrentFeedback();
        PID = P+I-D;

Yah hasilnya dengan menambahkan D bukan yang telah saya prediksi. Saya hanya ingin tahu apakah saya menerapkan persamaan bagian D dengan benar? Apakah saya membuat kesalahan dalam pemahaman saya tentang matematika dasar diferensiasi?

CATATAN: Saya tidak bebas untuk mengubah penghitungan ulang kp, ti, td karena langsung dari VFD.

spp
sumber
Coba embedded.com/design/prototyping-and-development/4211211/… , "PID tanpa gelar PhD". Ada bagian yang jelas tentang implementasi turunannya.
Scott Seidman
2
Ketika Anda mendeklarasikan Old_Feedback = CurrentFeedback () salah. Anda harus membaca nilai dengan CurrentFeedback () dan menyimpannya di temp. Variabel CurrentFeedback_tmp, kemudian gunakan nilai itu setiap kali dalam ISR itu, karena kapan saja Anda memanggil CurrentFeedback fct () itu mengambil nilai aktual yang akan berbeda setiap kali Anda mengingatnya.
Marko Buršič
"hasil dengan menambahkan D bukan apa yang telah saya prediksi" - apa yang telah Anda prediksi? Mengapa mereka berbeda?
Greg d'Eon
Ada potensi besar untuk kelebihan integer di sini. Apa saja jenis variabel yang terlibat dan sudahkah Anda mempertimbangkan nilai maksimumnya?
Lundin
s, D adalah S32, KP, Td dan N U16. waktu sampel adalah U32, saya menganggap nilai maksimum variabel sesuai nilai maksimum yang dimungkinkan dari tipe data tertentu.
spp

Jawaban:

1

Saya punya 3 poin untuk dibagikan:

1-Saya akan memberi tahu Anda mengapa orang-orang mengacaukan interms istilah D, PID = P + I + D tetapi, D = kd * (error -olderror), dan dalam kontrol posisi jika Anda mendekati titik setel, selalu lebih lama <error jadi istilah D akan negatif, dan dengan demikian mengurangi output dan mencegah overshoot.

2-Mengenai waktu, jangan membagi atau menggunakan waktu. karena Anda menggunakan mikrokontroler tertanam, gunakan tetapkan saja waktu dan batalkan dari semua persamaan: misalnya gunakan penghitung waktu untuk menghasilkan konstanta waktu 1 ms dan panggil fungsi Anda di dalam.

3-Mengapa Anda menggunakan PID untuk kontrol kecepatan, 90% dari waktu PI cukup dalam kontrol kecepatan, karena D di sini lebih seperti kontrol percepatan.

Semoga itu bisa membantu

Elektron
sumber