本應(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è)量值。
圖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)。
圖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)的組件。
圖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):
圖4.頂級(jí) MATLAB 數(shù)據(jù)對(duì)象。
雙精度數(shù)組時(shí)間戳和toff_diff的大小是可變的。
向上和向下成員是具有以下格式的 MATLAB 結(jié)構(gòu):
圖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)。?
圖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)行編程。
圖7.IAR 調(diào)試器選項(xiàng)。
Project.out 是在生成項(xiàng)目時(shí)創(chuàng)建的固件映像。
圖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 文件。
圖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)。
圖 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ù)雜性。
審核編輯:郭婷
-
matlab
+關(guān)注
關(guān)注
181文章
2960瀏覽量
230029 -
嵌入式
+關(guān)注
關(guān)注
5059文章
18974瀏覽量
302065 -
源代碼
+關(guān)注
關(guān)注
96文章
2943瀏覽量
66618
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論