Saya seorang insinyur listrik yang didorong ke dunia digital dan belajar saat saya pergi. Saya memprogram prosesor TI untuk melakukan loop PID (proporsional-integral-turunan) , diilustrasikan oleh diagram ini:
Saya juga akan menjelaskannya:
Op-amp umpan balik negatif, dengan terminal non-pembalik ground. Masukan melalui terminal negatif. Loop umpan balik adalah rangkaian seri RE yang paralel dengan resistor dan semua yang paralel dengan penutup.
Adakah yang tahu cara mengubah sirkuit ini menjadi kode C? Saya sedikit keluar dari elemen saya tentang ini dan dapat menggunakan bantuan.
dt
ke konstanta, daripada melakukan pembagian ekstra dan mengalikan dalam loop.Jawaban:
Sirkuit
Ok saya baru saja membuat akun di sini ketika saya melihat pertanyaan ini. Saya tidak dapat mengedit pertanyaan Anda sehingga saya dapat memperbaiki kesalahan ketik yang Anda lakukan. Saya percaya Anda berarti rangkaian seri RC secara paralel, bukan RE (jika ya, saya tidak memiliki petunjuk apa pun artinya)
Sepertinya rangkaian analog yang ingin Anda simulasikan menggunakan C terlihat seperti ini
(Saya tidak bisa menahan keinginan saya untuk menggambar ini karena saya ingin memberi tahu Anda bagaimana insinyur listrik / elektronik digunakan untuk berkomunikasi di forum dan email tanpa gambar ... dan mengapa kami hanya menyukai kurir, font dengan lebar tetap)
Saya harus mengakui bahwa rangkaian yang Anda gunakan sederhana untuk pengaturan tetapi sangat rumit secara matematis, ketika datang untuk menyetel konstanta Propotional, Integral, dan Derivative dari sistem ke nilai yang diinginkan secara individual, itu tidak mungkin.
Saya sangat menyarankan Anda menggunakan sirkuit dari sumber ini untuk belajar.
Meskipun sedikit membosankan untuk diatur, secara matematis jauh lebih mudah untuk dianalisis karena Anda dapat langsung menghubungkannya ke bentuk matematika standar, bukan yang ideal.
Terakhir, Vout digunakan untuk mengendalikan motor atau apa pun yang perlu dikontrol. Dan Vin adalah tegangan variabel Proses.
Sebelum membuat kaki Anda basah di C (laut?)
Saya berasumsi Anda membaca sinyal dari semacam konverter analog ke digital. Jika tidak maka Anda harus mensimulasikan sinyal sebagai input.
Jika menggunakan formulir standar yang kami miliki,
Dengan asumsi waktu berjalan loop cukup kecil (proses lambat), kita dapat menggunakan fungsi berikut untuk menghitung output,
dimana
di mana awalnya 'der' dan 'int' akan menjadi nol. Jika Anda menggunakan fungsi penundaan dalam kode untuk menyetel frekuensi loop untuk mengatakan 1 KHz maka dt Anda akan menjadi 0,001 detik.
Diambil dalam C
Saya menemukan ini kode yang sangat baik untuk PID di C, meskipun tidak mencakup setiap aspek itu, salah satu yang baik yang tetap.
Jika kita mengambil proses yang lambat, maka kita dapat menggunakan frekuensi yang lebih rendah sehingga dt >>> waktu eksekusi kode untuk loop tunggal (jauh lebih besar dari). Dalam kasus seperti itu, kita dapat menghilangkan timer dan menggunakan fungsi penundaan.
sumber