0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何從嵌入式系統(tǒng)收集數(shù)據(jù)以用于MATLAB

星星科技指導(dǎo)員 ? 來(lái)源:ADI ? 作者:ADI ? 2023-02-21 12:07 ? 次閱讀

本應(yīng)用筆記和支持源代碼提供了一個(gè)簡(jiǎn)單的便攜式框架,用于使用串行傳輸(如RS-232)在嵌入式系統(tǒng)和運(yùn)行MATLAB的PC之間實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)傳輸。

介紹

嵌入式控制和測(cè)量系統(tǒng)通??梢詮氖褂弥T如此類(lèi)工具的高級(jí)算法開(kāi)發(fā)中受益 作為 MATLAB。為此,有必要將數(shù)據(jù)從嵌入式系統(tǒng)導(dǎo)出到PC。雖然數(shù)學(xué)作品 提供便于嵌入式算法開(kāi)發(fā)的附加包,這些包可能很昂貴。 通常,只需要一種從嵌入式系統(tǒng)收集數(shù)據(jù)以進(jìn)行基本分析的簡(jiǎn)單方法。?

本應(yīng)用筆記和支持源代碼為完成 使用串行傳輸在嵌入式系統(tǒng)和運(yùn)行 MATLAB 的 PC 之間實(shí)時(shí)傳輸數(shù)據(jù),例如 RS-232.

要求

本應(yīng)用筆記所述架構(gòu)的實(shí)現(xiàn)已在MAX35103EVKIT2#PCB上進(jìn)行了測(cè)試,該P(yáng)CB是MAX35103EVKIT2評(píng)估板軟件的一部分。 但它可以很容易地移植到其他平臺(tái)。建議使用MAX35103EVKIT2進(jìn)行初始評(píng)估和 參考。

本應(yīng)用筆記假設(shè)用戶(hù)對(duì) MATLAB、MATLAB MEX、C 語(yǔ)言和 Win32 API。在基于 IAR 系統(tǒng)的技術(shù)、基于 ARM 的系統(tǒng)和視覺(jué)C++方面的經(jīng)驗(yàn)也是 有益的。????

全面評(píng)估需要以下工具:

Maxim MAX35103EVKIT2評(píng)估板

微軟視覺(jué)C++

MATLAB(無(wú)需額外的軟件包)

適用于 ARM 的 IAR 嵌入式工作臺(tái)

Microsoft Visual C++ Community Edition 可從 Microsoft 網(wǎng)站免費(fèi)下載。IAR ARM 是 可從IAR系統(tǒng)進(jìn)行評(píng)估。提供MAX35103EVKIT2評(píng)估板軟件 來(lái)自Maxim以及Digi-Key貿(mào)澤電子等許多電子分銷(xiāo)商。MATLAB 可從 The Mathworks, Inc. 獲得。

MAX35103EVKIT2實(shí)現(xiàn)示例

MAX35103EVKIT2評(píng)估板軟件 被選中用于本應(yīng)用筆記中描述的框架的初始實(shí)現(xiàn)。 MAX35103EVKIT2板由MAX32620(ARM Cortex M4)和MAX35103(超聲波時(shí)間數(shù)字轉(zhuǎn)換器)組成。 這些組件共同支持通過(guò)超聲波流體收集液體流量測(cè)量值。 這些測(cè)量結(jié)果被格式化并傳輸?shù)竭\(yùn)行 MATLAB 的主機(jī) PC。?

基本了解MAX35103EVKIT2評(píng)估板軟件 MAX35103有助于理解框架傳輸?shù)臄?shù)據(jù)和主機(jī)/目標(biāo)的格式 協(xié)議數(shù)據(jù)包。請(qǐng)參考MAX35103EVKIT2文檔,了解嵌入式平臺(tái)的詳細(xì)信息。

MAX35103EVKIT2嵌入式目標(biāo)向運(yùn)行MATLAB的主機(jī)PC傳輸?shù)臄?shù)據(jù)是 MAX35103時(shí)間數(shù)字轉(zhuǎn)換器該數(shù)據(jù)流是超聲波脈沖發(fā)射和接收之間的時(shí)間測(cè)量數(shù)組。test.m MATLAB腳本(詳見(jiàn)本文檔后面)為從MAX35103EVKIT2板收集數(shù)據(jù)提供了快速起點(diǎn)。圖1所示如何從MAX35103EVKIT2板檢索和訪問(wèn)前<>個(gè)上游時(shí)間測(cè)量值。

pYYBAGP0Q52Abw4NAAA8IArQyyI979.png?imgver=1

圖1.使用 test.m 的 MATLAB 數(shù)據(jù)收集示例

系統(tǒng)架構(gòu)

