英創公司新近推出的嵌入式工控主板EM9160是一款專門面向工業智能設備的高性價比ARM9+WinCE平臺,該工控主板不僅配置了常規的標準通訊接口,如以太、串口、USB,而且還配置了當前智能控制設備中常用的SPI、I2C以及脈寬調制輸出PWM。本文主要介紹EM9160的PWM在性能及使用上的特色,以幫助客戶能快速完成自己的產品開發。
EM9160共提供3路PWM脈寬調制輸出通道,其基本性能包括:
1、作為對步進電機等對象的控制脈沖,可以按客戶要求以一定的頻率、占空比,輸出設定數目的脈沖,其最高脈沖頻率為每秒600個。
2、支持3路脈沖的同步輸出,每路可獨立設置脈沖頻率、占空比、輸出的脈沖數目。
3、支持連續的可調占空比的周期性脈沖波形輸出,作為DA輸出、LCD亮度控制等應用。最高輸出頻率1MHz。
在硬件上,3個PWM通道的引出管腳分別位于EM9160 CN2的33# 、35#及36#,它們與EM9160的SPI接口復用管腳,具體對應關系如下:
EM9160_CN2管腳 |
SPI接口 |
PWM輸出 |
33# |
SPI_DIN |
PWM通道1 |
34# |
SPI_DOUT | |
35# |
SPI_CLK |
PWM通道2 |
36# |
SPI_CS# |
PWM通道3 |
上電啟動時所有管腳處于高阻輸入狀態。對應用程序,并不需要專用的管腳配置函數來選擇SPI或PWM,而只需直接打開“PWM1:”文件,相應管腳將自動切換到PWM狀態,PWM各通道初始狀態為低電平。
注意:(1)EM9160嵌入式工控主板的PWM脈沖輸出個數是通過各通道內部硬件中斷來控制實現的,因此輸出脈沖的頻率受到一定的限制,而作為連續脈沖波形輸出時就沒有這個限制。(2)在上電初始狀態PWM各通道處于高阻輸出狀態,電平上呈現出高電平,這與PWM脈寬調制輸出平時為低電平不一致,可通過對各個通道分別接51K上拉電阻和5.1K下拉電阻的方法來解決。
EM9160內部已裝載了符合WinCE標準的PWM流式驅動程序(stream driver),應用程序只需要使用與通用串口相似的方法,打開特定文件名“PWM1:”的文件,獲得文件句柄,就可通過WinCE的系統API函數DeviceIoControl(…)實現對3個PWM通道的各種操作了,當使用完畢時,直接關閉文件即可。為了方便不熟悉DeviceIoControl函數的客戶,EM9160的SDK還在其基礎上封裝了4個更簡單的API函數,應用程序只需包含頭文件“pwm_api.h”,在打開文件后,直接調用這幾個API函數就可實現對PWM各個通道的控制輸出。
EM9160工控主板SDK關于PWM的API函數定義如下:
// 定義PWM參數結構
typedef struct
{
BOOL bSync; // 是否選擇PWM三相同步輸出,TRUE為同步輸出
DWORD dwFreq[3]; // 分別定義PWM三相輸出脈沖信號的頻率,輸出的頻率范圍為:1 - 600 (Hz)
DWORD dwDuty[3]; // 分別定義PWM三相輸出脈沖信號的占空比,其范圍為:1 - 99 (%)
DWORD dwNbPulse[3]; // 分別定義PWM三相輸出脈沖信號的數目,》 0: 表示輸出脈沖的數目,= 0: 連續波形輸出
} PWM_STATE;
// 功能描述:設置PWM輸出脈沖信號的參數:頻率、占空比、脈沖數目等。
// 輸入參數 HANDLE hDevice: 運行CreateFile( _T(‘PWM1:’),。..。)函數返回的有效句柄
// PWM_STATE pPWMState: PWM 輸出參數
// 返回值 = TRUE: PWM 輸出參數設置成功。
// = FALSE: PWM 輸出參數設置失敗。
BOOL SetupPWM( HANDLE hDevice, PWM_STATE *pPWMState );
// 功能描述:啟動PWM 脈沖信號輸出。
// 輸入參數 HANDLE hDevice: 運行CreateFile( _T(‘PWM1:’),。..。)函數返回的有效句柄
// 返回值 = TRUE: 操作成功。
// = FALSE: 操作失敗。
BOOL StartPWM( HANDLE hDevice );
// 功能描述:終止結束PWM脈沖信號輸出。
// 輸入參數 HANDLE hDevice: 運行CreateFile( _T(‘PWM1:’),。..。)函數返回的有效句柄
// 返回值 = TRUE: 操作成功。
// = FALSE: 操作失敗。
BOOL StopPWM( HANDLE hDevice );
// 功能描述:獲取PWM 脈沖信號輸出自動結束的事件,可通過WaitForSingleObject(。.)來響應該事件。
// 輸入參數 HANDLE hDevice: 運行CreateFile( _T(‘PWM1:’),。..。)函數返回的有效句柄
// 返回值 = NULL: 操作失敗。
// != NULL: PWM 脈沖信號輸出自動結束的事件。
HANDLE GetPWMEvent( HANDLE hDevice );
有關PWM的API函數的具體使用方法可參考EM9160資料光盤中的范例程序。
-
嵌入式主板
+關注
關注
7文章
6085瀏覽量
35296
發布評論請先 登錄
相關推薦
評論