CN112146686B - 旋转信息获取方法、装置及系统和计算机可读存储介质 - Google Patents

旋转信息获取方法、装置及系统和计算机可读存储介质 Download PDF

Info

Publication number
CN112146686B
CN112146686B CN201910564207.4A CN201910564207A CN112146686B CN 112146686 B CN112146686 B CN 112146686B CN 201910564207 A CN201910564207 A CN 201910564207A CN 112146686 B CN112146686 B CN 112146686B
Authority
CN
China
Prior art keywords
rotation
work
interrupt
level state
rotary encoder
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910564207.4A
Other languages
English (en)
Other versions
CN112146686A (zh
Inventor
周晶晶
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xian Novastar Electronic Technology Co Ltd
Original Assignee
Xian Novastar Electronic Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xian Novastar Electronic Technology Co Ltd filed Critical Xian Novastar Electronic Technology Co Ltd
Priority to CN201910564207.4A priority Critical patent/CN112146686B/zh
Publication of CN112146686A publication Critical patent/CN112146686A/zh
Application granted granted Critical
Publication of CN112146686B publication Critical patent/CN112146686B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G01MEASURING; TESTING
    • G01DMEASURING NOT SPECIALLY ADAPTED FOR A SPECIFIC VARIABLE; ARRANGEMENTS FOR MEASURING TWO OR MORE VARIABLES NOT COVERED IN A SINGLE OTHER SUBCLASS; TARIFF METERING APPARATUS; MEASURING OR TESTING NOT OTHERWISE PROVIDED FOR
    • G01D5/00Mechanical means for transferring the output of a sensing member; Means for converting the output of a sensing member to another variable where the form or nature of the sensing member does not constrain the means for converting; Transducers not specially adapted for a specific variable
    • G01D5/12Mechanical means for transferring the output of a sensing member; Means for converting the output of a sensing member to another variable where the form or nature of the sensing member does not constrain the means for converting; Transducers not specially adapted for a specific variable using electric or magnetic means
    • G01D5/244Mechanical means for transferring the output of a sensing member; Means for converting the output of a sensing member to another variable where the form or nature of the sensing member does not constrain the means for converting; Transducers not specially adapted for a specific variable using electric or magnetic means influencing characteristics of pulses or pulse trains; generating pulses or pulse trains
    • G01D5/24428Error prevention

Abstract

本发明实施例公开了旋转信息获取方法、装置及系统和计算机可读存储介质。所述方法适于应用在基于Linux操作系统的嵌入式设备,且所述嵌入式设备采用旋转编码器作为旋钮;包括:在旋转编码器的注册为中断引脚的第一脉冲信号输出引脚每触发一次中断时,调用中断处理函数根据旋转编码器的第二脉冲信号输出引脚的电平状态改变旋转标志量;利用线程工作函数,每隔预设时长根据旋转标志量确定旋转方向及旋转速度,基于旋转方向和旋转速度生成工作任务并添加至工作队列中,以及将旋转标志量置为初始值;以及,利用内核处理添加至工作队列中的工作任务,以向应用层软件传递表征旋转方向和旋转速度的旋转信息。应用本发明实施例可以避免中断丢失。

Description

旋转信息获取方法、装置及系统和计算机可读存储介质
技术领域
本发明涉及旋转编码器技术领域,尤其涉及一种旋转信息获取方法、一种旋转信息获取装置、一种旋转信息获取系统以及一种计算机可读存储介质。
背景技术
旋转编码器是一种将旋转位移转换成数字脉冲信号的旋转式传感器,由于其具有输入灵活、简单可靠等特点,非常适合作为输入装置,适于应用在基于Linux操作系统的嵌入式设备中。通常,可以将旋转编码器作为上述嵌入式设备的旋钮进行变量调节。
目前,在具体应用中,每当旋转编码器因旋转触发中断时,是利用工作业务函数判断旋转编码器的旋转方向,以将表征所述旋转方向的旋转信息传递给上层软件使用。但因为Linux操作系统的中断响应和处理机制问题,如果将工作业务函数直接放在处理中断函数中,完成中断的上下文需要花费较长时间,那么可能由于上一个中断未处理结束时又触发了另一中断,从而造成当前中断的丢失。
因此,如何实现旋转信息的获取以避免中断丢失,是一个亟待解决的问题。
发明内容
本发明的实施例提供一种旋转信息获取方法、一种旋转信息获取装置、一种旋转信息获取系统以及一种计算机可读存储介质,以实现避免中断丢失的技术效果。
一方面,本发明实施例提供的一种旋转信息获取方法,适于应用在基于Linux操作系统的嵌入式设备,且所述嵌入式设备采用旋转编码器作为旋钮,所述旋转信息获取方法包括:在所述旋转编码器的注册为中断引脚的第一脉冲信号输出引脚每触发一次中断时,调用中断处理函数根据所述旋转编码器的第二脉冲信号输出引脚的电平状态改变旋转标志量;利用线程工作函数,每隔预设时长根据所述旋转标志量确定旋转方向及旋转速度,基于所述旋转方向和所述旋转速度生成工作任务并添加至工作队列中,以及将所述旋转标志量置为初始值;以及利用内核处理添加至所述工作队列中的所述工作任务,以向应用层软件传递表征所述旋转方向和所述旋转速度的旋转信息。
本发明实施例在旋转编码器发生中断时,改变旋转标志量,并每隔预设时长根据所述旋转标志量确定旋转方向及旋转速度,基于所述旋转方向和所述旋转速度生成工作任务并添加至工作队列中,并将所述旋转标志量置为初始值,之后利用内核处理添加至所述工作队列中的所述工作任务,以向应用层软件传递表征所述旋转方向和所述旋转速度的旋转信息。本发明实施例在中断产生时,不是将耗时较长的工作业务函数的工作内容置于处理中断函数中,而是生成工作任务加入到工作队列中,由内核依次调用执行。因此可以有效避免中断丢失。同时,本发明实施例的旋转信息除了表征旋转方向外,还表征旋转速度,因此,可以给上层软件提供更为丰富的信息,有利于改善上层软件的调节功能。
在本发明的一个实施例中,所述调用中断处理函数根据所述旋转编码器的第二脉冲信号输出引脚的电平状态改变旋转标志量,包括:当所述电平状态为第一电平状态,对所述旋转标志量增加一个指定值;当所述电平状态为第二电平状态,对所述旋转标志量减少一个所述指定值;其中,所述第一电平状态和所述第二电平状态之一为高电平,且所述第一电平状态和所述第二电平状态之另一为低电平。
在本发明的一个实施例中,所述根据所述旋转标志量确定旋转方向及旋转速度,包括:根据所述旋转标志量的正负确定旋转方向,以及根据所述旋转标志量的绝对值确定旋转速度。
在本发明的一个实施例中,所述根据所述旋转标志量的正负确定旋转方向,包括:当所述旋转标志量为正时,确定所述旋转方向为第一方向;当所述旋转标志量为负时,确定所述旋转方向为第二方向;其中,所述第一方向和所述第二方向之一为顺时针方向,且所述第一方向和所述第二方向之另一为逆时针方向。
在本发明的一个实施例中,表征所述旋转方向和所述旋转速度的所述旋转信息为四个字节,且所述旋转方向和所述旋转速度分别用所述四个字节中的两个字节表示。
另一方面,本发明实施例提供的一种旋转信息获取装置,用于执行前述任意一种旋转信息获取方法,且所述旋转信息获取装置包括:中断处理模块,用于在所述旋转编码器的注册为中断引脚的第一脉冲信号输出引脚每触发一次中断时,调用中断处理函数根据所述旋转编码器的第二脉冲信号输出引脚的电平状态改变旋转标志量;轮询模块,用于利用线程工作函数,每隔预设时长根据所述旋转标志量确定旋转方向及旋转速度,基于所述旋转方向和所述旋转速度生成工作任务并添加至工作队列中,以及将所述旋转标志量置为初始值;以及任务处理模块,用于利用内核处理添加至所述工作队列中的所述工作任务,以向应用层软件传递表征所述旋转方向和所述旋转速度的旋转信息。
再一方面,本发明实施例提供的一种旋转信息获取方法,适于应用在基于Linux操作系统的嵌入式设备,且所述嵌入式设备采用旋转编码器作为旋钮,所述旋转信息获取方法包括:创建工作队列;注册所述旋转编码器的第一脉冲信号输出引脚为中断引脚,以在所述第一脉冲信号输出引脚每触发一次中断时,调用中断处理函数根据所述旋转编码器的第二脉冲信号输出引脚的电平状态改变旋转标志量;创建旋钮轮询线程,以利用线程工作函数,每隔预设时长根据所述旋转标志量确定旋转方向及旋转速度,基于所述旋转方向和所述旋转速度生成工作任务并添加至工作队列中,以及将所述旋转标志量置为初始值;以及利用内核处理添加至所述工作队列中的所述工作任务,以向应用层软件传递表征所述旋转方向和所述旋转速度的旋转信息。
在本发明的一个实施例中,所述调用中断处理函数根据所述旋转编码器的第二脉冲信号输出引脚的电平状态改变旋转标志量,包括:当所述电平状态为第一电平状态,对所述旋转标志量增加一个指定值;当所述电平状态为第二电平状态,对时所述旋转标志量减少一个所述指定值;其中,所述第一电平状态和所述第二电平状态之一为高电平,且所述第一电平状态和所述第二电平状态之另一为低电平。
在本发明的一个实施例中,所述根据所述旋转标志量确定旋转方向及旋转速度,包括:根据所述旋转标志量的正负确定旋转方向,以及根据所述旋转标志量的绝对值确定旋转速度。
在本发明的一个实施例中,所述根据所述旋转标志量的正负确定旋转方向,包括:当所述旋转标志量为正时,确定所述旋转方向为第一方向;当所述旋转标志量为负时,确定所述旋转方向为第二方向;其中,所述第一方向和所述第二方向之一为顺时针方向,且所述第一方向和所述第二方向之另一为逆时针方向。
在本发明的一个实施例中,表征所述旋转方向和所述旋转速度的所述旋转信息为四个字节,且所述旋转方向和所述旋转速度分别用所述四个字节中的两个字节表示。
又一方面,本发明实施例提供的一种旋转信息获取装置,用于执行前述任意一种旋转信息获取方法,且所述旋转信息获取装置包括:队列创建模块,用于创建工作队列;注册模块,用于注册所述旋转编码器的第一脉冲信号输出引脚为中断引脚,以在所述第一脉冲信号输出引脚每触发一次中断时,调用中断处理函数根据所述旋转编码器的第二脉冲信号输出引脚的电平状态改变旋转标志量;线程创建模块,用于创建旋钮轮询线程,以利用线程工作函数,每隔预设时长根据所述旋转标志量确定旋转方向及旋转速度,基于所述旋转方向和所述旋转速度生成工作任务并添加至工作队列中,以及将所述旋转标志量置为初始值;以及任务处理模块,用于利用内核处理添加至所述工作队列中的所述工作任务,以向应用层软件传递表征所述旋转方向和所述旋转速度的旋转信息。
再又一方面,本发明实施例提供的一种旋转信息获取系统,包括:处理器和存储器;其中所述存储器存储由所述处理器执行的指令,且所述处理器用于执行所述指令以实现前述任意一种旋转信息获取方法。
另又一方面,本发明实施例提供的一种计算机可读存储介质,其中,所述计算机可读存储介质为非易失性存储器且存储有程序代码,当所述程序代码被计算机执行时实现前述任意一种旋转信息获取方法。
综上所述,本发明实施例利用旋转标志量确定旋转方向及旋转速度,基于所述旋转方向和所述旋转速度生成关于旋转信息的工作任务,并添加至工作队列中,以利用内核依次调用执行所述工作队列中的所述工作任务,以向应用层软件传递所述旋转信息,可以有效避免中断丢失。同时,本发明实施例的旋转信息除了表征旋转方向外,还表征旋转速度,可以给上层软件提供更为丰富的信息,有利于改善上层软件的调节功能。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明第一实施例的一种旋转信息获取方法的流程图。
图2A为旋转编码器正转时输出的脉冲信号时序图。
图2B为旋转编码器反转时输出的脉冲信号时序图。
图3为本发明第二实施例的一种旋转信息获取装置的模块示意图。
图4为本发明第三实施例的一种旋转信息获取方法的流程图。
图5为本发明第三实施例用于示例的旋转信息获取方法的流程图。
图6为本发明第四实施例的一种旋转信息获取装置的模块示意图。
图7为本发明第五实施例的一种旋转信息获取系统的结构示意图。
图8为本发明第六实施例的一种计算机可读存储介质的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了避免中断丢失,本发明实施例提供了一种旋转信息获取方法、一种旋转信息获取装置、一种旋转信息获取系统以及一种计算机可读存储介质。
本发明实施例所提供的旋转信息获取方法的执行主体,可以为一种旋转信息获取装置。具体的,所述装置可以运行于嵌入式电子设备中。在具体应用中,所述旋转信息获取方法的执行主体可以为旋转编码器主控芯片的驱动程序。本发明实施例中的所述旋转编码器例如为增量型旋转编码器。
以下对各个实施例分别进行介绍。
【第一实施例】
如图1所示,本发明第一实施例提供的一种旋转信息获取方法,例如包括以下步骤:
S11,在所述旋转编码器的注册为中断引脚的第一脉冲信号输出引脚每触发一次中断时,调用中断处理函数根据所述旋转编码器的第二脉冲信号输出引脚的电平状态改变旋转标志量;
S12,利用线程工作函数,每隔预设时长根据所述旋转标志量确定旋转方向及旋转速度,基于所述旋转方向和所述旋转速度生成工作任务并添加至工作队列中,以及将所述旋转标志量置为初始值;以及
S13,利用内核处理添加至所述工作队列中的所述工作任务,以向应用层软件传递表征所述旋转方向和所述旋转速度的旋转信息。
为了便于理解本实施例的技术方案,首先对现有技术中旋转编码器旋转方向的判断方法进行简要介绍:
旋转编码器例如具有三个引脚a、b和z,在旋转编码器旋转时,每个引脚各自输出一组方波脉冲信号。也就是说,旋转编码器共输出三组方波脉冲信号A、B和Z。其中,脉冲信号Z用于基准点定位;A、B两组脉冲信号所包含的脉冲个数相同,但相位相差90度,根据脉冲信号A、B的相位差可以判断旋转编码器的旋转方向。具体的,先将旋转编码器引脚a的gpio((general purpose input/output,通用输入/输出)注册为中断,当旋转编码器因旋转发生中断时,获取到旋转编码器输出的脉冲信号A和B,可以参见图2A和图2B进行理解,图2A和图2B分别为旋转编码器正转和反转时输出的脉冲信号时序图,旋转方向的判断原则例如为:若A的上升沿超前于B的上升沿(如图2A所示),为正转;若A上升沿滞后于B上升沿(如图2B所示),为反转。需要说明的是,在上述判断中,定义从轴端视入旋转编码器时,顺时针旋转为正转,逆时针旋转为反转。当然,正转和反转的定义可以互换。
以下对各个步骤S11、S12和S13进行详细说明:
针对S11步骤而言:所述旋转编码器的第一脉冲信号输出引脚可以为上文的所述引脚a,所述第二脉冲信号输出引脚为所述引脚b,对应的,所述第一脉冲信号为所述脉冲信号A,所述第二脉冲信号为所述脉冲信号B;其中,所述第一脉冲信号输出引脚被预先注册为中断。当然,在本发明实施例中,所述第一脉冲信号输出引脚和所述第二脉冲信号输出引脚的定义可以与上文提及的现有技术的定义不同。
在所述第一脉冲信号输出引脚每触发一次中断时,调用中断处理函数,根据所述第二脉冲信号输出引脚的电平状态改变旋转标志量。
其中,所述旋转标志量的初始值为一个预设数值,比如0。旋转标志量的改变包括增大或者减小。本发明实施例通过改变旋转标志量,实现中断计数。
具体的,所述调用中断处理函数根据所述旋转编码器的第二脉冲信号输出引脚的电平状态改变旋转标志量,包括:
当所述电平状态为第一电平状态,对所述旋转标志量增加一个指定值;
当所述电平状态为第二电平状态,对所述旋转标志量减少一个所述指定值;
其中,所述第一电平状态和所述第二电平状态之一为高电平,且所述第一电平状态和所述第二电平状态之另一为低电平。所述指定值可以为1等正数值。
本领域技术人员可以理解的是,上述实施过程包含有任选其一的两种方式:
方式一:如果所述第二脉冲信号输出引脚的电平状态为高电平,可以对所述旋转标志量增加一个所述指定值;如果所述第二脉冲信号输出引脚的电平状态为低电平,可以对所述旋转标志量减少一个所述指定值。
方式二:如果所述第二脉冲信号输出引脚的电平状态为低电平,可以对所述旋转标志量增加一个所述指定值;如果所述第二脉冲信号输出引脚的电平状态为高电平,可以对所述旋转标志量减少一个所述指定值。
以方式一举例说明,当中断发生时,如果所述第二脉冲信号输出引脚的电平状态为高电平,则可以给所述旋转标志量加一;如果所述第二脉冲信号输出引脚的电平状态为低电平,则可以给所述旋转标志量减一。
本发明实施例中,每发生一次中断,所述旋转标志量的数值就会发生一次改变,并且,由于本发明实施例中,所述预设时长为毫秒级的时间长度,在如此短的时间内,所述旋转编码器的旋转方向是单向的,那么,每一次中断所对应的第二脉冲信号输出引脚的电平状态是一致的。也就是说,在本发明实施例中,所述预设时长内,所述旋转标志量要么是持续增大,要么是持续减小,因此,所述旋转标志量数值变化的方向可以体现所述旋转编码器的旋转方向,所述旋转标志量的绝对值可以体现中断次数。
针对S12步骤而言:既然所述旋转标志量可以体现出所述旋转编码器的旋转方向和中断次数,那么,首先可以创建一个轮询线程,以利用线程工作函数,每隔预设时长根据所述旋转标志量确定该时间段内的旋转方向及旋转速度。需要说明的是,在本发明实施例中,所述预设时长为毫秒级的时间长度,根据工程经验,所述预设时长通常可以选取100毫秒,或者75毫秒等数值。
具体的:
所述根据所述旋转标志量确定旋转方向及旋转速度,包括:
根据所述旋转标志量的正负确定旋转方向,以及根据所述旋转标志量的绝对值确定旋转速度。
关于旋转方向:所述根据所述旋转标志量的正负确定旋转方向,包括:
当所述旋转标志量为正时,确定所述旋转方向为第一方向;
当所述旋转标志量为负时,确定所述旋转方向为第二方向;
其中,所述第一方向和所述第二方向之一为顺时针方向,且所述第一方向和所述第二方向之另一为逆时针方向。
比如,当所述旋转标志量为正时,确定所述旋转方向为顺时针;当所述旋转标志量为负时,确定所述旋转方向为逆时针。或者可以是:
当所述旋转标志量为正时,确定所述旋转方向为逆时针;当所述旋转标志量为负时,确定所述旋转方向为顺时针。
关于旋转速度:由于旋转编码器每转发生的中断数是固定的,在所述预设时长内,中断次数越多,表示旋转的圈数越多,即旋转的速度越快。而所述旋转标志量的绝对值代表了所述预设时长内的中断次数,因此,可以根据所述旋转标志量的绝对值确定旋转速度,比如,可以直接将所述旋转标志量的绝对值作为旋转速度,当然,也可以对所述旋转标志量的绝对值进行加权等数学处理,得到旋转速度,这都是合理的。
其次,可以基于所述旋转方向和所述旋转速度生成工作任务并添加至工作队列中。
本领域技术人员可以理解的是,工作队列(workqueue)是一种将工作推后执行的形式,工作队列可以把工作推后,交由一个内核线程去执行,也就是说,工作队列中的各个工作任务将由内核在后续依次调用执行,而并不需要由处理中断函数立即执行。而工作队列最重要的一点优势还在于,允许被重新调度甚至是睡眠。工作队列需要预先创建,关于创建过程在此不详细说明。
最后,将所述旋转标志量置为初始值,以使得在下一个预设时长内,所述旋转标志量得以重新进行中断计数。
针对S13步骤而言:利用内核依次处理所述工作队列中的各个工作任务,以向应用层软件传递表征所述旋转方向和所述旋转速度的旋转信息。
工作任务的主要作用是:基于所述旋转方向和所述旋转速度生成所述旋转信息,并将所述旋转信息传递给所述应用层软件。
其中,表征所述旋转方向和所述旋转速度的所述旋转信息可以为四个字节,且所述旋转方向和所述旋转速度分别用所述四个字节中的两个字节表示。比如,所述四个字节中的前两个字节用来表示所述旋转方向,后两个字节用来表示所述旋转速度。或者,反之亦可。
当然,表征所述旋转方向和所述旋转速度的所述旋转信息不限于四个字节,且所述旋转信息中,表征所述旋转方向和所述旋转速度的字节的划分方法不限于以上所述。
现有技术中,当旋转速度很快时,有可能会造成中断丢失,从而造成输出数据错误甚至丢失。本发明实施例采用工作队列机制,由内核依次调用执行工作队列中的各个工作任务,可以保证中断下文将在工作队列中执行,从而可以减少中断上文的耗时,减小中断丢失的情况。
现有技术中,旋转编码器发生中断后,确定出旋转方向,并向应用层软件传递表征所述旋转方向的旋转信息,所述应用层软件可以根据所述旋转方向和预先设定的调整步长,增大或者减小需要调节的变量,比如根据所述旋转方向为顺时针,将待调整变量增大一个调整步长,根据所述旋转方向为逆时针,将待调整变量减小一个调整步长等。那么,如果通过旋转编码器调节的变量的变化范围较大时,通常需要长时间旋转才能达到对应的目标数值,或者在接近目标数值的小范围调节过程中,有可能出现调节过量的情况。
而相比于现有技术,本发明实施例向所述应用层软件传递的旋转信息中,除了包括旋转方向外,还有旋转速度。所述应用层软件可以根据所述旋转速度的数值,改变调整步长,比如在待调整变量的范围较大时,由于调整速度较快,所述应用层软件可以根据当前旋转速度,放大调整步长,实现快速调整;而在小范围内调整时,由于旋转速度较慢,所述应用层软件可以根据当前旋转速度,减小调整步长,实现小步进微调,从而实现精准对位目标数值。因此,本发明实施例通过引入旋转速度,可以提高变量调节效率和准确率,同时扩大旋转编码器的适用范围,使所述应用层软件可以简便地实现大范围快速调节和小范围精确微调的功能,使得所述应用层软件可以具有更大的自由度。所述应用层软件可以方便地利用上述方法,基于所述旋转编码器构成的旋钮,实现频率调节、音量调节、光线强度调节、菜单选择、速度调节和温度调节等场景应用。
本发明实施例所提供的技术方案中,在旋转编码器发生中断时,改变旋转标志量,并每隔预设时长根据所述旋转标志量确定旋转方向及旋转速度,基于所述旋转方向和所述旋转速度生成工作任务并添加至工作队列中,并将所述旋转标志量置为初始值,之后利用内核处理添加至所述工作队列中的所述工作任务,以向应用层软件传递表征所述旋转方向和所述旋转速度的旋转信息。本发明实施例在中断产生时,不是将耗时较长的工作业务函数的工作内容置于处理中断函数中,而是生成工作任务加入到工作队列中,由内核依次调用执行。因此可以有效避免中断丢失。同时,本发明实施例的旋转信息除了表征旋转方向外,还表征旋转速度,因此,可以给上层软件提供更为丰富的信息,有利于改善上层软件的调节功能。
【第二实施例】
如图3所示,本发明第二实施例提供的一种旋转信息获取装置,包括:中断处理模块31、轮询模块32和任务处理模块33。
具体地,
所述中断处理模块31,用于在所述旋转编码器的注册为中断引脚的第一脉冲信号输出引脚每触发一次中断时,调用中断处理函数根据所述旋转编码器的第二脉冲信号输出引脚的电平状态改变旋转标志量;
所述轮询模块32,用于利用线程工作函数,每隔预设时长根据所述旋转标志量确定旋转方向及旋转速度,基于所述旋转方向和所述旋转速度生成工作任务并添加至工作队列中,以及将所述旋转标志量置为初始值;以及
所述任务处理模块33,用于利用内核处理添加至所述工作队列中的所述工作任务,以向应用层软件传递表征所述旋转方向和所述旋转速度的旋转信息。
至于所述中断处理模块31、所述轮询模块32和所述任务处理模块33的具体功能细节可参考前述第一实施例中步骤S11、S12和S13的相关描述,在此不再赘述。此外,值得一提的是,模块31、模块32和模块33可以为软件模块,存储于非易失性存储器中且由一个或多个处理器执行相关操作以进行前述第一实施例中的步骤S11、S12、和S13。
本发明实施例所提供的技术方案中,在中断产生时,不是将耗时较长的工作业务函数的工作内容置于处理中断函数中,而是生成工作任务加入到工作队列中,由内核依次调用执行。因此可以有效避免中断丢失。同时,本发明实施例的旋转信息除了表征旋转方向外,还表征旋转速度,因此,可以给上层软件提供更为丰富的信息,有利于改善上层软件的调节功能。
【第三实施例】
如图4所示,本发明第三实施例提供的一种旋转信息获取方法,例如包括以下步骤:
S41,创建工作队列;
为了便于理解,对工作和工作队列进行一个形象化的解释:
在系统初始化的时候定义这样一个函数:这个函数在未来的某个情况下会被调用执行,但并不知道确切的调用时间,因此,可以将这个任务储存在一个地方,然后在需要执行这个任务的时候调用它,这个任务就被称为工作,而储存这个任务的地方被称为工作队列。
创建工作队列的具体过程可以包括:
1)创建workqueue(如果使用内核默认的workqueue,此步骤略过);2)创建工作项数据结构work_struct;3)向workqueue提交工作项。关于创建工作队列的具体过程可以参见现有技术中的相关说明以及各种程序示例,在此不再详细说明。
S42,注册所述旋转编码器的第一脉冲信号输出引脚为中断引脚,以在所述第一脉冲信号输出引脚每触发一次中断时,调用中断处理函数根据所述旋转编码器的第二脉冲信号输出引脚的电平状态改变旋转标志量;
S43,创建旋钮轮询线程,以利用线程工作函数,每隔预设时长根据所述旋转标志量确定旋转方向及旋转速度,基于所述旋转方向和所述旋转速度生成工作任务并添加至工作队列中,以及将所述旋转标志量置为初始值;以及
S44,利用内核处理添加至所述工作队列中的所述工作任务,以向应用层软件传递表征所述旋转方向和所述旋转速度的旋转信息。
关于S42、S43和S44的具体内容,可以参见第一实施例中对应内容,在此不再赘述。
为了便于对本发明实施例有一个完整的理解,以下对本发明实施例的具体过程举例说明。参见图5,图5为本发明第三实施例用于示例的旋转信息获取方法的流程图:
S51,开始;
该步骤可以理解为对嵌入式设备进行启动操作等,使得所述嵌入式设备具备本发明实施例所需要的执行条件。
S52,创建工作队列并初始化工作;
S53,注册旋转编码器的引脚a为中断引脚;
S54,在引脚a每触发一次中断时,利用中断处理函数判断旋转编码器的引脚b的电平状态,如果所述电平状态为高电平,执行S55;如果所述电平状态为低电平,执行S56;
S55,对所述旋转标志量加1;
S56,对所述旋转标志量减1;
S57,创建旋钮轮询线程,以利用线程工作函数,每隔100ms根据所述旋转标志量确定旋转方向及旋转速度;
S58,基于所述旋转方向和所述旋转速度生成工作任务并添加至工作队列中;
S59,将所述旋转标志量归零;
S60,利用内核处理添加至所述工作队列中的所述工作任务,以向应用层软件传递表征所述旋转方向和所述旋转速度的旋转信息。
本发明实施例所提供的技术方案中,在嵌入式设备启动时,首先创建工作队列,然后注册所述旋转编码器的第一脉冲信号输出引脚为中断引脚,之后在旋转编码器发生中断时,改变旋转标志量,并每隔预设时长根据所述旋转标志量确定旋转方向及旋转速度,基于所述旋转方向和所述旋转速度生成工作任务并添加至工作队列中,并将所述旋转标志量置为初始值,之后利用内核处理添加至所述工作队列中的所述工作任务,以向应用层软件传递表征所述旋转方向和所述旋转速度的旋转信息。本发明实施例在中断产生时,不是将耗时较长的工作业务函数的工作内容置于处理中断函数中,而是生成工作任务加入到工作队列中,由内核依次调用执行。因此可以有效避免中断丢失。同时,本发明实施例的旋转信息除了表征旋转方向外,还表征旋转速度,因此,可以给上层软件提供更为丰富的信息,有利于改善上层软件的调节功能。
【第四实施例】
如图6所示,本发明第四实施例提供的一种旋转信息获取装置,包括:队列创建模块61、注册模块62、线程创建模块63和任务处理模块64。
具体地,
所述队列创建模块61,用于创建工作队列;
所述注册模块62,用于注册所述旋转编码器的第一脉冲信号输出引脚为中断引脚,以在所述第一脉冲信号输出引脚每触发一次中断时,调用中断处理函数根据所述旋转编码器的第二脉冲信号输出引脚的电平状态改变旋转标志量;
所述线程创建模块63,用于创建旋钮轮询线程,以利用线程工作函数,每隔预设时长根据所述旋转标志量确定旋转方向及旋转速度,基于所述旋转方向和所述旋转速度生成工作任务并添加至工作队列中,以及将所述旋转标志量置为初始值;以及
所述任务处理模块64,用于利用内核处理添加至所述工作队列中的所述工作任务,以向应用层软件传递表征所述旋转方向和所述旋转速度的旋转信息。
至于队列创建模块61、注册模块62、线程创建模块63和任务处理模块64的具体功能细节可参考前述第三实施例中步骤S41、S42、S43和S44的相关描述,在此不再赘述。此外,值得一提的是,模块61、模块62、模块63和模块64可以为软件模块,存储于非易失性存储器中且由一个或多个处理器执行相关操作以进行前述第三实施例中的步骤S41、S42、S43和S44。
本发明实施例所提供的技术方案中,在嵌入式设备启动时,首先创建工作队列,然后注册所述旋转编码器的第一脉冲信号输出引脚为中断引脚,在中断产生时,不是将耗时较长的工作业务函数的工作内容置于处理中断函数中,而是生成工作任务加入到工作队列中,由内核依次调用执行。因此可以有效避免中断丢失。同时,本发明实施例的旋转信息除了表征旋转方向外,还表征旋转速度,因此,可以给上层软件提供更为丰富的信息,有利于改善上层软件的调节功能。
【第五实施例】
如图7所示,本发明第五实施例提供的一种旋转信息获取系统70,包括:处理器71和存储器72;其中,存储器72存储由处理器71执行的指令,且所述指令例如使得处理器71执行操作以进行前述第一实施例或第三实施例所述的旋转信息获取方法。
本发明实施例所提供的技术方案中,在中断产生时,不是将耗时较长的工作业务函数的工作内容置于处理中断函数中,而是生成工作任务加入到工作队列中,由内核依次调用执行。因此可以有效避免中断丢失。同时,本发明实施例的旋转信息除了表征旋转方向外,还表征旋转速度,因此,可以给上层软件提供更为丰富的信息,有利于改善上层软件的调节功能。
【第六实施例】
如图8所示,本发明第六实施例提供的一种计算机可读存储介质800,其为非易失性存储器且存储有程序代码,所述程序代码被一个或多个处理器执行时实现前述第一实施例或第三实施例所述的旋转信息获取方法。
本发明实施例所提供的技术方案中,在中断产生时,不是将耗时较长的工作业务函数的工作内容置于处理中断函数中,而是生成工作任务加入到工作队列中,由内核依次调用执行。因此可以有效避免中断丢失。同时,本发明实施例的旋转信息除了表征旋转方向外,还表征旋转速度,因此,可以给上层软件提供更为丰富的信息,有利于改善上层软件的调节功能。
此外,可以理解的是,前述各个实施例仅为本发明的示例性说明,在技术特征不冲突、结构不矛盾、不违背本发明的发明目的前提下,各个实施例的技术方案可以任意组合、搭配使用。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和/或方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多路单元或模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元/模块可以是或者也可以不是物理上分开的,作为单元/模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多路网络单元上。可以根据实际的需要选择其中的部分或者全部单元/模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元/模块可以集成在一个处理单元/模块中,也可以是各个单元/模块单独物理存在,也可以两个或两个以上单元/模块集成在一个单元/模块中。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用硬件加软件功能单元/模块的形式实现。
上述以软件功能单元/模块的形式实现的集成的单元/模块,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)的一个或多个处理器执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (8)

