在數控自動(dòng)控制領(lǐng)域中, 所謂運動(dòng)控制就是對機床機械裝置運動(dòng)部件的位置、速度、加速度等參數進(jìn)行實(shí)時(shí)的控制管理,使其按照預期的運動(dòng)軌跡和規定的運動(dòng)參數進(jìn)行運動(dòng)。Linux 是一個(gè)遵循POSIX (Portable Operating System Interface)標準的多用戶(hù)多任務(wù)且具有先進(jìn)的網(wǎng)絡(luò )特性開(kāi)源操作系統, 可以方便的進(jìn)行自主知識產(chǎn)權的軟件開(kāi)發(fā)。因此基于Linux操作系統的加工點(diǎn)控制(MPC)5200 運動(dòng)控制器, 其由系統提供的模塊化機制很容易實(shí)現運動(dòng)控制器上相關(guān)的文件系統管理、內存管理及實(shí)現數控系統的底層加工程序。但Linux 不是一個(gè)“硬”實(shí)時(shí)操作系統, 其內核為非搶占式的( no - preemptive) ,實(shí)時(shí)任務(wù)不能夠得到保證, 而運動(dòng)控制器本身是綜合性很強的技術(shù), 具有明顯的實(shí)時(shí)控制、實(shí)時(shí)交互和實(shí)時(shí)監測特性。因此本文研究了RTAI(Real - time Application Interface) 的實(shí)現原理, 提出了基于加工點(diǎn)控制(MPC)5200 的運動(dòng)控制器, 它加載了RTAI 實(shí)時(shí)內核, 并采用串行總線(xiàn)的軟連接方式, 使得運動(dòng)控制器可以和上位機分離,其易于實(shí)現分布式的高性能控制, 降低成本, 并且大大提高了運動(dòng)控制器的可靠性、實(shí)時(shí)性、開(kāi)放性、集成性和配置性。
1 實(shí)時(shí)Linux 的實(shí)現
到目前為止, 全球在Linux 平臺下開(kāi)發(fā)的具有硬實(shí)時(shí)功能的系統主要有兩個(gè):RTLinux 和RTAI 。RTLinux 最早是美國
新墨西哥理工學(xué)院的一個(gè)研究項目, 它是由Victor Yodaiken 提出設計思想, 由Michael Barabanov 實(shí)現的硬實(shí)時(shí)操作系統。RTAI( Real Time Application Interface) 是由意大利米蘭理工學(xué)院航天工程系發(fā)起開(kāi)發(fā)的一個(gè)遵循GNU 的開(kāi)源項目, RTAI 已經(jīng)支持I386, PowerPC, ARM, MIPS 和M68k- nommu 等處理器,是目前支持處理器最多的linux 實(shí)時(shí)解決方案之一。
RTAI 的實(shí)現機制與RTLinux 非常相似, 唯一不同的是RTAI 在Linux 上定義了一個(gè)實(shí)時(shí)硬件抽象層RTHAL (Realtime
Hardware Abstraction Layer) , 并針對RTAI 開(kāi)發(fā)了LXRT(Linux - RT) , 讓RTAI 可以調用Linux 本身的系統調用功能。
RTAI 修改了linux/arch/ i386 中與體系結構相關(guān)的代碼而形成了RTHAL 層, RTHAL 的作用是使RTAI 能夠在實(shí)時(shí)任務(wù)需要
運行的任何時(shí)刻中斷Linux. 引入RTAI 后,Linux 的功能沒(méi)有改變,但是作為優(yōu)先級最低的任務(wù)運行,并且只有在沒(méi)有實(shí)時(shí)任務(wù)的時(shí)候它才能執行。這樣做的好處在于將直接修改linux 核心的代碼減到最小, 這使得將RTAI 移植到linux 內核的工作量減至最低。RTAI 實(shí)現的主要模塊有RTAI 模塊、SCHED 模塊、FIFO 模塊、SHM模塊、LXRT 模塊,它們能動(dòng)態(tài)裝入和卸載。用戶(hù)自己的實(shí)時(shí)任務(wù)是在RTAI 裝入后再載入??梢酝ㄟ^(guò)編輯/etc/rc.sysinit 文件, 在系統啟動(dòng)時(shí)將RTAI 模塊和用戶(hù)實(shí)時(shí)模塊加載到Linux 內核中, 當實(shí)時(shí)模塊加入到內核后, 實(shí)時(shí)模塊中創(chuàng )建的線(xiàn)程和函數就可以訪(fǎng)問(wèn)系統的底層資源。
2 運動(dòng)控制器系統設計
運動(dòng)控制器微處理器采用的是摩托羅拉公司于2003 年下半年推出的新型的具有廣泛發(fā)展前景的PowerPC MPC5200, 其
內部采用了雙處理器結構, 有一個(gè)專(zhuān)門(mén)負責通信的協(xié)處理器,體現了數據通信的專(zhuān)業(yè)構架, 并通過(guò)雙端口內存( 這是種極快的數據交換方式) 與主處理器通信, 從而使主處理器負擔大幅度下降。其芯片內部含有豐富的實(shí)用型外設?;赑owerPC 內核的MPC5200 是一顆低功耗、處理速度達760MIPS 的嵌入式處理器。它支持以太網(wǎng)、USB、PCI、ATA、I2S、I2C、SPI、串行接口、J1850 和控制區域網(wǎng)(CAN)。同時(shí), 它還支持DDR 存儲器, 并集
成了一個(gè)雙精度的浮點(diǎn)單元(FPU)。如圖1。
由于MPC5200 微控制器內部集成可編程串行控制器( PSC, Programmable Serial Controller) , 所以可以通過(guò)PSC 控制
器來(lái)實(shí)現串行通信的優(yōu)化, 并可以根據需求配置USB、RS232、CAN 等串行通信接口, 從而使得可以根據外界接口的要求進(jìn)行標準化配置。同時(shí)MPC5200 提供了8 個(gè)通用定時(shí)器資源( GPT0~GPT7) , 所有的定時(shí)器都可以配置成以下任意模式: 內部定時(shí)器、外部計數器、比較輸出和PWM, 除第一種模式以外,每個(gè)定時(shí)器都有一個(gè)I/O 口與之對應。MPC5200 控制一臺電機需要占用兩個(gè)定時(shí)器資源, 其中一個(gè)設置為PWM輸出, 采用定脈寬調頻的方式通過(guò)高速光耦隔離輸出, 驅動(dòng)電機驅動(dòng)器; 另一個(gè)設置為內部定時(shí)器, 用于控制運動(dòng)控制器輸出的脈沖個(gè)數。MPC5200 最多可以控制4 臺步進(jìn)電機或伺服電機。
由此可見(jiàn), MPC5200 運動(dòng)控制器是一款非常適合于工業(yè)控制領(lǐng)域應用的運動(dòng)控制器, 開(kāi)放化的特點(diǎn)使其能夠應用于多種
機械設備上, 通過(guò)CAN 總線(xiàn)互連組建的現場(chǎng)總線(xiàn)運動(dòng)控制系統是一種全新的分布式控制系統。因此Mpc5200 運動(dòng)控制器完全可以滿(mǎn)足現代數控系統高速化、智能化、網(wǎng)絡(luò )化、集成化、開(kāi)放化的需求。
本設計采用串行通信的方式和上位機進(jìn)行軟連接通信, 從而容易通過(guò)串行接口構建分布式的數控系統, 其可根據上位機
的通信要求, 在串行通信配置開(kāi)關(guān)中采用跳線(xiàn)或者選擇開(kāi)關(guān)的形式進(jìn)行設置, 在開(kāi)機初始化時(shí)由MPC5200 根據對應的開(kāi)關(guān)狀態(tài), 初始化USB 或者RS232 串行通信接口, 并裝入EEPROMPCF8582C 中具體的串行通信協(xié)議。
為滿(mǎn)足高速運動(dòng)控制的要求, 從MPC5200 中通用定時(shí)器GPT0, GPT2 端口輸出的PWM 脈沖以及負責方向的GPT1, GPT3 輸出, 通過(guò)NEC 公司的高速光耦6N136 進(jìn)行隔離, 其最高速度可以達到2Mbit, 隔離后輸入電機驅動(dòng)器中
驅動(dòng)坐標軸電機。
為滿(mǎn)足坐標軸電機運動(dòng)位置信號采集, 選用Intel 82C54 計數器對坐標軸電機的光電碼盤(pán)的反饋脈沖進(jìn)行計數, 并通過(guò)系
統總線(xiàn)輸入到微控制器中, 82C54 的計數頻率可高達12MHz。片內包含3 個(gè)獨立的16 位計數通道, 每個(gè)計數通道有6 種工作方式, 可由程序設置和改變。
3 實(shí)時(shí)控制的軟件實(shí)現
在實(shí)時(shí)Linux 下, 為了保證數控系統的實(shí)時(shí)任務(wù)能夠即時(shí)響應,所有和實(shí)時(shí)相關(guān)的任務(wù)都必須放在內核層下,每個(gè)任務(wù)用
一個(gè)獨立的內核進(jìn)程來(lái)執行, 實(shí)時(shí)進(jìn)程是通過(guò)調用RTAI 的rt_task_init( ) 函數來(lái)實(shí)現的。而非實(shí)時(shí)任務(wù)則放在用戶(hù)層下,
它們在任何時(shí)候都不會(huì )打斷實(shí)時(shí)任務(wù)的運行, 只有在實(shí)時(shí)任務(wù)結束后才會(huì )執行。
內核層和用戶(hù)層之間進(jìn)程的通訊主要是依靠RTAI 提供的實(shí)時(shí)FIFO, 通過(guò)調用函數rtf_create()來(lái)創(chuàng )建管道實(shí)現數據傳。
運動(dòng)控制器的實(shí)時(shí)工作流程如圖3 所示, 分為四個(gè)實(shí)時(shí)任務(wù), 即狀態(tài)檢測任務(wù)、插補任務(wù)、位置控制任務(wù)還有功能控制任務(wù), 四個(gè)任務(wù)的運行周期都是相同的, 取為8ms, 狀態(tài)檢測任務(wù)的運行優(yōu)先級為最高, 即1 級、插補任務(wù)的優(yōu)先級為2級、位置控制任務(wù)的優(yōu)先級為3 級、功能控制任務(wù)的優(yōu)先級為最低4 級。其中, 狀態(tài)檢測任務(wù)實(shí)現機床運行狀態(tài)的檢測, 并負責從IO 端口讀入各個(gè)連接的I/O 設備值, 然后將狀態(tài)寫(xiě)入狀態(tài)檢測緩沖區中, 對機床急停、伺服報警、限位信號進(jìn)行判斷, 并進(jìn)行相應的處理。插補任務(wù)實(shí)現從譯碼緩沖區中順序取得插補數據, 然后根據是直線(xiàn)或者圓弧進(jìn)行插補, 得到理論坐標值。位置控制任務(wù), 先進(jìn)行誤差分析, 在系統的第一個(gè)采樣周期后開(kāi)始執行, 通過(guò)電機反饋取得實(shí)際位置, 與插補任務(wù)輸出的理論位置一起作為誤差分析的輸入參數, 在進(jìn)行誤差分析時(shí)系統將調用誤差計算策略進(jìn)行誤差計算, 誤差計算策略可以是面向單軸的簡(jiǎn)單非耦合算法, 也可以是面向輪廓加工的復雜耦合算法, 計算后得到各軸的綜合誤差值; 之后系統將調用整定策略整定參數, 整定策略可以簡(jiǎn)單的設定成固定參數, 也可以根據需要實(shí)時(shí)調整參數; 最后將綜合誤差與參數一同輸入到位置控制部分進(jìn)行計算, 得到具體的脈沖輸出值, 輸出到各個(gè)伺服電機。功能控制任務(wù)負責實(shí)現運動(dòng)控制器的運行、暫停、進(jìn)給速度等狀態(tài)設置。
運動(dòng)控制器軟件的所有實(shí)時(shí)任務(wù)和函數包含在實(shí)時(shí)模塊main_program.o 中, 通過(guò)編輯/etc/rc.sysinit 文件, 在系統啟動(dòng)時(shí)
加載到Linux 內核中, 當實(shí)時(shí)模塊加入到內核中, 實(shí)時(shí)模塊中創(chuàng )建的線(xiàn)程和函數就可以訪(fǎng)問(wèn)系統的底層資源。實(shí)時(shí)任務(wù)模塊的加載和卸載在Linux 中由init_module( )和cleanup_module( )兩個(gè)函數實(shí)現的, 同時(shí)可以通過(guò)這兩個(gè)函數進(jìn)
行資源的分配和回收, 以及線(xiàn)程和處理函數的創(chuàng )建。
int init_module(void) { } //加載模塊
由于對不同試體進(jìn)行的試驗形式不同, 以及試驗機本身標定的需要, 全自動(dòng)壓力試驗機必須具有在不同數值上實(shí)現恒加荷速度控制的能力以及零速度控制能力(保壓)。針對實(shí)際過(guò)程中出現的各種不同的情況, 利用模糊參數自整定PID 控制器進(jìn)行控制都取得了良好的效果, 都能盡快響應, 超調小, 抗干擾能力強。這種模糊自適應整定PID 控制結合了PID 控制和模糊控制兩者的優(yōu)點(diǎn), 對被控對象達到了較好的控制效果, 促進(jìn)了建材行業(yè)檢測技術(shù)的發(fā)展。