使用此框架進(jìn)行數(shù)據(jù)收集需要能夠運(yùn)行 MATLAB 的主機(jī) PC 和具有 串行接口。此處提供的框架專(zhuān)門(mén)支持 RS-232,但可以輕松移植以支持其他接口(參見(jiàn)圖 2)。

pYYBAGP0Q52Abw4NAAA8IArQyyI979.png?imgver=1

圖2.主機(jī)/目標(biāo)體系結(jié)構(gòu)。

該框架跨越電腦主機(jī)和嵌入式目標(biāo)。C 代碼針對(duì)目標(biāo)嵌入式系統(tǒng)編譯為 以及主機(jī)系統(tǒng)。當(dāng)前的主機(jī)實(shí)現(xiàn)需要 Win32 平臺(tái),但可以將其移植到 另一個(gè)操作系統(tǒng),如Linux。?

嵌入式目標(biāo)硬件必須提供某種串行接口。當(dāng)前框架實(shí)現(xiàn) 支持 UART,但設(shè)計(jì)為可移植到其他傳輸。目標(biāo)微控制器必須有足夠的 支持框架數(shù)據(jù)和代碼要求的資源,但也有足夠的吞吐量來(lái)移動(dòng)數(shù)據(jù),而無(wú)需 過(guò)度影響嵌入式系統(tǒng)的性能??蚣懿恍枰?a href="http://ttokpm.com/tags/RTOS/" target="_blank">RTOS,但它確實(shí)需要 不排除使用一個(gè)。

當(dāng)前的框架實(shí)現(xiàn)是使用96MHz Cortex-M4處理器開(kāi)發(fā)的,可以在 UART 接近最大吞吐量,處理器開(kāi)銷(xiāo)很小。較小的系統(tǒng)可能需要調(diào)整 框架可以接受地工作。

圖 3 描述了主機(jī)和目標(biāo)上的軟件組件。藍(lán)色組件是 C 語(yǔ)言模塊 在主機(jī)上運(yùn)行。紅色組件是在目標(biāo)上運(yùn)行的 C 語(yǔ)言模塊。綠色組件是 兩個(gè)域通用。紫色的 MATLAB 腳本是標(biāo)準(zhǔn)的 m 腳本,可與 特定于應(yīng)用程序的接口。此處描述的嵌入式框架實(shí)現(xiàn)是為在 MAX35103EVKIT2評(píng)估板軟件,超聲波水流量測(cè)量平臺(tái)

灰色組件是特定于外部平臺(tái)的組件。

pYYBAGP0XIKAL4NfAABgHpBEYeQ888.png

圖3.系統(tǒng)架構(gòu)。

可以使用 C/C++ 和 4GL 語(yǔ)言與 Win32 DLL(如 C#Python)交互,使用 “Win32 DLL I/F”模塊。這允許輕松支持可能不需要 MATLAB 的自定義主機(jī)應(yīng)用程序。

“COM”模塊實(shí)現(xiàn)基本主機(jī)/目標(biāo)協(xié)議。這是數(shù)據(jù)包定義特定于 找到嵌入式應(yīng)用程序?!靶蛄谢蹦K實(shí)現(xiàn)了二進(jìn)制數(shù)據(jù)的基于轉(zhuǎn)義的分組。 這兩個(gè)模塊都可以使用與通信API(主機(jī))或嵌入式接口的回調(diào)輕松移植 外圍設(shè)備(嵌入式目標(biāo))。

“COM”模塊中的定義驅(qū)動(dòng)“主機(jī)端協(xié)議”和“設(shè)備端”中的實(shí)現(xiàn) 協(xié)議“組件。這些實(shí)現(xiàn)是特定于主機(jī)和目標(biāo)的命令/響應(yīng)所在的位置 實(shí)現(xiàn)并且通常具有很多共性。

以下各節(jié)從上到下詳細(xì)介紹了從主機(jī)開(kāi)始的每個(gè)主要體系結(jié)構(gòu)模塊。

電腦主機(jī)架構(gòu)

圖 2 中描述的架構(gòu)的主機(jī)端主要由 MATLAB 和特定于操作系統(tǒng)的接口組成, 并在以下各節(jié)中詳細(xì)介紹。

MATLAB 腳本

主機(jī)堆棧的頂部是執(zhí)行特定于應(yīng)用程序的數(shù)據(jù)收集和控制的 MATLAB 腳本。 代碼清單 1 中顯示的腳本 test.m 是如何使用 MATLAB MEX 接口打開(kāi)、設(shè)置 參數(shù),并從MAX35103EVKIT2評(píng)估板軟件收集數(shù)據(jù)。

h_flow = svflow('open',6);
if( h_flow )
svflow('start',h_flow,100);
samples = flow('get_samples',h_flow,1000);
svflow('stop',h_flow);
svflow('close',h_flow);
clear h_flow;
plot(samples.timestamp,samples.toff_diff)
hold on
transit = (samples.up.average + samples.down.average) ./ 2
yyaxis right
plot(samples.timestamp,transit)
hold off
else
error('failed to open com port');
end

代碼清單 1.測(cè)試.m.

MEX 接口模塊中只能存在一個(gè)公共函數(shù)。在本例中,它是 svflow()。這個(gè)函數(shù)是怎么 MATLAB 腳本調(diào)用 MEX 模塊。函數(shù)的名稱(chēng)是任意的,但選擇“svflow”作為 MAX35103EVKIT2評(píng)估軟件上實(shí)現(xiàn)的整體主機(jī)/目標(biāo)協(xié)議的名稱(chēng)值 (水流量測(cè)量平臺(tái))。

svflow() 的第一個(gè)參數(shù)是一個(gè)文本字符串,指示要調(diào)用的子函數(shù)。第二個(gè)參數(shù)是 引用特定流對(duì)象的處理對(duì)象。此對(duì)象由 svflow('open',...) 返回。這是基本的 框架用于適應(yīng) MEX 同時(shí)支持面向?qū)ο蟮捏w系結(jié)構(gòu)的方法。

