刘鹏孙有峰邹杰任开春
(1.重庆通信学院 2.65631部队通信装备修供基地)
基于ARM+CPLD的步进电机控制系统设计
刘鹏1孙有峰2邹杰1任开春1
(1.重庆通信学院 2.65631部队通信装备修供基地)
介绍了步进电机的控制原理,在分析步进电机和驱动程序接口的基础上,给出了一个在嵌入式Linux平台上编写步进电机驱动的实例。本控制系统基于Samsung公司的S3C2410X CPU进行设计,采用Linux2.6内核作为它的操作系统,给出了Linux2.6内核下步进电机驱动程序的关键代码,并对应用层程序的设计进行了规划。
嵌入式系统;步进电机;Linux设备驱动;CPLD
步进电机在控制系统中具有广泛的应用。它可以把脉冲信号转换成角位移,用作电磁制动轮、电磁差分器或角位移发生器等[1]。当前,主流的步进电机控制系统多采用单片机进行控制,存在控制系统实时性能差、可重用性差、可定制性差等缺点。
随着嵌入式技术的飞速发展,基于嵌入式系统的工业控制产品日益增多。同以往的控制器不同,新的控制系统多以32位嵌入式处理器为核心,并且配置嵌入式操作系统,从而极大简化了系统开发难度,同时大幅度提高了系统的处理能力[2]。在各种嵌入式操作系统中,嵌入式Linux是免费的自由软件,其构建的系统成本较低,而且Linux是单内核的操作系统,并可按要求进行任意剪裁,因此越来越多的研究人员开始在用Linux平台来开发自己的产品。
嵌入式开发过程中,经常需要为特定设备开发驱动程序。这些驱动程序的开发与Linux设备驱动开发相比存在明显的差异,需要考虑的因素更多,实现过程更为复杂。本文以Samsung公司S3C2410X CPU与大规模可编程逻辑器件CPLD为硬件平台构建步进电机控制系统,并在ARM处理器中配以Linux2.6内核作为系统软件平台,探讨基于嵌入式Linux的步进电动机驱动程序开发。
2.1 感应子式步进电机[3]
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。由于这一线性关系,步进电机具有周期性的误差而无累积误差等特点,使得在速度、位置等控制领域运用步进电机进行控制变得非常简单。虽然步进电机已被广泛地应用,但步进电机并不能像普通的直流电机、交流电机一样在常规下使用,步进电机控制系统通常由双环形脉冲信号电路、功率驱动电路等组成。使用嵌入式系统能够很好的实现对步进电机的控制。常用的步进电机分为反应式步进电机和感应子式步进电机,文中所述系统采用的是感应子式步进电机。
2.2 步进电机驱动原理
步进电机的运行需要电子装置进行驱动,这种装置就是步进电机驱动器。步进电机驱动器是把控制系统发出的脉冲信号加以放大以驱动步进电机。步进电机的转速与脉冲信号的频率成正比,控制步进脉冲信号的频率,可以对电机精确调速;控制步进脉冲的个数,可以对电机精确定位。
3.1 系统硬件方案设计
系统硬件平台采用Samsung公司的S3C2410X CPU与大规模可编程逻辑器件CPLD进行构建,其中S3C2410X CPU作为系统中央处理器,负责系统任务调度、系统资源管理、外设接口管理等工作;CPLD作为S3C2410X CPU的外设,负责接收S3C2410XCPU控制命令和控制数据,对后级步进电机驱动电路进行控制,完成具体的控制任务。系统中配置USB2.0接口、RS-232串口、10M/100M以太网口等接口电路,以方便步进电机控制系统与上位机及其他控制系统进行通信与级联。控制系统硬件平台结构如图1所示。
3.2 步进电机控制电路设计
步进电机驱动电路如图2所示,其中ULN2803AP[4]芯片的作用是放大输入电流,M1~M4的输入电流大约10mA,从O1~O8输出的电流放大到约100mA。M1~M4直接连在CPLD的I/O引脚上。系统中使用的是四相步进电机,在图中标识为DDJ。
图1 步进电机控制系统结构图
图2 步进电机驱动电路
4.1 CPLD控制逻辑
在步进电机控制系统中由CPLD 来控制步进电机,所以步进电机的驱动程序需要和CPLD的接口程序相配合。ULN2803AP 的M1~M4 是直接连在CPLD 上,由CPLD 控制。控制逻辑如下:CPLD判断到NGCS2 选中,并且地址线MA5~MA0为000110b 时,读取数据线的低四位D3~D0,并作为M4~M1 的输出。
4.2 步进电机驱动程序
驱动程序相主要工作是和CPLD 逻辑相配合,通过向D3~D0写不同的数据来控制步进电机工作,关键代码如下:
(1) 驱动程序的初始化模块electromotor_init
electromotor_init 函数主要工作:映射GCS2 地址和CPLD 逻辑控制的入口地址;申请注册设备。
(2) 驱动程序实现了file_operations 的回调函数:
electromotor_write 首先通过get_user 函数得到用户传送过来的数据,接着(*(volatile unsigned char *) ELECTROMOTOR) = key;语句写地址M5~M0 位000110b,也就是让CPLD 进入控制逻辑。
应用程序打开步进电机驱动程序设备文件之后,通过对设备文件写入不同的指令数据控制步进电机的运行。应用层程序的流程如图3所示。
图3 应用程序流程图
图3中cmdnumi(i=0~7)为控制步进电机运行的指令数据。当步进电机正转时,指令数据的变化顺序为cmdnum0~cmdnum7;当步进电机反转时,指令数据的变化顺序为cmdnum7~cmdnum0。cmdnumi(i=0~7)的值如表1所示[5]。t为延时时间,用于决定步进电机的转速。
表1 指令数据表
本文综合应用ARM处理器、复杂可编程逻辑器件CPLD、嵌入式Linux开发等相关技术设计了一款步进电机控制系统。该控制器与传统的步进电机控制器相比,具有成本低、体积小、功耗低、功能接口丰富、控制精度高、运行稳定等优势。文中设计的步进电机控制系统已在某型号的雷达跟踪定位系统中得到应用,并取得较高的控制精度。该款步进电机控制系统的设计流程与设计思路为读者开发基于嵌入式Linux解决方案的工控产品提供了一个良好的模板,具有广阔的应用前景。
[1] 周明安,朱光忠,宋华晓等.步进电机驱动技术发展及现状[J].机电工程技术,2005,34(2):l6-17.
[2] 陈兴文,刘燕.基于单片机控制步进电机细分驱动的实现[J].机械设计与制造,2005,178(12):91-92.
[3] 杨贵杰,李勇,陆永平,孙力.永磁感应子式无刷直流电动机的模型及控制[J].中国电机工程学报,2003,05.
[4] 王庆东,刘杰辉等.单片机在步进电机驱动控制中的应用[J].煤矿机械,2006,27(6):1001-1003.
[5] LIN Wei jie, ZHENG Zhuo. Simulation and Experiment of SensorlessDirect Torque Control of Hybrid Stepp ingMotor Based on DSP[C].Luoyang(China) :Proceedings of the 2006 IEEE, International Conference on Mechatronics and Automation, 2006:2133-2138.
刘鹏,男,1983年生,硕士学历,助教,主要研究领域为嵌入式工业控制。
Design of Control System for Stepping Motor Based on ARM and CPLD
Liu Peng1Sun Youfeng2Zou Jie1Ren Kaichun1
(1.ChongQing Communication Institute 2.Communications equipment maintenance base of 65631 troops)
This paper introduces the control principle of Stepping Motor, On the basis of analysis for interface between Stepping Motor and Linux device driver, this paper presents a device driver instance base on Embedded Linux for Stepping Motor. This control system is developed based on S3C2410X CPU of Samsung Corporation, and Linux2.6 as its operation system. At Last, this paper gives the key code and application program of device driver for Stepping Motor based on Linux2.6.
Embedded System; Stepping Motor; Linux Device Driver; Cpld