英创公司的主流产品EM9160是一款功能强大的嵌入式工控主板,其主要应用是作为工业智能设备的核心平台。EM9160预装了Window CE5.0(正版)或Linux-2.6操作系统,并为常规的标准通讯接口配置了驱动程序,这些接口包括以太、串口、USB、SPI、I2C、PWM、AD、GPIO以及精简ISA扩展总线等。客户的应用程序可利用标准驱动程序的API函数,就可方便地操作接口,实现所需的功能。
本文主要介绍采用EM9160实现对外部信号实时频率测量的使用方法。EM9160可支持最多2路外部输入信号的频率测量。由于该功能是针对客户的需求新近开发的,客户在使用该功能时需遵循以下方法:
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, // 数据缓冲区
100*sizeof(FREQ_DATA), // 缓冲区大小,字节为单位
&dwActualLen, // 实际读取的数据长度,字节为单位
0 )
{
// 出错处理。。。
}
// 实际读取到的频率值数量为:
DWORD dwReturnNumData = dwActualLen / sizeof(FREQ_DATA);
4. 停止频率测量
if (!DeviceIoControl (hFREQ,
IOCTL_FRQ_STOP,
NULL, 0, // 无输入参数
NULL, 0, // 无输出参数
NULL, // 无返回值
NULL ))
{
// 出错处理。。。
}
全部0条评论
快来发表一下你的评论吧 !