代碼清單 1 中的 test.m 腳本調(diào)用子函數(shù) 'open' 來(lái)打開(kāi) Windows 主機(jī)上的 COM6。下一個(gè) 調(diào)用“start”以指定 100Hz 的采樣率并開(kāi)始樣本收集。然后調(diào)用“get_samples” 以定義的采樣率收集 1000 個(gè)樣本。此同步集合完成后,流對(duì)象 已停止并關(guān)閉。MATLAB plot() 函數(shù)用于顯示數(shù)據(jù)集和派生數(shù)據(jù)。

MATLAB MEX 接口

用于MAX35103EVKIT2評(píng)估板軟件的MATLAB MEX接口元件 在一組 C 語(yǔ)言文件中實(shí)現(xiàn)。它可以訪問(wèn)內(nèi)部 MATLAB 函數(shù)并公開(kāi)一個(gè)標(biāo)準(zhǔn) MATLAB 腳本可以調(diào)用的接口。所有特定于 MEX 的功能都包含在 mex.c 中,它提供了 特定于 MATLAB 的核心協(xié)議功能的包裝器,用于在 flow.c 中實(shí)現(xiàn),該功能也用作 Win32 DLL 接口和 serialize.c/com.c,這是主機(jī)和嵌入式目標(biāo)通用的。

該模塊是使用 MATLAB mex() 函數(shù)創(chuàng)建的。代碼清單 2 中的 compile.m 腳本編譯 將 C 文件托管為 MATLAB 可用的表單。此命令的輸出是 MATLAB MEX 可執(zhí)行文件。馬特實(shí)驗(yàn)室 必須先前配置為使用本機(jī)工具鏈。訪問(wèn) The Mathworks 網(wǎng)站以獲取有關(guān) 如何設(shè)置用于編譯 MEX 模塊的工具鏈。

mex -g -output svflow -I'dll' -I'..' dll/mex.c dll/svflow.c ../serialize.c ../com.c

代碼清單 2.編譯.m.

MAX35103EVKIT2評(píng)估板軟件專(zhuān)用的MATLAB MEX接口在mex.c中實(shí)現(xiàn)。MATLAB 要求所有 MEX 模塊實(shí)現(xiàn)函數(shù) mexFunction() 作為唯一函數(shù) 模塊提供的功能的接口。為了給單個(gè) MEX 模塊提供一種提供多個(gè)面向?qū)ο蟪蓡T函數(shù)的方法,使用了子函數(shù)機(jī)制。在代碼清單 3 中,mexFunction() 引用函數(shù)調(diào)用表用于調(diào)度子函數(shù)。調(diào)用表本身如代碼清單 4 所示。

for (i = 0; i < ARRAY_COUNT(s_function_table); i++)
{
if (!lstrcmpA(s_function_table[i].p_name, func))
{
s_function_table[i].p_func(nlhs, p_lhs, nrhs - 1, p_rhs + 1);
return;
}
}

代碼清單 3.mexFunction() 子函數(shù)調(diào)度。

static const function_table_t s_function_table[] =
{
{ "get_samples", mex_get_samples },
{ "open", mex_open },
{ "close", mex_close },
{ "start", mex_start },
{ "stop", mex_stop }
};

代碼清單 4.子函數(shù)調(diào)用表。

調(diào)用表中引用的 mex_* 函數(shù)是 Win32 DLL 函數(shù)的精簡(jiǎn)包裝器,詳見(jiàn)下文 部分。

MATLAB MEX 接口還以與 MATLAB的雙矩陣定向性質(zhì)。MATLAB MEX 接口返回的頂級(jí)對(duì)象是 MATLAB 具有以下字段的結(jié)構(gòu):

