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