劉鵬孫有峰鄒杰任開春
(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