Apa strategi yang baik untuk mengatur loop PID?

55

Keuntungan tuning controller bisa sulit, strategi umum apa yang bekerja dengan baik untuk mendapatkan sistem yang stabil yang menyatu ke solusi yang tepat?

Felix
sumber
1
Pertanyaan yang ditargetkan pada pertanyaan yang lebih spesifik akan lebih bermanfaat. Jika tidak, Anda hanya perlu melihat artikel PID , dengan bagian tentang penyetelan
ronalchn
2
Saya selalu menemukan tuning PID sangat tergantung pada karakteristik sistem, itulah sebabnya saya tidak pernah menemukan sistem auto-tune sangat berguna. Mereka baik untuk lulus pertama, set parameter kinerja rendah, tetapi mereka jauh dari optimal, dan Anda akan memiliki masalah yang sama dengan strategi umum yang tidak dioptimalkan untuk aspek mekanik, listrik dan aspek kontrol dari sistem yang diberikan.
Mark Booth

Jawaban:

66

Untuk motor kecil, torsi rendah dengan sedikit atau tanpa gearing, satu prosedur yang dapat Anda gunakan untuk mendapatkan nada dasar yang baik adalah untuk menyelidiki responsnya terhadap gangguan.

Untuk menyetel PID gunakan langkah-langkah berikut:

  1. Tetapkan semua keuntungan ke nol.
  2. Tingkatkan P gain hingga respons terhadap gangguan adalah osilasi yang stabil.
  3. Tingkatkan gain D sampai osilasi hilang (yaitu, itu sangat teredam).
  4. Ulangi langkah 2 dan 3 hingga meningkatkan penguatan D tidak menghentikan osilasi.
  5. Tetapkan P dan D ke nilai stabil terakhir.
  6. Tingkatkan gain I sampai ia membawa Anda ke setpoint dengan jumlah osilasi yang diinginkan (biasanya nol tetapi respons yang lebih cepat bisa didapat jika Anda tidak keberatan beberapa osilasi overshoot)

Gangguan apa yang Anda gunakan tergantung pada mekanisme controller terpasang. Biasanya menggerakkan mekanisme dengan tangan menjauh dari setpoint dan melepaskan sudah cukup. Jika osilasi tumbuh lebih besar dan lebih besar maka Anda perlu mengurangi P gain.

Jika Anda menetapkan gain D terlalu tinggi, sistem akan mulai mengobrol (bergetar pada frekuensi yang lebih tinggi daripada osilasi gain P). Jika ini terjadi, kurangi gain D hingga berhenti.

Saya percaya teknik ini memiliki nama. Saya akan meletakkannya di sini ketika saya menemukannya.

hauptmech
sumber
2
Kedengarannya seperti Ziegler-Nichols: en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method
Throwback1986
1
@ Throwback1986, Ini jelas bukan Ziegler-Nichols yang hanya menggunakan gain P dan di mana gain I dan D kemudian dihitung sesuai dari gain P berosilasi dan periode
osilasi
Apakah Anda memiliki saran tambahan untuk menyetel lengan robot khusus yang memiliki banyak sambungan yang perlu disetel? Apakah Anda mulai dari pangkalan dan bekerja ke luar ke efektor akhir, atau sebaliknya, atau apakah itu penting?
adamconkey
1
Dalam lingkungan akademik atau industri Anda akan menginginkan metode kontrol yang lebih canggih. Untuk seorang hobbiest; gravitasi memiliki efek redaman, jadi atur setiap sambungan pada sudut di mana gravitasi paling sedikit mempengaruhi motor. Misalnya, dengan lengan mengarah lurus ke atas sehingga gravitasi bekerja pada bantalan dan bukan pada motor. Urutan tidak masalah. Menambahkan istilah kompensasi gravitasi feedforward ke kontrol Anda mungkin merupakan peningkatan termudah (gunakan Newton-Euler rekursif untuk lengan serial) jika Anda tidak bisa mendapatkan kinerja yang Anda inginkan.
hauptmech
Alat pidtuner.com telah memberi saya hasil yang lebih baik daripada metode Ziegler-Nichols, yang memiliki beberapa kelemahan yang diketahui; folk.ntnu.no/skoge/publications/2003/tuningPID/more/…
Juan Gonzalez Burgos
13

Metode eksperimen yang mirip dengan jawaban Haechmech yang saya ajarkan di perguruan tinggi:

  1. Tetapkan semua keuntungan ke 0.
  2. Tambah K d hingga sistem berosilasi.
  3. Kurangi K d dengan faktor 2-4.
  4. Set K p untuk sekitar 1% dari K d .
  5. Tambah K p sampai osilasi mulai.
  6. Penurunan K p dengan faktor 2-4.
  7. Set K i sekitar 1% dari K p .
  8. Tingkatkan K i sampai osilasi dimulai.
  9. Kurangi K i dengan faktor 2-4.

