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