// ADC 消抖显示优化算法
/* 优化的消抖滤波法
1、方法:
设置一个滤波计数器
将每次采样值与当前有效值比较:
如果采样值=当前有效值,则计数器复位
方法1:
如果采样值>或<当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出)
如果计数器溢出,则将本次值替换当前有效值,并复位数器
方法2:(本算法)
如果采样值>当前有效值,则计数器+1,如果采样值<当前有效值,则计数器-1,并判断计数器是否>=上限N(溢出)或<=下限N(下溢出)
如果计数器溢出,则计算溢出的N点(分上溢N点和下溢N点)均值作为当前有效值,并复位数器。
2、优点:
对于变化缓慢的被测参数有较好的滤波效果,
可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动
3、缺点:
对于快速变化的参数不宜
如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入交易系统
*/
#define TARGET_N_I (5u)
#define TARGET_N_V (5u)
typedef struct ShakeFreeFilterType {
uint16_t count;
uint16_t target_n;
uint32_t value;
uint32_t new_value;
uint8_t first_flag;
uint32_t *temp_value;
} SFF_T;
static uint32_t sff_i_buf[2*TARGET_N_I] = {0};
static SFF_T sff_i = {
.count =