劉鵬孫有峰鄒杰任開春
(1.重慶通信學(xué)院 2.65631部隊(duì)通信裝備修供基地)
基于ARM+CPLD的步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)
劉鵬1孫有峰2鄒杰1任開春1
(1.重慶通信學(xué)院 2.65631部隊(duì)通信裝備修供基地)
介紹了步進(jìn)電機(jī)的控制原理,在分析步進(jìn)電機(jī)和驅(qū)動(dòng)程序接口的基礎(chǔ)上,給出了一個(gè)在嵌入式Linux平臺(tái)上編寫步進(jìn)電機(jī)驅(qū)動(dòng)的實(shí)例。本控制系統(tǒng)基于Samsung公司的S3C2410X CPU進(jìn)行設(shè)計(jì),采用Linux2.6內(nèi)核作為它的操作系統(tǒng),給出了Linux2.6內(nèi)核下步進(jìn)電機(jī)驅(qū)動(dòng)程序的關(guān)鍵代碼,并對(duì)應(yīng)用層程序的設(shè)計(jì)進(jìn)行了規(guī)劃。
嵌入式系統(tǒng);步進(jìn)電機(jī);Linux設(shè)備驅(qū)動(dòng);CPLD
步進(jìn)電機(jī)在控制系統(tǒng)中具有廣泛的應(yīng)用。它可以把脈沖信號(hào)轉(zhuǎn)換成角位移,用作電磁制動(dòng)輪、電磁差分器或角位移發(fā)生器等[1]。當(dāng)前,主流的步進(jìn)電機(jī)控制系統(tǒng)多采用單片機(jī)進(jìn)行控制,存在控制系統(tǒng)實(shí)時(shí)性能差、可重用性差、可定制性差等缺點(diǎn)。
隨著嵌入式技術(shù)的飛速發(fā)展,基于嵌入式系統(tǒng)的工業(yè)控制產(chǎn)品日益增多。同以往的控制器不同,新的控制系統(tǒng)多以32位嵌入式處理器為核心,并且配置嵌入式操作系統(tǒng),從而極大簡(jiǎn)化了系統(tǒng)開發(fā)難度,同時(shí)大幅度提高了系統(tǒng)的處理能力[2]。在各種嵌入式操作系統(tǒng)中,嵌入式Linux是免費(fèi)的自由軟件,其構(gòu)建的系統(tǒng)成本較低,而且Linux是單內(nèi)核的操作系統(tǒng),并可按要求進(jìn)行任意剪裁,因此越來越多的研究人員開始在用Linux平臺(tái)來開發(fā)自己的產(chǎn)品。
嵌入式開發(fā)過程中,經(jīng)常需要為特定設(shè)備開發(fā)驅(qū)動(dòng)程序。這些驅(qū)動(dòng)程序的開發(fā)與Linux設(shè)備驅(qū)動(dòng)開發(fā)相比存在明顯的差異,需要考慮的因素更多,實(shí)現(xiàn)過程更為復(fù)雜。本文以Samsung公司S3C2410X CPU與大規(guī)??删幊踢壿嬈骷﨏PLD為硬件平臺(tái)構(gòu)建步進(jìn)電機(jī)控制系統(tǒng),并在ARM處理器中配以Linux2.6內(nèi)核作為系統(tǒng)軟件平臺(tái),探討基于嵌入式Linux的步進(jìn)電動(dòng)機(jī)驅(qū)動(dòng)程序開發(fā)。
2.1 感應(yīng)子式步進(jìn)電機(jī)[3]
步進(jìn)電機(jī)是將電脈沖信號(hào)轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開環(huán)控制元件。在非超載的情況下,電機(jī)的轉(zhuǎn)速、停止的位置只取決于脈沖信號(hào)的頻率和脈沖數(shù),而不受負(fù)載變化的影響,即給電機(jī)加一個(gè)脈沖信號(hào),電機(jī)則轉(zhuǎn)過一個(gè)步距角。由于這一線性關(guān)系,步進(jìn)電機(jī)具有周期性的誤差而無累積誤差等特點(diǎn),使得在速度、位置等控制領(lǐng)域運(yùn)用步進(jìn)電機(jī)進(jìn)行控制變得非常簡(jiǎn)單。雖然步進(jìn)電機(jī)已被廣泛地應(yīng)用,但步進(jìn)電機(jī)并不能像普通的直流電機(jī)、交流電機(jī)一樣在常規(guī)下使用,步進(jìn)電機(jī)控制系統(tǒng)通常由雙環(huán)形脈沖信號(hào)電路、功率驅(qū)動(dòng)電路等組成。使用嵌入式系統(tǒng)能夠很好的實(shí)現(xiàn)對(duì)步進(jìn)電機(jī)的控制。常用的步進(jìn)電機(jī)分為反應(yīng)式步進(jìn)電機(jī)和感應(yīng)子式步進(jìn)電機(jī),文中所述系統(tǒng)采用的是感應(yīng)子式步進(jìn)電機(jī)。
2.2 步進(jìn)電機(jī)驅(qū)動(dòng)原理
步進(jìn)電機(jī)的運(yùn)行需要電子裝置進(jìn)行驅(qū)動(dòng),這種裝置就是步進(jìn)電機(jī)驅(qū)動(dòng)器。步進(jìn)電機(jī)驅(qū)動(dòng)器是把控制系統(tǒng)發(fā)出的脈沖信號(hào)加以放大以驅(qū)動(dòng)步進(jìn)電機(jī)。步進(jìn)電機(jī)的轉(zhuǎn)速與脈沖信號(hào)的頻率成正比,控制步進(jìn)脈沖信號(hào)的頻率,可以對(duì)電機(jī)精確調(diào)速;控制步進(jìn)脈沖的個(gè)數(shù),可以對(duì)電機(jī)精確定位。
3.1 系統(tǒng)硬件方案設(shè)計(jì)
系統(tǒng)硬件平臺(tái)采用Samsung公司的S3C2410X CPU與大規(guī)??删幊踢壿嬈骷﨏PLD進(jìn)行構(gòu)建,其中S3C2410X CPU作為系統(tǒng)中央處理器,負(fù)責(zé)系統(tǒng)任務(wù)調(diào)度、系統(tǒng)資源管理、外設(shè)接口管理等工作;CPLD作為S3C2410X CPU的外設(shè),負(fù)責(zé)接收S3C2410XCPU控制命令和控制數(shù)據(jù),對(duì)后級(jí)步進(jìn)電機(jī)驅(qū)動(dòng)電路進(jìn)行控制,完成具體的控制任務(wù)。系統(tǒng)中配置USB2.0接口、RS-232串口、10M/100M以太網(wǎng)口等接口電路,以方便步進(jìn)電機(jī)控制系統(tǒng)與上位機(jī)及其他控制系統(tǒng)進(jìn)行通信與級(jí)聯(lián)??刂葡到y(tǒng)硬件平臺(tái)結(jié)構(gòu)如圖1所示。
3.2 步進(jìn)電機(jī)控制電路設(shè)計(jì)
步進(jìn)電機(jī)驅(qū)動(dòng)電路如圖2所示,其中ULN2803AP[4]芯片的作用是放大輸入電流,M1~M4的輸入電流大約10mA,從O1~O8輸出的電流放大到約100mA。M1~M4直接連在CPLD的I/O引腳上。系統(tǒng)中使用的是四相步進(jìn)電機(jī),在圖中標(biāo)識(shí)為DDJ。
圖1 步進(jìn)電機(jī)控制系統(tǒng)結(jié)構(gòu)圖
圖2 步進(jìn)電機(jī)驅(qū)動(dòng)電路
4.1 CPLD控制邏輯
在步進(jìn)電機(jī)控制系統(tǒng)中由CPLD 來控制步進(jìn)電機(jī),所以步進(jìn)電機(jī)的驅(qū)動(dòng)程序需要和CPLD的接口程序相配合。ULN2803AP 的M1~M4 是直接連在CPLD 上,由CPLD 控制??刂七壿嬋缦拢篊PLD判斷到NGCS2 選中,并且地址線MA5~MA0為000110b 時(shí),讀取數(shù)據(jù)線的低四位D3~D0,并作為M4~M1 的輸出。
4.2 步進(jìn)電機(jī)驅(qū)動(dòng)程序
驅(qū)動(dòng)程序相主要工作是和CPLD 邏輯相配合,通過向D3~D0寫不同的數(shù)據(jù)來控制步進(jìn)電機(jī)工作,關(guān)鍵代碼如下:
(1) 驅(qū)動(dòng)程序的初始化模塊electromotor_init
electromotor_init 函數(shù)主要工作:映射GCS2 地址和CPLD 邏輯控制的入口地址;申請(qǐng)注冊(cè)設(shè)備。
(2) 驅(qū)動(dòng)程序?qū)崿F(xiàn)了file_operations 的回調(diào)函數(shù):
electromotor_write 首先通過get_user 函數(shù)得到用戶傳送過來的數(shù)據(jù),接著(*(volatile unsigned char *) ELECTROMOTOR) = key;語句寫地址M5~M0 位000110b,也就是讓CPLD 進(jìn)入控制邏輯。
應(yīng)用程序打開步進(jìn)電機(jī)驅(qū)動(dòng)程序設(shè)備文件之后,通過對(duì)設(shè)備文件寫入不同的指令數(shù)據(jù)控制步進(jìn)電機(jī)的運(yùn)行。應(yīng)用層程序的流程如圖3所示。
圖3 應(yīng)用程序流程圖
圖3中cmdnumi(i=0~7)為控制步進(jìn)電機(jī)運(yùn)行的指令數(shù)據(jù)。當(dāng)步進(jìn)電機(jī)正轉(zhuǎn)時(shí),指令數(shù)據(jù)的變化順序?yàn)閏mdnum0~cmdnum7;當(dāng)步進(jìn)電機(jī)反轉(zhuǎn)時(shí),指令數(shù)據(jù)的變化順序?yàn)閏mdnum7~cmdnum0。cmdnumi(i=0~7)的值如表1所示[5]。t為延時(shí)時(shí)間,用于決定步進(jìn)電機(jī)的轉(zhuǎn)速。
表1 指令數(shù)據(jù)表
本文綜合應(yīng)用ARM處理器、復(fù)雜可編程邏輯器件CPLD、嵌入式Linux開發(fā)等相關(guān)技術(shù)設(shè)計(jì)了一款步進(jìn)電機(jī)控制系統(tǒng)。該控制器與傳統(tǒng)的步進(jìn)電機(jī)控制器相比,具有成本低、體積小、功耗低、功能接口豐富、控制精度高、運(yùn)行穩(wěn)定等優(yōu)勢(shì)。文中設(shè)計(jì)的步進(jìn)電機(jī)控制系統(tǒng)已在某型號(hào)的雷達(dá)跟蹤定位系統(tǒng)中得到應(yīng)用,并取得較高的控制精度。該款步進(jìn)電機(jī)控制系統(tǒng)的設(shè)計(jì)流程與設(shè)計(jì)思路為讀者開發(fā)基于嵌入式Linux解決方案的工控產(chǎn)品提供了一個(gè)良好的模板,具有廣闊的應(yīng)用前景。
[1] 周明安,朱光忠,宋華曉等.步進(jìn)電機(jī)驅(qū)動(dòng)技術(shù)發(fā)展及現(xiàn)狀[J].機(jī)電工程技術(shù),2005,34(2):l6-17.
[2] 陳興文,劉燕.基于單片機(jī)控制步進(jìn)電機(jī)細(xì)分驅(qū)動(dòng)的實(shí)現(xiàn)[J].機(jī)械設(shè)計(jì)與制造,2005,178(12):91-92.
[3] 楊貴杰,李勇,陸永平,孫力.永磁感應(yīng)子式無刷直流電動(dòng)機(jī)的模型及控制[J].中國(guó)電機(jī)工程學(xué)報(bào),2003,05.
[4] 王慶東,劉杰輝等.單片機(jī)在步進(jìn)電機(jī)驅(qū)動(dòng)控制中的應(yīng)用[J].煤礦機(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年生,碩士學(xué)歷,助教,主要研究領(lǐng)域?yàn)榍度胧焦I(yè)控制。
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