如何將連續域的控制器進行離散化實現
01-29
大家在學完了自動控制原理之後,最常見的一個問題就是,我設計好了一個控制器,得到了它的傳遞函數,那麼我該怎麼實現它?裡面都是微積分,我該怎麼編程實現它?正好今天有朋友問起了這個問題,我寫了個比較長的答案,就整理一下發在這裡吧。關於控制器增益和時滯的問題過兩天再更。控制器的邏輯實現有連續實現和數字近似兩種,連續實現主要是指使用運放電路來實現邏輯,數字近似主要是指使用數字計算機來迭代計算。數字計算機一般是只有加法和減法的指令的,微分和積分都是靠數值演算法實現的,而控制器的邏輯也一般都是使用加減乘除的。本篇僅討論在連續域設計好之後,如何數字離散化實現的問題。模擬控制器(連續實現)和數字控制器的優缺點及常見實現設備打算在下周探討一下。如何使用零階保持器將連續對象離散化之後,直接在z域設計控制器也不在本篇的討論內容。
但是歐拉法用的是積分的矩形法則,效果有時並不好。所以又提出了根據梯形法則的塔斯汀法:將C(s)裡面的s都替換掉,變成z和C(z)就行了。可以再matlab裡面用c2d函數進行運算:
推薦閱讀:
最常見的兩種方法就是歐拉法和塔斯汀法(Tustins method,也叫bilinear transformation)。
歐拉法即為:將傳遞函數中的s用這個替換即可。這是因為s在拉普拉斯變換裡面是微分,而
而z變換裡面的z運算符即為:微分關係即變為:[numZ denZ]=c2d(num,den,tustin)%bilinear method
歐拉法在matlab裡面貌似已經是不支持了。再說下z域里怎麼寫成差分方程。如果我們有控制器:且n≥m,
將分式轉換:兩邊同除以注意讓Y(z)=Y(k),U(z)=U(k)那麼就能得到k時刻Y的值了。舉個例子:分式上下均除以z的平方:進一步整理:再把左邊的部分項挪過來:這樣就知道k時刻控制器的輸出是多少了,能在程序裡面進行實現了。推薦閱讀:
※機器人和自動化大幅改造製造業,「中國製造」的優勢已經消失
※鎖相環(PLL)在振蕩器中的應用-準備篇
※前饋形式的震蕩控制器(上)
※自動控制領域有哪些必讀的「聖經」(書籍或論文或其他讀物)?
※無需軟體,免費自動轉寫英文電話會紀要