999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種支持Cortex-M3的Simulink自定義目標系統(tǒng)設計

2021-08-23 09:02:20常廣暉王宇欣劉樹勇
計算機測量與控制 2021年8期
關鍵詞:嵌入式模型設計

常廣暉,陳 誠,吳 越,王宇欣,劉樹勇

(海軍工程大學 動力工程學院, 武漢 430033)

0 引言

Matlab/Simulink被廣泛應用于工程教育,特別是控制類課程??刂评碚摰牡南到y(tǒng)建模、特性分析及控制器設計都可以在Matlab/Simulink環(huán)境下實現(xiàn)[1-3]。而另外一方面,控制理論在實際物理系統(tǒng)中的生根落地,離不開微控制器(MCU, microcontroller unit)編程以及將其與物理系統(tǒng)的集成過程。實現(xiàn)控制算法的主要工具是C和C++編譯器,設計實際的控制系統(tǒng),必須具備扎實的控制理論知識。而基于Simulink的控制算法的設計與最終C或C++控制算法實現(xiàn)之間的鴻溝,往往使的控制系統(tǒng)的設計變得復雜,尤其是各種智能控制算法逐步走向?qū)嵱玫慕裉?,這個問題顯得格外突出。

Simulink環(huán)境下的Embedded Coder工具箱,提供了將Simulink模型或Matlab程序直接轉(zhuǎn)換為C和C++代碼的功能[4-8]。更近一步為實現(xiàn)與物理系統(tǒng)的交互集成,還需要Simulink模型對數(shù)字和模擬輸入/輸出等外設以及其他MCU特性的直接支持[9]。為了實現(xiàn)這個目的,可以通過開發(fā)第三方的Simulink目標工具箱來實現(xiàn)。目前主要有dSpace,xPC Target前者價格昂貴,后者僅僅是實時系統(tǒng)的PC機解決途徑,而且兩者往往只能進行硬件在環(huán)的半物理仿真驗證,很難作為最終的控制器應用到實際嵌入式控制系統(tǒng)。

Cortex-M3是ARM公司的新一代32位低成本、高性能通用微控制器內(nèi)核,它引入了大量最新設計,出色地平衡了強計算能力、低功耗和低成本之間的矛盾,廣泛應用于工業(yè)控制領域。很多芯片制造商正在生產(chǎn)Cortex-M3內(nèi)核的MCU,其中意法半導體生產(chǎn)的STM32F1系列MCU就是其中杰出的代表。目前支持Cortex-M3 MCU的Matlab/Simulink第三方目標主要有用于ST Discovery開發(fā)板的Embedded Coder支持包、用于ST Nucleo開發(fā)板的Simlink Coder支持包、STM23-MAT/TARGET,前兩種目標僅支持GNU GCC編譯器,后者還需要STM32CubeMX軟件包的支持,開發(fā)相對復雜,主要的共同缺點是:它們都是封閉的,無法實現(xiàn)功能的自行擴展。為此,本文設計開發(fā)了一種開放式的STM32F1XTarget目標系統(tǒng),并給出軟、硬件設計方案。硬件電路上支持工業(yè)嵌入式控制常見的輸入輸出通道及網(wǎng)絡通信功能[10],目標軟件通過自定義Simulink模塊封裝的形式給出各功能硬件驅(qū)動程序。通過目標系統(tǒng)文件控制代碼的生成過程將自動生成的代碼文件通過XML文件讀寫的方式集成到標準Keil MDK V5工程模版上去。通過該實時目標進行嵌入式控制系統(tǒng)開發(fā),首先建立整個控制系統(tǒng)的Simulink模型并進行仿真分析,仿真通過后對控制器的輸入、輸出通道驅(qū)動進行配置來替換建模仿真當中被控對象模型,然后利用Embedded Coder代碼生成機制,實現(xiàn)控制器和硬件驅(qū)動代碼的自動生成。代碼生成完畢后自動后臺調(diào)用Keil uVision5編譯器對代碼進行編譯鏈接等操作,全程不需要人為干預,實現(xiàn)控制程序的一鍵式下載。

