You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.4 KiB
2.4 KiB
FilterBox
一.RELEASE
//版本号在fucntion:app_main修改
v1.1
开机点亮绿色指示灯
v1.2
修复串口无法偶尔无效的bug
v1.3
修改部分打印信息
二.AT指令说明
2.1调整消抖延时
设置指令
AT+FILTER_TIME_MS=10
查询指令
AT+FILTER_TIME_MS?
2.2调整输入输出是否镜像
设置指令
AT+IO_MIRROR=0
AT+IO_MIRROR=1
查询指令
AT+IO_MIRROR?
2.3保存配置到FLASH中
AT+SAVE
三.当前程序不足的地方
问题一
例如下面波形,假如每个脉冲的宽度都小于1000us,那么理论上来说,我滤波时间设置1ms就能够正确滤波。但现在的代码做不到这一点。现在代码的逻辑如下,按照现在逻辑,如果时刻1检测到高电平,等待1ms后,时刻2依然可能检测到高电平。
1.电平发生变化,
2.等待,
3.查看电平是否发生变化
理想的代码逻辑,应该写一个简单的低通滤波器,计算的电平持续时间,如果电平持续超过1ms(用户可设置),就改变电平。且要以尽可能高的采样频率去采样电平,逻辑大致如下
bool lastinput = false;
while(true){
//对电平进行计数
bool nowinput = input();
if(nowinput!=lastinput){
input_state_count = 0;
}else{
if(input_state_count<MAX_UINT32){
input_state_count++;
}
}
lastinput = nowinput;
if(nowinput != output() && input_state_count > 用户设定值){
output = nowinput;
}
}
问题二
现在代码中用的HAL_Delay,HAL_Delay使用的是1ms的系统ticket进行的延时,所以当延时时间会存在1ms的误差。