国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx

基于模型的設計方法在運動控制實驗中的研究

2018-09-29 03:08:40董靖川王太勇陸鋼慶李曉奇閆傳濱
實驗室研究與探索 2018年8期
關鍵詞:代碼生成控制板調用

董靖川, 王太勇, 陸鋼慶, 李曉奇, 閆傳濱

(天津大學 機械工程學院,天津 300354)

0 引 言

傳統(tǒng)嵌入式數(shù)字控制系統(tǒng)軟件開發(fā)需要手工編寫大量代碼,并且需要等到樣機完成后才能進行測試,整個過程不但很容易出錯,而且發(fā)現(xiàn)錯誤后需要重復代碼編寫、算法調試等工作,造成開發(fā)效率低下,可靠性差。為了解決傳統(tǒng)設計方法的弊端,從20世紀90年代以后,人們嘗試通過基于模型的設計方法(MBD)開發(fā)嵌入式控制系統(tǒng)。該方法以控制系統(tǒng)的數(shù)學模型為核心,借助計算機建模、仿真和自動代碼生成技術實現(xiàn)開發(fā)流程,使工程師能夠在各個階段都能夠依據(jù)系統(tǒng)控制模型進行設計開發(fā),在建模、仿真過程中能夠盡早發(fā)現(xiàn)并解決問題,避免了手工編寫代碼造成的效率低下和可靠性問題,使復雜控制系統(tǒng)快速、可靠設計成為可能。目前,基于模型的設計方法已成功應用于大型項目的開發(fā)上,如空客380客機、GM混合動力汽車、諾-馬公司的聯(lián)合攻擊機等項目[1]。

Matlab/Simulink軟件支持基于模型的設計流程,提供圖形化的建模、仿真環(huán)境[2-3],以及嵌入式代碼自動生成等功能,可以滿足運動控制系統(tǒng)的開發(fā)需要。在此基礎上,采用以單片機(MCU)為核心的嵌入式運動控制板作為控制器硬件平臺[4],并連接直角坐標運動機構組成運動控制實驗裝置,可以實現(xiàn)運動控制算法的驗證與測試。為了在該裝置上實現(xiàn)基于模型的設計,開發(fā)了運動控制板的Simulink自動代碼生成模塊庫[5],含有AD、DA、編碼器、通用輸入、通用輸出等接口的驅動程序。另外還開發(fā)了運動控制板的數(shù)據(jù)采集與傳輸庫函數(shù),可以在實驗過程中實時記錄數(shù)據(jù),并上傳到計算機上進行數(shù)據(jù)分析處理。

1 實驗平臺介紹

運動控制實驗裝置由PC機、基于MCU的運動控制器和直角坐標運動機構組成,如圖1所示。PC機上運行Matlab/Simulink軟件,實現(xiàn)控制器建模、仿真、代碼生成及數(shù)據(jù)處理等功能。自主設計的基于MCU的運動控制器運行由PC機設計的實時控制算法,且含有控制、編程及通信接口。直角坐標運動控制機構由相互垂直的直線運動軸組成,每個軸通過永磁同步交流伺服電機[6]拖動,經聯(lián)軸器帶動滾珠絲杠[7],將旋轉運動轉換為直線運動,最后帶動工作臺移動。每個軸的電機配有旋轉編碼及電機驅動器,由驅動器接收運動控制器發(fā)出的指令,并將編碼器的脈沖反饋到運動控制器,實現(xiàn)閉環(huán)控制。

(a) 組成原理

(b) 實驗裝置照片

