当前位置:首页 > 测试测量 > 测试测量
[导读]摘要:MATLAB是一款高性能的科学与工程计算软件,具有强大的数值计算和分析能力,但其对硬件的访问能力较弱。在MATLAB环境中实现对硬件资源的直接访问可以极大的方便对数据的处理及算法的验证,基于这种目的提出一种

摘要:MATLAB是一款高性能的科学与工程计算软件,具有强大的数值计算和分析能力,但其对硬件的访问能力较弱。在MATLAB环境中实现对硬件资源的直接访问可以极大的方便对数据的处理及算法的验证,基于这种目的提出一种扩展MATLAB访问硬件的方法,通过MATLAB外部函数接口调用第三方器件商提供的动态链接库导出函数,在MATLAB平台下实现对一般硬件的访问,并具体介绍了该方法在气压高度计原型系统设计中的应用。该方法简化了MATLAB与硬件的数据交互,对于原型系统设计和算法的验证提供了一种有效的手段。
关键词:MATLAB;动态链接库;硬件访问;数据采集

    MATLAB是美国MathWorks公司开发的高性能的科学与工程计算软件,凭借其强大的科学计算和绘图功能、大量稳定可靠的算法库和简洁高效的编程语言,被科技工作者们广泛应用于自动控制、数学运算、信号分析、图像处理等各行各业。尽管MATLAB本身是一个完整的、自成体系的编程和数据处理环境,但由于语言的特性使其访问硬件的能力相对较差,这在一定程度上限制了它的使用。对于那些涉及复杂算法同时又需要对硬件资源进行访问的系统,一般的做法是在一个通用的编程平台(如Visual C++、Visual Basic、Delphi等)上实现对硬件资源的访问,而后调用MATLAB算法对数据进行处理。这种方法优点是通用性好,程序运行效率高,适用大多数场合,但对开发人员编程能力有较高要求,开发周期较长。在一些需要快速的验证模型和算法的场合,为充分发挥MATLAB强大的数值计算能力,以MATLAB作为主开发平台来得更为合适。随着模块化的设计思想在越来越多的产品中得到体现,器件生产厂商们一般都会提供该产品的二次开发函数库,方便了开发者们对硬件操作的同时,也使得MATLAB通过外部程序接口实现对硬件的访问成为可能。
    文中具体论述一种基于动态链接库调用实现MATLAB访问一般硬件的方法,并将该方法用于对高精度气压传感器MS5803的数据采集,实现了MATLAB与硬件的无缝结合,极大的方便了数据的后续处理。

1 动态链接库
   
在具体阐述MATLAB环境下调用动态链接库函数访问外部硬件之前,有必要对动态链接库做简要介绍。动态链接库英文为Dynamic Linka ble Library,缩写DLL,最初是为了解决代码共享的问题而提出的.通俗的理解可以把DLL看成一种仓库,它提供一些可以直接拿来使用的变量、函数或类。动态链接库可以使用不同编程语言来编写,只要符合标准即可。为了加深对动态链接库函数调用的理解,下面以C/C++语言为例简要介绍动态链接库的编写步骤。首先介绍两组关键字:
    1)_declspec(dllimport)
    这组关键字表示从DLL中导入函数或者数据,一般用在DLL对应的头文件中。
    2)_declspec(dllexport)
    这组关键字表示从DLL中导出函数或者数据,一般用在DLL对应的工程文件中。
    编写动态链接库函数的方法与编写一般函数的方法基本相同,只不过要对库中的可导出函数进行必要的申明。下面以VC环境下一个最简单的DLL工程dll_test进行说明,工程包含dll_test.h和dll_test.cpp两个文件。
   
    编译上述dll_test工程即可得到动态链接库dll_test.dll(在Debug或Release目录下),此动态链接库实现了add和sub函数的功能。在解决一些实际问题过程中,有时会遇到只有DLL而没有与之相对应的头文件的情况,而MATLAB在调用DLL文件中的函数之前,必须具备头文件中的函数声明才行,这样根据上述DLL的编写规范可以很容易的编写出与所调用的DLL相对应的头文件。

2 MATLAB调用C/C++动态链接库
   