poYBAGP0Q6qAFEsBAADuZeR36Xw310.png?imgver=1

圖4.頂級(jí) MATLAB 數(shù)據(jù)對(duì)象。

雙精度數(shù)組時(shí)間戳和toff_diff的大小是可變的。

向上和向下成員是具有以下格式的 MATLAB 結(jié)構(gòu):

pYYBAGP0Q6-AZwcBAADPxBdRwO0569.png?imgver=1

圖5.包含MAX35013時(shí)間測(cè)量值的MATLAB結(jié)構(gòu)。

同樣,每個(gè)數(shù)組的長(zhǎng)度是可變的。該數(shù)據(jù)與MAX35103EVKIT35103評(píng)估板上MAX2輸出的數(shù)據(jù)直接對(duì)應(yīng)。

在 mex.c 中,函數(shù) mex_get_samples() 使用 MATLAB mx* 格式化嵌入式目標(biāo)接收的數(shù)據(jù) 功能。

static void mex_get_samples(int nlhs, mxArray *p_lhs[], int nrhs, const mxArray *p_rhs[])
{
char * sample_fieldnames[] =
{
"timestamp",
"up",
"down",
"toff_diff"
};
svflow_sample_t sample;
void **pp = (void*)mxGetData(p_rhs[0]); uint32_t sample_count = (uint32_t)mxGetScalar(p_rhs[1]);
mxArray *p_sample_struct = mxCreateStructMatrix( 1, 1, ARRAY_COUNT(sample_fieldnames), sample_fieldnames );
mxArray *p_timestamp = mxCreateNumericMatrix( 1, sample_count, mxDOUBLE_CLASS, mxREAL );
mxSetField( p_sample_struct, 0, "timestamp", p_timestamp );
mxSetField( p_sample_struct, 0, "up", create_direction_struct( sample_count, &sample.up ) );
mxSetField( p_sample_struct, 0, "down", create_direction_struct( sample_count, &sample.down ) );
mxArray *p_toff_diff = mxCreateNumericMatrix( 1, sample_count, mxDOUBLE_CLASS, mxREAL );
mxSetField( p_sample_struct, 0, "toff_diff", p_toff_diff );
sample.p_timestamp = (double_t*)mxGetData( p_timestamp );
sample.p_tof_diff = (double_t*)mxGetData( p_toff_diff );
svflow_get_samples( *pp, &sample, sample_count );
p_lhs[0] = p_sample_struct;
}

代碼清單 5.mex_get_samples() 在墨西哥

“up”和“down”結(jié)構(gòu)成員在 mex.c 的 create_direction_struct() 函數(shù)中構(gòu)造。

Win32 DLL 接口

Win32 DLL 接口在 svflow.c 中實(shí)現(xiàn),其中還包含大部分協(xié)議和平臺(tái) 特定代碼。與此應(yīng)用筆記關(guān)聯(lián)的源代碼包包含一個(gè) Visual Studio 項(xiàng)目,該項(xiàng)目可以是 用于生成 DLL。但是,MATLAB 不需要 DLL。它只是為了幫助那些對(duì) 使用可與 DLL 交互的語(yǔ)言編寫(xiě)自定義數(shù)據(jù)分析代碼。?

下面的代碼清單6顯示了MAX35103EVKIT2評(píng)估板軟件支持的DLL接口功能。這些函數(shù)與代碼清單 1 中所示的 MATLAB 腳本中調(diào)用的子函數(shù)完全對(duì)應(yīng)。

void* svflow_open( uint32_t comport);
void svflow_close(void *pv_context);
uint32_t svflow_get_samples(void *pv_context, flow_sample_t
*p_flow_sample, uint32_t sample_count);
void svflow_start( void *pv_context, float_t sample_rate_hz );
void svflow_stop( void *pv_context );

代碼 6.- flow.h.

svflow_open () 返回與給定 Win32 COM 端口關(guān)聯(lián)的不透明流通信上下文對(duì)象或 如果發(fā)生錯(cuò)誤,則為 NULL。

svflow_close() 使用 svflow_open() 返回的上下文對(duì)象關(guān)閉通信并釋放資源。

svflow_start() 告訴嵌入的目標(biāo)開(kāi)始以指定的采樣率收集流樣本。

svflow_stop() 告訴嵌入式目標(biāo)結(jié)束數(shù)據(jù)收集。

這些功能特定于MAX35103EVKIT2評(píng)估板軟件, 它們可以很容易地被適合其他嵌入式應(yīng)用程序的功能所取代。

主機(jī)協(xié)議