1 自定義目標嵌入式控制電路板設計

在一般工業(yè)嵌入式控制系統(tǒng)開發(fā)中,常用的物理反饋通道包括數(shù)字輸入、模擬輸入、頻率輸入,控制輸出通道包括數(shù)字輸出、模擬輸出、PWM輸出等,通信總線則包括以太網(wǎng)、CAN總線、USART等。為了提高STM32F1XTarget目標系統(tǒng)的適用性,其配套的嵌入式控制電路板包含以上全部物理通道。電路板采用核心板+底板結(jié)構(gòu)的模塊化設計方案。核心板采用ST公司的Cortex-M3內(nèi)核STM32F103ZET6作為MCU,在此基礎上集成DM9000BI以太網(wǎng)通信電路和FLASH存儲電路等,底板主要是各類物理通道電路,電路板總體組成如圖1所示。

圖1 STM32F1XTarget目標工具箱的驅(qū)動模塊

2 自定義目標軟件系統(tǒng)設計

STM32F1XTarge是完全開放并可以擴展的,所有的代碼和配置文件,如Matlab代碼、模板、配置等可以作為源代碼使用,并可以在此基礎上擴充。STM32F1XTarget基于uCOS-II實時操作系統(tǒng),它使用Keil MDK V5來編譯生成的源代碼。目標編譯此后生成完整的支持Keil MDK IDE的項目文件,有了這些項目文件,在不運行Simulink模型或開發(fā)自己的模塊時,也可以手動編譯和/或調(diào)試生成的代碼。Simulink塊庫包含兩組功能塊:一類是MCU自帶硬件資源驅(qū)動塊;另一類是功能擴展模塊。第一類模塊包括:DIO,ADC,DAC, PWM驅(qū)動,編碼器輸入,TCP/UDP、RS485、CAN網(wǎng)絡通信等。第二類模塊包括倒立擺模型、LQR控制器等主要是控制對象和控制算法模塊,可以自行擴展。STM32F1XTarget同時支持具有Simulink模型代碼生成功能的Simulink Coder和Embedded Coder。要生成、編譯、鏈接和下載一個Simulink模型的C代碼,只需要一個步驟點擊Simulink工具欄上的Build一鍵即可部署到配套的電路板上。

圖2 STM32F1X目標自帶硬件資源模塊

圖3 STM32F1X目標功能擴展模塊

2.1 STM32F1X目標代碼生成原理

將Simulink模型自動轉(zhuǎn)換為可執(zhí)行二進制文件的原理工作流程如圖4所示。

圖4 Simulink模型轉(zhuǎn)換為可執(zhí)行代碼的工作流程

Simulink Coder或Embedded Coder首先從Simulink模型生成rtw文件[11]。rtw文件是一種模型的特定文本表示文件格式。在自定義目標tlc文件(目標語言編譯器文件)的配置下,目標語言編譯器(TLC)會生成幾個c/h文件和一個Make文件,與此同時這個過程會受到hook文件調(diào)用的控制。

STM32F10X目標代碼自動生成過程由以下幾個tlc文件控制:stm32f1x.tlc用于Embedded Coder或stm32f1x_grt.tlc用于Simulink Coder的起點。從rtw到c文件的轉(zhuǎn)換過程中,TLC提供了幾個鉤子來定制代碼生成過程。STM32F1XTarget主要使用兩個鉤子:after_make用于代碼處理進程和更新編譯信息文件,exit用于創(chuàng)建系統(tǒng)工程文件并將生成的代碼添加到工程中。

整個過程可歸納為以下幾個步驟:

1)TLC使用當前Matlab工作路徑將所有生成的文件存儲在一個文件夾中,該文件夾的名稱使用Simulink模型名和’_stm32f1x_rtw’后綴,例如Invertedpendulum_stm32f1x_rtw。在此過程中,Simulink 提供的tlc文件用于每個標準的Simulink模塊。對于每個非simulink模塊,STM32F1XTarget提供自定義的的tlc文件。除了由tlc文件生成的c/h文件之外,還基于makefiles模板stm32f1x.tmf創(chuàng)建了一個makefile。這個makefile需要一個額外的make include文件,該文件在第2步中描述的鉤子函數(shù)中生成。

