# FilterBox - [FilterBox](#filterbox) - [一.RELEASE](#一-release) - [二.AT指令说明](#二-at指令说明) - [2.1调整消抖延时](#2-1调整消抖延时) - [2.2调整输入输出是否镜像](#2-2调整输入输出是否镜像) - [2.3保存配置到FLASH中](#2-3保存配置到flash中) - [三.当前程序不足的地方](#三-当前程序不足的地方) - [问题一](#问题一) - [问题二](#问题二) - [四.其他文档](#四-其他文档) ![image-20220426110424996](markdown.assets/README.assets/image-20220426110424996.png) ## 一.RELEASE ``` //版本号在fucntion:app_main修改 v1.1 开机点亮绿色指示灯 v1.2 修复串口无法偶尔无效的bug v1.3 修改部分打印信息 v1.4 当输入发生变化时指示灯闪烁。 v1.5 输出信号边沿触发灯光闪烁,1s内无边沿变化,则灯光停止闪烁。 ``` [filterBox_stm32f103_v1.3.zip](./release/filterBox_stm32f103_v1.3.zip) ## 二.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.查看电平是否发生变化 ``` ![image-20220426153200062](markdown.assets/README.assets/image-20220426153200062.png) 理想的代码逻辑,应该写一个简单的低通滤波器,计算的电平持续时间,如果电平持续超过1ms(用户可设置),就改变电平。且要以尽可能高的采样频率去采样电平,逻辑大致如下 ```c 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的误差。 ``` ## 四.其他文档 [信号处理盒子测试文档.pdf](信号处理盒子测试文档.pdf)