Metode Ziegler-Nichols lebih tepat jika Anda bisa mendapatkan angka yang akurat untuk periode osilasi. Itu biasanya menyebabkan osilasi menggunakan angka "PID klasik" yang diberikan, jadi itu tidak selalu optimal.

Untuk aturan umum tentang efek setiap istilah pada waktu naik, overshoot, waktu penyelesaian, kesalahan kondisi tetap, dan stabilitas, lihat Tabel 1 dari "Analisis dan Desain Sistem Kontrol PID" , oleh Li, Ang, dan Chong dalam Sistem Kontrol IEEE Majalah.

Joe Baker
sumber
2
Kd dulu? Saya selalu berpikir bahwa yang terbaik adalah memulai dengan Kp.
Rocketmagnet
Saya menyalin dari slide kuliah lama, jika ada alasan bagus untuk tidak melakukannya dengan cara itu, saya akan penasaran ingin mendengarnya.
Joe Baker
1
Itulah algoritma yang saya anjurkan untuk penyetelan "seat of the pants". Ini akan membuat Anda sedekat mungkin tanpa memodelkan sistem atau mengukur responsnya. (Pemodelan dan / atau pengukuran adalah satu-satunya cara untuk pergi jika Anda benar-benar membutuhkan penyetelan yang benar).
TimWescott
Tuning Kd pertama tidak masuk akal bagi saya, karena di setiap PID saya sudah menerapkan tanda Kd negatif. Ini digunakan untuk mengurangi sinyal kontrol ketika perubahan sangat besar terjadi kesalahan, pada dasarnya redam sistem. Jika Anda hanya memiliki Kd, sistem akan bergerak ke arah yang berlawanan, meningkatkan kesalahan dan menambah masalah. Jika Kd positif, maka setiap kali perubahan besar dalam kesalahan terjadi di arah yang benar, Anda akan membuatnya berubah lebih cepat dan melampaui target Anda.
Andrew Capodieci
Sebenarnya, tuning gain D pertama kali masuk akal, tapi saya berasumsi bahwa "meningkatkan" gain D berarti meningkatkan nilai absolut dan itu hanya meningkatkan redaman. Masalah terbesar dengan gain D adalah bahwa ia menguatkan noise frekuensi tinggi dan menyenangkan melihat efeknya tanpa gain P. Jadi, Anda pada dasarnya mulai dengan mencari keuntungan di mana ia berhenti berperilaku seperti redaman dan mulai memperkuat kebisingan dan sinyal kesalahan yang tertinggal. Saya berasumsi untuk langkah 2, Anda perlu menyodok tanaman Anda untuk melihat apakah itu berosilasi.
DrRobotNinja
7

Embedded.com telah memindahkan artikel saya lagi, tetapi di sinilah tempatnya sekarang. Ini menunjukkan kepada Anda berdua cara menulis loop PID (mencari tahu bagaimana melakukannya dalam sesuatu selain floating point yang tersisa sebagai latihan untuk pembaca) dan cara menyetelnya.

PID Tanpa PhD

Cara terbaik sangat tergantung pada kemampuan Anda. Cara untuk mendapatkan tuning terbaik , dengan anggapan Anda tangan sistem kontrol yang berpengalaman, biasanya mengukur respons pabrik ("plant" == "hal yang Anda kontrol"), lalu tergantung pada cara Anda melakukan pengukuran mengekstraksi model pabrik dan mendesainnya, atau hanya mendesain langsung ke pengukuran.

Untuk tanaman sulit tertentu Anda akan menemukan bahwa Anda tidak pernah dapat melakukan pengukuran yang memuaskan, dalam hal ini Anda harus menggunakan model saja. Itu jarang, tetapi memuaskan ketika Anda membuatnya bekerja.

TimWescott
sumber
5

Sebastian Thrun mempresentasikan algoritma sederhana untuk menyetel PID di kelas "How to Program a Robotic Car". Ini disebut "twiddle", dia menggambarkannya di sini .

Twiddle sangat rentan menemukan minima lokal - ini berarti Anda dapat membuat seperangkat tiga konstanta yang baik-baik saja, tetapi tidak optimal untuk situasi tersebut. Masalah penyetelan konstanta PID adalah subset dari masalah pencarian yang lebih umum untuk menemukan parameter tertentu untuk memaksimalkan utilitas (dalam hal ini, meminimalkan kesalahan algoritma PID). Anda dapat melihat ke solusi umum lain untuk masalah ini, seperti mendaki bukit, simulasi anil, algoritma genetika, dll. Yang mungkin akhirnya menemukan solusi yang lebih optimal.