在自主開發(fā)的運動控制卡中,控制MCU是基于ARM Cortex-M4核心的STM32F429單片機,具有硬件浮點處理單元,支持DSP指令,最高主頻可達180 MHz[8],可以滿足復雜控制算法的實時計算需求。MCU內部含有2MB Flash存儲器和256KB的SRAM,可存儲控制程序及數(shù)據(jù)。程序下載及調試接口基于SWD協(xié)議,通過ST-Link連接PC機,下載設計的伺服控制程序,并實現(xiàn)在線程序調試。板上帶有RS-232通信接口[9],能夠連接PC機串口進行實驗數(shù)據(jù)的傳輸。電源接口輸入5 V和24 V直流電源,為控制部分電路及連接驅動器的信號回路供電。模擬量輸出接口,可輸出-10~10 V范圍的電壓信號,作為伺服驅動器的速度或轉矩指令。模擬量輸入接口用于連接各種模擬量信號傳感器。編碼器接口可連接驅動器的編碼器信號輸出,可對正交編碼信號[10]進行雙向計數(shù),實現(xiàn)電機位置和速度的測量。開關量輸入及輸出接口可連接繼電器、指示燈、行程開關等裝置,也作為與驅動器通信的伺服使能輸出、報警輸入等信號的接口。此外,板上還設置了4個按鍵,用于對實驗過程的控制。

2 控制模型的自動代碼生成

2.1 代碼自動生成的流程

控制代碼的自動化生成是實現(xiàn)基于模型的設計方法的關鍵技術。在Matlab/Simulink環(huán)境下,由控制系統(tǒng)模型生成控制器代碼的流程如圖2所示[11]。用戶在Simulink下建立的控制模型,經過rtw編譯生成模型的rtw文件。rtw是一種結構化的文本文件,是代碼生成過程中的中間產物,是后續(xù)利用目標語言編譯器(Target Language Complier, TLC)進行自動代碼生成的輸入文件。該文件中記錄了模型的模塊、輸入、輸出、參數(shù)、狀態(tài)、存儲及其他重要的模型信息。然后,通過調用目標語言編譯器將rtw文件編譯為一系列源文件(如C語言的.C、.h文件等)。在編譯過程中,目標語言編譯器需要調用一些TLC文件。TLC文件使用一種腳本語言,規(guī)定了生成代碼的結構及代碼生成的動作等。在代碼生成過程中,需要調用3類TLC文件,即系統(tǒng)TLC文件、模塊TLC文件和其他支持代碼生成的TLC函數(shù)庫。在編譯過程中,系統(tǒng)TLC文件首先被調用,該文件規(guī)定了生成代碼的全局結構。然后由系統(tǒng)TLC 文件調用模塊的TLC文件和TLC函數(shù)庫,進行代碼生成。在此過程中,會對模型的rtw文件中記錄的信息進行讀寫。TLC編譯過程結束后生成的源文件代碼經過編譯、鏈接后可以生成能夠在目標平臺硬件上運行的可執(zhí)行文件。

圖2 Simulink代碼自動生成流程

2.2 運動控制板的Simulink模塊庫

為了能夠使用戶的控制器模型運行在基于MCU的運動控制板上,設計了與運動控制板配套的Simulink模塊庫,如圖3所示。該模塊庫中的模塊對應了運動控制板上的各種用于控制的輸入/輸出接口。其中輸出模塊包括模擬量輸出(DAC)、伺服使能輸出(SEN)、通用開關量輸出(DO);輸入模塊包括編碼器輸入(ENC)、按鍵(KEY)、伺服報警輸入(SAL)、通用開關量輸入(DI)和模擬量輸入(ADC)。用戶可以將上述模塊拖動到Simulink的模型中,建立起控制算法輸入/輸出信號與控制接口之間的聯(lián)系。

圖3 運動控制板的Simulink模塊庫

