在网上看资料发现,多数是使用CNT(计数指令)来做测速,发现这个指令计数的速度对时间点(或者采集次数)的要求比较高且需要写复位信号的时间程序,误差相对比较大,并且实时显示速度效果不好。
CNT 指令计算速度的公式: 转速 = 60 / 时间点 x 计数个数
误差放大的原因:计数个数相差一两个,就误差放大 60 / 时间点 倍。
经过几次测试以后,发现使用CNT指令无法满足实时测速的要求,故改变测速方法,使用测量一个脉冲周期的时间(T),然后使用60000/脉冲周期,此种测量方法误差相对较小,误差产生的原因,一个是指令执行周期,另外一个计数非浮点数除法所带来的小数点省略问题,导致误差变大。当速度变化时,其脉冲周期变化。
速度计算公式: 速度 = #60000 / T
误差产生的原因:时间测测量精度,非浮点数除法省略小数点后面的数字。
以下为程序:
‘初始化
LDNOT W2.00
MOV(021) &0 D0
MOV(021) #0 D10
MOV(021) #0 D2
‘ 测取一个脉冲的持续时间,通过这个脉冲的持续时间被#60000(1min)所除,算出一分钟有多少脉冲,即为其速度。
LD W2.00
OUT TR0
@AND 0.00
SET 2.00
@++(590) D0
LD TR0
AND 2.00
TMHH(540) 0000 #9999
LD TR0
AND=(300) D0 &2
-B(414) #9999 T0 D2
RSET 2.00
/BL(435) #60000 D2 D10
MOV(021) &0 D0
时间: 2024-10-12 08:58:12