版主没来的急回答你,先让俺看到,俺就充当一回高手。
你说的增量编码器是否就是要做的计数器?
如果是外部计数器需要通过其他方式读取其值,这要看那计数器的说明书如何读取,应该不在讨论之列。
如果是要做的计数器,比如使用HSC1高速计数器,就需要把外部脉冲信号连接到I0.6
首先在
SM0.1的控制下,初始化HSC1工作于模式0(内部复位和改变方向),然后让其使能。 此时HC1已经开始工作,程序中任何时刻都可读取HSC1计数器的当前值,例如MOVD HC1, VD0,即可得到当前值,是不是总脉冲数那需要你来判定什么时候读的是
总脉冲数。
获得频率就有点儿麻烦了,这要根据你的脉冲频率的大致数量级,而选择不同的方法和测试时间。
如果脉冲频率在1HZ以下下,就需要测试两个脉冲之间的时间长度来测试频率,不用使用高速计数器,应该也不在讨论之列 。
脉冲脉冲频率在10HZ以上,就需要用一定时间来获取脉冲数然后转换成频率,而这个一定时间是根据脉冲频率的大致数量级而定,这个时间内获得的脉冲数越多算出来的就越准确,比如一小时,而时间越长,系统的迟滞也越长,多长时间应该是你能够忍受的最大迟滞时间和这段时间能够获取相当数量的脉冲,
例如3秒内,脉冲数不低于10。
.实现方法是:建立一个毫秒记时器使其反复工作在3秒,然后记录并计算,下面的程序,VD10是每一个3秒始时的累计
脉冲总数,VD18中是3秒内获得的脉冲数,运行中观察VD18,如果数量很大则可缩短测试时间,如果很少,就需要加大测试时间,VD14中是
脉冲频率 LD SM0.0
LPS
AN T37
LPS
EU
MOVD HC1, VD10
LPP
TON T37, 30
LPP
A T37
EU
MOVD HC1, VD18
-D VD10, VD18
MOVD VD18, VD14
/D +3, VD14
程序实际使用中还要有HC1的清零指令,啥时清零是你来定的,如何清零参看HC1帮助。
[ 此帖被醉湮邃虞在2009-04-01 12:50重新编辑 ]