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