主機(jī)和嵌入式目標(biāo)使用的協(xié)議基于 com.c/h 中的通用定義和函數(shù)構(gòu)建,并且 序列化.c/h.體系結(jié)構(gòu)支持的協(xié)議通常由命令/響應(yīng)和指示事件組成。 主機(jī)協(xié)議在 svflow.c 中實(shí)現(xiàn),依賴(lài)于 com.c 和 serialize.c,這對(duì)于 主機(jī)和嵌入的目標(biāo)。

主機(jī)端協(xié)議使用 com_* 函數(shù)發(fā)出命令并解碼響應(yīng)和指示。例如,在 代碼清單 6, com_tx() 用于向嵌入式目標(biāo)發(fā)送 'com_host_start_sampling_t' 命令數(shù)據(jù)包。

請(qǐng)務(wù)必注意,所有協(xié)議函數(shù)都是單線程阻塞調(diào)用。

void svflow_start( void *pv_context, float_t sample_rate_hz )
{
context_t *p_context = (context_t*)pv_context;
if( p_context )
{
com_host_start_sampling_t cmd;
cmd.sample_rate_hz = sample_rate_hz;
com_tx( &p_context->com, &cmd, COM_ID_HOST_START_SAMPLING,
sizeof( com_host_start_sampling_t ) );
}
}

代碼清單 7.flow_start() 在 flow.c.

主機(jī)協(xié)議模塊還定義了與傳輸通信的數(shù)據(jù)類(lèi)型相對(duì)應(yīng)的數(shù)據(jù)類(lèi)型 鏈接,但與它們不完全相同。這種差異允許對(duì) 此模塊和上述模塊。具體來(lái)說(shuō),它將數(shù)據(jù)包格式解耦(簡(jiǎn)潔的單精度浮點(diǎn)數(shù)) 來(lái)自用于容納 MATLAB(詳細(xì)、面向矩陣的雙精度)的數(shù)據(jù)格式。這意味著翻譯 代碼必須存在于 flow.c 中,如代碼清單 7 中的序列化回調(diào)函數(shù)所示。

static bool serialize_cb(void *pv_context, const void *pv_data, uint16_t length)
{
context t * p_context = (context_t *)pv_context;
const com_union_t *p_packet = (const com_union_t*)pv_data;
if (p_packet->hdr.id == COM_ID_DEVICE_FLOW_SAMPLE )
{
com_device_flow_sample_t *p_com_sample =
(com_device_flow_sample_t*)&p_packet->flow_sample;
if (!p_context->sample_ndx )
{
p_context->time_offset = p_com_sample->timestamp;
}
svflow_sample_t *p_flow_sample = p_context>p_flow_sample;
uint32_t ndx = p_context->sample_ndx;
direction( &p_flow_sample->up, &p_com_sample->up, ndx );
direction( &p_flow_sample->down, &p_com_sample->down, ndx );
p_flow_sample->p_timestamp[ndx] = ( (double_t)( p_com_sample->timestamp –
p_context->time_offset ) ) / 96000000.0;
p_flow_sample->p_tof_diff[ndx] = p_com_sample->tof_diff;
p_context->sample_ndx++;
if( p_context->sample_ndx >= p_context->sample_count )
return true;
}
return false;
}

代碼清單 8.flow.c 中的數(shù)據(jù)轉(zhuǎn)換

svflow.c 還包含初始化和回調(diào)函數(shù),以便在 Win32 平臺(tái)上使用 comports 所需的函數(shù),如下所示 在代碼清單 8 中。

static uint16_t uart_write(com_t *p_com, void *pv, uint16_t length)
{
DWORD written;
context_t *p_context = (context_t*)p_com;
WriteFile(p_context->hComm, pv, length, &written, NULL);
return (uint16_t)written;
}
static uint16_t uart_read(com_t *p_com, void *pv, uint16_t length)
{
DWORD read;
context_t *p_context = (context_t*)p_com;
ReadFile(p_context->hComm, pv, length, &read, NULL);
return (uint16_t)read;
}

代碼清單 9.flow.c 中的 Win32 串口回調(diào)。

COM 模塊實(shí)現(xiàn)抽象串行傳輸?shù)睦獭om_init() 初始化抽象 調(diào)用對(duì)象和 com_read() 來(lái)反序列化和調(diào)度特定的命令/響應(yīng)和指示。

嵌入式目標(biāo)架構(gòu)

嵌入式目標(biāo)體系結(jié)構(gòu)在概念上很簡(jiǎn)單,并且反映了主機(jī)端體系結(jié)構(gòu),不包括 平臺(tái)和 MATLAB 特定組件。

嵌入式應(yīng)用程序包含支持 svflow.c 中定義的主機(jī)端 svflow_* 調(diào)用的函數(shù)。這些 功能包括MAX35103EVKIT2特有的回調(diào)和配置,可在board.c中找到。