2)在步驟1)之后,在鉤子調(diào)用after_make期間,創(chuàng)建一個特定目標文件夾。將所有生成的文件復制到該文件夾中,并生成一個特定于stm32f1x的make include文件。這包括文件非常類似于一個標準的gcc使用的makefile。

3)在執(zhí)行exit鉤子時,會通過項目工程模板生成模型對應的工程文件,并通過命令行自動調(diào)用Keil MDK V5軟件,自動對項目進行編譯生成一個hex可執(zhí)行文件。

4)hex可執(zhí)行文件通過ST-link下載器下載到目標嵌入式電路板的MCU中。

2.2 STM32F1X目標控制文件設計

TLC通過執(zhí)行目標系統(tǒng)中的控制文件來控制代碼生成過程。設計目標控制文件目的是為了設置代碼生成過程中的目標參數(shù)、定制用戶代碼、調(diào)用Keil uVision5等 ,STM32F1X目標控制文件主要包括:stm32f1x.tlc、stm32f1x_file_process.tlc、stm32f1x_callback_handler.m、stm32f1x_make_rtw_hook.m。系統(tǒng)TLC文件stm32f1x.tlc是通過修改Simulink標準的嵌入式實時系統(tǒng)目標文件(ert.tlc)來實現(xiàn),用來實現(xiàn)指定TLC配置變量、設定自定義目標選項和指定tlc文件入口等功能;自定義文件處理模板stm32f1x_file_process.tlc用于組織代碼生成的格式,生成的全部代碼文件的格式都應與模板文件一致;回調(diào)函數(shù)stm32f1x_callback_handler是對一些目標系統(tǒng)常用默認設置項進行設置,比如:針對嵌入式開發(fā)需要將步長設置為硬件支持的固定步長并禁止修改,設置求解器、采樣時間等。鉤子文件stm32f1x_make_rtw_hook.m用于對代碼生成的各個階段對自定義操作的處理,為了實現(xiàn)代碼生成、編譯、下載過程的一鍵式操作,主要是在exit階段通過編寫m腳本文件,自動調(diào)用并指導Keil uVision5來實現(xiàn)。

2.3 STM32F1X目標系統(tǒng)代碼組件設計

代碼組件指封裝各類設備驅(qū)動或各類控制算法的自定義Simulink模塊,要實現(xiàn)自定義的Simulink模塊,需要以下元素:一塊封裝、一個S函數(shù)文件、一個tlc和C代碼混合而成的tlc文件[12-13]。塊封裝定義了在Simulink模型編輯器中顯示的模塊的外觀,定義了在塊掩碼對話框中可用的輸入?yún)?shù)。它還定義模塊的標題、模塊幫助文本和幫助菜單條目。模塊參數(shù)連接模塊塊與S函數(shù),即一個由C語言實現(xiàn)的二進制的mexw64文件。和與S文件同名的tlc文件。在STM32F1XTarget中,S函數(shù)主要描述模塊的行為:輸入和輸出端口的數(shù)量和類型,檢查參數(shù)并準備將這些參數(shù)傳遞給TLC編譯器。

tlc文件是tlc代碼、類似腳本的語言和代碼片段形式的C代碼的混合物[14-15]。腳本代碼控制和組織C代碼片段在生成的C文件中怎樣和在哪里放置.tlc文件主要包含三個功能:Setup、Start和Output。Setup函數(shù)控制包含額外的頭文件和源文件,Start函數(shù)執(zhí)行一次以生成初始化代碼,Output在每個simulation循環(huán)中調(diào)用一次。即使名字是輸出,函數(shù)也必須處理通過Simullink傳送到輸入端口的輸入值。例如Digital Output模塊以上3種函數(shù)代碼如下:

%function Setup(block, system) void

%assign hFile = LibCreateSourceFile("Header", "Custom", "%")

%assign HW_Lib_cFile = LibCreateSourceFile("Source", "Custom", "%")

