英創(chuàng)公司的主流產(chǎn)品EM9160是一款功能強(qiáng)大的嵌入式工控主板,其主要應(yīng)用是作為工業(yè)智能設(shè)備的核心平臺(tái)。EM9160預(yù)裝了Window CE5.0(正版)或Linux-2.6操作系統(tǒng),并為常規(guī)的標(biāo)準(zhǔn)通訊接口配置了驅(qū)動(dòng)程序,這些接口包括以太、串口、USB、SPI、I2C、PWM、AD、GPIO以及精簡(jiǎn)ISA擴(kuò)展總線等。客戶的應(yīng)用程序可利用標(biāo)準(zhǔn)驅(qū)動(dòng)程序的API函數(shù),就可方便地操作接口,實(shí)現(xiàn)所需的功能。
本文主要介紹采用EM9160實(shí)現(xiàn)對(duì)外部信號(hào)實(shí)時(shí)頻率測(cè)量的使用方法。EM9160可支持最多2路外部輸入信號(hào)的頻率測(cè)量。由于該功能是針對(duì)客戶的需求新近開發(fā)的,客戶在使用該功能時(shí)需遵循以下方法:
1. 硬件方面,被測(cè)頻率信號(hào)需整形為標(biāo)準(zhǔn)的 3.3V TTL電平信號(hào),信號(hào)接入管腳為CN1.25#,即COM4口的RXD4管腳;若需要測(cè)試2路,則第2路信號(hào)可接到CN1.26#,即COM4口的TXD4管腳。這意味著若要使用測(cè)頻功能,COM4口就不能再用。輸入脈沖的下降沿被作為一個(gè)周期的開始。
2. 若同時(shí)對(duì)兩路信號(hào)進(jìn)行測(cè)頻,本方案還將占用1路內(nèi)部的定時(shí)器資源,相應(yīng)的GPIO12不能再作為PWM脈沖輸出,或作為脈沖周期、脈沖占空比的輸入通道。若僅對(duì)1路信號(hào)進(jìn)行測(cè)頻,GPIO12的脈沖計(jì)數(shù)功能不受影響,且輸入信號(hào)必須接到CN1.25#管腳。
3. 軟件方面,應(yīng)用程序打開驅(qū)動(dòng)程序“FRQ1:”,通過(guò)DevIoControl設(shè)置測(cè)頻的采樣間隔并啟動(dòng)測(cè)量過(guò)程(命令碼為IOCTL_FRQ_START)。然后通過(guò)標(biāo)準(zhǔn)的read函數(shù)讀取測(cè)量的頻率值序列。應(yīng)用程序也可以用DevIoControl來(lái)關(guān)閉測(cè)頻的功能(命令碼為IOCTL_FRQ_STOP)。
4. 頻率測(cè)量間隔以ms為單位,盡管最小測(cè)量間隔可以為1ms,但建議應(yīng)用選擇5ms以上的測(cè)量間隔,以避免對(duì)CPU造成過(guò)重的負(fù)載。應(yīng)用程序讀取的頻率值是該測(cè)量間隔內(nèi)輸入脈沖頻率的平均值。應(yīng)用程序通過(guò)以下數(shù)據(jù)結(jié)構(gòu)來(lái)設(shè)置輸入通道和采樣率:
typedef struct __FREQ_SETUP
{
DWORD dwCh2Enable; // = 1:通道2使能,= 0:禁止
DWORD dwMillisecondPerSample; // 采樣間隔,單位為ms
} FREQ_SETUP, *PFREQ_SETUP;
5. 應(yīng)用程序需要使用以下數(shù)據(jù)結(jié)構(gòu)來(lái)讀取測(cè)量的頻率數(shù)據(jù):
typedef struct __FREQ_DATA
{
DWORD dwFreq1; // 通道1頻率值,單位為0.01Hz
DWORD dwFreq2; // 通道2頻率值,單位為0.01Hz
DWORD dwTimeStamp; // 測(cè)量該頻率值的系統(tǒng)時(shí)間,單位為ms
} FREQ_DATA, *PFREQ_DATA;
6. 注意,在雙通道測(cè)量中,由于是在同一采樣間隔進(jìn)行的測(cè)量,兩個(gè)通道的頻率不能相差太大,否則可能會(huì)影響低頻通道的測(cè)量精度。
以下是典型的應(yīng)用程序代碼:
1. 打開驅(qū)動(dòng)程序
HANDLE hFREQ; hFREQ = CreateFile( L”FRQ1:”, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
2. 設(shè)置采樣間隔并啟動(dòng)頻率測(cè)量
FREQ_SETUP SetupPar;
SetupPar.dwCh2Enable = 1; // 使能通道2
SetupPar. dwMillisecondPerSample = 10; // 設(shè)置采樣間隔為10ms
if (!DeviceIoControl (hFREQ,
IOCTL_FRQ_START,
&SetupPar, sizeof(FREQ_SETUP), // 輸入?yún)?shù)
NULL, 0,// 無(wú)輸出參數(shù)
NULL, // 無(wú)返回值
NULL ))
{
// 出錯(cuò)處理。。。
}
3. 讀取測(cè)量數(shù)據(jù),一次可讀取多個(gè)數(shù)據(jù)點(diǎn)
FREQ_DATA FreqDatBuf[100]; // 最長(zhǎng)一次讀取100個(gè)點(diǎn)
DWORD dwActualLen = 0;
if(!ReadFile(hFREQ,
FreqDatBuf, // 數(shù)據(jù)緩沖區(qū)
100*sizeof(FREQ_DATA), // 緩沖區(qū)大小,字節(jié)為單位
&dwActualLen, // 實(shí)際讀取的數(shù)據(jù)長(zhǎng)度,字節(jié)為單位
0 )
{
// 出錯(cuò)處理。。。
}
// 實(shí)際讀取到的頻率值數(shù)量為:
DWORD dwReturnNumData = dwActualLen / sizeof(FREQ_DATA);
4. 停止頻率測(cè)量
if (!DeviceIoControl (hFREQ,
IOCTL_FRQ_STOP,
NULL, 0, // 無(wú)輸入?yún)?shù)
NULL, 0, // 無(wú)輸出參數(shù)
NULL, // 無(wú)返回值
NULL ))
{
// 出錯(cuò)處理。。。
}
-
Linux
+關(guān)注
關(guān)注
87文章
11457瀏覽量
212771 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6096瀏覽量
36138
發(fā)布評(píng)論請(qǐng)先 登錄
2025第二屆教育信息技術(shù)應(yīng)用創(chuàng)新大賽正式開賽
信創(chuàng)浪潮下,國(guó)產(chǎn)主板有什么新的發(fā)展機(jī)遇?

龍芯主板是安全可信基石,可守護(hù)信息資產(chǎn)
龍芯中科榮獲2024年度信息技術(shù)應(yīng)用創(chuàng)新工作委員會(huì)卓越貢獻(xiàn)成員單位
芯盛智能榮獲2024年信息技術(shù)應(yīng)用創(chuàng)新工作委員會(huì)卓越貢獻(xiàn)成員單位
飛騰助力首屆教育信息技術(shù)應(yīng)用創(chuàng)新大賽圓滿落幕
有方科技參編的信息技術(shù)團(tuán)體標(biāo)準(zhǔn)發(fā)布
龍芯中科助力2024首屆教育信息技術(shù)應(yīng)用創(chuàng)新大賽成功舉辦
拓維信息參與牽頭組建!長(zhǎng)沙新一代信息技術(shù)產(chǎn)教聯(lián)合體正式獲批

國(guó)產(chǎn)工控主板,信創(chuàng)產(chǎn)業(yè)發(fā)展新引擎
中科創(chuàng)達(dá)榮獲2024年軟件和信息技術(shù)服務(wù)優(yōu)秀企業(yè)
信創(chuàng)國(guó)產(chǎn)化背景下的工控主板發(fā)展現(xiàn)狀
加速鯤鵬落地!拓維信息信創(chuàng)遷移工具榮獲鯤鵬原生開發(fā)技術(shù)認(rèn)證

評(píng)論