发明内容
本发明的目的是解决现有测速方法准确性和快速性的矛盾,提出种滑动时间窗口法测量旋转轴转速的方法。
本发明的技术方案:滑动时间窗口法测量旋转轴转速的方法包括与转速相关的计数脉冲的测量及对脉冲的处理转换,测速方法如下:
1)初始化,设定:实际的脉冲计数PulseCount=0,脉冲上升沿时刻PulseTime=0,上一次有效读时的脉冲数PulseCount_LastRead=0,上一次有效读时的脉冲时刻PulseTime_LastRead=0,当前速度n=0;
2)初始化后第一个脉冲上升沿,中断函数设定PulseCount=0,开始时刻PulseTime=T0,PulseCount_LastRead=0,PulseTime_LastRead=T0,当前速度n=0;
3)第二个脉冲到达,中断函数设定PulseCount=PulseCount+1=0+1=1,PulseTime=T1。
4)随后到达的每个脉冲,中断函数设定PulseCount=PulseCount+1,第N个脉冲到达时的PulseCount=N-1,并记下当前时刻PulseTime=T(N-1),系统记录最新的脉冲数N-1和脉冲上升沿时刻T(N-1);
5)主程序要求计算速度,此时把第一个脉冲上升沿T0和当前时刻前的最近一次脉冲上升沿T(N-1)定义为时间窗口的起点和终点,时间窗口的脉冲个数为PulseCount=N-1,脉冲累加时间为PulseTime=(N-1)-T0,设旋转轴每转产生k个脉冲,当前转速用n表示,单位为转/分(rpm),利用脉冲个数和脉冲累加时间计算当前速度n=(N-1)*60*1000000/{T(N-1)-T0}/K,并且设定PulseCount_LastRead=N-1,PulseTime_LastRead=T(N-1)为下一个时间窗口的起点;
6)主程序要求计算速度,方法同5),此时的时间窗口起点为T(N-1),时间窗口终点为TM,脉冲个数为M-N-1,脉冲累加时间为TM-T(N-1),当前速度n={(M-N-1)*60*1000000}/{TM-T(N-1)}/k,并且设定PulseCount_LastRead=M和PulseTime_LastRead=TM为下一个时间窗口的起点;如此反复随机计算各时刻的即时速度;
7)主程序要求计算速度,如果PulseCount=PulseCount_LastRead,表明时间窗口内还没有脉冲到达,当前计算速度保持前一个计算速度。
本发明的优点:通过记录一个即时的时间窗的脉冲个数和脉冲累加时间来精确测速,并且记录最近的脉冲个数和时刻作为下一个时间窗口的初始值,为下一个时间窗口作准备。它有效地解决了测速快速性和精确性的矛盾。
具体实施方式
本发明的滑动时间窗口法测量旋转轴转速的方法包括与转速相关的计数脉冲的测量及对脉冲的处理转换,测速方法如下:
1)初始化,设定:实际的脉冲计数PulseCount=0,脉冲上升沿时刻PulseTime=0,上一次有效读时的脉冲数PulseCount_LastRead=0,上一次有效读时的脉冲时刻PulseTime_LastRead=0,当前速度n=0;
2)初始化后第一个脉冲上升沿,中断函数设定PulseCount=0,开始时刻PulseTime=T0,PulseCount_LastRead=0,PulseTime_LastRead=T0,当前速度n=0;
3)第二个脉冲到达,中断函数设定PulseCount=PulseCount+1=0+1=1,PulseTime=T1。
4)随后到达的每个脉冲,中断函数设定PulseCount=PulseCount+1,第N个脉冲到达时的PulseCount=N-1,并记下当前时刻PulseTime=T(N-1),系统记录最新的脉冲数N-1和脉冲上升沿时刻T(N-1);
5)主程序要求计算速度,此时把第一个脉冲上升沿T0和当前时刻前的最近一次脉冲上升沿T(N-1)定义为时间窗口的起点和终点,时间窗口的脉冲个数为PulseCount=N-1,脉冲累加时间为PulseTime=T(N-1)-T0,设旋转轴每转产生k个脉冲,当前转速用n表示,单位为转/分(rpm),利用脉冲个数和脉冲累加时间计算当前速度n=(N-1)*60*1000000)/{T(N-1)-T0}/k,并且设定PulseCount_LastRead=N-1,PulseTime_LastRead=T(N-1)为下一个时间窗口的起点;
6)主程序要求计算速度,方法同5),此时的时间窗口起点为T(N-1),时间窗口终点为TM,脉冲个数为M-N-1,脉冲累加时间为TM-T(N-1),当前速度n={(M-N-1)*60*1000000}/{TM-T(N-1)}/k,并且设定PulseCount_LastRead=M和PulseTime_LastRead=TM为下一个时间窗口的起点;如此反复随机计算各时刻的即时速度;
7)主程序要求计算速度,如果PulseCount=PulseCount_LastRead,表明时间窗口内还没有脉冲到达,当前计算速度保持前一个计算速度。
本发明的时间窗(脉冲累加时间)可以设定、修改,也可以随机产生,可随时改变设定。
现结合图1、图2详细说明滑动时间窗口测速方法:
见附图1:T0、T1等表示脉冲上升沿时刻,0、1、2等表示脉冲链计数,①、②、③等表示微处理器的动作。微处理器初始化时配置定时器中断捕捉脉冲,它可为上升沿也可为下降沿,本说明中用上升沿,程序设有4个全局变量:PulseCount(实际的脉冲计数)、PulseTime(脉冲上升沿时刻)、PulseCount_LastRead(上一次有效读时的脉冲数)、PulseTime_LastRead(上一次有效读时的脉冲时刻)。假设PulseTime、PulseTime_LastRead的单位为微秒(us),旋转轴每转产生k个脉冲,当前转速用n表示,单位为转/分(rpm)。测速由两部分组成:一是中断函数捕捉脉冲,对应于附图1中的②、④、⑤等脉冲上升沿时刻;二是测速函数不定期执行(微处理器空闲时执行,时间可以很短,保证测速及时快速),对应于附图1中的①、③、⑥、⑦、⑧、⑨等时刻。
具体如图2:
①初始化,设定PulseCount=0,PulseTime=0,PulseCount_LastRead=0,PulseTime_LastRead=0,当前速度n=0。
②初始化后第一个脉冲上升沿,中断函数设定PulseCount=0,PulseTime=T0,PulseCount_LastRead=0,PulseTime_LastRead=T0,当前速度n=0。
③第二个脉冲来之前主程序要求计算速度,由于PulseCount=PulseCount_LastRead,PulseCount_LastRead、PulseTime_LastRead值不变,当前速度n不变,=0。
④第二个脉冲到达,中断函数设定PulseCount=PulseCount+1=0+1=1,PulseTime=T1。
⑤随后到达的每个脉冲,中断函数设定PulseCount=PulseCount+1,并记下当前时刻PulseTime。这样做的好处是系统只记录最新的脉冲数和脉冲上升沿时刻,中断函数非常小,不影响系统运行。
⑥主程序要求计算速度,此时把第一个脉冲上升沿T0和当前时刻前的最近一次脉冲上升沿T4定义为时间窗口的起点和终点,时间窗口的脉冲个数为PulseCount_LastRead-PulseCount=4-0=4,脉冲累加时间为PulseTime_LastRead-PulseTime=T4-T0,利用脉冲个数和脉冲累加时间就可计算当前速度n=4*60*1000000)/(T4-T0)/K。并且设定PulseCount_LastRead=PulseCount=4,PulseTime_LastRead=PulseTime=T4,为下一个时间窗口设定起点。
⑦主程序要求计算速度,方法同⑥,此时时间窗口起点为T4,终点为T6,脉冲个数为6-4=2,脉冲累加时间为T6-T4。当前速度n=(2*60*1000000)/(T6-T4)/k,并且设定PulseCount_LastRead=PulseCount=6,PulseTime_LastRead=PulseTime=T6,为下一个时间窗口设定起点。
⑧主程序要求计算速度,由于PulseCount=PulseCount_LastRead=6,表明时间窗口内还没有脉冲到达,此时设定PulseCount_LastRead和PulseTime_LastRead值不变,当前计算速度保持以前计算速度。
⑨方法同⑥。当前速度n=((8-6)*60*1000000)/(T8-T6)/k。
本发明的核心是通过滑动时间窗记录一个即时的时间窗的脉冲个数和脉冲累加时间来精确测速。因此,凡是通过滑动时间窗记录一个时间窗的脉冲个数和脉冲累加时间来测速的,均属于本发明的保护范围。