英創公司新近推出的高性價比工控主板產品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管腳將保持在高電平。
-
嵌入式主板
+關注
關注
7文章
6086瀏覽量
35619
發布評論請先 登錄
相關推薦
評論