www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 測試測量 > 測試測量
[導(dǎo)讀]摘要:MATLAB是一款高性能的科學(xué)與工程計算軟件,具有強大的數(shù)值計算和分析能力,但其對硬件的訪問能力較弱。在MATLAB環(huán)境中實現(xiàn)對硬件資源的直接訪問可以極大的方便對數(shù)據(jù)的處理及算法的驗證,基于這種目的提出一種

摘要:MATLAB是一款高性能的科學(xué)與工程計算軟件,具有強大的數(shù)值計算和分析能力,但其對硬件的訪問能力較弱。在MATLAB環(huán)境中實現(xiàn)對硬件資源的直接訪問可以極大的方便對數(shù)據(jù)的處理及算法的驗證,基于這種目的提出一種擴展MATLAB訪問硬件的方法,通過MATLAB外部函數(shù)接口調(diào)用第三方器件商提供的動態(tài)鏈接庫導(dǎo)出函數(shù),在MATLAB平臺下實現(xiàn)對一般硬件的訪問,并具體介紹了該方法在氣壓高度計原型系統(tǒng)設(shè)計中的應(yīng)用。該方法簡化了MATLAB與硬件的數(shù)據(jù)交互,對于原型系統(tǒng)設(shè)計和算法的驗證提供了一種有效的手段。
關(guān)鍵詞:MATLAB;動態(tài)鏈接庫;硬件訪問;數(shù)據(jù)采集

    MATLAB是美國MathWorks公司開發(fā)的高性能的科學(xué)與工程計算軟件,憑借其強大的科學(xué)計算和繪圖功能、大量穩(wěn)定可靠的算法庫和簡潔高效的編程語言,被科技工作者們廣泛應(yīng)用于自動控制、數(shù)學(xué)運算、信號分析、圖像處理等各行各業(yè)。盡管MATLAB本身是一個完整的、自成體系的編程和數(shù)據(jù)處理環(huán)境,但由于語言的特性使其訪問硬件的能力相對較差,這在一定程度上限制了它的使用。對于那些涉及復(fù)雜算法同時又需要對硬件資源進行訪問的系統(tǒng),一般的做法是在一個通用的編程平臺(如Visual C++、Visual Basic、Delphi等)上實現(xiàn)對硬件資源的訪問,而后調(diào)用MATLAB算法對數(shù)據(jù)進行處理。這種方法優(yōu)點是通用性好,程序運行效率高,適用大多數(shù)場合,但對開發(fā)人員編程能力有較高要求,開發(fā)周期較長。在一些需要快速的驗證模型和算法的場合,為充分發(fā)揮MATLAB強大的數(shù)值計算能力,以MATLAB作為主開發(fā)平臺來得更為合適。隨著模塊化的設(shè)計思想在越來越多的產(chǎn)品中得到體現(xiàn),器件生產(chǎn)廠商們一般都會提供該產(chǎn)品的二次開發(fā)函數(shù)庫,方便了開發(fā)者們對硬件操作的同時,也使得MATLAB通過外部程序接口實現(xiàn)對硬件的訪問成為可能。
    文中具體論述一種基于動態(tài)鏈接庫調(diào)用實現(xiàn)MATLAB訪問一般硬件的方法,并將該方法用于對高精度氣壓傳感器MS5803的數(shù)據(jù)采集,實現(xiàn)了MATLAB與硬件的無縫結(jié)合,極大的方便了數(shù)據(jù)的后續(xù)處理。

1 動態(tài)鏈接庫
   
在具體闡述MATLAB環(huán)境下調(diào)用動態(tài)鏈接庫函數(shù)訪問外部硬件之前,有必要對動態(tài)鏈接庫做簡要介紹。動態(tài)鏈接庫英文為Dynamic Linka ble Library,縮寫DLL,最初是為了解決代碼共享的問題而提出的.通俗的理解可以把DLL看成一種倉庫,它提供一些可以直接拿來使用的變量、函數(shù)或類。動態(tài)鏈接庫可以使用不同編程語言來編寫,只要符合標(biāo)準(zhǔn)即可。為了加深對動態(tài)鏈接庫函數(shù)調(diào)用的理解,下面以C/C++語言為例簡要介紹動態(tài)鏈接庫的編寫步驟。首先介紹兩組關(guān)鍵字:
    1)_declspec(dllimport)
    這組關(guān)鍵字表示從DLL中導(dǎo)入函數(shù)或者數(shù)據(jù),一般用在DLL對應(yīng)的頭文件中。
    2)_declspec(dllexport)
    這組關(guān)鍵字表示從DLL中導(dǎo)出函數(shù)或者數(shù)據(jù),一般用在DLL對應(yīng)的工程文件中。
    編寫動態(tài)鏈接庫函數(shù)的方法與編寫一般函數(shù)的方法基本相同,只不過要對庫中的可導(dǎo)出函數(shù)進行必要的申明。下面以VC環(huán)境下一個最簡單的DLL工程dll_test進行說明,工程包含dll_test.h和dll_test.cpp兩個文件。
   
    編譯上述dll_test工程即可得到動態(tài)鏈接庫dll_test.dll(在Debug或Release目錄下),此動態(tài)鏈接庫實現(xiàn)了add和sub函數(shù)的功能。在解決一些實際問題過程中,有時會遇到只有DLL而沒有與之相對應(yīng)的頭文件的情況,而MATLAB在調(diào)用DLL文件中的函數(shù)之前,必須具備頭文件中的函數(shù)聲明才行,這樣根據(jù)上述DLL的編寫規(guī)范可以很容易的編寫出與所調(diào)用的DLL相對應(yīng)的頭文件。