與主機(jī)端的 comport 抽象一樣,嵌入式目標(biāo)具有串行端口回調(diào),如 Code 所示 清單 9.讀回調(diào)調(diào)用芯片支持庫(kù) (CSL) 函數(shù)調(diào)用,以將長(zhǎng)度字節(jié)寫(xiě)入 UART。 返回值是實(shí)際寫(xiě)入的字節(jié)數(shù)。讀回調(diào)使用 CSL 函數(shù)調(diào)用來(lái)讀取端口上當(dāng)前可用的所有字節(jié)(最多長(zhǎng)度)。

static uint16_t uart_write(com_t * p_com, void * pv, uint16_t length)
{
return UART_Write(MXC_UART0, (uint8_t *)pv, length);
}
static uint16_t uart_read(com_t * p_com, void * pv, uint16_t length)
{
return UART_Read(MXC_UART0, (uint8_t *)pv, length, NULL);
}

代碼 10.main.c 中的串行端口回調(diào)。

嵌入式目標(biāo)使用 COM 模塊從主機(jī)調(diào)度命令。com_read() 從主節(jié)點(diǎn)調(diào)用 轉(zhuǎn)換循環(huán)和命令在代碼清單 10 中列出的 serialize_cb() 中調(diào)度。

main.c包含MAX35103EVKIT2評(píng)估軟件上用于流量測(cè)量的嵌入式應(yīng)用,使用: MAX3510x.c模塊,用于與MAX35103芯片接口。Board.c 包含特定于板的初始化和 中斷調(diào)度代碼。

雖然本示例針對(duì)MAX35103EVKIT2評(píng)估板軟件, COM 和序列化模塊不是特定于平臺(tái)的,可以輕松移植到大多數(shù)現(xiàn)代微控制器 和電路板設(shè)計(jì)。

static bool serialize_cb(void *pv_context, const void *pv_packet, uint16_t length)
{
const com_union_t *p_com = (const com_union_t*)pv_packet;
switch( p_com->hdr.id )
{
case COM_ID_HOST_START_SAMPLING:
{
if( p_com->start_sampling.sample_rate_hz > 0.0F &&
p_com->start_sampling.sample_rate_hz <= 200.0F )
{
s_sampling_underflow = 0;
s_sampling_overrun = 0;
s_sample_state = sample_state_idle;
s_send_samples = true;
SYS_SysTick_Config( (uint32_t)((float_t)SYS_SysTick_GetFreq() /
p_com>start_sampling.sample_rate_hz), 1);
}
break;
}
case COM_ID_HOST_STOP_SAMPLING:{
{
SYS_SysTick_Config( (uint32_t)((float_t)SYS_SysTick_GetFreq() / 10.0F), 1);
s_send_samples = false;
break;
}
}
return false;
}

代碼 11.Serialize_cb在主

軟件包內(nèi)容

目標(biāo)固件和Windows主機(jī)軟件可從Maxim網(wǎng)站下載。它以拉鏈形式提供 檔案。將存檔解壓縮到計(jì)算機(jī)上方便的目錄中。圖 6 顯示了 目標(biāo)固件和主機(jī)軟件實(shí)現(xiàn)。?

poYBAGP0Q7GAbxbsAAB6fbcyi58474.png?imgver=1

圖6.軟件目錄結(jié)構(gòu)。

根目錄包含 main() 以及 COM 和序列化模塊。此外,傳感器 c/h 包含 MAX35103EVKIT2評(píng)估軟件附帶的超聲傳感器參數(shù)

電路板目錄包含 MATLAB 示例固件應(yīng)用程序支持的每個(gè)開(kāi)發(fā)板的子目錄。 可以在此處添加對(duì)自定義用戶(hù)板的支持。

csl和MAX3510x目錄包含MAX35103EVKIT2評(píng)估板軟件微控制器和外設(shè)的專(zhuān)用代碼。

IAR目錄包含用于構(gòu)建和調(diào)試MAX35103EVKIT2評(píng)估板軟件固件的項(xiàng)目文件。 可以添加新的項(xiàng)目配置以支持自定義用戶(hù)板。最簡(jiǎn)單的方法是 復(fù)制配置,然后對(duì)其進(jìn)行修改以適應(yīng)新目標(biāo)。

主機(jī)dll 目錄包含生成 Win32 DLL 和 MEX 接口模塊所需的所有源代碼。 此外,還提供了用于編譯 MEX 接口模塊的 MATLAB 腳本以及 中詳述的測(cè)試腳本 代碼清單 1.

構(gòu)建目標(biāo)固件

MATLAB 示例固件可以使用 IAR ARM 構(gòu)建。IAR 項(xiàng)目文件位于 iar 目錄中。加載后 項(xiàng)目中,請(qǐng)務(wù)必檢查調(diào)試器配置是否正確(請(qǐng)參閱圖 4)。微控制器上的 MAX35103EVKIT2評(píng)估板軟件 可以使用 IAR 支持的任何 ARM JTAG 適配器使用 10 引腳 ARM 接頭 (J1) 進(jìn)行編程。

poYBAGP0Q7WALhhKAADystP_Mmk972.png?imgver=1

圖7.IAR 調(diào)試器選項(xiàng)。

Project.out 是在生成項(xiàng)目時(shí)創(chuàng)建的固件映像。

pYYBAGP0Q72ARDCoAAFq7Gmf5aU112.png?imgver=1

圖8.使用 IAR 構(gòu)建固件。

構(gòu)建主機(jī)軟件

MATLAB MEX 接口可以使用位于主機(jī)目錄中的 compile.m 腳本從 MATLAB 內(nèi)部構(gòu)建。 如圖 6 所示。構(gòu)建的輸出是 flow.mexw64。

要使用 compile.m,您必須安裝 MATLAB 支持的 C 編譯器。請(qǐng)?jiān)L問(wèn) The Mathworks 網(wǎng)站了解詳情 這可能會(huì)從一個(gè)版本的 MATLAB 更改為下一個(gè)版本。

