步進電機的控制需要對控制脈沖進行精確計數,通常利用CPU的PWM信號作為步進電機控制脈沖,并利用PWM自身的中斷功能,每輸出一個脈沖產生一次中斷,然后計數,以實現對輸出脈沖個數的控制。但在WinCE上系統直接實現上述控制過程是有因難的,由于操作系統線程調度,WinCE驅動中對中斷的響應會有幾十到幾百微秒的延時,這顯然不能滿足高速PWM計數的需求,同時頻繁的中斷也會對整個系統的性能產生影響。
下圖是基于英創工控主板EM9380的步進電機控制示意圖。EM9380是英創公司推出的面向實時控制應用的工控主板,預裝了正版的WinCE6.0操作系統,在主板上集成了兩個CPU,主CPU是450MHz的ARM9,運行WinCE系統,負責通訊管理,人機交互等,從CPU采用了ARM Cortex-M3,專門用做實時控制應用。
EM9380步進電機控制
對于步進電機的控制,用戶只需要在熟悉的vs2005(vs2008)開發環境下,通過簡單的API函數MCU_PWM_CHANNEL()將控制參考傳送給Cortex-M3,就可以實現頻率可達100KHz,可計數的PWM脈沖輸出。MCU_PWM_CHANNEL()函數說明如下:
// MCU PWM操作:啟動/停止PWM通道, 啟動參數包括頻率、占空比和初始極性
BOOL MCU_PWM_CHANNEL(
HANDLE hMCU,
DWORD dwCh, // PWM通道號, = 3, 4, 5, 6, 7, 8
DWORD dwFreq, // PWM輸出頻率,單位Hz,=0:停止PWM輸出
DWORD dwDuty, // PWM輸出占空比,單位.1%, 輸入范圍= 0-1000
DWORD dwPol, // PWM初始極性,= 0: 低電平, = 1: 高電平
DWORD dwNum=0); // PWM脈沖個數, 缺省值=0:連續輸出
EM9380 PWM(PWM3~PWM8)實時控制應用舉例:
// 打開MCU驅動,輸入參數固定為0
HANDLE hMCU = OpenMCU( 0 );
// 控制PWM3以頻率100KHz,每個脈沖25%的低電平輸出3個脈沖
MCU_PWM_CHANNEL(hMCU, 3, 100000, 250, 0, 3 );
// 控制PWM4以頻率100KHz,每個脈沖25%的高電平輸出3個脈沖
MCU_PWM_CHANNEL(hMCU, 4, 100000, 250, 1, 3 );
// 控制PWM5輸出5MHz,50%占空比的連接PWM信號,dwNum參數使用缺省值
MCU_PWM_CHANNEL(hMCU, 5, 5000000, 500, 0);
// 控制PWM5停止輸出
MCU_PWM_CHANNEL(hMCU, 5, 0, 0, 0);
// 關閉MCU驅動,釋放相應資源
CloseMCU( hMCU );
執行上述代碼后PWM3與PWM4的輸出波形如下:(注:下圖只是為了說明pol參考對輸出波形的影響,實際上PWM3與PWM4并不是同步輸出的,EM9380的其它PWM暫時也不具有同步功能)
PWM輸出波形
EM9380可以支持8路PWM輸出,其中6路是從從CPU Crotex-M3上引出的,支持PWM輸出計數,他們與GPIO管腳復用關系如下:
EM9380 GPIO# | PWM通道 | 備注 |
GPIO20 | PWM1 | |
GPIO21 | PWM2 | |
GPIO4 | PWM3 | 可計數 |
GPIO5 | PWM4 | 可計數 |
GPIO6 | PWM5 | 可計數 |
GPIO7 | PWM6 | 可計數 |
GPIO0 | PWM7 | 可計數 |
GPIO3 | PWM8 | 可計數 |
-
嵌入式主板
+關注
關注
7文章
6097瀏覽量
36139
發布評論請先 登錄
評論