Robz
sumber
4

Berbeda dengan dua jawaban lainnya saya akan mengatakan cara manual yang baik untuk menyetel PID mengabaikan Kd. Jadi mulailah dari 0 dan tingkatkan Kp sampai Anda mencapai target, lalu naikkan Ki untuk menghilangkan kesalahan kondisi stabil.

Kd dapat mengacaukan masalah karena berespons buruk terhadap noise, kemudian Anda mulai menambahkan filter pada input analog Anda dan kemudian mempertanyakan apa yang dilakukannya selain memperlambat kontrol Anda dan membuat semuanya lebih sulit untuk dikerjakan ...

Hal lain yang pasti membingungkan saya adalah jika persamaan PID dalam bentuk standar atau dalam bentuk independen (paralel dalam wikipedia). Efek Ki tampaknya terbalik ketika bentuknya adalah cara yang salah dengan apa yang Anda pikirkan. Kedua jenis digunakan dalam otomatisasi, kadang-kadang dengan opsi untuk beralih di antara mereka.

daniel
sumber
4

Pemodelan sistem

Tentu saja penyetelan eksperimental dapat dilakukan seperti yang disebutkan dalam jawaban lain, tetapi jika Anda dapat menentukan model dinamis yang masuk akal untuk apa pun yang ingin Anda kontrol dan dapat mengidentifikasi parameternya , Anda harus dapat merancang pengontrol Anda berdasarkan dengan baik kriteria -defined seperti overshoot , naik waktu , waktu penyelesaian , kesalahan steady-state dan sebagainya.

Bahkan ada alat di MATLAB yang dapat mengatur pengontrol Anda untuk mengoptimalkan kombinasi kriteria ini, yang membuatnya lebih baik untuk digunakan.

Ketahui pengontrol Anda

Mempelajari apa yang dilakukan oleh setiap parameter dalam kontroler PID juga cukup membantu. Semua algoritma eksperimental didasarkan pada pengetahuan semacam ini, entah bagaimana. Jika Anda tidak hanya mengikuti instruksi, tetapi juga bisa merasakannya sendiri, Anda mungkin akan lebih mudah untuk menyetel pengontrol Anda secara manual.

Masalah dunia nyata

Ada kemungkinan salah satu dari hal-hal ini, antara lain, akan menghampiri Anda ketika menyetel pengontrol Anda: windup , laju sampling tidak memadai , saturasi .

Kesimpulan

Pada akhirnya, itu semua tergantung pada apa yang sebenarnya dapat Anda lakukan dengan sistem Anda untuk mendapatkan pengetahuan tentang cara kerjanya dan jenis eksperimen apa yang dapat dilakukan. Hal terbaik adalah untuk benar-benar mempelajari lebih lanjut tentang pengontrol PID dan teori kontrol secara umum, IMO, tapi saya bias :)

georgebrindeiro
sumber
Saya tidak mengerti mengapa orang terus menyarankan heuristik untuk menyetel PID sementara saat ini kami disediakan banyak alat otomatis untuk identifikasi pabrik dan desain pengontrol yang tidak memerlukan latar belakang teori yang mendalam. Jempol untuk jawaban ini kalau begitu.
Ugo Pattacini
3

Saya akan mencoba sedikit memperluas dari pengalaman saya untuk mereka yang mungkin tertarik. Saya pikir masalahnya adalah kita memiliki banyak teori kontrol yang agak tidak dapat diakses (dan kadang-kadang tidak berguna) dan kemudian kita memiliki aturan praktis yang membuat asumsi tentang sistem yang sering tidak akurat.

Stabilitas

Mari kita bicara tentang mengapa loop kontrol menjadi tidak stabil. Untuk diskusi ini saya akan menganggap sistem linear. Secara tidak resmi ini berarti bahwa jika sinyal kontrol Anda adalah gelombang sinus pada frekuensi yang diberikan maka output yang Anda amati berada pada frekuensi yang sama dan jika Anda mengubah amplitudo sistem kontrol Anda, output Anda merespons pada rasio yang sama. Asumsi ini adalah perkiraan yang baik untuk banyak sistem dunia nyata dan mari kita lihat frekuensi yang berbeda secara terpisah.