%if (EXISTS(::__STM32F10X_GPIO__) == 0)

%assign :: __STM32F10X_GPIO__ = 1

%openfile tmpBuf

include "stm32f10x_gpio.h"

%closefile tmpBuf

%

%

%endif

%endfunction

%function Start(block, system) Output

%assign nPars = SIZE(SFcnParamSettings.Bits,1)

%assign isByte = SFcnParamSettings.IsByte

%assign nextChannel = 0

%assign port = getPort(SFcnParamSettings.DIOPort)

%if ISEQUAL(port,"PORTA")

%assign port = "PORTA"

%assign ddr = "DDRA"

%else

%assign port="PORTB"

%assign ddr = "DDRB"

%endif

%if isByte

% = 0x00;

%else

%foreach idx=nPars

%assign bitIdx = CAST("Number",SFcnParamSettings.Bits[idx])

%assign rhs = setBitVal(ddr, idx, 0)

% = %;

%assign nextChannel = nextChannel+1

%endforeach

%endif

%endfunction

%function Outputs(block, system) Output

%assign Channel = 0

%foreach idx = nbr_pins

%assign pin = CAST("Number",%)

%assign y = LibBlockOutputSignal(%, "", "", 0)

%assign y_type = LibBlockOutputSignalDataTypeName(Channel, "tRealPart")

% = *%_%;

%assign Channel = Channel + 1

%endforeach

%endfunction

3 基于自定義目標的嵌入式控制器開發(fā)實例

倒立擺是一個典型的不穩(wěn)定非線性系統(tǒng),是控制領域檢驗各種控制策略有效性的典型控制對象。為了驗證STM32F1XTarget目標系統(tǒng)的有效性,利用該目標設計一級直線倒立擺的嵌入式控制器。首先通過Matlab2018b中的SimscapeMultibody工具箱建立了與實驗室倒立擺物理特性一致的多體動力學仿真模型,為了推導其LQR控制器,在平衡點將模型線性化為:

(1)

其中:x為小車的位移,θ為擺桿旋轉(zhuǎn)角度,u為小車的作用力。

根據(jù)Riccati代數(shù)方程,得到倒立擺LQR控制器K=[10.0 6.171 22.128 2.625],為了克服實際位移、角度測量中的噪聲干擾在LQR控制器前端增加卡爾曼濾波狀態(tài)觀測器[16-20],將上述倒立擺模型及控制器模型在Simulink環(huán)境下集成,得到的系統(tǒng)仿真模型如圖5所示。

圖5 倒立擺控制仿真模型

經(jīng)過仿真驗證所設計的控制器可以有效的進行穩(wěn)擺控制,接下來通過STM32F1XTarget目標工具箱的驅(qū)動模塊快速替換建模仿真當中的倒立擺模型,所用模塊如表1所示。

表1 倒立擺控制嵌入式目標所用模塊列表

對硬件驅(qū)動進行配置后的控制器模型如圖6所示。

圖6 帶硬件驅(qū)動配置的控制器模型

接下來在Simulink配置對話框中,選用STM32F1XTarget.tlc系統(tǒng)目標文件,硬件類型選擇ARM Cortex類型,仿真設置為定步長,步長為0.005(即5 ms),設置好之后就可以將使用build命令利用Embedded Coder一鍵生成嵌入式控制工程如圖7所示,工程自動編譯下載到配套的嵌入式控制板中。整個過程不需要用戶編寫任何C語言代碼。

圖7 生成代碼圖

4 實驗結(jié)果與分析

在基于自定義目標的實際倒立擺的控制試驗中,上位計算機通過Simulink的TCP/IP Receive模塊接受嵌入式控制電路板實時上傳的小車位移和擺桿角度兩個數(shù)據(jù)并顯示,同時與運行的仿真體數(shù)據(jù)比對,實驗結(jié)果如圖8、9所示。

圖8 小車位移的實物與仿真對比

圖9 倒立擺角度的實物與仿真對比

