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.
|
3 years ago | |
---|---|---|
.vscode | 3 years ago | |
Core | 4 years ago | |
Drivers | 4 years ago | |
MDK-ARM | 3 years ago | |
dep | 4 years ago | |
markdown.assets/README.assets | 3 years ago | |
release | 3 years ago | |
src | 3 years ago | |
.clang-format | 4 years ago | |
.gitignore | 3 years ago | |
.gitmodules | 4 years ago | |
.mxproject | 4 years ago | |
24转5触发盒使用说明Rev3.docx | 3 years ago | |
FilterBox.ioc | 4 years ago | |
README.md | 3 years ago | |
信号处理盒子测试文档.docx | 3 years ago | |
信号处理盒子测试文档.pdf | 3 years ago |
README.md
FilterBox
一.RELEASE
//版本号在fucntion:app_main修改
v1.1
开机点亮绿色指示灯
v1.2
修复串口无法偶尔无效的bug
v1.3
修改部分打印信息
v1.4
当输入发生变化时指示灯闪烁。
v1.5
输出信号边沿触发灯光闪烁,1s内无边沿变化,则灯光停止闪烁。
二.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的误差。