基于ARM的步进电机平稳控制
2014-12-31傅惠南
刘 凯,傅惠南
(广东工业大学 机电工程学院,广东 广州 510006)
0 引言
弹性浮动研磨是针对传统单晶金刚石表面研磨提出的一种先进加工方法,在弹性浮动研磨系统中,步进电机的微进给平稳控制往往直接关系到金刚石表面的加工质量,而为了方便步进电机的调试和控制,一般选择以台式PC机或笔记本电脑作为人机交互的上位机。在实际的金刚石表面研磨的加工现场,往往需要考虑到弹性浮动研磨系统设备的体积、安装的模块化、调试的便捷性、控制的可视化。针对上述问题,提出了对步进电机进行细分控制以提高其微进给的平稳性,同时以嵌入式LCD触摸屏作为步进电机微进给控制的操控界面,取代PC机作为上位机对设备进行人机交互操作,从而实现弹性浮动研磨过程的平稳控制。
本文主要研究了如何对步进电机进行细分以达到步进电机的平稳控制,同时在以Samsung S3C2440处理器为核心的ARM开发板上,实现了在触摸屏界面上对步进电机的微进给控制。
1 步进电机工作原理
步进电机又称脉冲电机,与普通电机的相同之处是基于最基本的电磁原理,区别在于它的驱动控制:每向步进电机输入一个电脉冲信号,电机转子对应地转动一定角度的角位移(或直线位移);而且步进电机的转速取决于脉冲频率,其角速度与脉冲频率成正比,在时间上与脉冲同步[1]。基于此种特性,步进电机可以实现数字化控制,因此特别适合利用计算机进行驱动控制。
步进电机由于自身制造工艺的限制,转子齿数、运行拍数都有限,而步距角由转子齿数和拍数决定,这意味着步进电机的步距角一般比较大且固定,这就带来一个问题:在同一装置系统中,如根据不同的工况,需要不同的控制精度,即需要不同的步距角,就不得不更换另一型号的步进电机。这就造成生产成本的上升和生产效率的下降。同时步进电机的分辨率不高,低频运行时,电机容易产生振动,而且噪声比其他微电机都高,这使得装置容易损坏,这些都限制了步进电机的应用和有效的控制。
2 步进电机的细分驱动
基于步进电机的上述缺点,20世纪70年代,美国学者T.R.Fredriksen首次在美国增量运动控制系统及器件年会上提出了一种对步进电机步距角进行细分的控制方法[2]。几十年来细分驱动得到较快的发展,使得步进电机的相数和步距角都不受限制,同时对步进电机的控制也更加方便。
基于步进电机驱动原理可知,每当向绕组输入一个脉冲式相电流时,步进电机转子就转动一个设定的步距角;而当向绕组输入的相电流分别按正弦和余弦的轮廓呈阶梯式变化(如图1所示)时,转子在每个相电流脉冲变量下转过一个微小步距角,则整个步距就分成若干微步距角,而更小的步距角将会使步进电机的微进给运行更加平稳。
目前,步进电机细分驱动主要采用脉冲宽度调制驱动、斩波恒流驱动、电流矢量恒幅均匀旋转驱动。而随着计算机技术的发展,会给步进电机细分驱动控制技术的发展带来新的思路。
3 驱动程序设计
随着近些年以ARM芯片为代表的嵌入式设备的发展,使得步进电机的细分驱动控制朝着更加智能化、可视化、模块化的方向发展。针对这一发展趋势,本文提出了一种基于ARM的触摸屏的细分驱动控制系统方案。控制系统主要包括硬件系统和软件系统。硬件系统包括以ARM9处理器为核心的开发板以及LCD触摸屏;软件系统包括 Linux操作系统[3,4]、文件系统、步进电机驱动程序、触摸屏驱动程序。
图1 绕组输入正弦、余弦轮廓相电流
因为市面上已经有性能稳定和功能强大的嵌入式ARM开发板,因此,在硬件方面,可以直接使用现成的产品,这样可以节约大量的硬件设计和调试时间。
3.1 建立主机开发环境
(1)首先在PC机Windows操作系统平台下安装虚拟机软件Vmware8.0,然后在Vmware的基础上安装桌面版本的Linux操作系统,这里我们安装的是Ubantu12.0.4版本的操作系统。
(2)建立TFTP服务器,用于将在PC上生成的文件下载到开发板上。
(3)建立NFS服务器,用于将开发板所用到的根文件系统挂载到主机目录下,从而方便程序的调试。
3.2 步进电机驱动程序设计
(1)建立引导安装程序bootloader。可以从网上下载u-boot压缩包,根据需要进行裁剪,然后下载到开发板。
(2)Linux内核裁剪和移植。在网上下载2.6.30版本的Linux内核压缩包,在虚拟机Linux操作系统平台进行解压裁剪,然后生成开发板所需的zImage内核,通过TFTP下载到开发板中。
(3)建立根文件系统。从网上下载busybox压缩包,利用busybox软件生成一个最基本的根文件系统,然后利用mkcranfs genromfs等工具生成烧写映像文件。
(4)步进电机驱动程序开发。步进电机驱动程序是沟通应用程序与底层步进电机硬件设备的桥梁,在驱动程序中,首先通过static int stepmotor_init(void)函数实现设备号的申请和注册;然后初始化file_operations结构体,file_operations结构体成员函数open()、close()、read)()、write()执行对设备文件的打开、关闭、读写操作。而对于步进电机的操作命令由ioctl()函数实现,ioctl()函数原型如下:
int(*ioctl)(struct inode*inode,struct file*filp,unsigned int cmd,unsigned long arg).
其中,inode和filp指针对应应用程序的文件描述符fd,cmd代表应用程序传递给驱动程序的命令参数,arg为可选参数。
步进电机的操作完成后,通过static void stepmotor_eixt(void)函数对步进电机驱动卸载,实现设备的注销和设备号资源的释放。
3.3 LCD触摸屏驱动程序设计
帧缓冲是Linux操作系统为LCD触摸屏显示提供的接口,用来将显示缓冲区抽象,屏蔽底层硬件差异[5]。这样使软件系统的设计者不用过多考虑底层硬件细节,从而将精力放在对触摸屏的驱动部分。
帧缓冲设备驱动的程序结构如图2所示。帧缓冲设备最关键的数据结构体是fb_info结构体,此结构体包括关于帧缓冲设备属性和操作的完整描述。fb_info结构体成员变量fb_fops是指向底层操作的函数指针,通过这些成员函数对LCD触摸屏进行读写和I/O控制等操作。在帧缓冲设备的模块加载函数中,完成申请fb_info结构体的内存空间和初始化fb_info结构体的屏幕参数,即填充fb_info结构体成员fb_var_screeninfo和fb_fix_screeninfo;根据具体LCD屏幕的特点,完成LCD控制器硬件的初始化;申请帧缓冲设备的显示缓冲区空间,最后注册帧缓冲设备。在帧缓冲设备驱动模块函数中,完成fb_info结构体内存的释放,关闭LCD,释放显示缓冲区以及注销缓冲区设备。
图2 帧缓冲设备驱动的程序结构
4 小结
本文提出了基于ARM的触摸屏界面控制步进电机的方法,通过触摸屏选择步进电机的细分控制,以此根据不同工况对步进电机采取不同的细分,从而达到对步进电机的稳定控制,同时将采集到的数据实时反映到触摸屏上,并在触摸屏上对数据进行实时处理。从而达到了对金刚石进行数字化、智能化加工的目的。
[1] 王宗培.步进电动机的发展及建议[J].微机电,2004,37(4):47-49.
[2] 史敬灼,王宗培.步进电动机驱动控制技术的发展[J].微特电机,2007,35(7):50-54.
[3] 宋宝华.Linux设备驱动开发详解[M].北京:人民教育出版社,2005.
[4] 科波特.Linux设备驱动程序[M].魏永明,耿岳,钟书毅,译.北京:中国电力出版社,2009.
[5] 苏哲欣,刘鸿飞,薛晓.基于嵌入式Linux的LCD的驱动分析与实现[J].工业控制计算机,2009,22(2):29-30.