把控制算法離散化成C語(yǔ)言時(shí),有一個(gè)問(wèn)題:幾乎所有的系數(shù)都是浮點(diǎn)型。單片機(jī)一般都沒(méi)有硬件浮點(diǎn)運(yùn)算功能,因此單片機(jī)的浮點(diǎn)運(yùn)算速度肯定是比單片機(jī)的整數(shù)運(yùn)算慢的。在過(guò)程控制中,因?yàn)殡x散化周期較長(zhǎng),至少是秒級(jí)別的,單片機(jī)在這段時(shí)間內(nèi)足以完成浮點(diǎn)運(yùn)算,因此對(duì)單片機(jī)的要求不高。但是在運(yùn)動(dòng)控制中,離散化周期幾乎都是毫秒級(jí)別的,對(duì)一些低端的單片機(jī)而言,在幾毫秒內(nèi)完成大量的浮點(diǎn)運(yùn)算幾乎是不可能的,因此有必要對(duì)離散化算式進(jìn)行優(yōu)化。
假設(shè)有個(gè)一階濾波環(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;
將上式再做簡(jiǎn)化,可以減少一個(gè)除法運(yùn)算,
u(k)=(333*u(k-1)+667*e(k))/1000;
因移位運(yùn)算比乘除法運(yùn)算要快,且 333/1000=341/1024, 667/1000=683/1024,故上式又可表達(dá)為
u(k)=(341*u(k-1)+683*e(k))/1024;
u(k)=(341*u(k-1)+683*e(k))>>10; //右移10位
另外,當(dāng)e(k)很小時(shí),因?yàn)檎年P(guān)系,u(k)可能會(huì)為0,在這種情況下可以先將e(k)放大,在后續(xù)環(huán)節(jié)再對(duì)其做處理。
|