Saya telah melihat banyak artikel PID, seperti ini , menggunakan transformasi Z dari persamaan PID generik untuk mendapatkan beberapa persamaan perbedaan gila yang kemudian dapat diimplementasikan dalam perangkat lunak (atau dalam hal ini FPGA). Pertanyaan saya adalah, apa keuntungan implementasi seperti itu versus PID tradisional dan jauh lebih intuitif, tanpa PhDjenis implementasi? Yang kedua tampaknya lebih mudah dipahami dan diimplementasikan. Istilah P adalah perkalian lurus, integral menggunakan jumlah berjalan dan turunan diperkirakan dengan mengurangi sampel sebelumnya dari sampel saat ini. Jika Anda perlu menambahkan fitur seperti perlindungan Windup Integral, itu adalah aljabar lurus ke depan. Mencoba menambahkan perlindungan Windup Integral atau fitur lain ke algoritma tipe perbedaan, seperti yang ditautkan di atas, sepertinya akan jauh lebih rumit. Apakah ada alasan untuk menggunakan implementasi seperti itu, selain dari "Aku keledai buruk yang suka melakukan transformasi Z untuk bersenang-senang" yang menyombongkan hak yang menyertainya?
EDIT: PID tanpa artikel PHD yang saya tautkan adalah contoh implementasi yang lebih sederhana yang menggunakan jumlah berjalan untuk istilah integral dan perbedaan antara sampel berturut-turut untuk istilah derivatif. Ini dapat diimplementasikan dengan matematika titik tetap dalam cara deterministik dan dapat memasukkan informasi konstan waktu nyata dalam perhitungan, jika diinginkan. Saya pada dasarnya mencari keuntungan praktis untuk metode transformasi Z. Saya tidak bisa melihat bagaimana bisa lebih cepat, atau menggunakan lebih sedikit sumber daya. Alih-alih menjaga jumlah berjalan integral, metode Z tampaknya menggunakan output sebelumnya dan mengurangi komponen P dan D sebelumnya (untuk sampai pada jumlah integral dengan perhitungan). Jadi, kecuali seseorang dapat menunjukkan sesuatu yang saya lewatkan, saya akan menerima komentar AngryEE bahwa mereka pada dasarnya sama.
EDIT AKHIR: Terima kasih atas tanggapannya. Saya pikir saya telah belajar sedikit tentang masing-masing tetapi pada akhirnya, anggap Angry benar karena itu hanya masalah preferensi. Dua bentuk:
e(k-2)=e(k-1),
atau
u ( k ) = K p e ( k ) + K i T i ⋅ jumlah + K d
akan mengevaluasi pada dasarnya hal yang sama. Beberapa menyebutkan yang pertama dapat diimplementasikan dalam DSP atau FPGA lebih cepat, tapi saya tidak membelinya. Entah bisa vektor. Yang pertama membutuhkan dua operasi pos, yang kedua membutuhkan satu operasi pra dan satu operasi pos, sehingga tampaknya meratakan. Yang pertama juga membutuhkan 1 lebih banyak perkalian dalam perhitungan aktual.
Jawaban:
Anda menjadi bingung oleh semua keanggunan Z-transform. Kedua pendekatan ini pada dasarnya sama - PID tanpa pendekatan PHD hanya memiliki lebih sedikit subskrip. Mereka melakukan fungsi dasar yang sama dan menggunakan matematika dasar yang sama.
Satu-satunya perbedaan utama antara keduanya yang dapat saya lihat adalah bahwa PID tanpa PHD tidak memperhitungkan waktu pengambilan sampel. Untuk melakukan apa pun yang mungkin tidak stabil, waktu pengambilan sampel adalah pertimbangan yang sangat penting. Manfaat dari pendekatan Z-transform dalam hal ini adalah Anda tidak dapat menggunakannya tanpa memperhitungkan waktu pengambilan sampel - ini memaksa Anda untuk menunjukkan pekerjaan Anda dan membantu Anda merancang sistem yang lebih stabil.
Ini juga terlihat seperti studi kasus yang Anda temukan menerapkan pendekatan Z-transform dirancang untuk sangat deterministik. Ini menjelaskan penggunaan FPGA mereka - kalkulasi akan selalu mengambil jumlah waktu yang sama. PID tanpa implementasi PHD jelas tidak deterministik. Penggunaan ganda sebagai variabel bukan implementasi titik tetap pasti akan menyebabkan perilaku non-deterministik pada setiap mikrokontroler tanpa unit floating-point (dan mungkin pada UC dengan FPU juga). Studi kasus bekerja pada tingkat kompleksitas yang berbeda dibandingkan dengan PID tanpa pendekatan PHD.
Jadi secara fundamental pendekatan matematika dan kontrol adalah sama, tetapi studi kasus / pendekatan Z-transform lebih ketat dan didasarkan pada teori. Pendekatan PID tanpa PHD hanya akan bekerja untuk sistem yang sangat sederhana, tidak penting waktu yang relatif stabil.
sumber
Metode Z-transform merancang PID controller pada akhirnya akan menghasilkan implementasi yang jauh lebih efisien. Ini sangat penting jika Anda mendesain FPGA / DSP / Mikrokontroler terkecil untuk aplikasi Anda.
"PID tanpa PHD" yang disebutkan di atas mungkin merupakan pendekatan termudah untuk mengimplementasikan kontrol PID dalam perangkat lunak, tetapi menjadi rumit pada tingkat pengambilan sampel yang lebih tinggi.
Selain itu, Z-transform cocok untuk mendesain dalam domain diskrit (digital). Metode desain tradisional (Transformasi Laplace) lebih untuk waktu yang berkesinambungan. Ada beberapa cara untuk mengkonversi antara keduanya (Zero-Order Hold, Interpolasi Linear, Penempatan Pole, Bilinear / Tustin), masing-masing dilengkapi dengan kekuatan dan kelemahannya dalam hal stabilitas dan respons sistem. Secara umum hanya lebih mudah untuk melakukan seluruh desain dalam domain diskrit.
Singkatnya, jika Anda menggunakan sistem yang relatif "lambat" (semua perilaku utama terjadi secara signifikan di bawah 100kHz atau lebih), maka desain pertama mungkin baik-baik saja. Anda dapat mengimplementasikannya pada mikrokontroler atau PC dan selesai melakukannya. Ketika sistem menjadi lebih cepat, maka Anda mungkin harus menggunakan metode Z-transform untuk mendapatkan kecepatan yang Anda butuhkan (artikel tersebut menyebutkan 9.5MHz, dengan asumsi Anda memiliki A / D dan DAC yang dapat mengimbangi).
sumber
Inilah kesepakatannya, dalam pengalaman saya:
sum
") terpisah dalam variabel statusnya sendiri. Variabel keadaan itu memiliki makna. Implementasi pertama membuat variabel status sebagai riwayat kesalahan yang lalu; itu memiliki makna, tetapi memberikan sedikit wawasan menurut saya.Akhirnya ada masalah lain yang melibatkan nonlinier atau analisis yang sering membuat Anda memilih satu implementasi lebih dari yang lain (bagi saya itu selalu merupakan pendekatan klasik untuk pengendali, untuk filter FIR itu adalah transformasi Z, dan untuk filter IIR 1 atau 2 tiang biasanya merupakan pendekatan klasik):
Untuk pengendali, saya selalu menyimpan integrator sebagai variabel keadaan, bukan sampel kesalahan masa lalu. Alasannya adalah bahwa sistem yang sebenarnya sering membutuhkan anti-windup di mana Anda harus menjepit integral agar tidak terlalu positif atau terlalu negatif. (Dan jika Anda menerapkan dalam titik-tetap, Anda harus tetap melakukan ini, karena kondisi sampul ketika Anda menekan overflow akan melakukan Hal-hal Buruk terhadap perilaku loop kontrol Anda)
Untuk alasan yang sama, saya juga selalu menghitung integrator dengan cara yang disebut keluaran: misal
sum += Ki*error; out = stuff + sum
daripadasum += error; out = stuff + Ki*sum
. Dengan pendekatan kedua, jika Anda mengubah gain Ki, itu mengukur efek integrator pada output naik dan turun, yang mungkin bukan yang Anda inginkan, dan batasnya berubah tergantung pada gain. Jika Anda mengalikan kesalahan dengan Ki sebelum mengintegrasikan, unit integrator Anda sama dengan unit output loop kontrol, dan memiliki arti fisik yang lebih jelas.(pembaruan: Saya telah menulis entri blog tentang topik ini secara lebih rinci.)
sumber
Edit :
Menggunakan Z-transform memudahkan untuk menggabungkan dan menyederhanakan sistem LTI untuk analisis . Sebagai contoh, serangkaian rangkaian sistem LTI k dengan fungsi transfer H1, H2, ..., Hk akan bergabung sebagai produk sederhana
H = H1*H2*...*Hk
. Juga, fungsi transfer loop umpan balik negatif adalahT = G/(1 + G*H)
, di mana H berada di jalur umpan balik. Setelah Anda memiliki fungsi transfer keseluruhan, Anda dapat menganalisis stabilitas (lokasi kutub) dan kinerja (transien, kesalahan kondisi tetap), menambahkan filter dan umpan balik tambahan untuk mengoptimalkan desain.Untuk sub-sistem tingkat tinggi, Anda dapat mempartisi fungsi sistem dan mengimplementasikannya sebagai serangkaian biquad bertingkat (yaitu dengan pasangan nol dan kutub, seperti konjugat kompleks atau akar berulang), yang mengurangi ketidakstabilan yang disebabkan oleh kuantisasi. Biquad bentuk kanonik:
sumber
Bagian yang sulit tentang kontroler PID bukanlah kode itu sendiri. Masalah sebenarnya muncul ketika mencoba mengoptimalkan pengontrol. Tentu Anda dapat melakukan coba-coba dan mendapatkan pengontrol yang cukup baik, tetapi beberapa sistem terlalu rumit untuk metode coba-coba agar mudah dilakukan. Sistem yang sama ini cenderung menjadi yang membutuhkan pengontrol yang sangat baik, bukan hanya yang layak. Dalam hal ini Z-transform jauh lebih mudah untuk dianalisis.
Hal lain yang perlu dipikirkan adalah stabilitas sistem. Anda mungkin berurusan dengan sistem yang agak sulit menjadi tidak stabil, atau bahkan jika itu tidak menyakiti apa pun. Tetapi ada banyak sistem yang dapat memiliki hasil bencana jika controller menyebabkannya menjadi tidak stabil. Z-transform adalah tempat lain di mana lebih mudah untuk mengidentifikasi apakah akan ada masalah.
Dan 1 catatan terakhir. Saat menganalisis suatu sistem secara keseluruhan, Anda harus mendapatkan persamaan untuk semua komponen dalam sistem Anda. Tentu Anda bisa mendapatkannya dari PID tanpa gelar PhD, tetapi jika Anda sudah menggunakannya dengan metode Z-transform, ada jauh lebih sedikit pekerjaan bolak-balik yang harus Anda lakukan.
Sekarang, sebagai preferensi pribadi, saya selalu menggunakan metode PID tanpa PhD. Ini hanya karena saya hanya menggunakan pengontrol mikro dengan sistem yang tidak terlalu tergantung pada pengontrol.
sumber
Ada beberapa poin mengapa bentuk Z-transform memiliki utilitas yang lebih tinggi.
Tanyakan siapa pun yang mempromosikan pendekatan berbasis waktu / sederhana / sans-PHD apa yang ditetapkan istilah Kd mereka. Mereka cenderung menjawab 'nol' dan mereka cenderung mengatakan D tidak stabil (tanpa filter low-pass). Sebelum saya belajar bagaimana semua ini terjadi, saya akan dan memang mengatakan hal-hal seperti itu.
Tuning Kd sulit dalam domain waktu. Ketika Anda dapat melihat fungsi transfer (transformasi-Z dari sub-sistem PID) Anda dapat melihat seberapa stabilnya. Anda juga siap melihat bagaimana istilah D mempengaruhi pengontrol relatif terhadap parameter lainnya. Jika parameter Kd Anda berkontribusi 0,00001 ke koefisien z-polinomial tetapi istilah Ki Anda memasukkan 10,5 maka istilah D Anda terlalu kecil untuk memiliki efek nyata pada sistem. Anda juga dapat melihat saldo antara ketentuan Kp & Ki.
DSP dirancang untuk menghitung finite-difference-Equations (FDE). Mereka memiliki op-kode yang akan mengalikan koefisien, menjumlahkan ke akumulator, dan menggeser nilai dalam buffer dalam satu siklus instruksi. Ini mengeksploitasi sifat paralel FDE. Jika mesin kekurangan op-code ini ... itu bukan DSP. Embedded PowerPC (MPC) memiliki perangkat yang didedikasikan untuk perhitungan FDE (mereka menyebutnya unit penipisan). DSP dirancang untuk menghitung FDE karena itu sepele untuk mengubah fungsi transfer menjadi FDE. 16-bit tidak cukup rentang dinamis untuk dengan mudah mengukur koefisien. Banyak DSP awal sebenarnya memiliki kata-kata 24-bit untuk alasan ini (saya percaya kata-kata 32-bit adalah umum saat ini.)
IIRC, yang disebut transformasi bilinear mengambil fungsi transfer (z-transform dari pengontrol domain waktu) dan mengubahnya menjadi FDE. Membuktikannya 'sulit', menggunakannya untuk mendapatkan hasil adalah sepele - Anda hanya perlu formulir yang diperluas (gandakan semuanya) dan koefisien polinomial adalah koefisien FDE.
Kontroler PI bukanlah pendekatan yang bagus - pendekatan yang lebih baik adalah membangun model bagaimana sistem Anda berperilaku dan menggunakan PID untuk koreksi kesalahan. Modelnya harus sederhana dan berdasarkan pada fisika dasar dari apa yang Anda lakukan. Ini adalah umpan-maju ke blok kontrol. Blok PID kemudian mengoreksi kesalahan menggunakan umpan balik dari sistem yang dikendalikan.
Jika Anda menggunakan nilai yang dinormalkan, [-1 .. 1] atau [0 ... 1], untuk set-point (referensi), umpan balik, & umpan-maju maka Anda dapat menerapkan satu algoritma 2-kutub 2-nol di perakitan DSP yang dioptimalkan dan Anda dapat menggunakannya untuk menerapkan filter urutan ke-2 yang mencakup PID dan filter low-pass (atau high-pass) paling dasar. Inilah sebabnya mengapa DSP's memiliki op-kode yang mengandaikan nilai-nilai yang dinormalisasi, misalnya yang akan menampilkan perkiraan kuadrat-kuadrat untuk rentang (0..1] Anda dapat menempatkan dua filter 2p2z secara seri dan membuat filter 4p4z, ini memungkinkan Anda memanfaatkan kode 2P2z DSP Anda untuk, katakanlah, menerapkan filter Butterworth low-pass 4-tap.
Sebagian besar implementasi domain waktu memanggang istilah dt ke dalam parameter PID (Kp / Ki / Kd). Sebagian besar implementasi z-domain tidak. dt dimasukkan ke dalam persamaan yang mengambil Kp, Ki, & Kd dan mengubahnya menjadi koefisien [] & b [] sehingga kalibrasi Anda (tuning) dari pengontrol PID sekarang tidak tergantung pada laju kontrol. Anda dapat menjalankannya sepuluh kali lebih cepat, mengeluarkan matematika a [] & b [] dan pengontrol PID akan memiliki kinerja yang konsisten.
Hasil alami menggunakan FDE adalah bahwa algoritma secara implisit "glitchless". Anda dapat mengubah keuntungan (Kp / Ki / Kd) sambil jalan dan berjalan dengan baik - tergantung pada implementasi waktu-domain ini bisa buruk.
Banyak upaya biasanya dihabiskan pada pengontrol PID domain waktu untuk mencegah pemutusan integral. Ada trik sederhana dengan bentuk FDE yang membuat PID berperilaku baik, Anda dapat menjepit nilainya di buffer sejarah. Saya belum melakukan matematika untuk melihat bagaimana ini mempengaruhi perilaku filter (berkenaan dengan parameter Kp / Ki / Kd), tetapi hasil empirisnya adalah bahwa itu 'halus'. Ini mengeksploitasi sifat 'glitchless' dari bentuk FDE. Model umpan-maju berkontribusi untuk mencegah wind-up integral dan penggunaan istilah D membantu menyeimbangkan istilah I. PID benar-benar tidak berfungsi sebagaimana dimaksud dengan keuntungan D. (Slewing setpoints adalah fitur kunci lain untuk mencegah angin berlebihan.)
Terakhir, transformasi-Z adalah topik sarjana, bukan "Ph.D." Anda seharusnya sudah mempelajari semuanya dalam Analisis Kompleks. Di sinilah universitas tempat Anda kuliah, instruktur yang Anda miliki, dan upaya yang Anda lakukan untuk mempelajari matematika dan mempelajari cara menggunakan alat yang tersedia dapat membuat perbedaan signifikan dalam kemampuan Anda untuk tampil di industri. (Kelas Analisis Kompleks saya mengerikan.)
Alat industri defacto adalah Simulink (yang tidak memiliki sistem komputer-aljabar, CAS, sehingga Anda memerlukan alat lain untuk mengubah persamaan umum). MathCAD atau wxMaxima adalah pemecah simbolis yang dapat Anda gunakan pada PC dan saya belajar cara melakukannya menggunakan kalkulator TI-92. Saya pikir TI-89 juga memiliki sistem CAS.
Anda dapat mencari persamaan z-domain atau laplace-domain di wikipedia untuk filter PID & low-pass. Ada langkah di sini yang saya tidak grok, saya percaya Anda memerlukan bentuk domain-waktu-disk dari kontroler PID maka perlu mengambil z-transform itu. Transformasi laplace harus sangat mirip dengan z-transform dan diberikan sebagai PID {s} = Kp + Ki / s + Kd · s Saya pikir z-transform akan menjelaskan Dt dalam persamaan berikut. Dt adalah delta-t [ime], saya menggunakan Dt karena tidak membingungkan konstanta ini dengan turunan 'dt'.
Dan ini adalah FDE 2p2z:
DSP biasanya hanya memiliki multiply & add (bukan multiply & kurangi) sehingga Anda dapat melihat negasi digulung ke dalam koefisien []. Tambahkan lebih banyak b untuk lebih banyak kutub, tambahkan lebih banyak untuk lebih banyak nol.
sumber
Lebih baik menggunakan metode transformasi Z secara umum, karena dengan melakukan ini, Anda mempertahankan perilaku yang tepat dari sistem analog yang setara. Ada metode penyetelan terkenal, seperti Ziegler-Nichols, yang bekerja di domain analog seperti yang dipublikasikan. Jika Anda menggunakan metode transformasi Z, Anda memiliki ekspektasi yang ketat secara matematis bahwa controller yang dihasilkan Anda akan melakukan hal yang sama untuk nilai yang sama dari keuntungan P, I dan D, yang akan dilakukannya dalam domain analog, mengingat keuntungan tersebut. Plus Anda dapat menggambar root-locus diskrit untuk sistem dan memprediksi stabilitas untuk set keuntungan tertentu, yang tidak dapat dilakukan jika Anda membuat ad hoc controller langsung dalam kode.
sumber