運動控制板Simulink模塊庫中的模塊是基于S-function構建的[12]。S-function是Simulink的模塊擴展接口,可以通過S-function實現(xiàn)自定義的Simulink模塊。該模塊可以按照Simulink的框架運行各種子方法的調用,和Simulink內建模塊一起工作。 S-function分為Level 1和Level 2,可以用M代碼或C語言編寫。本文中,采用C語言編寫Level 2的支持代碼生成的S-function。以DAC模塊為例,在模塊庫中自定義一個S-function模塊,編寫對應的S-function C語言文件。該文件基于Simulink自帶的S-fuction模板sfuntmpl_basic.c構建。為了能夠支持代碼生成,除了實現(xiàn)常規(guī)的S-function方法外,還需要實現(xiàn)mdlRTW方法。mdlRTW方法的主要功能是,在代碼生成時將模塊的參數(shù)寫入到rtw文件。DAC模塊在圖形用戶界面(GUI)參數(shù)中定義了一個channel(“通道號”)參數(shù),mdlRTW方法獲取該參數(shù)并寫入到rtw文件中,供代碼生成使用:

static void mdlRTW(SimStruct *S) {

uint8_T channel = (uint8_T)(mxGetScalar(ssGetSFcnParam(S, 0)));

if (!ssWriteRTWParamSettings(S, 1, SSWRITE_VALUE_DTYPE_NUM, "channel",

&channel, DTINFO(SS_UINT8, COMPLEX_NO)))

return; }

在Matlab下使用用mex命令編譯該文件后,即可在Simulink的建模和仿真中直接使用該模塊。

2.3 基于TLC文件的硬件驅動編寫

運動控制板的Simulink模塊庫中,每個模塊都有對應的TLC文件,用于生成該模塊的硬件驅動程序C語言代碼。TLC語法是以單個“%”符號開頭的關鍵字為命令,空格后跟參數(shù)的腳本語言,含有變量、記錄、分支、循環(huán)、函數(shù)、注釋等功能。模塊的TLC文件支持各種子函數(shù),用戶可以根據(jù)需要選擇其中部分函數(shù)并實現(xiàn),也可以在TLC文件中調用Simulink的內建TLC函數(shù),方便代碼生成。以DAC模塊為例,該模塊TLC文件內容為:

%assign CodeFormat = "Embedded-C"

%implements F429DSM_DAC "C"

%function Outputs(block, system) Output

/* % Block: % */

%assign channel = CAST("Number", SFcnParamSettings.channel)

%assign OutVal = LibBlockInputSignal(0, "", "", 0)

F429DSM_SetDACOutputVoltage(%,

%);

%endfunction

第1行設置CodeFormat變量為“Embedded-C”,指定嵌入式的C語言格式,這種格式內存占用較少,簡化了代碼的接口。%implements命令一行注明S-function模塊名以及生成代碼的目標語言。在該文件中實現(xiàn)了Outputs子函數(shù),該函數(shù)用于編寫模塊計算輸出的代碼,將其生成到model_step()函數(shù)中。channel變量是從模型的rtw文件中記錄的模擬量輸出通道號,OutVal變量由內建函數(shù)LibBlockInputSignal獲取的模塊輸入端口數(shù)據(jù),在這里是模擬量輸出電壓數(shù)值。生成的代碼中通過調用定義的C語言函數(shù)F429DSM_SetDACOutputVoltage實現(xiàn)MCU片上數(shù)模轉換器(DAC)數(shù)值的更改,實現(xiàn)模擬量電壓的輸出功能。

2.4 控制軟件工程模板的構建

為了使Simulink生成的代碼通過編譯、連接成可執(zhí)行文件并在運動控制板上運行,需要將自動生成的代碼整合到控制器軟件的開發(fā)工程中。為此,設計了一個通用控制軟件工程模板,基于該模板可快速構建完整的控制器軟件開發(fā)工程。

控制器軟件工程模板需要完成硬件設備的初始化,還要提供底層硬件訪問的接口驅動。此外,為了實現(xiàn)離散控制,還需要構建能夠執(zhí)行固定周期任務的軟件框架。在構建控制軟件工程中,借助了運動控制板MCU廠家意法半導體公司提供的圖形化的MCU配置工具STM32CubeMx[13]。在STM32CubeMx軟件中,選擇運動控制板上的MCU型號,然后根據(jù)控制板的硬件電路原理對MCU的管腳分配、片上外設功能、時鐘樹、中斷等進行配置,并設置開發(fā)工具及工程路徑、堆棧大小等參數(shù),可以自動生成的含有硬件初始化代碼的完整軟件工程。在此代碼基礎上,模板中再封裝一層驅動接口函數(shù),供Simulink 模塊驅動程序調用。

為了方便實驗數(shù)據(jù)的記錄、傳輸與處理,在此控制軟件工程模板中還添加了數(shù)據(jù)采集與傳輸功能函數(shù)庫。數(shù)據(jù)采集功能可以在每個控制周期內將指定的信號數(shù)值記錄到預先分配的內存中。數(shù)據(jù)傳輸功能支持標準的xmodem協(xié)議[14],可以將采集到的數(shù)據(jù)通過RS-232接口批量上傳到PC機。

利用此工程模板構建控制軟件工程的步驟如下:①復制工程模板,并打開作為新的工程。②將Simulink生成的代碼復制到工程中。③調用Simulink自動生成的模型初始化函數(shù)model_initialize ()和模型周期任務函數(shù)model_step()。前者在main函數(shù)初始化階段調用;對于后者,在工程模板中已將MCU的定時器TIM2配置為1 ms定時周期,在其中斷處理函數(shù)中調用model_step()函數(shù),即可實現(xiàn)周期為1 ms離散控制。④在周期中斷處理函數(shù)中調用數(shù)據(jù)采集與傳輸函數(shù)庫,記錄所需實驗數(shù)據(jù)。

3 基于模型的設計在實驗中的應用

基于模型的設計方法使用戶能夠快捷、高效地進行控制系統(tǒng)的開發(fā),并且降低了手工編碼錯誤帶來的風險。下面以機電傳動控制課程實驗教學中的雙軸聯(lián)動運動控制實驗為例,說明基于模型的設計在實驗中的應用。

3.1 控制器模型的設計

雙軸聯(lián)動使用直角坐標運動機構的X和Y軸的同步移動實現(xiàn)工作臺的圓形軌跡運動,其Simulink控制模型如圖4所示。模型中含有2個伺服控制通道,分別控制X、Y軸,二者結構是相同的。各軸的位置指令由正弦信號發(fā)生器模塊產生,幅值和頻率相同,通過設置偏移和相位關系使X和Y合成的指令軌跡為圓形。伺服控制使用電動機驅動器的轉矩控制模式,發(fā)送到驅動器的模擬量電壓代表轉矩的大小和方向。每個伺服通道實現(xiàn)位置和速度的P-PI雙閉環(huán)控制。

圖4 輪廓控制實驗的Simulink控制器模型

接口模塊來自運動控制板的Simulink模塊庫。使用按鍵KEY1發(fā)送實驗開始信號,經按鍵消抖濾波后產生驅動器的伺服使能信號,并實現(xiàn)編碼器計數(shù)清零和軌跡指令復位。各軸編碼器讀數(shù)經差分、累加、比例轉換等處理得到以mm和mm/s為單位表示的位置和速度反饋信號。轉矩指令經過鉗制處理后由模擬量輸出模塊發(fā)送到電動機驅動器。

3.2 基于代碼自動生成的控制程序構建

模型建立后,點擊工具欄中的Model Configuration Parameters圖標,打開模型參數(shù)配置面板,設置代碼生成相關的選項:① 在Solver面板中,將 Solver options中type設置為Fixed-step,將Fixed-step size設置為1 ms,與運動控制板的固定控制周期一致;② 在Hardware Implementation面板中,將Device vendor設置為ARM Compatible,Device type設置為ARM Cortex,與運動控制板的MCU一致;③ Code Generation面板中,將System target file設置為ert.tlc,作為系統(tǒng)TLC文件,Language選擇C語言,選中Generate code only,點擊Generate code按鈕,即可啟動自動代碼生成流程。