在撰寫(xiě)本文時(shí),MATLAB 2016a 可以使用 Microsoft Visual C++ 的免費(fèi)版本來(lái)生成 MEX 文件。

poYBAGP0Q7-AMFmgAACmf0hmqRk130.png?imgver=1

圖9.構(gòu)建 MEX 接口。

主機(jī)軟件也可以?xún)?nèi)置到 DLL 模塊中,供知道如何與 DLL 通信的非 MATLAB 程序使用。用于生成 DLL 的 Microsoft Visual C++ 項(xiàng)目文件可以在 dll 目錄中找到。

硬件配置

MAX35103EVKIT2 PCB必須連接到超聲波流體,如MAX35103EVKIT2評(píng)估板數(shù)據(jù)資料中所述。圖 10 顯示了 上可用的連接 MAX35103EVKIT2電路板

電源應(yīng)連接到6-24V AC或能夠提供200mA的直流電源。

閥門(mén)可以保持未連接狀態(tài)。

PIEZO UP±應(yīng)連接到其中一個(gè)流體傳感器

PIEZO DOWN±應(yīng)與另一流動(dòng)體換能器連接。

RTD/熱敏電阻可以保持未連接狀態(tài)。

固件不使用旋轉(zhuǎn)開(kāi)關(guān)。

pYYBAGP0Q8GAYgzdAABW7LGP_7o857.png?imgver=1

圖 10.MAX35103EVKIT2 J12引腳排列

結(jié)論

