?? auto.lst
字號:
188 for (j=0;j<N-1;j++)
189 {
190 for (i=0;i<N-j;i++)
191 {
192 if ( value_buf[i]>value_buf[i+1] )
193 {
194 temp = value_buf[i];
195 value_buf[i] = value_buf[i+1];
196 value_buf[i+1] = temp;
197 }
198 }
199 }
200 for(count=1;count<N-1;count++)
201 sum += value[count];
202 return (char)(sum/(N-2));
203 } */
204
205 /*6、限幅平均濾波法
206 A、方法:
207 相當于“限幅濾波法”+“遞推平均濾波法”
208 每次采樣到的新數據先進行限幅處理,
209 再送入隊列進行遞推平均濾波處理
210 B、優點:
211 融合了兩種濾波法的優點
212 對于偶然出現的脈沖性干擾,可消除由于脈沖干擾所引起的采樣值偏差
213 C、缺點:比較浪費RAM
214 7、一階滯后濾波法
215 A、方法:
216 取a=0~1
217 本次濾波結果=(1-a)*本次采樣值+a*上次濾波結果
218 B、優點:
219 對周期性干擾具有良好的抑制作用
220 適用于波動頻率較高的場合
221 C、缺點:
222 相位滯后,靈敏度低
223 滯后程度取決于a值大小
224 不能消除濾波頻率高于采樣頻率的1/2的干擾信號
225 7、一階滯后濾波法
226 /* 為加快程序處理速度假定基數為100,a=0~100 */
227 /*#define a 50
228 char value;
229 char filter()
230 {
231 char new_value;
232 new_value = get_ad();
233 return (100-a)*value + a*new_value;
234 } */
235 /*
236 8、加權遞推平均濾波法
237 A、方法:
238 是對遞推平均濾波法的改進,即不同時刻的數據加以不同的權
239 通常是,越接近現時刻的數據,權取得越大。
240 給予新采樣值的權系數越大,則靈敏度越高,但信號平滑度越低
241 B、優點:
C51 COMPILER V7.06 AUTO 07/20/2008 16:34:55 PAGE 5
242 適用于有較大純滯后時間常數的對象
243 和采樣周期較短的系統
244 C、缺點:
245 對于純滯后時間常數較小,采樣周期較長,變化緩慢的信號
246 不能迅速反應系統當前所受干擾的嚴重程度,濾波效果差
247 8、加權遞推平均濾波法
248 /* coe數組為加權系數表,存在程序存儲區。*/
249 /*#define N 12
250 char code coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12};
251 char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12;
252
253 char filter()
254 {
255 char count;
256 char value_buf[N];
257 int sum=0;
258 for (count=0,count<N;count++)
259 {
260 value_buf[count] = get_ad();
261 delay();
262 }
263 for (count=0,count<N;count++)
264 sum += value_buf[count]*coe[count];
265 return (char)(sum/sum_coe);
266 } */
267 /*9、消抖濾波法
268 A、方法:
269 設置一個濾波計數器
270 將每次采樣值與當前有效值比較:
271 如果采樣值=當前有效值,則計數器清零
272 如果采樣值<>當前有效值,則計數器+1,并判斷計數器是否>=上限N(溢出)
273 如果計數器溢出,則將本次值替換當前有效值,并清計數器
274 B、優點:
275 對于變化緩慢的被測參數有較好的濾波效果,
276 可避免在臨界值附近控制器的反復開/關跳動或顯示器上數值抖動
277 C、缺點:
278 對于快速變化的參數不宜
279 如果在計數器溢出的那一次采樣到的值恰好是干擾值,則會將干擾值當作有效值導入系統
280 9、消抖濾波法
281 #define N 12
282 char filter()
283 {
284 char count=0;
285 char new_value;
286 new_value = get_ad();
287 while (value !=new_value);
288 {
289 count++;
290 if (count>=N) return new_value;
291 delay();
292 new_value = get_ad();
293 }
294 return value;
295 }
296 */
297 /*10、限幅消抖濾波法
298 A、方法:
299 相當于“限幅濾波法”+“消抖濾波法”
300 先限幅,后消抖
301 B、優點:
302 繼承了“限幅”和“消抖”的優點
303 改進了“消抖濾波法”中的某些缺陷,避免將干擾值導入系統
C51 COMPILER V7.06 AUTO 07/20/2008 16:34:55 PAGE 6
304 C、缺點:對于快速變化的參數不宜
305
306 假定從8位AD中讀取數據(如果是更高位的AD可定義數據類型為int),子程序為get_ad();
307
308 */
309
310 float process_t() /*測量溫度求解函數,已知R,VREF*/
311 {
312 1 data float vac,vab,Rt,R,T;
313 1 vac=filter(0);
314 1 vab=filter(3); /*A/D轉換獲得VAB和VAC*/
315 1 R=(vab+vac)*0.0326999;
316 1 /*計算出熱電阻當前值*/
317 1 //rt=lubo(rt1); /*滑動加權濾波*/
318 1 //rt= rt1;
319 1 T=(R-100)*2.54;
320 1 //首先按照400度量程線性估計當前溫度
321 1 do
322 1 //采用試差法循環計算,剛才估計的t做初始值
323 1 {
324 2 if(R<100) //攝氏零度以下處理
325 2 {
326 3 Rt=100+T*(0.396847-0.00005847*T-0.000000000422351*(T-100)*T*T);
327 3
328 3 }
329 2 else //攝氏零度以上處理
330 2 {
331 3 Rt=100+T*(0.396847-0.00005847*T);
332 3 }
333 2 T=T+(R-Rt)*2.54;
334 2 }
335 1 while(((R-Rt)>0.0004)||(Rt-R)>0.0004); //計算余差最終小于0.005歐
336 1 return(T*100) ; //試差結束,返回浮點數溫度值
337 1 }
338
339 float AD590(void )
340 {float vac,T ;
341 1 vac=filter(1);
342 1 T=vac-2732;
343 1 return(T*10);
344 1
345 1 }
346
347
C51 COMPILER V7.06 AUTO 07/20/2008 16:34:55 PAGE 7
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
AD590. . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
vac. . . . . . . . . . . . . . . . . AUTO DATA FLOAT 0000H 4
T. . . . . . . . . . . . . . . . . . AUTO DATA FLOAT 0004H 4
_AD_Conver . . . . . . . . . . . . . . EXTERN CODE PROC ----- -----
value_buf. . . . . . . . . . . . . . . PUBLIC DATA ARRAY 0000H 8
process_t. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
vac. . . . . . . . . . . . . . . . . AUTO DATA FLOAT 0000H 4
vab. . . . . . . . . . . . . . . . . AUTO DATA FLOAT 0004H 4
Rt . . . . . . . . . . . . . . . . . AUTO DATA FLOAT 0008H 4
R. . . . . . . . . . . . . . . . . . AUTO DATA FLOAT 000CH 4
T. . . . . . . . . . . . . . . . . . AUTO DATA FLOAT 0010H 4
i. . . . . . . . . . . . . . . . . . . PUBLIC DATA U_CHAR 0008H 1
_filter. . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
port . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0003H 1
sum. . . . . . . . . . . . . . . . . AUTO DATA FLOAT 0000H 4
count. . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0004H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 669 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 33
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -