MCXA153 電機控制應用框架
電機控制框架是根據(jù)客戶需求設計的,旨在提供一個簡單易用的示例,用于構建更復雜的解決方案。本示例幾乎涵蓋了運行基于三相電壓逆變器應用程序所需的所有功能。重要外設無需額外的 API,所有操作均在底層完成。本示例提供了兩個中斷、ADC 采樣、FreeMASTER 和 RTCESL 庫的實現(xiàn)。?本示例本身并不支持電機旋轉。它是開發(fā)能夠旋轉電機的應用程序的基礎。?更多詳情,請參閱應用程序概述。
主板:FRDM-MCXA153
類別:電機控制
外設:ADC、時鐘、GPIO、PWM、定時器、UART
工具鏈:MCUXpresso IDE
目錄
1.軟件
- 最新的MCUXpresso IDE
- MCXA153 SDK 包括 FreeMASTER(可通過 MCUXpresso IDE 下載)
- FreeMASTER實時調試器
2.硬件
- 電源適配器 24-48 VDC
3. 設置
要運行示例軟件,需要將 FRDM-MC-LVPMSM 插入 FRDM-MCXA153 開發(fā)板。如果沒有 FRDM-MC-LVPMSM,軟件可以工作,但由于功率級缺少電壓偏移,ADC 的模擬測量將無法給出正確的數(shù)值。您可以在 IDE 和/或 FreeMASTER 中調試軟件。
3.1 步驟 1
將項目導入 MCUXpresso IDE。
3.2 第 2 步
構建項目并將其刷入 FRDM-MCXA153 板。
3.2 步驟 3
從motor_control文件夾運行 FreeMASTER .pmpx 項目并連接到電路板。
在某些情況下,需要在刷機后或計算機從睡眠狀態(tài)喚醒后拔出/插入 EVK USB。修改代碼后,F(xiàn)reeMASTER 彈出窗口會更改為在 MAP 文件中接受。
4.結果
您可以觀察實時模擬值,并根據(jù)連接到 FRDM-MC-LVPMSM 板的電源電平正確測量直流總線電壓。將 設置ui16Run
為 1 后,應該可以明顯看到校準程序正確檢測并減去了電流通道上的偏移量。
5. 應用概述
5.1 外設初始化
初始化函數(shù)位于mcperiphinit.c源文件中。
5.2 端口和引腳
基本引腳初始化使用該工具生成的board/pinmux.c源文件中的BOARDInit_Pins函數(shù)。
5.3 脈寬調制
使用eFlexPWM模塊驅動三相電壓源逆變器。PWM 頻率在?peripheral_init.h.?文件中通過設置PWM_FREQ
定義進行配置。根據(jù)此頻率值,可以通過預處理器值計算PWM_MODULO
eFlexPWM 模塊。PWM
配置為以對稱、中心對齊模式運行。這是通過將INIT
寄存器值設置為-MODULO/2
并將VAL1
寄存器值設置為 來實現(xiàn)的MODULO/2 – 1
。死區(qū)時間值寄存器 DTCNTn 根據(jù) 進行配置M1_PWM_DEADTIME
。 VAL4
寄存器用作 ADC 的觸發(fā)事件,以在零矢量(所有底部開關都處于開啟狀態(tài))期間對分流電阻器電壓降進行采樣。ADC 的觸發(fā)輸出在寄存器中啟用PWM_TCTRL_OUT_TRIG_EN
。
5.4 模數(shù)轉換器
ADC0 模塊在框架中初始化。啟用時鐘后,使用默認校準功能。大多數(shù)情況下,用戶需要更新或調整通道采樣序列。為此,我們準備了額外的支持性定義,以幫助理解此類 ADC 的命令配置。
5.4.1 ADC命令
對命令序列低級編碼的主要誤解在于通過配置 CMDL 和 CMDH 寄存器來對實際命令和下一個命令的偏移量進行編號。為此,在mcxa153lowleveladc.h 文件中定義了實際命令 (ACTCMDx) 和下一個命令 (NEXTCMDy) 。使用它們可以使用戶更清晰地理解低級配置,因為偏移量被定義名稱所掩蓋。根據(jù)參考手冊,還創(chuàng)建了其他定義來表達配置參數(shù),請參閱 mcxa153lowleveladc.h
```
ADC0->CMD[ACTCMD1].CMDL = ADCCMDLADCH(20U)
| ADCCMDLCTYPE(CMDLCTYPESINGLEENDEDA)
| ADCCMDLMODE(CMDLMODE_STANDARD);
ADC0->CMD[ACTCMD1].CMDH = ADCCMDHCMPEN(0)
| ADCCMDHWAITTRIG(0)
| ADCCMDHLWI(0)
| ADCCMDHSTS(CMDHSAMPLETIME35)
| ADCCMDHAVGS(CMDHAVERAGE1)
| ADCCMDHLOOP(0)
| ADCCMDHNEXT(NEXTCMD2);
```
5.4.2 ADC FIFO
初始化的重要部分是FIFO配置。MCXA153有一個FIFO,用于存儲ADC通道的結果。
了解結果 FIFO 中的結果數(shù)量非常重要。為此,還需要為 ADC 中斷設置正確的水印。建議在讀取 FIFO 之前讀取 FIFO 中的結果數(shù)量,并將其與配置的預期轉換次數(shù)進行比較。
5.4.3 LPCMP
低功耗比較器設置為連續(xù)模式。MSEL 多路復用器設置為內部 8 位 DAC。PSEL 多路復用器設置為通道 3,在本例中為直流總線電流。LPCMP 輸出作為故障信號路由至 eFlexPWM 模塊。
5.4.4 定時器
Ctimer 0 用作帶中斷的慢循環(huán)(1kHz)周期定時器。
5.4.5 輸入復用器
該多路復用器允許在外設之間路由信號。在項目中,它使用引腳工具進行配置。路由信號顯示為“n/a”引腳。
5.5 ADC 結果處理
為了更好地理解 ADC 的功能,本例中將 ADC 結果存儲在 32 位變量中,以便觀察其他狀態(tài)位。然后,32 位結果被屏蔽ADC_RESFIFO_D_MASK
并存儲到 16 位變量中。對于特定結果,需要減去一個偏移量,并使用 RTCESL 移位至完整的 16 位范圍。ADC 結果存儲在AdcGetResults()
函數(shù)中并進行調節(jié)。
5.6 應用狀態(tài)機
應用程序狀態(tài)機實現(xiàn)為指向該應用程序狀態(tài)函數(shù)的指針數(shù)組。
```
typedef void (tPointerFcn)(void); / pointer to function */
static tPointerFcn AppStateMachineFast[] = {AppInitFast,AppStopFast,AppStartFast,AppRunFast,AppErrorFast};
```
main.c源代碼 中有兩個狀態(tài)機調用:AppStateMachineSlow
在 CTIMER ISR(慢循環(huán))中 AppStateMachineFast
在 ADC ISR(快循環(huán))中
具體的狀態(tài)機函數(shù)位于motor_control.c中,除快速循環(huán)的 INIT、STOP 和 RUN 狀態(tài)外,大多數(shù)函數(shù)為空。狀態(tài)由ui8MotorState
用于兩個狀態(tài)機的變量控制和指示。狀態(tài)變量的更改嚴格在轉換函數(shù)中完成。轉換函數(shù)不屬于數(shù)組指針,它們是獨立的,并且易于根據(jù)用戶所需的轉換進行重寫和更新。
在快速循環(huán)的 INIT 狀態(tài)下,有一個變量初始化的示例。在快速循環(huán)的 Stop 狀態(tài)下,應用程序正在等待ui16Run > 0
條件。然后,它會轉換到 START 狀態(tài)。START 狀態(tài)用于例如對齊目的,根據(jù)狀態(tài)圖,它會轉到 RUN 狀態(tài)。
6. 常見問題解答
尚未發(fā)現(xiàn)針對該項目的常見問題解答。
7. 支持
項目元數(shù)據(jù)
來源:恩智浦appcodehub