實驗結(jié)果表明,采用基于模型設計的控制算法通過自動代碼生成直接移植到嵌入式控制器,幾乎取得了同仿真一致的控制效果,所設計的自定義目標有效可行,使嵌入式控制系統(tǒng)開發(fā)簡潔高效。

5 結(jié)束語

STM32F1XTarget的開發(fā)是為了改善和簡化MCU在傳感器/執(zhí)行系統(tǒng)等嵌入式控制系統(tǒng)等模塊中的使用,工具箱所提供的模塊涵蓋了配套嵌入式電路板所支持的各類硬件驅(qū)動。利用STM32F1XTarget目標軟件嵌入式電路板配套使用,可勝任大部分工業(yè)嵌入式控制應用,使開發(fā)者僅僅關注算法的開發(fā),不用把大量的精力投入到底層硬件設計和C語言的驅(qū)動設計。通過倒立擺實際穩(wěn)擺控制試驗,驗證了使用MBD方法簡化了嵌入式控制器的設計過程,減少了設計失敗的風險,相比通過手動編寫代碼設計控制其而言,縮短了設計時間提高了設計效率。該MDB方法流程為其它復雜機械系統(tǒng)控制器的設計提高了很好的借鑒。

猜你喜歡
嵌入式模型設計
一半模型
重要模型『一線三等角』
重尾非線性自回歸模型自加權(quán)M-估計的漸近分布
瞞天過?!律O計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
搭建基于Qt的嵌入式開發(fā)平臺
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應用
3D打印中的模型分割與打包
Altera加入嵌入式視覺聯(lián)盟
主站蜘蛛池模板: 亚洲综合一区国产精品| 亚洲大学生视频在线播放| 国产三区二区| 国产精品第| 国产精品福利导航| 欧美在线综合视频| 91成人试看福利体验区| 国产专区综合另类日韩一区| 精品久久国产综合精麻豆| 五月激情综合网| 日本精品影院| 国产精品偷伦在线观看| 天天综合网亚洲网站| 极品尤物av美乳在线观看| 免费aa毛片| 精品欧美一区二区三区在线| …亚洲 欧洲 另类 春色| 五月婷婷综合色| 亚洲精品麻豆| 午夜无码一区二区三区| 亚洲精品日产精品乱码不卡| 91久久青青草原精品国产| 亚洲一区二区三区国产精品| 精品久久久久久成人AV| 国产精品亚洲精品爽爽| 国产精品一区在线麻豆| a级毛片一区二区免费视频| 免费人成在线观看成人片 | 全免费a级毛片免费看不卡| 四虎永久免费网站| 热这里只有精品国产热门精品| 久久五月天国产自| 亚洲男人天堂久久| 九月婷婷亚洲综合在线| 福利片91| 精品国产www| 久久99精品久久久大学生| 亚洲天堂网站在线| 97国内精品久久久久不卡| 亚洲国产无码有码| 亚洲最大情网站在线观看 | 日韩国产一区二区三区无码| 人与鲁专区| 亚洲日韩在线满18点击进入| 综合天天色| 久草青青在线视频| 欧美在线视频a| 伊人大杳蕉中文无码| 国产无码网站在线观看| 欧美成在线视频| 亚洲动漫h| 欧美一级爱操视频| 国产在线拍偷自揄观看视频网站| 亚洲区第一页| 久久人搡人人玩人妻精品| 久久精品国产精品一区二区| 激情综合网激情综合| 久久人体视频| 亚洲天堂777| 成人在线观看不卡| 亚洲美女一级毛片| 在线视频精品一区| 538国产在线| 91伊人国产| 国产在线欧美| 国产97视频在线| 久久99热这里只有精品免费看| 亚洲精品不卡午夜精品| 亚洲国产中文在线二区三区免| 欧美高清国产| 国内丰满少妇猛烈精品播| 国产午夜福利亚洲第一| 欧美a级在线| 亚洲精品大秀视频| 国产成人精品18| 国产成人免费视频精品一区二区| 久久中文无码精品| 成人国产精品2021| 91成人免费观看| 国产精品漂亮美女在线观看| 国产网站免费看| 欧美成人综合在线|