2 MATLAB調(diào)用C/C++動態(tài)鏈接庫
   
從Matlab6.5(R13)起,Matlab提供了對動態(tài)連接庫DLL文件的接口。利用這個接口,可以在Matlab中調(diào)用動態(tài)連接庫導(dǎo)出的函數(shù)。MAT LAB加載和使用動態(tài)鏈接庫函數(shù)僅通過7~8個函數(shù)就可以實現(xiàn),只要掌握這些函數(shù)的使用方法,就掌握了加載和應(yīng)用動態(tài)鏈接的基本方法,從而可以在MATLAB平臺下輕松實現(xiàn)對硬件的訪問。
    利用MATLAB共享庫接口實現(xiàn)對外部DLL庫的調(diào)用主要有以下幾個步驟。
    1)加栽動態(tài)鏈接庫文件
在使用動態(tài)鏈接庫之前,必須將所需的動態(tài)鏈接庫加載到MATLAB工作空間中,之后MATLAB才能調(diào)用動態(tài)庫中的函數(shù)。函數(shù)lodalibrary用于加載動態(tài)鏈接庫,其使用語法如下:
    loadlibrary(‘shdib’,‘hfile’)
    loadlibrary函數(shù)有兩個輸入?yún)?shù),參數(shù)shrlib表示庫文件的名稱,參數(shù)hfile為對應(yīng)庫的C語言頭文件,C語言的頭文件用于向MATLAB提供基本的函數(shù)說明。下面以一示例說明loadlibrary的用法,在命令提示窗口中輸入如下命令:
    >>loadlibrary(‘dll_test’,‘dll_test.h’)        (1)
    通過以上命令即將dll_test.dll加載到MATLAB工作空間中。
    2)瀏覽動態(tài)庫中的函數(shù)
    成功加載動態(tài)鏈接庫后便可調(diào)用庫中提供的函數(shù)。與函數(shù)使用類似,在調(diào)用函數(shù)之前首先要明確函數(shù)各輸入輸出參數(shù)的含義及數(shù)據(jù)類型。一般情況下動態(tài)庫編寫者會提供相應(yīng)函數(shù)的幫助文檔,以便用戶理解函數(shù)的含義并對其進行調(diào)用。動態(tài)鏈接庫大多使用C或者C++語言編寫,然而標(biāo)準(zhǔn)的C或C++數(shù)據(jù)類型與MATLAB所使用的數(shù)據(jù)類型不盡相同,因此調(diào)用函數(shù)前首先要弄清被調(diào)用函數(shù)參數(shù)對應(yīng)于MATLAB環(huán)境下的數(shù)據(jù)類型。使用函數(shù)libfunctions可在MATLAB環(huán)境下查看動態(tài)庫中函數(shù)的聲明,并將原C函數(shù)中參數(shù)類型以對應(yīng)MATLAB參數(shù)類型顯示,之后便能正確的按照MATLAB語法規(guī)則進行調(diào)用。libfunctions用法如下:
    libfunctions(‘libname’,‘-full’)
    參數(shù)libname為已加載到MATLAB工作空間的動態(tài)庫文件名,-full為可選參數(shù)用于輸出函數(shù)的詳細說明。
    >>libfunctions(‘dll_test’,‘-full’)              (2)
    輸入語句(2)后命令行中會顯示所有dll_test庫中的函數(shù),如下:
    Functions in library dll_test:
    int32 add(int32,int32)
    int32 sub(int32,int32)
    3)調(diào)用動態(tài)庫中的導(dǎo)出函數(shù)
    明確了動態(tài)庫中函數(shù)的參數(shù)類型后,便可利用MATLAB提供的calllib接口函數(shù)對庫中函數(shù)進行調(diào)用。calllib函數(shù)使用方法如下:
    [x1,…,xN]=calllib(‘libname’,‘funcname’,arg1,…,argN)
    參數(shù)libname表示被調(diào)用函數(shù)所在的庫文件名,funcname為被調(diào)用的函數(shù)名稱,arg1,…,argN為函數(shù)funename的輸入?yún)?shù),x1,…,xN為函數(shù)funcname的返回值。以下為dll_test.dll中add函數(shù)的調(diào)用示例:
    >>calllib(‘dll_test’,‘add’,1,2)
    ans=
       3
    4)卸載動態(tài)鏈接庫
    當(dāng)不再需要對動態(tài)庫中的函數(shù)進行訪問后,應(yīng)及時將動態(tài)庫從MATLAB工作空間中卸載。與加載動態(tài)庫類似MATLAB也提供對應(yīng)的卸載動態(tài)庫的命令unloadlibrary,例如:
    >>unloadlibrary(‘dll_test’)
    通過以上4步便可實現(xiàn)在MATLAB環(huán)境下對動態(tài)鏈接庫導(dǎo)出函數(shù)的調(diào)用。在實際應(yīng)用中通過調(diào)用硬件商提供的動態(tài)鏈接庫或者將其提供的API函數(shù)編譯為動態(tài)鏈接庫,便可實現(xiàn)在MATLAB平臺下實現(xiàn)對硬件資源的訪問。

3 用MATLAB實現(xiàn)傳感器的數(shù)據(jù)采集
   
MS5803是瑞士Intersema公司生產(chǎn)的一款集成有壓阻式壓力傳感器和ADC接口的SMD混合集成電路,具有體積小(6.2x6.4 mm)、穩(wěn)定性好、低功耗(1μA)、高分辨率、高精度等特點,其內(nèi)置的24位A/D轉(zhuǎn)換器可實現(xiàn)對壓力和溫度的采樣,通過標(biāo)準(zhǔn)I2C和SPI接口與外部設(shè)備通信。本設(shè)計以MATLAB為軟件開發(fā)平臺,MS5803為目標(biāo)器件,通過DLL調(diào)用方式實現(xiàn)對傳感器的數(shù)據(jù)采集,并對氣壓高度算法進行快速測試與驗證。氣壓高度計的原型系統(tǒng)結(jié)構(gòu)框圖如圖1所示。


    圖1中GY7502為USB轉(zhuǎn)SPI適配器,一端與筆記本相連,另一端與MS5803連接,MS5803選擇工作在SPI接口模式。該原型系統(tǒng)通過一個簡單的接口適配器便建立了PC與傳感器的連接,之后即可按照一定的通信規(guī)則進行編程完成對MS5803數(shù)據(jù)采集,輕松的實現(xiàn)了數(shù)據(jù)由目標(biāo)器件到上位機的傳輸,后續(xù)借助于PC強大的運算功能快速的對算法和模型進行測試。
    下面以MATLAB環(huán)境下實現(xiàn)對MS5803數(shù)據(jù)的采集為例,具體介紹前述關(guān)于擴展MATLAB硬件訪問能力的方法。
    GY7502型USB-SPI適配器以動態(tài)鏈接庫的方式提供了開發(fā)所需的接口函數(shù)并提供了各功能函數(shù)的頭文件定義,開發(fā)者只需要熟悉各個接口函數(shù)的定義及其功能便能方便的實現(xiàn)對SPI接口器件的操作,而無需關(guān)注底層硬件的具體實現(xiàn)。以下為本設(shè)計中使用到了庫函數(shù)聲明。

    pGY7502_CONFIG_INFO和pGY7502_DATA_INFO為GY7502.h定義的兩種結(jié)構(gòu)體數(shù)據(jù)類型分別用于配置GY7502適配器工作模式和作為接收或發(fā)送數(shù)據(jù)的緩存。
    MS5803在出產(chǎn)的時候生產(chǎn)廠商已經(jīng)對其進行了初始標(biāo)定,并將標(biāo)定系數(shù)C1~C6固化在內(nèi)部的128位PROM中,傳感器采樣轉(zhuǎn)換輸出的原始數(shù)據(jù)D1和D2需要經(jīng)過系數(shù)C1~C6按照MS5803數(shù)據(jù)手冊提供的模型進行修正,才能計算出真實意義上的壓力值和溫度值。為此傳感器每次上電后系統(tǒng)需要先讀取出系數(shù)C1~C6,之后才能進行壓力和溫度的采樣,基本工作流程如圖2所示。


    下面給出在MATLAB環(huán)境下通過調(diào)用動態(tài)鏈接庫的方法實現(xiàn)傳感器數(shù)據(jù)采集的關(guān)鍵程序段。

   
    完成數(shù)據(jù)采集之后,便可進行壓力與高度換算。由于數(shù)據(jù)直接引入到MATLAB工作環(huán)境,借助于MATLAB強大的數(shù)值計算功能,極大地方便了后續(xù)算法及模型的測試工作,同時也降低了開發(fā)者的工作強度。

4 結(jié)論
    MATLAB強大的數(shù)值計算能力深受廣大科技工作者的喜愛,但其對硬件的支持能力相對較弱。文中通過調(diào)用動態(tài)鏈接庫的方法,增強了MAT LAB對硬件的訪問能力,使得開發(fā)者可以在MATLAB環(huán)境下直接對硬件進行操作,極大地方便了系統(tǒng)算法和模型的測試。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