復制控制軟件工程模板,在MCU開發(fā)工具Keil uVision中打開工程。將Simulink自動生成的.C和.h文件加入到工程中。在main()函數(shù)入口調用模型初始化函數(shù)model_initialize ();在TIM2 的周期中斷函數(shù)中首先調用模型周期任務函數(shù)model_step(),再調用數(shù)據(jù)采集接口記錄X、Y軸的編碼器計數(shù),供后續(xù)數(shù)據(jù)分析使用。編譯、鏈接后,生成可執(zhí)行的控制程序。

3.3 實驗驗證與測試數(shù)據(jù)分析

將程序下載到運動控制板,按下按鍵1啟動實驗,可看到X、Y軸電動機同時運行,帶動工作臺實現(xiàn)圓形軌跡的運動。松開按鍵1后,電動機停止運行。打開PC機的超級終端程序,選擇與運動控制卡相連的COM串行通信口,設置通信格式為波特率115 200、無校驗、1停止位,然后選擇Xmodem協(xié)議并按下控制板按鍵2上傳采集的實驗數(shù)據(jù)。在Matlab中,讀取上傳的實驗數(shù)據(jù)文件,根據(jù)X、Y軸編碼器讀數(shù)可計算得到各個時刻各軸的實際位置、跟蹤誤差以及圓周運動的輪廓誤差數(shù)據(jù)[15]。最終計算出的的雙軸聯(lián)動控制實驗的輪廓誤差曲線如圖5所示。

圖5 輪廓誤差曲線

4 結 語

采用Matlab/Simulink軟件及自主設計的運動控制板和直角坐標運動機構,構建了基于模型的設計的運動控制實驗環(huán)境。開發(fā)了支持自動代碼生成的運動控制板Simulink模塊庫,含有AD、DA、編碼器、通用輸入、通用輸出等模塊。實驗應用結果表明,基于模型的設計具有建模直觀、簡便、靈活、可靠等優(yōu)點,使運動控制理論與實驗無縫連接,能夠快速構建起實驗控制系統(tǒng),有利于激發(fā)學生的學習興趣,培養(yǎng)工程實踐和創(chuàng)新能力。

猜你喜歡
代碼生成控制板調用
關于某家用電器靜電彈簧控制板一拖多自動檢測裝置的研究與應用
日用電器(2023年7期)2023-09-07 00:41:56
一種橡膠減震裝置
Lustre語言可信代碼生成器研究進展
核電項目物項調用管理的應用研究
軌道交通AFC導向標識控制板設計
電子制作(2019年23期)2019-02-23 13:21:22
LabWindows/CVI下基于ActiveX技術的Excel調用
測控技術(2018年5期)2018-12-09 09:04:46
基于系統(tǒng)調用的惡意軟件檢測技術研究
代碼生成技術在軟件開發(fā)中的應用
電子世界(2016年15期)2016-08-29 02:14:28
一種機載SAR中心控制板的設計
基于XML的代碼自動生成工具
電子科技(2015年2期)2015-12-20 01:09:20
404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
404 Not Found

404 Not Found


nginx
大名县| 通城县| 霍山县| 双峰县| 新沂市| 南华县| 临沧市| 宁国市| 泾川县| 开阳县| 新沂市| 那曲县| 香港| 北流市| 广宗县| 凤阳县| 泰宁县| 庄河市| 张北县| 内丘县| 禄丰县| 婺源县| 泰宁县| 南投市| 三亚市| 开封县| 依兰县| 岗巴县| 黎城县| 韶关市| 乌鲁木齐市| 赤水市| 台中县| 漳浦县| 祁东县| 东乌珠穆沁旗| 象州县| 甘孜县| 遵义市| 湘阴县| 清丰县|