1.一种旋转信息获取方法,适于应用在基于Linux操作系统的嵌入式设备,且所述嵌入式设备采用旋转编码器作为旋钮;其特征在于,所述旋转信息获取方法包括:
在所述旋转编码器的注册为中断引脚的第一脉冲信号输出引脚每触发一次中断时,调用中断处理函数根据所述旋转编码器的第二脉冲信号输出引脚的电平状态改变旋转标志量;
创建轮询线程并利用所述轮询线程的线程工作函数,每隔预设时长根据所述旋转标志量确定旋转方向及旋转速度,基于所述旋转方向和所述旋转速度生成工作任务并添加至工作队列中,以及将所述旋转标志量置为初始值;以及
利用内核处理添加至所述工作队列中的所述工作任务,以向应用层软件传递表征所述旋转方向和所述旋转速度的旋转信息。
2.如权利要求1所述的旋转信息获取方法,其特征在于,所述调用中断处理函数根据所述旋转编码器的第二脉冲信号输出引脚的电平状态改变旋转标志量,包括:
当所述电平状态为第一电平状态,对所述旋转标志量增加一个指定值;
当所述电平状态为第二电平状态,对所述旋转标志量减少一个所述指定值;
其中,所述第一电平状态和所述第二电平状态之一为高电平,且所述第一电平状态和所述第二电平状态之另一为低电平。
3.如权利要求1所述的旋转信息获取方法,其特征在于,所述根据所述旋转标志量确定旋转方向及旋转速度,包括:
根据所述旋转标志量的正负确定旋转方向,以及根据所述旋转标志量的绝对值确定旋转速度。
4.如权利要求3所述的旋转信息获取方法,其特征在于,所述根据所述旋转标志量的正负确定旋转方向,包括:
当所述旋转标志量为正时,确定所述旋转方向为第一方向;
当所述旋转标志量为负时,确定所述旋转方向为第二方向;
其中,所述第一方向和所述第二方向之一为顺时针方向,且所述第一方向和所述第二方向之另一为逆时针方向。
5.如权利要求1所述的旋转信息获取方法,其特征在于,表征所述旋转方向和所述旋转速度的所述旋转信息为四个字节,且所述旋转方向和所述旋转速度分别用所述四个字节中的两个字节表示。
6.一种旋转信息获取装置,其特征在于,用于执行如权利要求1-5任意一项所述的旋转信息获取方法,且包括:
中断处理模块,用于在所述旋转编码器的注册为中断引脚的第一脉冲信号输出引脚每触发一次中断时,调用中断处理函数根据所述旋转编码器的第二脉冲信号输出引脚的电平状态改变旋转标志量;
轮询模块,用于创建轮询线程并利用所述轮询线程的线程工作函数,每隔预设时长根据所述旋转标志量确定旋转方向及旋转速度,基于所述旋转方向和所述旋转速度生成工作任务并添加至工作队列中,以及将所述旋转标志量置为初始值;以及
任务处理模块,用于利用内核处理添加至所述工作队列中的所述工作任务,以向应用层软件传递表征所述旋转方向和所述旋转速度的旋转信息。
7.一种旋转信息获取系统,包括:处理器和存储器;其中所述存储器存储有所述处理器执行的指令,且所述指令使得所述处理器执行操作以进行如权利要求1至5中任意一项所述的旋转信息获取方法。
8.一种计算机可读存储介质,其中,所述计算机可读存储介质为非易失性存储器且存储有程序代码,所述程序代码被一个或多个处理器执行时实现如权利要求1至5中任意一项所述的旋转信息获取方法。
CN201910564207.4A 2019-06-27 2019-06-27 旋转信息获取方法、装置及系统和计算机可读存储介质 Active CN112146686B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910564207.4A CN112146686B (zh) 2019-06-27 2019-06-27 旋转信息获取方法、装置及系统和计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910564207.4A CN112146686B (zh) 2019-06-27 2019-06-27 旋转信息获取方法、装置及系统和计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN112146686A CN112146686A (zh) 2020-12-29
CN112146686B true CN112146686B (zh) 2022-07-15

Family

ID=73869996

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910564207.4A Active CN112146686B (zh) 2019-06-27 2019-06-27 旋转信息获取方法、装置及系统和计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN112146686B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112815967A (zh) * 2021-01-20 2021-05-18 苏州长风航空电子有限公司 一种基于linux平台的数字编码器中断滤波方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105842473A (zh) * 2016-03-30 2016-08-10 深圳华云数码有限公司 一种旋转编码器测速方法及其系统

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7284453B2 (en) * 2005-07-15 2007-10-23 Beckman Coulter, Inc. Method and apparatus for maximizing liquid aspiration from small vessels
KR100719110B1 (ko) * 2005-11-11 2007-05-17 삼성전자주식회사 엔코더 속도정보를 취득하는 전자장치 및 그의 속도정보취득방법
CN102609258B (zh) * 2012-02-02 2014-08-20 武汉光庭科技有限公司 一种对旋转编码器识别的改进方法
CN103713154A (zh) * 2014-01-07 2014-04-09 东华大学 一种利用触发器和编码器判断电机转向的方法
CN103885778A (zh) * 2014-03-25 2014-06-25 上海理工大学 光栅细分和判向方法
CN104698927B (zh) * 2015-02-10 2017-10-17 西安诺瓦电子科技有限公司 基于增量式旋转编码器的旋钮调值方法及相关装置
CN105628956A (zh) * 2015-12-30 2016-06-01 上海自动化仪表有限公司 利用正交编码器检测旋转运动系统的方法
CN105856244B (zh) * 2016-06-14 2018-11-16 江苏若博机器人科技有限公司 一种重载无线传输五核高速关节机器人控制系统
CN106643827B (zh) * 2016-11-15 2019-01-08 乐普医学电子仪器股份有限公司 一种编码器输出信号处理方法
CN107290991B (zh) * 2017-05-27 2019-07-02 温州长江汽车电子有限公司 基于车载控制器的编码器旋钮控制方法及设备
CN107656093A (zh) * 2017-10-16 2018-02-02 深圳市路畅科技股份有限公司 一种旋转编码器的检测方法及装置
CN108163662A (zh) * 2017-11-23 2018-06-15 中景恒基云端物联网科技成都有限公司 一种基于旋转编码器的扶梯速度和逆行检测方法及装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105842473A (zh) * 2016-03-30 2016-08-10 深圳华云数码有限公司 一种旋转编码器测速方法及其系统

