目前做了一小系统。有点像于PLC... 因为系统资源相当紧张,所以浪费不了半点时间。 其中数字量输入由于是按键/开关等等机械装置,所以需要消抖...但又不想用Delayms(10);这样的函数来,效率会被拖下去好多的,另外定时器的话也很麻烦...毕竟设置10ms后才来访问这些开关量输入的话,在此之间确实可以做些事,但主要问题是...后续的一大堆程序几乎都要参照数字量输入才能启动的,所以设个定时器标志等定时器10ms到就激活然后再读输入的方式相对而言也很浪费时间...毕竟处理完差不多1个ms就能解决完的不依靠开关量输入的任务后就等于在死等定时器计时到10ms,这样的话无异于调用Delayms(8); 然后我想从硬件上动手, 想法1:用EPM240的CPLD,用它来对开关量消抖,然后MCU以SPI的主模式接收这些开关量,同时EPM240以从方式从MCU接收开关量的输出并控制相关输出点,这个想法自我感觉挺好的,不过想真正实施的时候才发现PCB空间严重不足(本来这电路板上的贴片元件就挤得前胸贴后背的)...所以只好搁置... ================================================================= 想法2:(RC滤波什么的看了就头晕...如有不对请指出) 输入部分还有一定的电路板空间,所以完全足够增加些硬件.. 我现在的小系统是采用(下面的附图)中【1号】那张,当初的想法比较简单...通过那个1μF电容,在有按键输入的时候延迟10ms响应速度,等电容端电压跌落至74HC14的输入门限了就反转至高电平输出,然后我意外得发现忘加电阻了,电容端估计是直接通过光耦输出侧的CE放电...一般机械抖动防不住仍然需要软件消抖的吧? 那么【2号】那张图是否可以做到硬件消抖呢?(其中R4和R5的值不清楚是否需要增大?反正74HC14输入电流1μA就足够...)至少这里加了电阻了,我就不信那个1μF电容还能那么快把电放光... 话说...电容充电时间是不是按1F需要1A电流充电1S这样计算的呢?记得有个3τ的时间...以前的东西好多都还给老师了... 【3号】只是把那两个阻容放到74HC14后面而已...效果就不得而知了... ================================================================= 如果都不行的话在【2号】的74HC14输出端再加一级10K和1μF的RC是否有所改善呢?郁闷...请大家帮忙提些意见,板砖也行- -... |