Jika Anda melihat jalur kontrol Anda memiliki set-point, pengontrol PID Anda, sistem Anda (alias "Plant"), dan kemudian sensor Anda. Bayangkan set-point tetap dan gelombang sinus dari sensor Anda (ini sama dengan gangguan dunia nyata pada sensor, umpan balik). Dalam sistem yang tidak stabil, umpan balik Anda menyebabkan loop kontrol memperbesar kesalahan daripada menguranginya sehingga seiring waktu peningkatan amplitudo Anda meningkat. Alasan ini terjadi adalah karena melakukan penundaan, atau untuk frekuensi khusus ini pergeseran fasa antara input dan output. Untuk frekuensi yang diberikan kita dapat melihat pergeseran loop terbuka (yaitu tidak ada umpan balik) dan amplitudo output dan ketika kita menggambar semua itu pada grafik kita mendapatkan sesuatu seperti Bode Plot. Jika kita memiliki situasi dalam grafik loop terbuka ini di mana kesalahan terus bertambah maka kita memiliki sistem yang tidak stabil. Jika penundaan kurang dari 1/2 panjang gelombang atau penguatan kurang dari x1 sistem akan stabil . Dalam praktiknya kami menginginkan beberapa margin dari titik itu (mendapatkan margin dan fase phase) yang mengapa Anda akan melihat ini "mundur" di banyak metode manual / heuristik.

Masalah utama dengan metode manual itu adalah Anda buta terbang dan Anda dijamin mendapatkan sistem kontrol yang buruk.

Perlu diingat juga bahwa makna P, I dan D terkait dengan apa yang diukur sensor Anda dan kontrol apa yang Anda terapkan. Kesalahan umum dalam pengontrol yang dibuat di rumah adalah bagi orang untuk berpikir bahwa mereka menerapkan P padahal sebenarnya tidak. Pengontrol motor sering memiliki loop posisi, berjalan di atas loop kecepatan yang berjalan di atas loop torsi. (A cascade )

OK tapi bagaimana ini membantu kita?

Poin pertama yang ingin saya sampaikan adalah bahwa jika Anda membangun kontroler PID Anda sendiri, Anda juga harus membangun cara untuk mengukur respons loop terbuka. Lakukan sapuan frekuensi pada input ke controller Anda dan ukur output sensor dengan umpan balik terputus. Kemudian Anda dapat menggambar plot Bode loop terbuka dan melihat mengapa sistem Anda stabil dan dapat menukar berbagai kontrol. Ini juga berguna untuk mengukur respons loop tertutup dan Anda dapat melakukannya dengan sistem apa pun dengan melakukan sapuan frekuensi set-point Anda saat loop ditutup. Kedua hal ini tidak terlalu sulit dan tidak membutuhkan banyak pengetahuan teoritis.

Jika Anda hanya mengutak-atik kontrol tanpa memahami apa yang terjadi di bawah tenda Anda tidak akan dapat mengoptimalkan sistem Anda. Membangun beberapa intuisi tentang sistem ini tidaklah sulit. Misalnya gain proporsional tidak berpengaruh pada fase tetapi hanya meningkatkan gain loop terbuka di semua frekuensi. Jadi apa yang Anda lakukan ketika Anda meningkatkan keuntungan proporsional dalam semua metode penyetelan manual adalah menemukan frekuensi di mana fase menuju -180. Lihat ini untuk mendapatkan beberapa ide tentang dampak berbagai kontrol pada respons frekuensi Anda.

Cukup sering mendapatkan kinerja loop tertutup terbaik melibatkan mengutak-atik sistem dan bukan hanya keuntungan kontroler. Yang Anda inginkan adalah membuat sistem sekaku mungkin. Itu akan memungkinkan Anda meningkatkan parameter kontrol dan mendapatkan bandwidth loop terbuka dan tertutup terbaik. Dalam pengalaman saya dalam aplikasi kontrol motor, keuntungan proporsional adalah yang harus melakukan sebagian besar "kerja" dan integrator "sisanya". Saya tidak berpikir Anda membutuhkan istilah D sama sekali. Memiliki low pass filter dan notch filter banyak membantu dalam situasi di mana Anda mungkin memiliki resonansi mekanis tetapi mengaturnya tanpa Bode Plot sangat sulit (frekuensi osilasi yang Anda amati dalam loop tertutup mungkin berbeda dari loop terbuka).

Jika keselamatan menjadi perhatian (motor yang sangat kuat atau sistem yang dapat dihancurkan oleh motor yang lepas kendali) Anda perlu memasukkan beberapa batasan sebelum Anda mulai menyetel (misalnya batas saat ini, kesalahan posisi maksimum) untuk melindungi sistem. Maka Anda perlu merasakan kisaran parameter. Jika umpan balik Anda memiliki 40 hitungan per rotasi atau 4000 hitungan per rotasi, parameter Anda akan menjadi faktor 100 untuk sistem yang diberikan. Pendekatan saya adalah pertama-tama menemukan rentang di mana Anda memiliki beberapa kemampuan kontrol yang buruk dan kemudian naik dari sana dimulai dengan P dan kemudian saya (meskipun lagi Anda buta). Mundur menciptakan margin stabilitas ini.

Di luar loop tertutup

Loop tertutup mencoba untuk menghilangkan kesalahan dari sistem. Itu akan selalu memiliki kinerja yang agak terbatas. Apa yang ingin Anda lakukan adalah meminimalkan kesalahan yang dilihat oleh pengontrol loop tertutup dan salah satu cara untuk melakukannya adalah melalui teknik yang disebut umpan maju. Dalam umpan-maju Anda pergi di sekitar controller dan mengarahkan perintah langsung ke sistem. Contohnya adalah umpan-maju percepatan. Jika Anda tahu torsi motor Anda konstan dan Anda tahu bebannya, Anda bisa mengetahui berapa banyak arus yang perlu Anda kendarai untuk mendapatkan akselerasi beban tertentu. Anda cukup mengambil akselerasi input perintah, gandakan dengan konstanta dan tambahkan itu ke perintah drive pengontrol. Anda pada dasarnya melakukan apa yang diperlukan untuk menggerakkan sistem jika tidak ada pengontrol dan semakin dekat Anda semakin sedikit kesalahan yang harus dilalui loop Anda dan semakin baik kinerja sistem Anda. Itu membuat perbedaan besar dalam latihan.

Guy Sirton
sumber
"Dalam pengalaman saya dalam aplikasi kontrol motor, keuntungan proporsional adalah yang harus melakukan sebagian besar" pekerjaan "dan integrator" sisanya ". Saya kira Anda tidak memerlukan istilah D sama sekali." Saya setuju dengan itu untuk aplikasi kontrol motor biasa. P melakukan pekerjaan utama dan saya mengimbangi penyimpangan / kesalahan jangka panjang. Tapi di sini, quadcopter akan mengalami banyak turbulensi eksternal, jadi istilah D penting untuk mendapatkan respons yang cepat. Adapun istilah I, kecuali quad dalam mode navigasi otonom, itu tidak terlalu penting.
dm76
@ dm76: Sebagian besar pengalaman saya adalah dengan kontrol motor, dan saya membuat disclaimer itu ;-) Intuisi saya mengatakan bahwa masih ada ruang untuk saya dalam aplikasi quadcopter dan saya pikir jika P sangat tinggi itu bisa menangani gangguan eksternal (seperti itu dalam kontrol motor). Saya benar-benar perlu untuk melihat lebih dekat pada sistem-sistem itu untuk mengatakan sesuatu yang pasti tentang quadcopters ... Saya pikir banyak dari apa yang saya katakan di sini tidak berlaku (terutama penyetelan Anda dalam domain frekuensi dan memiliki respon loop terbuka dari sistem ).
Guy Sirton
1
@ DM76: Dan tuning PID "rule of thumb" yang benar-benar menghasilkan performa yang sangat biasa-biasa saja di motor dan mungkin sama di quadcopters. Terkadang filter takik yang ditempatkan dengan baik dapat membuat urutan perbedaan yang besar ...
Guy Sirton
0

Ziegler-Nichols adalah metode manual yang mudah. Metode yang lebih kuat juga ada - ini biasanya bergantung pada solusi matematika (analitik, optimasi berulang, dll.)

Di luar itu, google "PID self-tuning" untuk beberapa teknik otomatis. Favorit saya adalah aplikasi jaringan saraf untuk tuning PID.

Throwback1986
sumber
0

Jika Anda ingin memiliki koefisien PID yang akurat:

  • Mendapatkan data aktuator statistik Anda (yaitu collecting input voltages+ encoder pulsesdi const sering ( 0.01sec) waktu untuk 20secssebagai 3x 2000matriks)
  • Dapatkan fungsi transfer (TF) dari aktuator Anda (menggunakan Ident toolbox di MATLAB).
  • Terakhir, gunakan PIDTool toolbox di MATLAB dan unggah fungsi transformasi Anda.

Atau secara cepat dan sederhana:

Ada pendekatan yang lebih cepat yang disebut Ziegler – Nichols : masukkan deskripsi gambar di sini

Dan pada gambar ini menunjukkan efek parameter PID :
Efek parameter PID

Benyamin Jafari
sumber