从Matlab6.5(R13)起,Matlab提供了对动态连接库DLL文件的接口。利用这个接口,可以在Matlab中调用动态连接库导出的函数。MAT LAB加载和使用动态链接库函数仅通过7~8个函数就可以实现,只要掌握这些函数的使用方法,就掌握了加载和应用动态链接的基本方法,从而可以在MATLAB平台下轻松实现对硬件的访问。
    利用MATLAB共享库接口实现对外部DLL库的调用主要有以下几个步骤。
    1)加栽动态链接库文件
在使用动态链接库之前,必须将所需的动态链接库加载到MATLAB工作空间中,之后MATLAB才能调用动态库中的函数。函数lodalibrary用于加载动态链接库,其使用语法如下:
    loadlibrary(‘shdib’,‘hfile’)
    loadlibrary函数有两个输入参数,参数shrlib表示库文件的名称,参数hfile为对应库的C语言头文件,C语言的头文件用于向MATLAB提供基本的函数说明。下面以一示例说明loadlibrary的用法,在命令提示窗口中输入如下命令:
    >>loadlibrary(‘dll_test’,‘dll_test.h’)        (1)
    通过以上命令即将dll_test.dll加载到MATLAB工作空间中。
    2)浏览动态库中的函数
    成功加载动态链接库后便可调用库中提供的函数。与函数使用类似,在调用函数之前首先要明确函数各输入输出参数的含义及数据类型。一般情况下动态库编写者会提供相应函数的帮助文档,以便用户理解函数的含义并对其进行调用。动态链接库大多使用C或者C++语言编写,然而标准的C或C++数据类型与MATLAB所使用的数据类型不尽相同,因此调用函数前首先要弄清被调用函数参数对应于MATLAB环境下的数据类型。使用函数libfunctions可在MATLAB环境下查看动态库中函数的声明,并将原C函数中参数类型以对应MATLAB参数类型显示,之后便能正确的按照MATLAB语法规则进行调用。libfunctions用法如下:
    libfunctions(‘libname’,‘-full’)
    参数libname为已加载到MATLAB工作空间的动态库文件名,-full为可选参数用于输出函数的详细说明。
    >>libfunctions(‘dll_test’,‘-full’)              (2)
    输入语句(2)后命令行中会显示所有dll_test库中的函数,如下:
    Functions in library dll_test:
    int32 add(int32,int32)
    int32 sub(int32,int32)
    3)调用动态库中的导出函数
    明确了动态库中函数的参数类型后,便可利用MATLAB提供的calllib接口函数对库中函数进行调用。calllib函数使用方法如下:
    [x1,…,xN]=calllib(‘libname’,‘funcname’,arg1,…,argN)
    参数libname表示被调用函数所在的库文件名,funcname为被调用的函数名称,arg1,…,argN为函数funename的输入参数,x1,…,xN为函数funcname的返回值。以下为dll_test.dll中add函数的调用示例:
    >>calllib(‘dll_test’,‘add’,1,2)
    ans=
       3
    4)卸载动态链接库
    当不再需要对动态库中的函数进行访问后,应及时将动态库从MATLAB工作空间中卸载。与加载动态库类似MATLAB也提供对应的卸载动态库的命令unloadlibrary,例如:
    >>unloadlibrary(‘dll_test’)
    通过以上4步便可实现在MATLAB环境下对动态链接库导出函数的调用。在实际应用中通过调用硬件商提供的动态链接库或者将其提供的API函数编译为动态链接库,便可实现在MATLAB平台下实现对硬件资源的访问。

3 用MATLAB实现传感器的数据采集
   
