ZHCU712B april 2020 – july 2023
此示例演示了如何使用有限状态机 (FSM) 和计数器来实现简单的“干扰”滤波器,该滤波器可以(例如)应用于传入 GPIO 信号以消除不需要的短时脉冲。
图 4-7 大体上显示了干扰滤波器的功能。输入的数字信号以 CLB 时钟速率进行采样,计数器对输入为高电平或低电平的连续采样的数量进行计数。如果该数量等于或大于指定的采样窗口,则该滤波器输出的值与输入的值相同;否则该滤波器的输出保持不变。图 4-7 大体上显示了该滤波器的功能。
CLB 配置使用一个 LUT4 对输入信号进行反相,并使用两个计数器对脉冲数进行计数:一个计数器用于高电平脉冲,另一个计数器用于低电平脉冲。当任何一个计数器达到采样窗口长度时,其“匹配 1”输出端都会出现一个脉冲。在该示例中,滤波器采样窗口长度设置为八。FSM 锁存该脉冲并实现一个简单的逻辑方程,以确定其“S0”状态输出所需的电平。使用一个输出 LUT 将 FWM 输出传送至外设信号多路复用器,以连接至 GPIO0。图 4-8 显示了 CLB 配置。
示例代码对 ePWM1 模块进行配置,以生成测试激励。
要运行该示例,请执行以下过程:
在后续描述中,假设使用上述 C2000Ware 目录。
如果在 F28379D LaunchPad 板上运行该程序,则可以分别在引脚 J4/40 和 J4/39 上监视 PWM 信号 1A 和 1B。设置示波器,以在该程序运行时在这些引脚上监视信号。如果在安装了 F280049 或 F28388D controlCARD 的实验套件上运行该程序,则可以分别在引脚 49 和 51 上找到这些信号。
打开一个“CCS Expressions”窗口并添加程序变量“cglitch”。运行该程序,同时观察 PWM 信号 1A 和 1B。暂停该程序并更改“cglitch”的值,然后重新启动该程序(如果将表达式窗口设置为“continuous refresh”,则执行该过程会更容易)。如果值为 7 或更小,则滤波器应消除干扰,因为其宽度小于采样窗口的宽度。当“cglitch”高于 7 时,两个输出上都应出现干扰。另请注意,与 PWM1B 上的边沿相比,PWM1A 上的边沿具有较小的延迟。这是所使用的滤波方法导致的结果。
图 4-9 显示了在干扰宽度低于和高于采样窗口设置 8 时输出引脚处的预期波形。