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

FilterBox

image-20220426110424996

一.RELEASE

    //版本号在fucntion:app_main修改
    v1.1
        开机点亮绿色指示灯
    v1.2
        修复串口无法偶尔无效的bug
    v1.3
        修改部分打印信息


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

理想的代码逻辑,应该写一个简单的低通滤波器,计算的电平持续时间,如果电平持续超过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的误差。

四.其他文档

信号处理盒子测试文档.pdf