電流回路控制長期以來一直在過程控制系統(tǒng)和自動化制造設(shè)施中發(fā)揮重要作用。為了滿足對更高性能伺服系統(tǒng)的需求,制造商需要在基于高速 FPGA 和昂貴信號鏈的復(fù)雜設(shè)計(jì)中實(shí)現(xiàn)更快的電流環(huán)路控制解決方案。
但是,本文將使用德州儀器(TI) 的實(shí)際解決方案展示,微控制器硬件和軟件功能的最新進(jìn)展使得在不犧牲性能的情況下降低實(shí)施成本成為可能。
控制回路操作
在許多控制系統(tǒng)中,設(shè)計(jì)人員依靠比例積分 (PI) 控制回路來管理電流或其他性能特征。原則上,這些控制器很簡單。他們使用期望性能和測量性能之間的誤差,根據(jù)兩個錯誤處理路徑的輸出生成校正信號(圖 1)。比例 (P) 路徑將增益應(yīng)用于誤差;積分 (I) 路徑對誤差進(jìn)行積分并放大結(jié)果。
?
?
圖 1:比例積分 (PI) 控制回路生成校正信號,該信號將積分測量信號誤差輸出與將簡單比例增益應(yīng)用于誤差信號的路徑相結(jié)合。(圖片來源:德州儀器)
與更簡單的控制應(yīng)用不同,伺服電機(jī)的設(shè)計(jì)依賴于三個相互依賴的性能特征:位置、速度和電流。為了改變電機(jī)轉(zhuǎn)子的位置,它的速度需要改變。反過來,為了改變其速度,通過脈寬調(diào)制 (PWM) 施加到電機(jī)繞組的電流需要改變。伺服電機(jī)控制開發(fā)人員在級聯(lián)控制結(jié)構(gòu)中反映了這種循環(huán)相互依賴關(guān)系,如圖 2 所示。
?
?
圖 2:級聯(lián)伺服控制系統(tǒng)使用嵌套反饋回路來快速響應(yīng)性能偏差,而不是等待影響傳播到整個控制結(jié)構(gòu)。(圖片來源:NCTU)
這種嵌套方法通過在潛在錯誤傳播之前糾正它們來固有地幫助穩(wěn)定性。例如,在負(fù)載變化顯著影響速度和位置之前,最里面的電流回路可以獨(dú)立地修改扭矩以響應(yīng)負(fù)載變化。
同時,這種嵌套方法意味著外部循環(huán)的性能只能與其底層的內(nèi)部循環(huán)一樣好。在伺服系統(tǒng)中,如果內(nèi)環(huán)缺乏支持外環(huán)性能預(yù)期的帶寬,那么提高位置和速度性能的努力將不可避免地落空。最終,內(nèi)部電流環(huán)路的性能有效地定義了整個伺服系統(tǒng)的性能極限。
電流回路控制很好理解,概念上也很簡單。電流控制器修改驅(qū)動逆變器的 PWM 輸出,逆變器反過來為電機(jī)繞組(或電源設(shè)計(jì)中的變壓器)供電。使用快速模數(shù)轉(zhuǎn)換器 (ADC) 測量電機(jī)電流,控制器可以確定修改 PWM 輸出以實(shí)現(xiàn)所需電機(jī)性能所需的校正信號。
然而,在這個概念上簡單的過程的核心,數(shù)字控制系統(tǒng)中使用的磁場定向控制 (FOC) 算法可能會帶來巨大的計(jì)算負(fù)擔(dān)。FOC 算法操縱電流的矢量表示,使用 Park 和 Clarke 變換來達(dá)到最佳解決方案(圖 3)。
?
?
圖 3:為了根據(jù)測量的電機(jī)性能調(diào)整 PWM 輸出,電機(jī)控制回路使用復(fù)雜的向量空間表示,包括提出了重要處理要求的 Park 和 Clarke 變換。(圖片來源:德州儀器)
在軟件庫中實(shí)現(xiàn)的高性能 MCU 可以足夠快地生成電流環(huán)路,以滿足傳統(tǒng)伺服系統(tǒng)的要求。在這些系統(tǒng)中,PI 控制器通常將電流環(huán)路帶寬限制在 PWM 載波頻率的 10% 左右,該載波頻率通常在 10 kHz 左右運(yùn)行。
更高的帶寬會導(dǎo)致復(fù)雜性和電源管理問題
為了提高內(nèi)部環(huán)路帶寬,設(shè)計(jì)人員已將 PWM 載波頻率提升至 30 kHz 及以上。然而,在這些更高的頻率下,傳統(tǒng)的電流環(huán)路設(shè)計(jì)開始滯后,無法足夠快地完成控制算法。因此,希望提高內(nèi)部環(huán)路帶寬的開發(fā)人員已轉(zhuǎn)向基于 FPGA 的專用子系統(tǒng),這些子系統(tǒng)旨在在更高的載波頻率上執(zhí)行控制算法的計(jì)算(圖 4)。
?
?
圖 4:在提高 PWM 載波頻率提高內(nèi)環(huán)性能的同時,工程師需要使用高速 FPGA 和 ADC 構(gòu)建更復(fù)雜的電流環(huán)控制設(shè)計(jì)。(圖片來源:德州儀器)
盡管使用這些專用子系統(tǒng)提高了性能,但它也顯著提高了電流環(huán)路實(shí)現(xiàn)的成本和復(fù)雜性。設(shè)計(jì)人員需要添加組件,包括通常不集成到 FPGA 本身中的高速、高分辨率 ADC 和模擬比較器。在電機(jī)和 MCU 與 FPGA 的接口處,工程師需要確保最大吞吐量,最大限度地減少可能在這個關(guān)鍵處理循環(huán)中阻礙性能的任何延遲。除了處理額外的硬件要求外,這些系統(tǒng)的設(shè)計(jì)人員還需要在開發(fā)過程中解決 FPGA 代碼編程和調(diào)試的額外要求,然后最終將生產(chǎn)代碼存儲在主機(jī) MCU 中。
雖然使用 FPGA 會增加自己的一組額外的硬件和軟件要求,但使用更高的 PWM 頻率會從根本上影響設(shè)計(jì)。在更高頻率下運(yùn)行可能意味著額外的逆變器開關(guān)損耗和對更高功率驅(qū)動器的需求。這反過來又轉(zhuǎn)化為對更大、更高輸出電源的要求。增加的功率水平導(dǎo)致需要更強(qiáng)大的熱管理。
除了增加設(shè)計(jì)復(fù)雜性、尺寸和成本之外,與基于 FPGA 的電流回路設(shè)計(jì)相關(guān)的額外要求可能會影響項(xiàng)目進(jìn)度和最終交付。相比之下,德州儀器 (TI) 的專用 MCU 和軟件消除了基于 FPGA 的電流環(huán)路控制的復(fù)雜性。
優(yōu)化的基于 MCU 的解決方案簡化了高性能環(huán)路設(shè)計(jì)
通過利用德州儀器TMS320F28379S單核和TMS320F28379D雙核 C2000 Delfino MCU 的特殊功能,TI 快速電流環(huán)路 (FCL) 軟件庫使伺服設(shè)計(jì)人員能夠在不增加 PWM 載波的情況下實(shí)現(xiàn)內(nèi)部控制環(huán)路的高帶寬性能頻率。使用這種方法,開發(fā)人員可以使用熟悉的基于 MCU 的設(shè)計(jì)和軟件開發(fā)方法構(gòu)建高度響應(yīng)的伺服應(yīng)用程序。
TI 的方法可在 500 納秒 (ns) 內(nèi)完成 FOC 處理并執(zhí)行 PWM 更新,從而允許子周期 PWM 更新,而不是等待整個控制環(huán)路周期通過。這種方法讓開發(fā)人員可以在 10 KHz PWM 載波頻率下實(shí)現(xiàn)超過 3 kHz 的控制環(huán)路帶寬,將控制環(huán)路帶寬增加三倍,而無需像基于 FPGA 的方法所要求的那樣將 PWM 載波頻率增加三倍。
這種更簡單的設(shè)計(jì)方法提高性能的關(guān)鍵在于專門的 C2000 MCU 結(jié)構(gòu)與 FCL 軟件相結(jié)合,以提供與傳統(tǒng)的基于 FPGA 的控制回路相當(dāng)?shù)墓δ芎托阅埽▓D 5)。這些專用 MCU 基于 TI 的 32 位 C28x 浮點(diǎn) CPU,將完整的模擬和數(shù)字外設(shè)與專用功能塊集成在一起。
?
?
圖 5:TI TMS320F28379S 和 TMS320F28379D C2000 Delfino MCU 中的集成外設(shè)和專用模塊提供與以前使用 FPGA 構(gòu)建的控制回路元件相當(dāng)?shù)墓δ芎托阅埽詫?shí)現(xiàn)快速電流回路性能。(圖片來源:德州儀器)
TI 設(shè)計(jì)的這些外設(shè)和模塊不僅具有片上特性的集合,而且集成度特別高,適合高速控制環(huán)路操作。例如,為了捕獲控制環(huán)路計(jì)算中使用的數(shù)據(jù),MCU 集成了一個靈活的模擬信號鏈,其中包括一個比較器子系統(tǒng) (CMPSS) 和四個高速 ADC。每個 CMPSS 都包括一個專用模擬信號路徑(圖 6),其輸出連接到集成交叉開關(guān),連接到 GPIO 多路復(fù)用器、ADC 和 PWM 子系統(tǒng)。同樣,工程師可以使用交叉開關(guān)將 ADC 的輸出引導(dǎo)至 PWM 和其他模塊。
?
?
圖 6:TI 通過構(gòu)建緊密集成的功能(例如在其基于 MCU 的控制環(huán)路解決方案的輸入端使用的比較器子系統(tǒng))實(shí)現(xiàn)類似 FPGA 的控制環(huán)路性能。(圖片來源:德州儀器)
片上 Sigma-Delta 濾波器模塊 (SDFM) 包括四個獨(dú)立的比較器和四個獨(dú)立的濾波器,它們支持圖 5 所示控制回路中使用的 sinc 濾波器功能。在控制回路的輸出端,MCU 結(jié)合了其增強(qiáng)的具有高分辨率脈沖寬度調(diào)制器 (HRPWM) 的 PWM 子系統(tǒng),步長分辨率為 150 皮秒 (ps)(典型值)。在 PWM 模塊中,跳閘子模塊響應(yīng)各種故障或強(qiáng)制事件條件,以緩解短路或過流條件等問題。
除了這些先進(jìn)的 I/O 子系統(tǒng),MCU 還提供了完善對高速控制回路設(shè)計(jì)的支持所需的專用模塊。在這些塊中,集成的可配置邏輯塊 (CLB) 提供了實(shí)現(xiàn)邏輯功能所需的資源,否則這些邏輯功能需要額外的外部設(shè)備。對于開發(fā)人員,TI 提供了一系列配置 CLB 以支持特定類型功能的軟件資源。
特別是對于高速電流環(huán)路,TI 提供了使用 CLB 提供位置管理器功能的軟件,如圖 5 所示。在這種情況下,位置管理器支持行業(yè)標(biāo)準(zhǔn)的雙向編碼器接口,例如 EnDat 和 BiSS。
這些雙向編碼器接口專為傳輸位置和控制數(shù)據(jù)而設(shè)計(jì),具有很高的性能要求。BiSS 解決方案通?;?FPGA 或 ASIC,特別是用于實(shí)現(xiàn)連續(xù)模式 BiSS 或 BiSS-C。相反,TI 的 BiSS-C 位置管理器使用在 MCU 上運(yùn)行的軟件和 MCU 硬件資源(包括 SPI 接口、交叉開關(guān)和 CLB)的組合來實(shí)現(xiàn)編碼器接口(圖 7)。
?
?
圖 7:TI 使用 MCU 可配置邏輯塊 (CLB) 和其他 MCU 功能來實(shí)現(xiàn)復(fù)雜邏輯,例如連續(xù)模式雙向串行同步 (BiSS-C) 編碼器接口。(圖片來源:德州儀器)
在提供高速電流環(huán)路解決方案時,TI 將這些資源與其 FCL 庫相結(jié)合,后者可處理前面提到的 FOC 計(jì)算。在這里,庫進(jìn)一步利用了專門的 MCU 硬件,包括集成的三角數(shù)學(xué)單元 (TMU) 和控制律加速器 (CLA),它們可以從處理器內(nèi)核中卸載數(shù)學(xué)密集型處理。例如,控制回路代碼可以使用 CLA 獨(dú)立處理編碼器反饋,并使用 TMU 以比基于處理器的計(jì)算快近一個數(shù)量級的速度執(zhí)行 Park 和 Clarke 變換。
隱藏復(fù)雜性
也許最重要的是,F(xiàn)CL 庫隱藏了實(shí)現(xiàn)伺服回路控制所需的所有詳細(xì)操作的復(fù)雜性,使開發(fā)人員能夠?qū)W⒂谒麄兊莫?dú)特需求。FCL 應(yīng)用程序編程接口 (API) 僅包含表 1 中所示的幾個功能。
API函數(shù)描述
Uint32 FCL_GetSwVersion(void);返回一個 32 位常量;對于此版本,返回的值為 0x00000002
無效 FCL_Complex_Ctrl(無效);作為 FCL 的一部分執(zhí)行復(fù)雜控制
無效 FCL_PI_Ctrl(無效);作為 FCL 的一部分執(zhí)行 PI 控制
無效 FCL_PI_CtrlWrap(無效);PI 控制模式下 FCL 完成時用戶應(yīng)用程序調(diào)用的結(jié)束函數(shù)
無效 FLC_QEP_wrap(無效);由用戶應(yīng)用程序調(diào)用以處理 QEP 反饋完成。該函數(shù)僅在 FCL_LEVEL2 中使用。
無效 FCL_Complex_CtrlWrap(無效);復(fù)雜控制模式下 FCL 完成時用戶應(yīng)用程序調(diào)用的總結(jié)函數(shù)
無效 FCL_initPWM(易失性結(jié)構(gòu) EPWM_REGS *ePWM);為 FCL 操作初始化 PWM,此函數(shù)由用戶應(yīng)用程序在初始化或設(shè)置過程中調(diào)用
無效 FCL_ControllerReset(無效);調(diào)用以重置 FCL 變量,當(dāng)用戶想要停止和重新啟動電機(jī)時很有用
表 1:德州儀器快速控制庫 (FCL) 將基于 FOC 的電流環(huán)路控制的復(fù)雜性隱藏在一個簡短的 API 后面。(表格來源:德州儀器)
除了這些函數(shù)的 C 接口聲明外,F(xiàn)CL 頭文件還包括一些額外的包引用和一個關(guān)鍵的 C 結(jié)構(gòu),該結(jié)構(gòu)包含與當(dāng)前循環(huán)相關(guān)的少數(shù)必需參數(shù)(清單 1)。
復(fù)制
// ==============================================================
typedef struct currentLoopPars {
float32 CARRIER_MID, // Mid point value of carrier count
ADC_SCALE, // ADC conversion scale to pu
cmidsqrt3; // internal variable
float32 tSamp, // sampling time
Rd, // Motor resistance in D axis
Rq, // Motor resistance in Q axis
Ld, // Motor inductance in D axis
Lq, // Motor inductance in Q axis
Vbase, // Base voltage for the controller
Ibase, // Base current for the controller
wccD, // D axis current controller bandwidth
wccQ, // Q axis current controller bandwidth
Vdcbus, // DC bus voltage
BemfK, // Motor Bemf constant
Wbase; // Controller base frequency (Motor) in rad/sec
} FastCurrentLoopPars_t;
清單 1:德州儀器 (TI) 的集成控制回路解決方案意味著開發(fā)人員只需要幾個軟件結(jié)構(gòu),例如這個用于 TI controlSUITE軟件包中提供的控制回路參數(shù)的軟件結(jié)構(gòu)。(代碼來源:德州儀器)
雖然 FCL 庫隱藏了設(shè)計(jì)基于 FOC 的電流環(huán)路的復(fù)雜性,但伺服控制操作的復(fù)雜性是不可避免的。為幫助開發(fā)人員評估性能并獲得伺服控制操作經(jīng)驗(yàn),德州儀器 (TI) 提供了TMDXIDDK379D DesignDrive 開發(fā)套件,該套件提供了基于 TI FCL 庫的伺服控制設(shè)計(jì)的完整實(shí)現(xiàn)。除了硬件板,TI 還提供了一套完整的原理圖和制造數(shù)據(jù),開發(fā)人員可以擴(kuò)展這些數(shù)據(jù)來開發(fā)他們的定制伺服應(yīng)用。
由于關(guān)鍵控制回路機(jī)制內(nèi)置于底層 MCU 和 FCL 庫中,因此開發(fā)人員需要相對較少的附加組件來實(shí)現(xiàn)完整的伺服設(shè)計(jì)。如原理圖中詳述,設(shè)計(jì)可以使用幾個無源元件和三個 TI 器件實(shí)現(xiàn) EnDat 或 BiSS 編碼器接口的硬件端:SN65HVD3088ED RS485 收發(fā)器;TXB0104DR電平轉(zhuǎn)換器;和TPS27082L高側(cè)負(fù)載開關(guān)(圖 8)。
?
?
圖 8:德州儀器 controlSUITE 包中包含的原理圖演示了簡單的硬件接口,例如這個最小的 EnDat-BiSS 接口,需要補(bǔ)充使用 MCU CLB 在片上實(shí)現(xiàn)的完整編碼器功能。(圖片來源:德州儀器)
與硬件設(shè)計(jì)一樣,TI 快速控制環(huán)路解決方案的軟件設(shè)計(jì)在概念上更為簡單。因?yàn)?MCU 的專用硬件和專用固件的組合完成了所有工作,所以軟件開發(fā)在很大程度上是一個設(shè)置 MCU 和配置平臺的過程。例如,TI 軟件包提供了一個簡單的main()例程,其中包含數(shù)百行代碼,這些代碼嚴(yán)格關(guān)注初始化 MCU 和 FCL 功能并配置其設(shè)置。實(shí)際的主例程只是一個空的等待循環(huán)(清單 2)。
//*****************************************************************************
void main(void)
{
// Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the F28M3Xx_SysCtrl.c file.
InitSysCtrl();
// Only used if running from FLASH
// Note that the variable FLASH is defined by the compiler
#ifdef _FLASH
// Call Flash Initialization to setup flash waitstates
// This function must reside in RAM
InitFlash(); // Call the flash wrapper init function
#endif //(FLASH)
// Enable Interrupt Generation from the PWM module
EPwm1Regs.ETSEL.bit.INTEN=1;
// This needs to be 1 for the INTFRC to work
EPwm1Regs.ETPS.bit.INTPRD=ET_1ST;
EALLOW;
PieVectTable.ADCC1_INT = &ResolverISR;
//PieVectTable.EPWM11_INT = &MotorControlISR;
// PieVectTable.ADCA1_INT = &MotorControlISR;
PieVectTable.EPWM1_INT = &MotorControlISR;
// PieVectTable.TIMER1_INT = &TimerISR;
// PieCtrlRegs.PIEIER1.bit.INTx1 = 1; // Enable ADCA1INT in PIE group 1
// PieCtrlRegs.PIEIER3.bit.INTx11 = 1; // Enable PWM11INT in PIE group 3
PieCtrlRegs.PIEIER3.bit.INTx1 = 1; //// Enable PWM1INT in PIE group 3
#if POSITION_ENCODER == RESOLVER_POS_ENCODER
PieCtrlRegs.PIEIER1.bit.INTx3 = 1; // Enable ADCC1INT in PIE group 1
#endif
IER |= M_INT3; // Enable group 3 interrupts - EPWM1, 11 are here
// IER |= M_INT1; // Enable group 1 interrupts - ADCA, B are here
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
EDIS;
// ***************************************************************************
// Initializations COMPLETE
// - IDLE loop. Just loop forever
// ***************************************************************************
for(;;) //infinite loop
{
// State machine entry & exit point
//===========================================================
?。?Alpha_State_Ptr)(); // jump to an Alpha state (A0,B0,。。.)
//===========================================================
}
} //END MAIN CODE
清單 2:德州儀器 controlSUITE 中軟件示例的這個片段演示了如何設(shè)置快速控制回路操作在很大程度上是一個初始化 MCU 和快速控制回路庫的過程;主程序本身就是一個簡單的等待循環(huán)。(代碼來源:德州儀器)
一旦在啟動時配置了 MCU,使用 TI 方法實(shí)現(xiàn)控制環(huán)路所需的大部分工作就是提供適當(dāng)?shù)闹袛喾?wù)例程 (ISR) 來處理電機(jī)控制任務(wù)。TI 使用快速控制回路示例軟件模塊中提供的 MotorControlISR 功能演示了此類 ISR。在設(shè)置期間啟用(例如,PieVectTable.ADCC1_INT = &ResolverISR在清單 2 中),MotorControlISR 函數(shù)說明了軟件工程師如何使用 FCL API 來執(zhí)行測量和生成輸出(清單 3)。
// =============================== FCL_LEVEL 3 ======================================
// Level 3 verifies the dq-axis current regulation performed by PID and speed
// measurement modules
// lsw=0: lock the rotor of the motor
// lsw=1: close the current loop
// NOTE:-
// 1. Iq loop is closed using actual QEP angle.
// Therefore, motor speed races to high speed with lighter load. It is better
// to ensure the motor is loaded during this test. Otherwise, the motor will
// run at higher speeds where it can saturate. It may be typically around the
// rated speed of the motor or higher.
// 2. clarke1.As and clarke1.Bs are not brought out from the FCL library
// as of library release version 0x02
// ==============================================================================
//TODO INCRBUILD 3
#if (BUILDLEVEL==FCL_LEVEL3)
#if (FCL_CNTLR == PI_CNTLR)
FCL_PI_Ctrl();
#endif
#if (FCL_CNTLR == CMPLX_CNTLR)
FCL_Complex_Ctrl();
#endif
// ------------------------------------------------------------------------------
// fcl_cycle_count calculations for debug
// customer can remove the below code in final implementation
// ------------------------------------------------------------------------------
get_FCL_time();
// ------------------------------------------------------------------------------
// Measure DC Bus voltage using SDFM Filter3
// ------------------------------------------------------------------------------
FCL_Pars.Vdcbus = (temp=SDFM1_READ_FILTER3_DATA_16BIT)*SD_VOLTAGE_SENSE_SCALE;
if (FCL_Pars.Vdcbus 《 1.0)
FCL_Pars.Vdcbus = 1.0;
// ------------------------------------------------------------------------------
// Fast current loop controller wrapper
// ------------------------------------------------------------------------------
#if (FCL_CNTLR == PI_CNTLR)
FCL_PI_CtrlWrap();
#endif
#if (FCL_CNTLR == CMPLX_CNTLR)
FCL_Complex_CtrlWrap();
#endif
// ------------------------------------------------------------------------------
// Alignment Routine: this routine aligns the motor to zero electrical angle
// and in case of QEP also finds the index location and initializes the angle
// w.r.t. the index location
// ------------------------------------------------------------------------------
if(!RunMotor)
{
lsw = 0;
pi_id.Ref = IdRef = 0;
FCL_ControllerReset();
}
else if (lsw == 0)
{
// alignment current
IdRef = IdRef_start; //IQ(0.1);
// set up an alignment and hold time for shaft to settle down
if (pi_id.Ref 》= IdRef)
{
if (++cntr 》= alignCnt)
{
cntr = 0;
// IdRef = IdRef_run;
#if POSITION_ENCODER==QEP_POS_ENCODER
lsw = 1; // for QEP, spin the motor to find the index pulse
#else
lsw = 2; // for absolute encoders no need for lsw=1
#endif
}
}
} // end else if (lsw=0)
else if (lsw == 2)
IdRef = IdRef_run;
// ------------------------------------------------------------------------------
// Connect inputs of the RMP module and call the ramp control macro
// ------------------------------------------------------------------------------
if(lsw==0) rc1.TargetValue = rc1.SetpointValue = 0;
else rc1.TargetValue = SpeedRef;
RC_MACRO(rc1)
// ------------------------------------------------------------------------------
// Connect inputs of the RAMP GEN module and call the ramp generator macro
// ------------------------------------------------------------------------------
rg1.Freq = rc1.SetpointValue;
RG_MACRO(rg1)
posEncElecTheta[POSITION_ENCODER] = qep1.ElecTheta;
speed1.ElecTheta = posEncElecTheta[POSITION_ENCODER];
SPEED_FR_MACRO(speed1)
//------------------------------------------------------------------------------
// Variable display on DACs B and C
//------------------------------------------------------------------------------
DacbRegs.DACVALS.bit.DACVALS = DAC_MACRO_PU(pi_iq.Ref); //rg1.Out*4096;
DaccRegs.DACVALS.bit.DACVALS = DAC_MACRO_PU(pi_iq.Fbk); //posEncElecTheta[POSITION_ENCODER]*4096;
// ------------------------------------------------------------------------------
// setup iqref for FCL
// ------------------------------------------------------------------------------
pi_iq.Ref = (lsw==0) ? 0 : IqRef;
// ------------------------------------------------------------------------------
// setup idref for FCL
// ------------------------------------------------------------------------------
pi_id.Ref = ramper(IdRef, pi_id.Ref, _IQ(0.00001));
// ------------------------------------------------------------------------------
// Connect inputs of the DATALOG module
// ------------------------------------------------------------------------------
DlogCh1 = posEncElecTheta[POSITION_ENCODER];
DlogCh2 = rg1.Out;
DlogCh3 = pi_iq.Ref;
DlogCh4 = pi_iq.Fbk;
#endif // (BUILDLEVEL==FCL_LEVEL3)
清單 3:德州儀器 controlSUITE 示例軟件展示了開發(fā)人員如何在很大程度上將控制循環(huán)實(shí)現(xiàn)代碼歸類為中斷服務(wù)例程,而中斷服務(wù)例程只需要對 TI 快速控制循環(huán) (FCL) 庫進(jìn)行幾次 API 調(diào)用。(代碼來源:德州儀器)
盡管演示套件和軟件有助于簡化開發(fā),但對于經(jīng)驗(yàn)不足的工程師來說,伺服控制操作可能會讓人望而生畏。為了幫助設(shè)計(jì)人員更好地理解伺服控制,TI 開發(fā)套件讓他們可以通過一系列增量構(gòu)建級別來探索其操作。在這里,開發(fā)人員只需通過設(shè)置來選擇構(gòu)建級別BUILDLEVEL(例如,參見清單 3)。在演示了基本 PWM 信號輸出(級別 1)和開環(huán)操作(級別 2)之后,開發(fā)人員使用接下來的三個構(gòu)建級別來仔細(xì)檢查全伺服控制設(shè)計(jì)的每個嵌套循環(huán)的操作(圖 9)。
??
圖 9:使用 TMDXIDDK379D DesignDrive 開發(fā)套件和 TI controlSUITE 軟件,開發(fā)人員可以在一系列階段探索伺服控制設(shè)計(jì),首先評估最里面的電流控制環(huán)(綠色),然后添加速度環(huán)(藍(lán)色),最后添加完整伺服設(shè)計(jì)中的位置環(huán)(橙色)。(圖片來源:德州儀器)
BUILDLEVEL=FCL_LEVEL3例如,通過設(shè)置,開發(fā)人員可以探索內(nèi)循環(huán)本身的操作。在這個級別內(nèi),開發(fā)人員甚至可以測試使用不同底層機(jī)制或參數(shù)的效果。例如,通過設(shè)置FCL_CNTLR 3 級 ISR(參見清單 3),開發(fā)人員可以選擇使用 PI 控制器 ( FCL_CNTLR=PI_CNTLR) 或復(fù)雜控制器 ( FCL_CNTLR=CMPLX_CNTLR) 來操作循環(huán)。如清單 3 所示,基于FCL_CNTLR設(shè)置的條件編譯只會調(diào)用相應(yīng)的 FCL API 例程(參見表 1)。使用這種方法,開發(fā)人員可以逐步沉浸在完整伺服控制設(shè)計(jì)的操作中,最終在 TI 開發(fā)套件的基礎(chǔ)上構(gòu)建自己的高速伺服應(yīng)用。
結(jié)論
在伺服回路中,內(nèi)部電流控制回路的性能有效地定義了整個伺服控制應(yīng)用的局限性。過去,希望增強(qiáng)內(nèi)環(huán)的開發(fā)人員不得不提高 PWM 載波頻率,并通過使用 FPGA 和高速 ADC 構(gòu)建的子系統(tǒng)支持更高的頻率。
開發(fā)人員無需面對與此方法相關(guān)的成本和可能的延遲,而是可以利用 TI 結(jié)合了專用 MCU 和軟件庫的更簡單的解決方案。使用這種方法,開發(fā)人員可以創(chuàng)建伺服控制應(yīng)用程序,僅使用基于 FPGA 的專門設(shè)計(jì)就可以實(shí)現(xiàn)內(nèi)環(huán)性能,而時間和成本只是其中的一小部分。
評論
查看更多