高俊勇,王明明
(空軍航空大學(xué)基礎(chǔ)部,吉林長春 130022)
目前,多種多樣的測控系統(tǒng)廣泛應(yīng)用于各行各業(yè)中,尤其是時(shí)效性要求比較高的實(shí)時(shí)控制、通信、飛行、制導(dǎo)等系統(tǒng),數(shù)據(jù)處理和運(yùn)算的速度和時(shí)間對于系統(tǒng)的技術(shù)性能更加重要和關(guān)鍵。各種從簡單到復(fù)雜的數(shù)據(jù)處理和運(yùn)算主要是使用傳統(tǒng)的基于多字節(jié)乘除法的計(jì)算方法,這種計(jì)算方法主要采用重復(fù)循環(huán)方式實(shí)現(xiàn)多字節(jié)運(yùn)算,字節(jié)越多計(jì)算所需的時(shí)間就越長,具有效率低、速度慢的特點(diǎn),嚴(yán)重制約了系統(tǒng)的性能[1]。本文探討一種針對特定要求的新的高速計(jì)算方法,可以大幅度提高特定運(yùn)算的計(jì)算速度,從而提高實(shí)時(shí)測控系統(tǒng)的性能。
本文以MCS51-89C2051 CPU、LM331壓頻轉(zhuǎn)換和4位LED數(shù)碼管等器件構(gòu)成的能實(shí)現(xiàn)監(jiān)測壓力、溫度等模擬量的儀表為例,說明分段插值實(shí)現(xiàn)多字節(jié)快速運(yùn)算的算法實(shí)現(xiàn)過程。
在儀表的模擬量輸入接口,需要將輸入的溫度(量程為10℃~50℃)通過溫度變送器轉(zhuǎn)變?yōu)殡娏餍盘柌⑤斔椭羶x表模擬接口,在儀表內(nèi)部通過LM331壓頻變換電路將對應(yīng)的模擬電流信號轉(zhuǎn)換成數(shù)字頻率信號以實(shí)現(xiàn)A/D變換。上述對應(yīng)關(guān)系如下:
圖1 計(jì)數(shù)值與溫度值的線性關(guān)系
設(shè)x為對應(yīng)溫度輸入電流和LM331計(jì)數(shù)值,y為計(jì)算出的實(shí)際溫度值,始點(diǎn)(x0,y0)表示10℃對應(yīng)的計(jì)數(shù)0664;終點(diǎn)(xe,ye)表示50℃對應(yīng)的計(jì)數(shù)6512。計(jì)數(shù)值與溫度值是線性關(guān)系如圖1所示。
所以實(shí)際的溫度數(shù)據(jù)為:
在該計(jì)算公式中,參與運(yùn)算的數(shù)據(jù)都大于255,需用兩個(gè)字節(jié)來表示,也就是對于單字節(jié)的89C2051 CPU需要調(diào)用雙字節(jié)的運(yùn)算子程序進(jìn)行實(shí)時(shí)計(jì)算。
計(jì)算框圖及雙字節(jié)除法框圖如圖2和圖3所示:
圖2 計(jì)算框圖
圖3 雙字節(jié)除法框圖
傳統(tǒng)算法需調(diào)用雙字節(jié)乘除法子程序[3]。僅16位的雙字節(jié)除法子程序CPU就要執(zhí)行16次循環(huán)。每次計(jì)算需要機(jī)器周期998個(gè),運(yùn)行時(shí)間為988us。
采用傳統(tǒng)算法工作效率低的主要原因是,計(jì)算時(shí)需要調(diào)用采用多次循環(huán)的乘除法子程序,字節(jié)數(shù)越多則計(jì)算速度越慢[3]。因此,分段插值法的設(shè)計(jì)思想是,在計(jì)算中回避直接對多字節(jié)進(jìn)行乘除運(yùn)算,預(yù)先將多字節(jié)的乘除運(yùn)算處理形成數(shù)據(jù)表[4]。高字節(jié)數(shù)據(jù)通過查表得到計(jì)算結(jié)果和差值,低字節(jié)數(shù)據(jù)通過進(jìn)行簡單的單字節(jié)乘除運(yùn)算得到,最后將兩部分合成得出最終計(jì)算結(jié)果。其計(jì)算思路過程如圖4所示。
圖4 計(jì)算思路過程
圖5 線性關(guān)系圖
具體實(shí)現(xiàn)步驟如下:
步驟一:制作數(shù)據(jù)表
在計(jì)數(shù)的量值范圍內(nèi)預(yù)先進(jìn)行多組典型抽樣,然后根據(jù)公式計(jì)算結(jié)果并形成數(shù)據(jù)表。
(1)選定插值節(jié)點(diǎn)(本系統(tǒng)以計(jì)數(shù)值256的倍數(shù)為各節(jié)點(diǎn));(2)對各節(jié)點(diǎn)的計(jì)數(shù)值xn按公式(1.1)計(jì)算出對應(yīng)的溫度值yn;(3)計(jì)算每兩個(gè)節(jié)點(diǎn)間對應(yīng)溫度值yn和yn+1的差值。
表1 插值數(shù)據(jù)表
步驟二:實(shí)際數(shù)據(jù)處理時(shí),取實(shí)際計(jì)數(shù)凈值的高位字節(jié),通過查表得出對應(yīng)的溫度值和差值(如:計(jì)數(shù)凈值2770,高位字節(jié)是10,查表計(jì)算結(jié)果為275,差值為18);再取計(jì)數(shù)凈值的低位字節(jié)按下面公式計(jì)算(計(jì)數(shù)凈值2770的低位字節(jié)為2770-2560)。
步驟三:根據(jù)公式1.2進(jìn)行計(jì)算
實(shí)際編程運(yùn)行,針對上述具體問題計(jì)算,兩種算法實(shí)例對比數(shù)據(jù)如表2所示。
表6 兩種算法實(shí)例對比數(shù)據(jù)
綜上可知,分段插值查表算法無論是指令條數(shù),還是運(yùn)算時(shí)間與傳統(tǒng)算法相比都減少很多,它較好地解決了計(jì)算機(jī)的多字節(jié)復(fù)雜運(yùn)算計(jì)算速度慢的問題,可以大幅度提高計(jì)算機(jī)在實(shí)時(shí)測控系統(tǒng)中的運(yùn)算速度,提高測控系統(tǒng)的性能。尤其是對特定的嵌入式專項(xiàng)測控系統(tǒng)效果更佳。本算法的不足之處主要是目前只適用對速度有特殊要求的固定運(yùn)算。
[1]呂勇,謝長生,高三紅.實(shí)時(shí)測控計(jì)算機(jī)應(yīng)用系統(tǒng)的可靠性保障技術(shù)[J].計(jì)算機(jī)應(yīng)用,2003(6):101-103.
[2]J.M.奧特加.數(shù)值分析[M].北京:高等教育出版社,1984.
[3]張?jiān)?分段插值在嵌入式系統(tǒng)中的應(yīng)用[J].南京廣播電視大學(xué)期刊,2010.
[4]李慶揚(yáng),王能超,易大義.數(shù)值分析[M].4版.北京:清華大學(xué)出版社,2001.