英创公司新近推出的高性价比工控主板产品EM9170,其主板内部带有2路脉宽调制(PWM)输出通道,可用于通用的工业控制。本文介绍EM9170的PWM通道的基本使用方法。
EM9170的2路PWM均与系统的GPIO复用管脚,其中PWM1与GPIO12复用管脚,而PWM2与GPIO13复用管脚。在上电初始化阶段,这两个管脚均设置为GPIO的输入模式带100K上拉电阻。当应用程序需要操作PWM时,只需要打开对应的设备文件:
HANDLE hPWMFile;
hPWMFile = CreateFile(_T('PWM1:'), // name of device
GENERIC_READ|GENERIC_WRITE, // desired access
FILE_SHARE_READ|FILE_SHARE_WRITE, // sharing mode
NULL, // security attributes (ignored)
OPEN_EXISTING, // creation disposition
FILE_FLAG_RANDOM_ACCESS, // flags/attributes
NULL); // template file (ignored)
这时的管脚将自动转为PWM输出。可使用的设备文件名为“PWM1:”和“PWM2:”。
EM9170的PWM驱动程序,被设计成通过执行文件写来设置PWM参数及启动PWM输出。所写内容由以下结构定义:
typedef struct {
DWORD dwFreq; // PWM freq in Hz
DWORD dwDuty; // PWM duty in %
DWORD dwDuration; // duration of PWM output (msec), = 0: -> infinit
} PWMINFO, *PPWMINFO;
上述定义包括在范例程序的pwm.h头文件中。在保证1%精度占空比的条件下,可输出的PWM最高重复频率为600KHz。占空比是指正脉冲的相对宽度。
典型的调用方法为:
PWMINFO PwmInfo;
DWORD dwNumberOfBytesToWrite;
DWORD dwNumberOfBytesWritten;
BOOL bRet;
PwmInfo.dwFreq = 1000; // PWM重复频率 = 1000Hz
PwmInfo.dwDuty = 50; // PWM占空比 = 50%
PwmInfo.dwDuration = 10000; // PWM输出保持10s后停止
dwNumberOfBytesToWrite = sizeof(PWMINFO);
dwNumberOfBytesWritten = 0;
bRet = WriteFile(hPWMFile, (LPCVOID)&PwmInfo, dwNumberOfBytesToWrite, &dwNumberOfBytesWritten, NULL);
PwmInfo.dwFreq = 2000; // PWM重复频率 = 2000Hz
PwmInfo.dwDuty = 80; // PWM占空比 = 80%
PwmInfo.dwDuration = 0; // 始终保持输出直至新的写操作或文件关闭
dwNumberOfBytesToWrite = sizeof(PWMINFO);
dwNumberOfBytesWritten = 0;
bRet = WriteFile(hPWMFile, (LPCVOID)&PwmInfo, dwNumberOfBytesToWrite, &dwNumberOfBytesWritten, NULL);
若PWM脉冲的重复频率不变,仅仅是改变占空比,EM9170的PWM可保证输出不间断地改变占空比参数。这对一些需要连续控制的应用很有必要的。
当不再需要PWM脉冲输出时,只需简单关闭相应的文件即可:
CloseHandle(hPWMFile);
在关闭PWM输出后,PWM1管脚将保持在低电平,PWM2管脚将保持在高电平。
全部0条评论
快来发表一下你的评论吧 !