本系统开关控制信号的设计思想:由于设计这个信号的目的是识别开关控制动作。因此,只要任何一个开关发生了动作就需要产生一个脉冲。假如只有脉冲信号就只能知道开关发生了动作,而不知道是哪个开关发生了什么动作。所以,要识别具体是哪个开关发生了什么动作就必须配合双口RAM中的数据进行解码。该系统设计的脉冲持续时间对BF561来说并不重要,只要BF561能识别这个脉冲即可。由于系统中的2个拨动开关,一个是电平拨动开关,另一个是脉冲拨动开关,因此,只要根据电平拨动开关的动作制作相应的脉冲信号,再用这个信号与脉冲拨动开关产生的原始信号逻辑相与,就能得到所需要的目的信号。
由于拨动开关是机械触点,当其断开、闭合时会有相应的前沿、后沿抖动,为了使每次动作都只做一次响应,就必须对原始开关信号做往抖动处理。抖动信号可以分为2种:一种是时间很短的干扰信号,如高频毛刺;另一种是时间较长的干扰信号,如开关抖动。这里的拨动开关都是人为操纵,因此每次触发的时间都不会很短,一般小于10 Hz。根据上述分析开关抖动信号属于后一种。因此在每次开关操纵后,对其产生的信号进行连续采样,假如每次采样都是低电平或者都是高电平,就以为此信号不是抖动,确实开关状态发生了变化。整个设计过程使用Verilog硬件描述语言编写,然后在QuartusⅡ平台上编译,并采用SignalTapⅡLogic Arlalvzer对信号采样分析,调试通过后连同其他程序一起烧写进FPGA的配置器件EPCSl6中。图2~图4分别是各个开关动作往抖动前和往抖动后的实时信号采样图。往抖动模块中的部分代码如下:
其中,clk为13.5 MHz频率的时钟信号,clk_cnt为采样时间间隔计数器,当clk_cnt为135 000时采样1次,即每隔10 ms采样1次。寄存器shuru_temp存储前一次开关信号状态,shum存储当前开关信号状态。假如shuru_temp的值即是shtlm的值,则计数器test_cnt自动加l。假如连续4次采样值相等,即test_cnt=4时往抖动输出才随输进变化。
用电平拨动开关信号作为输进,制作了一个脉冲信号用于识别开关动作,其代码如下: