本发明涉及步进电机技术领域,尤其涉及基于linux高精度定时器的步进电机控制方法及其系统和装置。
背景技术:
科技日益发展,安全领域愈发被人们重视,视频监控也逐渐趋向成熟,其中小型化的家庭小型摄像头监控设备也越来越多样化,有固定监控某个位置的枪机,也有可以巡航监控的云台机和摇头机。具有巡航功能的设备就离不开电机的支持,而且根据需求来看,往往都是选用步进电机。
步进电机有不同类型,同时就对应有不同的控制方法,主要有直接驱动型和电机控制芯片驱动型。直接驱动型利用主控制器的gpio模拟脉冲来驱动电机,控制比较复杂,需要软件实现电机转动步数和校准,实现难度较大;使用电机芯片控制简单,操作芯片寄存器即可,而且自带计步和校准,控制精度高,可是价格高也是不可忽视的缺点,特别是小型设备的价格敏感性高,阻碍了其应用。
技术实现要素:
本发明的目的在于提供基于linux高精度定时器的步进电机控制方法及其系统和装置,提高控制精度,节省硬件资源,降低产品成本。
为实现上述目的,本发明第一方面的技术方案提供了基于linux高精度定时器的步进电机控制方法,包括以下步骤:
回调函数根据高精度定时器设定的时间进行调用;
所述回调函数被调用时,若有控制指令,所述回调函数判断所述步进电机当前位置和对应所述控制指令的目标位置是否一致,若不一致,则发送相应的脉冲以控制所述步进电机转动到所述目标位置,若一致,则所述回调函数结束调用;
若没有控制指令,则所述回调函数结束调用。
在一些可能的实施方式中,所述目标位置来自ioctl对外接口的数据;
所述ioctl对外接口的数据通过以下方式设置:
调用驱动程序中的ioctl;
根据控制指令在ioctl对外控制接口中进行参数设置;
通过所述ioctl对外控制接口中设置的参数得到所述目标位置。
在一些可能的实施方式中,所述参数设置包括转动的方向和步数。
在一些可能的实施方式中,所述控制指令为设定的目标位置或校准的目标位置。
在一些可能的实施方式中,所述步进电机与所述驱动程序所在的处理器之间采用三八译码器连接,所述三八译码器与所述处理器之间有三个状态引脚和一个控制引脚;
所述三八译码器与所述步进电机之间有八个引脚。
本发明第二方面的技术方案提供了基于linux高精度定时器的步进电机控制系统,包括:
调用模块,被设置为回调函数根据高精度定时器设定的时间进行调用;
判断模块,被设置为所述回调函数被调用时,若有控制指令,所述回调函数判断所述步进电机当前位置和对应所述控制指令的目标位置是否一致,若不一致,则发送相应的脉冲以控制所述步进电机转动到所述目标位置,若一致,则所述回调函数结束调用;若没有控制指令,则所述回调函数结束调用。
在一些可能的实施方式中,所述步进电机控制系统还包括数据模块,所述数据模块包括:
调用单元,用于调用驱动程序中的ioctl;
设置单元,用于根据控制指令在ioctl对外控制接口中进行参数设置;
位置单元,用于通过所述ioctl对外控制接口中设置的参数得到所述目标位置。
本发明第三方面的技术方案提供了一种存储介质,用于存储可执行指令,所述可执行指令在被执行时实现上述的基于linux高精度定时器的步进电机控制方法的步骤。
本发明第四方面的技术方案提供了一种步进电机,包括电机主体和控制系统;
所述控制系统含有上述的存储介质或上述的基于linux高精度定时器的步进电机控制系统。
在一些可能的实施方式中,所述电机主体和控制系统通过三八译码器连接,所述控制系统经过所述三八译码器转义八个引脚输出的脉冲控制所述电机的转动。
本发明与现有技术相比所具有的有益效果:
1、本发明在驱动程序中使用高精度定时器的回调函数,回调函数通过将控制指令转换为相应的脉冲发送,以控制电机的转动位置,提高控制精度。
2、本发明使用模块化电机控制系统,不依赖于硬件平台,缩短研发周期,降低研发成本。
3、本发明使用gpio口来控制步进电机,降低产品成本,并且使用三八译码器减少gpio口使用数量,进一步节省硬件资源。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1示出了本发明实施例涉及的基于linux高精度定时器的步进电机控制方法的流程框图;
图2示出了本发明实施例涉及的ioctl对外接口的数据的设置方式的流程框图;
图3示出了本发明实施例涉及的三八译码器连接的接口示意图;
图4示出了本发明实施例涉及的基于linux高精度定时器的步进电机控制系统的结构框图;
图5示出了本发明实施例涉及的数据模块的结构框图;
图6示出了本发明实施例涉及的步进电机的结构示意图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不限于下面公开的具体实施例的限制。
如图1所示,本发明的实施例公开了基于linux高精度定时器的步进电机控制方法,包括以下步骤:
回调函数根据高精度定时器设定的时间进行调用;
所述回调函数被调用时,若有控制指令,所述回调函数判断所述步进电机当前位置和对应所述控制指令的目标位置是否一致,若不一致,则发送相应的脉冲以控制所述步进电机转动到所述目标位置,若一致,则所述回调函数结束调用;
若没有控制指令,则所述回调函数结束调用。
本发明实施例提供的基于linux高精度定时器的步进电机控制方法,依赖于linux系统的高精度定时器的回调函数,根据控制指令使得驱动程序中的高精度定时器的回调函数发送相应的脉冲以控制步进电机的转动位置。
其中,注册定时器回调函数和回调函数的调用均由linux系统来完成。
在一些可能的实施方式中,所述目标位置来自ioctl对外接口的数据;
如图2所示,所述ioctl对外接口的数据通过以下方式设置:
调用驱动程序中的ioctl;
根据控制指令在ioctl对外控制接口中进行参数设置;
通过所述ioctl对外控制接口中设置的参数得到所述目标位置。
在一些可能的实施方式中,所述参数设置包括转动的方向和步数。
在一些可能的实施方式中,所述控制指令为设定的目标位置或校准的目标位置。
若为设定的目标位置,调用驱动程序中的ioctl,根据控制指令在ioctl对外控制接口中进行参数设置,生成目标位置相应的位置参数数值,回调函数根据位置参数数值与当前位置的差异来发送相应的脉冲以控制所述步进电机的转动。
若为校准的目标位置,调用驱动程序中的ioctl,根据控制指令在ioctl对外控制接口中设置参数,生成目标位置相应的位置参数数值,回调函数根据位置参数数值与当前位置的差异来发送相应的脉冲以控制步进电机的转动,校准了步进电机的转动位置,提高控制精度。
在一些可能的实施方式中,所述回调函数根据所述高精度定时器设定的时间进行调用,所述回调函数调用时,所述高精度定时器停止计时,所述回调函数完成调用后,所述高精度定时器重新开始计时。
步进电机有四线或者五线的,这里以五线为例,其中电源和地分别常输出高电平和低电平,其他三根线循环输出高电平,就可以控制电机转动。为了更节省硬件资源,本发明使用三八译码器,只需要三个状态引脚和一个控制引脚,就可以转义八个引脚输出的脉冲,接口图如图3所示。
在一些可能的实施方式中,所述步进电机与所述驱动程序所在的处理器之间采用三八译码器连接,所述三八译码器与所述处理器之间有三个状态引脚和一个控制引脚;
所述三八译码器与所述步进电机之间有八个引脚。
本发明采用三八译码器连接步进电机与驱动程序所在的处理器,若没有三八译码器,驱动程序所在的处理器(cpu)直接和电机连接需要8根线,但是用三八译码器,则只需要a0~a2(输入状态)和e(使能)四根线。
相对于上述的硬件接口,软件接口可以有如下功能:
1.控制电机水平/垂直持续运动、停止的接口;
2.自检校准接口;
3.获取电机当前位置和角度的接口;
4.运动到指定位置的接口。
本发明使用gpio口来控制步进电机,降低产品成本,并且使用三八译码器减少gpio口使用数量,进一步节省硬件资源。
在具体的实施例中,本发明提供的基于linux高精度定时器的步进电机控制方法实现流程如下:
步进电机与驱动程序所在的处理器之间采用三八译码器连接;
初始化gpio和高精度定时器资源,注册定时器回调函数;
开启定时器回调函数,回调函数根据高精度定时器设定的时间进行调用;
回调函数被调用时,若有控制指令,回调函数判断步进电机当前位置和对应控制指令的目标位置是否一致,若不一致,则发送相应的脉冲以控制步进电机转动到所述目标位置,若一致,则回调函数结束调用;
若没有控制指令,则回调函数结束调用。
其中,对应控制指令的目标位置通过以下步骤完成:
调用驱动程序中的ioctl;
根据控制指令在ioctl对外控制接口中进行参数设置。
通过ioctl对外控制接口中设置的参数得到目标位置;
其中,回调函数根据高精度定时器设定的时间进行调用,回调函数调用时,高精度定时器停止计时,回调函数完成调用后,高精度定时器重新开始计时。
也就是说,若是ioctl对外控制接口中没有设置的参数,则高精度定时器调用回调函数时,不执行任何操作。
如图4所示,本发明的实施例公开了基于linux高精度定时器的步进电机控制系统,包括:
调用模块,被设置为回调函数根据高精度定时器设定的时间进行调用;
判断模块,被设置为所述回调函数被调用时,若有控制指令,所述回调函数判断所述步进电机当前位置和对应所述控制指令的目标位置是否一致,若不一致,则发送相应的脉冲以控制所述步进电机转动到所述目标位置,若一致,则所述回调函数结束调用;若没有控制指令,则所述回调函数结束调用。
本发明实施例提供的基于linux高精度定时器的步进电机控制系统,调用模块用于回调函数根据高精度定时器设定的时间进行调用;判断模块用于根据控制指令的有无以及当前位置与目标位置的相差来进行不同的处置;若位置有偏差则高精度定时器的回调函数发送相应的脉冲以控制所述步进电机的转动位置;即通过回调函数对步进电机的转动位置矫正,在节约产品费用的同时提高控制精度。
其中,注册定时器回调函数和回调函数的调用均是由linux系统来完成。
如图5所示,在一些可能的实施方式中,所述步进电机控制系统还包括数据模块,所述数据模块包括:
调用单元,用于调用驱动程序中的ioctl;
设置单元,用于根据控制指令在ioctl对外控制接口中进行参数设置;
位置单元,用于通过所述ioctl对外控制接口中设置的参数得到所述目标位置。
在一些可能的实施方式中,所述参数设置包括转动的方向和步数。
在一些可能的实施方式中,所述控制指令为设定的目标位置或校准的目标位置。
在一些可能的实施方式中,所述回调函数根据所述高精度定时器设定的时间进行调用,所述回调函数调用时,所述高精度定时器停止计时,所述回调函数完成调用后,所述高精度定时器重新开始计时。
本发明的实施例还提供了一种存储介质,用于存储可执行指令,所述可执行指令在被执行时实现上述的基于linux高精度定时器的步进电机控制方法的步骤。
本发明的实施例还提供了一种步进电机,包括电机主体和控制系统;
所述控制系统含有上述的存储介质或上述的基于linux高精度定时器的步进电机控制系统。
本发明提供的步进电机的结构示意图如图6所示。
在一些可能的实施方式中,所述电机主体和控制系统通过三八译码器连接,所述控制系统经过所述三八译码器转义八个引脚输出的脉冲控制所述电机的转动。
本发明采用三八译码器连接步进电机与驱动程序所在的处理器,若没有三八译码器,驱动程序所在的处理器(cpu)直接和电机连接需要8根线,但是用三八译码器,则只需要a0~a2(输入状态)和e(使能)四根线。
也就是说,本发明通过使用gpio口来控制步进电机,降低产品成本,并且使用三八译码器减少gpio口使用数量,进一步节省硬件资源。
本发明使用gpio口来控制电机和三八译码器来扩展gpio口数量达到简易便捷的目的,基于linux高精度定时器的步进电机控制统一接口,使得步进电机整个产品运行在内核态以增加系统精确度。
在本发明中,术语“第一”、“第二”、“第三”仅用于描述的目的,而不能理解为指示或暗示相对重要性;术语“多个”则指两个或两个以上,除非另有明确的限定。术语“安装”、“相连”、“连接”、“固定”等术语均应做广义理解,例如,“连接”可以是固定连接,也可以是可拆卸连接,或一体地连接,或虚拟连接;“相连”可以是直接相连,也可以通过中间媒介间接相连。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
本发明附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和装置的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
在本说明书的描述中,术语“一个实施例”、“一些实施例”、“具体实施例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或实例。而且,描述的具体特征、结构、材料或特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
1.基于linux高精度定时器的步进电机控制方法,其特征在于,包括以下步骤:
回调函数根据高精度定时器设定的时间进行调用;
所述回调函数被调用时,若有控制指令,所述回调函数判断所述步进电机当前位置和对应所述控制指令的目标位置是否一致,若不一致,则发送相应的脉冲以控制所述步进电机转动到所述目标位置,若一致,则所述回调函数结束调用;
若没有控制指令,则所述回调函数结束调用。
2.根据权利要求1所述的基于linux高精度定时器的步进电机控制方法,其特征在于,所述目标位置来自ioctl对外接口的数据;
所述ioctl对外接口的数据通过以下方式设置:
调用驱动程序中的ioctl;
根据控制指令在ioctl对外控制接口中进行参数设置;
通过所述ioctl对外控制接口中设置的参数得到所述目标位置。
3.根据权利要求2所述的基于linux高精度定时器的步进电机控制方法,其特征在于,所述参数设置包括转动的方向和步数。
4.根据权利要求2所述的基于linux高精度定时器的步进电机控制方法,其特征在于,所述控制指令为设定的目标位置或校准的目标位置。
5.根据权利要求1-4任一项所述的基于linux高精度定时器的步进电机控制方法,其特征在于,所述步进电机与所述驱动程序所在的处理器之间采用三八译码器连接,所述三八译码器与所述处理器之间有三个状态引脚和一个控制引脚;
所述三八译码器与所述步进电机之间有八个引脚。
6.基于linux高精度定时器的步进电机控制系统,其特征在于,包括:
调用模块,被设置为回调函数根据高精度定时器设定的时间进行调用;
判断模块,被设置为所述回调函数被调用时,若有控制指令,所述回调函数判断所述步进电机当前位置和对应所述控制指令的目标位置是否一致,若不一致,则发送相应的脉冲以控制所述步进电机转动到所述目标位置,若一致,则所述回调函数结束调用;若没有控制指令,则所述回调函数结束调用。
7.根据权利要求6所述的基于linux高精度定时器的步进电机控制系统,其特征在于,还包括数据模块,所述数据模块包括:
调用单元,用于调用驱动程序中的ioctl;
设置单元,用于根据控制指令在ioctl对外控制接口中进行参数设置;
位置单元,用于通过所述ioctl对外控制接口中设置的参数得到所述目标位置。
8.一种存储介质,其特征在于,用于存储可执行指令,所述可执行指令在被执行时实现权利要求1-5任一项所述的基于linux高精度定时器的步进电机控制方法的步骤。
9.一种步进电机,其特征在于,包括电机主体和控制系统;
所述控制系统含有权利要求8所述的存储介质或权利要求6-7任一项所述的基于linux高精度定时器的步进电机控制系统。
10.根据权利要求9所述的步进电机,其特征在于,所述电机主体和控制系统通过三八译码器连接,所述控制系统经过所述三八译码器转义八个引脚输出的脉冲控制所述电机的转动。
技术总结