MATLAB 為數(shù)據(jù)分析和算法開(kāi)發(fā)提供了一個(gè)很好的平臺(tái)。本應(yīng)用筆記介紹了一種簡(jiǎn)單、可定制的軟件架構(gòu),可用于將數(shù)據(jù)導(dǎo)入 MATLAB,而無(wú)需成本和 市售附加模塊的復(fù)雜性。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • matlab
    +關(guān)注

    關(guān)注

    181

    文章

    2960

    瀏覽量

    230029
  • 嵌入式
    +關(guān)注

    關(guān)注

    5059

    文章

    18974

    瀏覽量

    302065
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2943

    瀏覽量

    66618
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    一種嵌入式系統(tǒng)用于多媒體實(shí)時(shí)數(shù)據(jù)的網(wǎng)絡(luò)傳輸設(shè)計(jì)

    (內(nèi)存管理單元),很適合于許多低端的、沒(méi)有MMU的嵌入式處理器。本文設(shè)計(jì)了一種嵌入式系統(tǒng)用于多媒體實(shí)時(shí)數(shù)據(jù)的網(wǎng)絡(luò)傳輸。ARM內(nèi)核處理器與
    發(fā)表于 06-19 05:00

    嵌入式系統(tǒng)基本問(wèn)題

    大家好,我需要一些重新保證,我理解嵌入式系統(tǒng)數(shù)據(jù)流方面的工作原理。讓我畫(huà)一幅我正在拍的照片。我有一個(gè)Virtex 6開(kāi)發(fā)板,用于Anal
    發(fā)表于 03-16 07:04

    基于MBD的嵌入式系統(tǒng)設(shè)計(jì)

    【STM32F407+matlab+STM32CubeMX】基于MBD的嵌入式系統(tǒng)實(shí)現(xiàn)基于STM32CubeMX和HAL的嵌入式系統(tǒng)編程通過(guò)
    發(fā)表于 08-17 07:08

    用于嵌入式系統(tǒng)的操作系統(tǒng)

    嵌入式操作系統(tǒng)(Embedded Operating System,簡(jiǎn)稱(chēng):EOS)是指用于嵌入式系統(tǒng)的操作
    發(fā)表于 10-28 06:30

    嵌入式開(kāi)發(fā)流程是怎樣的?

    本篇文章整理下嵌入式開(kāi)發(fā)中一些入門(mén)的基礎(chǔ)技能,都是根據(jù)以往的工程經(jīng)驗(yàn)整理,適用于之前沒(méi)做過(guò)嵌入式開(kāi)發(fā)的新手。嵌入式開(kāi)發(fā)流程一般如下,一般是在
    發(fā)表于 11-08 06:24

    淺析MATLAB和Simulink嵌入式視覺(jué)應(yīng)用

    MATLAB 和 Simulink 工具,為嵌入式視覺(jué)系統(tǒng)設(shè)計(jì)算法和系統(tǒng)模型。借助用于采集攝像機(jī)和其他傳感器實(shí)時(shí)圖像和視頻
    發(fā)表于 12-04 08:00

    MATLAB/SIMULINK生成嵌入式代碼有哪些步驟

    生成嵌入式代碼生成主要利用的是MATLAB中自帶的MATLAB Coder模塊,MATLAB Coder可以MATLABcode產(chǎn)生可讀且
    發(fā)表于 12-16 07:16

    物聯(lián)網(wǎng)與嵌入式系統(tǒng)體系結(jié)構(gòu)有怎樣的聯(lián)系呢

      概念上講,物聯(lián)網(wǎng)代表了通過(guò)大規(guī)模網(wǎng)絡(luò)通信最大化利用大量不同嵌入式設(shè)備效用的努力。物聯(lián)網(wǎng)設(shè)備與更普通的嵌入式系統(tǒng)的區(qū)別在于每個(gè)設(shè)備與一個(gè)或多個(gè)中心節(jié)點(diǎn)之間存在通信路徑。這些節(jié)點(diǎn)
    發(fā)表于 12-17 07:32

    實(shí)時(shí)仿真與嵌入式系統(tǒng)

    實(shí)時(shí)仿真與嵌入式系統(tǒng):Matlab 和VxWorks 是當(dāng)今工業(yè)流行的仿真軟件和嵌入式操作系統(tǒng), 二者之間的結(jié)合極大的方便了程序在
    發(fā)表于 09-13 10:44 ?21次下載

    MATLAB平臺(tái)的DSP嵌入式應(yīng)用程序設(shè)計(jì)的研究

    MATLAB平臺(tái)的DSP嵌入式應(yīng)用程序設(shè)計(jì)的研究
    發(fā)表于 10-19 13:22 ?7次下載
    <b class='flag-5'>MATLAB</b>平臺(tái)的DSP<b class='flag-5'>嵌入式</b>應(yīng)用程序設(shè)計(jì)的研究

    基于MATLAB平臺(tái)的DSP嵌入式應(yīng)用程序設(shè)計(jì)的研究

    基于MATLAB平臺(tái)的DSP嵌入式應(yīng)用程序設(shè)計(jì)的研究
    發(fā)表于 10-20 15:09 ?5次下載
    基于<b class='flag-5'>MATLAB</b>平臺(tái)的DSP<b class='flag-5'>嵌入式</b>應(yīng)用程序設(shè)計(jì)的研究

    什么是嵌入式系統(tǒng)?有什么作用?

    機(jī)器人系統(tǒng)的傳感器用于環(huán)境中收集數(shù)據(jù),嵌入式系統(tǒng),用于
    的頭像 發(fā)表于 09-23 17:29 ?7585次閱讀

    淺析MATLAB和Simulink嵌入式視覺(jué)應(yīng)用

    嵌入式視覺(jué)是什么? 嵌入式視覺(jué)是指將圖像處理和計(jì)算機(jī)視覺(jué)應(yīng)用到嵌入式系統(tǒng)嵌入式視覺(jué)開(kāi)發(fā)工作流程的主要環(huán)節(jié)包括視覺(jué)算法的算法設(shè)計(jì)、
    的頭像 發(fā)表于 11-22 14:04 ?3825次閱讀
    淺析<b class='flag-5'>MATLAB</b>和Simulink<b class='flag-5'>嵌入式</b>視覺(jué)應(yīng)用

    如何嵌入式系統(tǒng)收集數(shù)據(jù)以用于 MATLAB

    發(fā)表于 11-17 08:22 ?1次下載
    如何<b class='flag-5'>從</b><b class='flag-5'>嵌入式</b><b class='flag-5'>系統(tǒng)收集數(shù)據(jù)以</b><b class='flag-5'>用于</b> <b class='flag-5'>MATLAB</b>

    什么是嵌入式系統(tǒng)?嵌入式系統(tǒng)的具體應(yīng)用

    嵌入式,一般是指嵌入式系統(tǒng)。用于控制、監(jiān)視或者輔助操作機(jī)器和設(shè)備的裝置。
    的頭像 發(fā)表于 12-20 13:33 ?2342次閱讀