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.

109 lines
2.6 KiB

3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. # FilterBox
  2. - [FilterBox](#filterbox)
  3. - [一.RELEASE](#一-release)
  4. - [二.AT指令说明](#二-at指令说明)
  5. - [2.1调整消抖延时](#2-1调整消抖延时)
  6. - [2.2调整输入输出是否镜像](#2-2调整输入输出是否镜像)
  7. - [2.3保存配置到FLASH中](#2-3保存配置到flash中)
  8. - [三.当前程序不足的地方](#三-当前程序不足的地方)
  9. - [问题一](#问题一)
  10. - [问题二](#问题二)
  11. - [四.其他文档](#四-其他文档)
  12. ![image-20220426110424996](markdown.assets/README.assets/image-20220426110424996.png)
  13. ## 一.RELEASE
  14. ```
  15. //版本号在fucntion:app_main修改
  16. v1.1
  17. 开机点亮绿色指示灯
  18. v1.2
  19. 修复串口无法偶尔无效的bug
  20. v1.3
  21. 修改部分打印信息
  22. v1.4
  23. 当输入发生变化时指示灯闪烁。
  24. ```
  25. [filterBox_stm32f103_v1.3.zip](./release/filterBox_stm32f103_v1.3.zip)
  26. ## 二.AT指令说明
  27. ### 2.1调整消抖延时
  28. **设置指令**
  29. AT+FILTER_TIME_MS=10
  30. **查询指令**
  31. AT+FILTER_TIME_MS?
  32. ### 2.2调整输入输出是否镜像
  33. **设置指令**
  34. AT+IO_MIRROR=0
  35. AT+IO_MIRROR=1
  36. **查询指令**
  37. AT+IO_MIRROR?
  38. ### 2.3保存配置到FLASH中
  39. AT+SAVE
  40. ## 三.当前程序不足的地方
  41. ### 问题一
  42. 例如下面波形,假如每个脉冲的宽度都小于1000us,那么理论上来说,我滤波时间设置1ms就能够正确滤波。但现在的代码做不到这一点。现在代码的逻辑如下,按照现在逻辑,如果时刻1检测到高电平,等待1ms后,时刻2依然可能检测到高电平。
  43. ```
  44. 1.电平发生变化,
  45. 2.等待,
  46. 3.查看电平是否发生变化
  47. ```
  48. ![image-20220426153200062](markdown.assets/README.assets/image-20220426153200062.png)
  49. 理想的代码逻辑,应该写一个简单的低通滤波器,计算的电平持续时间,如果电平持续超过1ms(用户可设置),就改变电平。且要以尽可能高的采样频率去采样电平,逻辑大致如下
  50. ```c
  51. bool lastinput = false;
  52. while (true) {
  53. //对电平进行计数
  54. bool nowinput = input();
  55. if (nowinput != lastinput) {
  56. input_state_count = 0;
  57. } else {
  58. if (input_state_count < MAX_UINT32) {
  59. input_state_count++;
  60. }
  61. }
  62. lastinput = nowinput;
  63. if (nowinput != output() && input_state_count > 用户设定值) {
  64. output = nowinput;
  65. }
  66. }
  67. ```
  68. ### 问题二
  69. ```
  70. 现在代码中用的HAL_Delay,HAL_Delay使用的是1ms的系统ticket进行的延时,所以当延时时间会存在1ms的误差。
  71. ```
  72. ## 四.其他文档
  73. [信号处理盒子测试文档.pdf](信号处理盒子测试文档.pdf)