Also Published As

Publication number Publication date
CN112146686A (zh) 2020-12-29

Similar Documents

Publication Publication Date Title
US8456512B2 (en) Electronic device for capturing panoramic images
CN109726014B (zh) 基于Netty的Rpc客户端在性能测试平台中的实现方法、系统、服务器及存储介质
CN110515871B (zh) 一种中断方法、装置及fpga和存储介质
CN112146686B (zh) 旋转信息获取方法、装置及系统和计算机可读存储介质
US10451647B2 (en) Method and device for measuring speed of permanent magnet synchronous motor
JPS6315608B2 (zh)
KR20030021409A (ko) 실시간 시스템의 씨피유 타스크 점유율 측정장치
CN113986788A (zh) 数据处理方法和装置、芯片、电子设备及介质
CN112463598A (zh) 一种压测方法、装置、电子设备和可读存储介质
CN106445698B (zh) 计步数据的获取方法及装置
CN112185522A (zh) 一种信息处理方法、装置及终端
CN114510308B (zh) 移动终端存储应用页面的方法、装置、设备和介质
CN113641929B (zh) 页面渲染的方法、装置、电子设备和计算机可读存储介质
CN112104292B (zh) 电机控制方法、装置、终端设备及存储介质
CN114095564A (zh) 数据处理方法及装置、设备和介质
CN113203423B (zh) 地图导航模拟方法及装置
CN110674214B (zh) 大数据同步方法、装置、计算机设备及存储介质
CN113873026A (zh) 动态超时响应方法、装置、终端设备及存储介质
WO2023272612A1 (zh) 信号处理方法、装置及终端设备
CN108196848B (zh) 界面嵌入显示方法、装置、用户终端及可读存储介质
CN113126928A (zh) 文件移动方法及装置、电子设备和介质
CN110677152A (zh) 信号计数方法、装置和数字电路
Jin et al. Implemention BiSS communication of encoder system without slave module
CN116127260A (zh) 数据处理方法及装置、设备和介质
CN115934034A (zh) 数据处理方法及装置、设备和介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant