本发明涉及速度检测领域,特别涉及一种骑行即时速度的获取方法。
背景技术:
码表,就是安装在自行车上用来显示若干骑行数据的电子产品,例如即时速度,骑行里程,总里程,骑行时间等。传统的码表是有线码表,有线码表布线麻烦,不美观;无线码表安装简单,美观;无线码表常用的检测方法是发射端每检测到一个脉冲,立即发给接收端,这种方法的缺点是功耗较大,速度越快,功耗越大;可靠性不高,当有干扰引起发送失败时,无线重发的次数受限制,速度越快影响越明显,而且发射端可检测的最大速度受无线发射速率限制。对无线产品来说功耗以及可靠性是最敏感的。
技术实现要素:
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种发射功耗较低、可靠性较强、能做到脉冲个数零丢失、检测速度范围较宽的骑行即时速度的获取方法。
本发明解决其技术问题所采用的技术方案是:构造一种骑行即时速度的获取方法,应用于无线测速系统,所述无线测速系统包括发射端和接收端,所述发射端包括信号检测发射芯片和传感器,所述信号检测发射芯片的中断引脚与所述传感器的一引脚连接,所述传感器的另一引脚接地,所述传感器设置在车架上,所述信号检测发射芯片内置有第一定时器,所述方法包括如下步骤:
a)上电初始化,所述发射端进入传感器脉冲侦测模式;
b)所述发射端进入一级休眠模式;
c)对所述一级休眠模式的唤醒方式进行判断,当为配对按键唤醒方式时,执行步骤d);当为第一定时器唤醒方式时,执行步骤d′);当为传感器中断唤醒方式时,执行步骤d〞);
d)进入配对模式;
d′)判断所述信号检测发射芯片的中断引脚在所述第一定时器的定时时间内是否检测到脉冲信号,如是,执行步骤e′);否则,当所述信号检测发射芯片的中断引脚连续多个定时周期内未检测到脉冲信号时,执行步骤g′);
e′)所述信号检测发射芯片将脉冲个数数据包通过射频方式发送给所述接收端,执行步骤f′);
f′)判断发射是否成功,如是,返回步骤b),同时执行步骤h′);否则,发射第一设定时间后返回步骤b);
g′)所述发射端进入二级休眠模式;
h′)所述接收端采用先进先出均值滤波的方法进行即时速度的计算;
d〞)备份所述第一定时器的值,根据当前检测到的脉冲个数,在当前时间内计算每个脉冲的平均时间,执行步骤e〞);
e〞)依次判断每个所述脉冲的平均时间是否小于所述第一定时器的剩余时间,如是,恢复所述第一定时器的值,并返回步骤b);否则,返回步骤e′)。
在本发明所述的骑行即时速度的获取方法中,所述信号检测发射芯片还内置有第二定时器,所述步骤g′)进一步包括:
g1′)判断所述传感器的一引脚的状态是否一直为低电平,如是,将所述传感器的一引脚输出0,执行步骤g2′);否则,将所述传感器的一引脚设为输入带上拉状态,执行步骤g3′);
g2′)使能第二定时器唤醒方式和配对按键唤醒方式,执行步骤g4′);
g3′)关闭所述第二定时器唤醒方式,并使能所述传感器中断唤醒方式和配对按键唤醒方式,执行步骤g4′);
g4′)所述发射端进入二级休眠模式,执行步骤g5′);
g5′)对所述二级休眠模式的唤醒方式进行判断,当为所述第二定时器唤醒方式时,返回步骤g1′);当为所述配对按键唤醒方式时,进入配对模式;当为所述传感器中断唤醒方式时,退出所述二级休眠模式,返回步骤b)。
在本发明所述的骑行即时速度的获取方法中,所述接收端内置有第三定时器、停车定时器和第五定时器,所述步骤h′)进一步包括:
h1′)判断是否收到配对请求包,如是,进入配对模式;否则,执行步骤h2′);
h2′)判断所述第三定时器是否在第二设定时间内发生溢出,如是,执行步骤h3′);否则,返回步骤h1′);
h3′)判断所述第三定时器的时间内脉冲个数是否为0,如是,执行步骤h4′);否则,初始化所述停车定时器,执行步骤h7′);
h4′)判断所述停车定时器是否溢出,如是,对所述停车定时器的相关变量进行初始化,返回步骤h1′);否则,执行步骤h5′);所述相关变量包括c_timer5max、m_deltatimecur、m_pulsenum[n-1]、m_pulsenum[n]、m_pulsenumcur、m_deltatime[n-1]和m_deltatime[n],其中,c_timer5max是接收脉冲个数数据包的最长周期,m_deltatimecur是当前前后两次收到脉冲个数数据包的间隔时间,m_pulsenum[n-1]是前一次的脉冲个数;m_pulsenum[n]是当前的脉冲个数,m_pulsenumcur是当前收到的脉冲个数,m_deltatime[n-1]是前一次前后两次收到脉冲个数数据包的间隔时间,m_deltatime[n]时最近一次前后两次收到脉冲个数数据包的间隔时间;
h5′)判断所述第五定时器的c_timer5max是否溢出,如是,执行步骤h6′);否则,返回步骤h1′);
h6′)判断距上次收到脉冲个数数据包的间隔时间内,所述第五定时器是否溢出过,如是,令m_pulsenum[n]=m_pulsenum[n-1],m_deltatime[n]+=c_timer5max,执行步骤h9′);否则,令m_pulsenum[n]=m_pulsenum[n-1],m_deltatime[n]=c_timer5max,执行步骤h9′);
h7′)判断之前是否为停车状态,如是,对即时速度的计算变量进行初始化,并返回步骤h1′);否则,执行步骤h8′);
h8′)判断距上次收到脉冲个数数据包的间隔时间内,所述第五定时器是否溢出过,如是,令m_pulsenum[n]=m_pulsenumcur,m_deltatime[n]+=m_deltatimecur,执行步骤h9′);否则,令m_pulsenum[n]=m_pulsenumcur,m_deltatime[n]=m_deltatimecur,执行步骤h9′);
h9′)将n个m_pulsenum[n]和m_deltatime[n]做均值运算,计算即时速度;所述n为大于1的整数。
在本发明所述的骑行即时速度的获取方法中,所述多个定时周期为四个定时周期。
在本发明所述的骑行即时速度的获取方法中,所述第一设定时间为8~12毫秒。
在本发明所述的骑行即时速度的获取方法中,所述发射端还包括磁铁,所述磁铁设置在轮胎钢丝上,当所述磁铁与所述传感器的距离在检测范围内时,所述传感器的一引脚为低电平。
在本发明所述的骑行即时速度的获取方法中,所述第一定时器的唤醒时间为0.8~1.2秒。
在本发明所述的骑行即时速度的获取方法中,所述停车定时器的溢出时间采用自适应方法,并与所述m_deltatimecur的大小相关。
实施本发明的骑行即时速度的获取方法,具有以下有益效果:由于采用脉冲检测周期发射方法,即将单位时间内检测到的脉冲个数发送给接收端,接收端再根据单位时间内脉冲个数计算即时速度,发射端还可以进行休眠,这样就可以降低功耗,所以其发射功耗较低、可靠性较强、能做到脉冲个数零丢失、检测速度范围较宽。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明骑行即时速度的获取方法一个实施例中的结构示意图;
图2为所述实施例中发射端进入二级休眠模式的具体流程图;
图3为所述实施例中接收端采用先进先出均值滤波的方法进行即时速度的计算的具体流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明骑行即时速度的获取方法实施例中,该骑行即时速度的获取方法应用于无线测速系统,该无线测速系统包括发射端和接收端,发射端包括信号检测发射芯片和传感器(图中未示出),该传感器就是干簧管,是一种磁敏的特殊开关。信号检测发射芯片的中断引脚与传感器的一引脚连接,传感器的另一引脚接地,也就是信号检测发射芯片的中断引脚通过传感器接地,信号检测发射芯片的中断引脚的中断引脚需要外接上拉或使用芯片内部上拉,该方法中使用了信号检测发射芯片的内部上拉,传感器设置在车架上,信号检测发射芯片内置有第一定时器。值得一提的是,该信号检测发射芯片为2.4ghz无线收发芯片。
该发射端还包括磁铁,无线码表的速度检测器件是传感器和磁铁,磁铁设置在轮胎钢丝上,当磁铁与传感器的距离在检测范围内时,传感器的一引脚为低电平。具体的,当磁铁靠近传感器时,传感器的一引脚对地短路,一直为低电平;当磁铁离开传感器时,传感器的一引脚为高电平。具体来讲,当磁铁靠近传感器时,传感器内部短路,传感器导通,也就是信号检测发射芯片的中断引脚对地短路,这个传感器就像一个开关,磁铁靠近时开关合上,磁铁一拿开开关打开,传感器开路。
该骑行即时速度的获取方法的流程图如图1所示。图1中,该方法包括如下步骤:
步骤s01上电初始化,并进入传感器脉冲侦测模式:本步骤中,上电初始化,发射端进入传感器脉冲侦测模式。
步骤s02发射端进入一级休眠模式:本步骤中,发射端进入一级休眠模式。
步骤s03对一级休眠模式的唤醒方式进行判断:本步骤中,对一级休眠模式的唤醒方式进行判断,当为配对按键唤醒方式时,执行步骤s04;当为第一定时器唤醒方式时,执行步骤s04′;当为传感器中断唤醒方式时,执行步骤s04〞。值得一提的是,发射端设有配对按键,该配对按键与信号检测发射芯片连接。
步骤s04进入配对模式:当为配对按键唤醒方式时,则执行本步骤。本步骤中,进入配对模式。
步骤s04′判断信号检测发射芯片的中断引脚在第一定时器的定时间内是否检测到脉冲信号:当为第一定时器唤醒方式时,则执行本步骤。本步骤中,判断信号检测发射芯片的中断引脚在第一定时器的定时间内是否检测到脉冲信号,如果判断的为是,则执行步骤s07′;否则,执行步骤s05′。
步骤s05′当信号检测发射芯片的中断引脚连续多个定时周期内未检测到脉冲信号时,执行步骤s06′:如果上述步骤s04′的判断结果为否,则执行本步骤。本步骤中,当信号检测发射芯片的中断引脚连续多个定时周期内未检测到脉冲信号时,执行步骤s06′。值得一提的是,本实施例中,这里的多个定时周期为四个定时周期。当然,在本实施例的一些情况下,这里的多个定时周期也可以为其他数值。本步骤中,其实就是当信号检测发射芯片的中断引脚连续四个定时周期内未检测到脉冲信号时,执行步骤s06′。
步骤s06′发射端进入二级休眠模式:本步骤中,发射端进入二级休眠模式。值得一提的是,第一定时器的唤醒时间为0.8~1.2秒。本实施例中,第一定时器的唤醒时间定义为1秒,如果连续四个第一定时器的定时周期内,信号检测反射芯片的中断引脚没有检测到脉冲信号,则发射端进入二级休眠模式。当然,在本实施例的一些情况下,第一定时器的唤醒时间还可以根据实际情况相应调整其大小。
步骤s07′信号检测发射芯片将脉冲个数数据包通过射频方式发送给接收端:如果上述步骤s04′的判断结果为是,则执行本步骤。本步骤中,信号检测发射芯片将脉冲个数数据包通过射频方式发送给接收端。执行完本步骤,执行步骤s08′。
步骤s08′判断发射是否成功:本步骤中,判断发射是否成功,如果判断的结果为是,也就是发射成功,则执行步骤s09′,同时,返回步骤s02;否则,也就是发射失败,则执行步骤s10′。
步骤s09′接收端采用先进先出均值滤波的方法进行即时速度的计算:本步骤中,接收端采用先进先出均值滤波的方法进行即时速度的计算。
步骤s10′发射第一设定时间后:如果上述步骤s08′的判断结果为否,则执行本步骤。本步骤中,发射第一设定时间后,返回步骤s02。值得一提的是,第一设定时间为8~12毫秒。本实施例中,第一设定时间为10毫秒,也就是说,如果发送失败,最长发射10毫秒后进入休眠模式,此处10毫秒可做到6米距离内不丢包。当然,在本实施例的一些情况下,第一设定时间的大小还可以根据实际情况进行相应调整。
步骤s04〞备份第一定时器的值,根据当前检测到的脉冲个数,在当前时间内计算每个脉冲的平均时间:当为传感器中断唤醒方式时,则执行本步骤。本步骤中,备份第一定时器的值,根据当前检测到的脉冲个数,在当前时间内计算每个脉冲的平均时间。也就是说,如果信号检测反射芯片的中断引脚有检测到脉冲信号,则根据当前检测到的脉冲个数的总数,计算每个脉冲的平均时间,执行完本步骤,执行步骤s05〞。
步骤s05〞依次判断每个脉冲的平均时间是否小于第一定时器的剩余时间:本步骤中,结合第一定时器剩余的时间,依次判断每个脉冲的平均时间是否小于第一定时器的剩余时间,如是,则执行步骤s06〞;否则,返回步骤s07′。
步骤s06〞恢复第一定时器的值:如果上述步骤s05〞的判断结果为是,则执行本步骤。本步骤中,恢复第一定时器的值。执行完本步骤,返回步骤s02。
本实施例中,当磁铁与传感器的垂直距离在3厘米以内,当轮胎转动到传感器的感应距离时,传感器导通,产生一个低脉冲信号给信号检测发射芯片,信号检测发射芯片将检测到的脉冲个数发送给接收端,接收端根据单位时间内脉冲个数来计算即时速度、里程和总里程等。其不需要像传统技术那样每检测到一个脉冲,立即发给接收端;所以其发射功耗较低、可靠性较强、能做到脉冲个数零丢失、检测速度范围较宽。
本实施例中,信号检测发射芯片还内置有第二定时器。对于本实施例而言,上述步骤s06′还可以进一步细化,其细化后的流程图如图2所示。图2中,上述步骤s06′进一步包括:
步骤s61′判断传感器的一引脚的状态是否一直为低电平:信号检测发射芯片的中断引脚只有下降沿才中断,当轮胎停止,且磁铁恰好靠近传感器时,信号检测发射芯片的中断引脚一直跟地导通,会引起发射端的二级休眠模式功耗大的问题;所以在进入二级休眠模式前,先检测信号检测发射芯片的中断引脚(也可以是传感器的一引脚)是否为低电平,也就是,本步骤中,判断传感器的一引脚的状态是否一直为低电平,如果判断的结果为是,则执行步骤s64′;否则,执行步骤s62′。
步骤s62′将传感器的一引脚设为输入带上拉状态:如果上述步骤s61′的判断结果为否,也就是传感器的一引脚的状态为高电平,则执行本步骤。本步骤中,将传感器的一引脚设为输入带上拉状态。执行完本步骤,执行步骤s63′。
步骤s63′关闭第二定时器唤醒方式,并使能传感器中断唤醒方式和配对按键唤醒方式:本步骤中,关闭第二定时器唤醒方式,并使能传感器中断唤醒方式(也就是打开信号检测发射芯片的中断引脚的中断功能)和配对按键唤醒方式,执行完本步骤,执行步骤s66′。
步骤s64′将传感器的一引脚输出0:如果上述步骤s61′的判断结果为是,则执行本步骤。本步骤中,将传感器的一引脚输出0。具体来讲,如果是低电平,进入休眠模式前需要将信号检测发射芯片的中断引脚设置成输出低电平。执行完本步骤,执行步骤s65′。
步骤s65′使能第二定时器唤醒方式和配对按键唤醒方式:本步骤中,使能第二定时器唤醒方式配对和按键唤醒方式,具体的,会关闭传感器中断唤醒功能,同时使用第二定时器每隔1.5秒(当然也可以为其他时间)唤醒,第二定时器唤醒后将信号检测发射芯片的中断引脚设置成输入带上拉功能。如果信号检测发射芯片的中断引脚为低电平,继续依此循环检测。执行完本步骤,执行步骤s66′。
步骤s66′发射端进入二级休眠模式:本步骤中,发射端进入二级休眠模式。执行完本步骤,执行步骤s67′。
步骤s67′对二级休眠模式的唤醒方式进行判断:本步骤中,对二级休眠模式的唤醒方式进行判断,当为第二定时器唤醒方式时,返回步骤s61′;当为配对按键唤醒方式时,执行步骤s68′;当为传感器中断唤醒方式时,执行步骤s69′。
步骤s68′进入配对模式:本步骤中,进入配对模式。
步骤s69′退出二级休眠模式:本步骤中,退出二级休眠模式。执行完本步骤,返回步骤s02。这样就实现了对休眠模式的处理。
本实施例中,接收端内置有第三定时器、停车定时器和第五定时器(图中未示出)。对于本实施例而言,上述步骤s09′还可进一步细化,其细化后的流程图如图3所示,图3中,上述步骤s09′进一步包括:
步骤s901′判断是否收到配对请求包:本步骤中,接收端判断是否收到配对请求包,如果判断的结果为是,则执行步骤s902′;否则,执行步骤s903′。
步骤s902′进入配对模式:如果上述步骤s901′的判断结果为是,则执行本步骤。本步骤中,进入配对模式。
s903′判断第三定时器是否在第二设定时间内发生溢出:如果上述步骤s901′的判断结果为否,则执行本步骤。本步骤中,判断第三定时器是否在第二设定时间内发生溢出,如果判断的结果为是,则执行步骤s904′;否则,返回步骤s901′。
s904′判断第三定时器的时间内脉冲个数是否为0:如果上述步骤s903′的判断结果为是,则执行本步骤。本步骤中,判断第三定时器的时间内脉冲个数是否为0,如果判断的结果为是,则执行步骤s905′;否则,执行步骤s911′。
步骤s905′判断停车定时器是否溢出:如果上述步骤s904′的判断结果为是,则执行本步骤。本步骤中,判断停车定时器是否溢出,如果判断的结果为是,则执行本步骤s906′;否则,执行步骤s907′。
步骤s906′对停车定时器的相关变量进行初始化:如果上述步骤s905′的判断结果为是,则执行本步骤。本步骤中,对停车定时器的相关变量进行初始化。上述相关变量包括c_timer5max、m_deltatimecur、m_pulsenum[n-1]、m_pulsenum[n]、m_pulsenumcur、m_deltatime[n-1]和m_deltatime[n],其中,c_timer5max是接收脉冲个数数据包的最长周期,m_deltatimecur是当前前后两次收到脉冲个数数据包的间隔时间,m_pulsenum[n-1]是前一次的脉冲个数;m_pulsenum[n]是当前的脉冲个数,m_pulsenumcur是当前收到的脉冲个数,m_deltatime[n-1]是前一次前后两次收到脉冲个数数据包的间隔时间,m_deltatime[n]时最近一次前后两次收到脉冲个数数据包的间隔时间。执行完本步骤,返回步骤s901′。
步骤s907′判断第五定时器的c_timer5max是否溢出:如果上述步骤s905′的判断结果为否,则执行本步骤。本步骤中,判断第五定时器的c_timer5max是否溢出,如果判断的结果为是,则执行步骤s908′;否则,返回步骤s901′。
步骤s908′判断距上次收到脉冲个数数据包的间隔时间内,第五定时器是否溢出过:如果上述步骤s907′的判断结果为是,则执行本步骤。本步骤中,判断距上次收到脉冲个数数据包的间隔时间内,第五定时器是否溢出过,如果判断的结果为是,则执行步骤s909′;否则,执行步骤s910′。
步骤s909′令m_pulsenum[n]=m_pulsenum[n-1],m_deltatime[n]+=c_timer5max:如果上述步骤s908′的判断结果为是,则执行本步骤。本步骤中,令m_pulsenum[n]=m_pulsenum[n-1](即将m_pulsenum[n]的值移到m_pulsenum[n-1]中),m_deltatime[n]+=c_timer5max。执行完本步骤,执行步骤s917′。
步骤s910′令m_pulsenum[n]=m_pulsenum[n-1],m_deltatime[n]=c_timer5max:如果上述步骤s908′的判断结果为否,则执行本步骤。本步骤中,令m_pulsenum[n]=m_pulsenum[n-1],m_deltatime[n]=c_timer5max。执行完本步骤,执行步骤s917′。
步骤s911′初始化停车定时器:如果上述步骤s904′的判断结果为否,则执行本步骤。本步骤中,初始化停车定时。执行完本步骤,返回步骤s912′。
步骤s912′判断之前是否为停车状态:本步骤中,判断之前是否为停车状态,如果判断的结果为是,则执行步骤s913′;否则,执行步骤s914′。
步骤s913′对即时速度的计算变量进行初始化:如果上述步骤s912′的判断结果为是,则执行本步骤。本步骤中,对即时速度的计算变量进行初始化。执行完本步骤,返回步骤s901′。
步骤s914′判断距上次收到脉冲个数数据包的间隔时间内,第五定时器是否溢出过:如果上述步骤s912′的判断结果为否,则执行本步骤。本步骤中,判断距上次收到脉冲个数数据包的间隔时间内,第五定时器是否溢出过,如果判断的结果为是,则执行步骤s915′;否则,执行步骤s916′。
步骤s915′令m_pulsenum[n]=m_pulsenumcur,m_deltatime[n]+=m_deltatimecur:如果上述步骤s914′的判断结果为是,则执行本步骤。本步骤中,令m_pulsenum[n]=m_pulsenumcur,m_deltatime[n]+=m_deltatimecur。执行完本步骤,执行步骤s917′。
步骤s916′令m_pulsenum[n]=m_pulsenumcur,m_deltatime[n]=m_deltatimecur:本步骤中,令m_pulsenum[n]=m_pulsenumcur,m_deltatime[n]=m_deltatimecur。执行完本步骤,执行步骤s917′。
步骤s917′将n个m_pulsenum[n]和m_deltatime[n]做均值运算,计算即时速度:本步骤中,将n个m_pulsenum[n]和m_deltatime[n]做均值运算,计算即时速度。其中,n为大于1的整数。
本实施例中,停车定时器的溢出时间采用自适应方法,根据当前前后两次收到脉冲个数数据包的间隔时间来决定,即m_deltatimecur*4,可解决低速时即时速度显示不连续,会跳变的问题。
本发明通过将m_pulsenum[n]的值移到m_pulsenum[n-1]中,当前收到的脉冲个数m_pulsenumcur更新到m_pulsenum[n]中;距上次收到脉冲个数数据包的间隔时间m_deltatime[n]的值移到m_deltatime[n-1]中,将当前m_deltatimecur更新到m_deltatime[n];然后再对n个m_pulsenum[n]和m_deltatime[n]累加计算均值,这个均值乘以轮胎的周长,就可以得到即时速度。此处n可以设置成8,实际应用中,n的大小可根据实际情况进行相应调整。
总之,本发明通过脉冲检测周期的发射方法,即将单位时间内检测到的脉冲个数发送给接收端,接收端再根据单位时间内脉冲个数计算即时速度。本发明在保证精度的基础上,大大降低发射端的功耗,速度越快越明显,其效果越明显,可靠性较强,可做到脉冲个数零丢失,检测速度范围较宽。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。