找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3722|回復: 0
打印 上一主題 下一主題
收起左側(cè)

控制算法離散化的問題

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71259 發(fā)表于 2014-12-29 23:37 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
    把控制算法離散化成C語言時,有一個問題:幾乎所有的系數(shù)都是浮點型。單片機一般都沒有硬件浮點運算功能,因此單片機的浮點運算速度肯定是比單片機的整數(shù)運算慢的。在過程控制中,因為離散化周期較長,至少是秒級別的,單片機在這段時間內(nèi)足以完成浮點運算,因此對單片機的要求不高。但是在運動控制中,離散化周期幾乎都是毫秒級別的,對一些低端的單片機而言,在幾毫秒內(nèi)完成大量的浮點運算幾乎是不可能的,因此有必要對離散化算式進行優(yōu)化。

假設有個一階濾波環(huán)節(jié),其離散化話后的算式為:  
u(k)=0.333*u(k-1)+0.667*e(k);
因0.333=333/1000,故上式可化為
u(k)=333*u(k-1)/1000+667*e(k)/1000;
將上式再做簡化,可以減少一個除法運算,
u(k)=(333*u(k-1)+667*e(k))/1000;
因移位運算比乘除法運算要快,且 333/1000=341/1024, 667/1000=683/1024,故上式又可表達為
u(k)=(341*u(k-1)+683*e(k))/1024;
u(k)=(341*u(k-1)+683*e(k))>>10;  //右移10位
另外,當e(k)很小時,因為整除的關(guān)系,u(k)可能會為0,在這種情況下可以先將e(k)放大,在后續(xù)環(huán)節(jié)再對其做處理。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表