|
//
// 消抖滤波 Debounce Filter
//
// 将每次采样值与当前有效值比较,如果采样值=当前有效值,则计数器值清零
// 如果采样值≠当前有效值,则计数器值+1,如果计数器>N,则将本次值替换当前有效值,并清零计数器
//
// 适用:变化缓慢,临界值跳动的被测参数(对象)
//
#T_On(IN := NOT #T_Off.Q,
PT := #Period / 2);
#T_Off(IN := #T_On.Q,
PT := #Period / 2);
#Trigger(CLK := #T_On.Q); // 采样触发,周期 = Period
IF #Trigger.Q THEN
IF #Sample_In = #Valid_Value THEN
#Counter := 0;
ELSE
#Counter := #Counter + 1;
END_IF;
IF #Counter > #MAX_COUNT THEN
#Filter_Out := #Valid_Value := #Sample_In;
#Counter := 0;
END_IF;
END_IF;
|
|