MS5803是瑞士Intersema公司生产的一款集成有压阻式压力传感器和ADC接口的SMD混合集成电路,具有体积小(6.2x6.4 mm)、稳定性好、低功耗(1μA)、高分辨率、高精度等特点,其内置的24位A/D转换器可实现对压力和温度的采样,通过标准I2C和SPI接口与外部设备通信。本设计以MATLAB为软件开发平台,MS5803为目标器件,通过DLL调用方式实现对传感器的数据采集,并对气压高度算法进行快速测试与验证。气压高度计的原型系统结构框图如图1所示。


    图1中GY7502为USB转SPI适配器,一端与笔记本相连,另一端与MS5803连接,MS5803选择工作在SPI接口模式。该原型系统通过一个简单的接口适配器便建立了PC与传感器的连接,之后即可按照一定的通信规则进行编程完成对MS5803数据采集,轻松的实现了数据由目标器件到上位机的传输,后续借助于PC强大的运算功能快速的对算法和模型进行测试。
    下面以MATLAB环境下实现对MS5803数据的采集为例,具体介绍前述关于扩展MATLAB硬件访问能力的方法。
    GY7502型USB-SPI适配器以动态链接库的方式提供了开发所需的接口函数并提供了各功能函数的头文件定义,开发者只需要熟悉各个接口函数的定义及其功能便能方便的实现对SPI接口器件的操作,而无需关注底层硬件的具体实现。以下为本设计中使用到了库函数声明。

    pGY7502_CONFIG_INFO和pGY7502_DATA_INFO为GY7502.h定义的两种结构体数据类型分别用于配置GY7502适配器工作模式和作为接收或发送数据的缓存。
    MS5803在出产的时候生产厂商已经对其进行了初始标定,并将标定系数C1~C6固化在内部的128位PROM中,传感器采样转换输出的原始数据D1和D2需要经过系数C1~C6按照MS5803数据手册提供的模型进行修正,才能计算出真实意义上的压力值和温度值。为此传感器每次上电后系统需要先读取出系数C1~C6,之后才能进行压力和温度的采样,基本工作流程如图2所示。


    下面给出在MATLAB环境下通过调用动态链接库的方法实现传感器数据采集的关键程序段。

   
    完成数据采集之后,便可进行压力与高度换算。由于数据直接引入到MATLAB工作环境,借助于MATLAB强大的数值计算功能,极大地方便了后续算法及模型的测试工作,同时也降低了开发者的工作强度。

4 结论
    MATLAB强大的数值计算能力深受广大科技工作者的喜爱,但其对硬件的支持能力相对较弱。文中通过调用动态链接库的方法,增强了MAT LAB对硬件的访问能力,使得开发者可以在MATLAB环境下直接对硬件进行操作,极大地方便了系统算法和模型的测试。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

为增进大家对电脑硬件的认识,本文将介绍如何维护电脑硬件。

关键字: 硬件 指数 电脑硬件

为增进大家对电脑硬件的认识,本文将对电脑硬件故障的检修方法以及排除步骤予以介绍。

关键字: 硬件 指数 电脑硬件

为增进大家对电脑硬件的认识,本文将对电脑硬件予以介绍。

关键字: 硬件 指数 电脑硬件

近日,国内高端存储品牌——佰维存储正式官宣与TES英雄联盟战队达成深度合作,成为TES官方唯一指定存储品牌。佰维存储与TES战队将携手共同助力中国电竞产业蓬勃发展,为电竞行业注入更多硬核科技元素,让更多的玩家感受专业电竞...

关键字: 硬件 存储

全新的卡片式设计:整个控制中心以卡片形式展现第三方连接状态,对应设备的相关功能以及其它硬件的终端设置,可在控制中心中进行统一管理。

关键字: 硬件 设备 终端

华为开发者大会是华为公司举办的年度盛会,旨在汇聚全球的开发者、合作伙伴和业界专家,共同探讨和分享最新的技术趋势、开发工具和实践经验。华为开发者大会不仅是华为对外展示技术实力和创新成果的重要平台,也是推动全球开发者生态发展...

关键字: 开发工具 华为 硬件

鸿蒙系统开发者需要学习哪些编程语言以及有哪些推荐,是一个复杂而多元的问题。鸿蒙系统,作为华为推出的面向物联网时代的操作系统,其开发者需要具备跨平台的开发能力、对硬件和软件的深入理解以及创新思维。

关键字: 鸿蒙系统 华为 硬件

一直以来,EDA都是大家的关注焦点之一。因此针对大家的兴趣点所在,小编将为大家带来EDA软件的相关介绍,详细内容请看下文。

关键字: EDA SPICE MATLAB

嵌入式软件测试是针对嵌入式系统中的软件进行验证和验证的过程。嵌入式系统是集成在其他设备或系统中的计算机系统,例如汽车、医疗设备、家电等。为确保嵌入式软件的质量和可靠性,进行适当的测试是至关重要的。嵌入式软件测试是确保嵌入...

关键字: 嵌入式软件 计算机 硬件

嵌入式编程和PC编程是两种不同的编程领域,它们在硬件和软件层面上有着显著的区别。本文将对嵌入式编程和PC编程的不同之处进行详细的分析,并结合实际案例进行说明。

关键字: 嵌入式编程 PC编程 硬件
关闭
关闭