ZHCUBZ5A September 2021 – April 2024
DAC128S 模塊可將最多 8 個(gè)軟件變量轉(zhuǎn)換為 12 位整數(shù)值,并通過 SPI 將數(shù)據(jù)傳輸至 DAC128S085EVM 上的數(shù)模轉(zhuǎn)換器 (DAC),如圖 3-27 所示。
DAC128S085EVM 可以連接到 LaunchPad,如圖 3-12 所示。圖 3-28 展示了 DAC128S 的主要連接。
| LaunchPad 器件 | 所需硬件更改 |
|---|---|
| F28002x、F28003x | 跳線 C2000 SPI_STE (SCS) 引腳 JB-2 至 DAC128S085EVM 上的 SYNC 引腳 JA-2,如圖 3-28 所示。 |
| F280013x | (1) 器件只有 1 個(gè) SPI 模塊,該模塊在 BoosterPack 站點(diǎn) 1 和站點(diǎn) 2 之間共享。這需要在 LaunchPad 上填充 0Ω 電阻器來將 SPI 信號(hào)連接到 DAC128S085EVM 連接到的 BoosterPack 站點(diǎn) 2。有關(guān)特定的電阻器標(biāo)識(shí)符,請(qǐng)參閱 LAUNCHXL-F2800137 原理圖中的 SPI 路由 部分。 (2) 跳線將 C2000 SPI_STE (SCS) 引腳接至 DAC128S085EVM 上的 SYNC 引腳 JA-2。C2000 SPI_STE 引腳使用情況將取決于所使用的逆變器 BoosterPack:
|
使用 DAC128S085EVM 時(shí)需要進(jìn)行硬件更改。要啟用 DAC128S 功能,必須在工程屬性中添加預(yù)定義的符號(hào) DAC_128S_ENABLE,如圖 3-19 所示。
下面的代碼演示了 DAC128S 對(duì)象的聲明。此代碼位于 sys_main.c 文件中。
DAC128S_Handle dac128sHandle; //!< the DAC128S interface handle
DAC128S_Obj dac128s; //!< the DAC128S interface object
DAC128S085 具有 8 通道 12 位數(shù)模轉(zhuǎn)換器 (DAC),因此用戶可以通過更改 dac128s085.h 文件中 DAC_EN_CH_NUM define 的值將輸出數(shù)設(shè)置為 1 到 8 之間的值。盡管 sys_main.c 文件將 8 個(gè) ptrData[] 模塊輸入初始化為 8 個(gè)不同的變量地址,但在代碼執(zhí)行期間實(shí)際發(fā)送和使用的模塊輸入數(shù)量將由 dac128s085.h 文件中定義的 DAC_EN_CH_NUM 常量的值決定(如下所示)。大多數(shù)示波器只有四個(gè)探針,因此使用 8 個(gè) DAC128S085 輸出中的 4 個(gè)是本示例中的默認(rèn)設(shè)置。使用 4 個(gè)輸出是本示例實(shí)驗(yàn)中的默認(rèn)設(shè)置,因?yàn)榇蠖鄶?shù)示波器只有四個(gè)探針。更多的輸出將占用更多的 ISR 時(shí)間來轉(zhuǎn)換和傳輸數(shù)據(jù),這可能會(huì)對(duì)用于其他任務(wù)的時(shí)間產(chǎn)生負(fù)面影響,如果用戶希望使用不止 4 個(gè)輸出,必須考慮這一因素。
#define DAC_EN_CH_NUM (4) // 1~8
下面的代碼演示了 DAC128S 對(duì)象、句柄和參數(shù)的初始化和設(shè)置。代碼會(huì)配置八個(gè)模塊輸入 ptrData[0] - ptrData[7],以指向八個(gè)不同軟件變量的地址,但實(shí)際使用的模塊輸入數(shù)量由 dac128s085.h 文件中定義的 DAC_EN_CH_NUM 常量的值決定。dac128s 數(shù)據(jù)指向不同的系統(tǒng)變量,具體取決于構(gòu)建級(jí)別和定義的控制算法。此代碼可在 sys_main.c 文件中找到。
// initialize the DAC128S
dac128sHandle = DAC128S_init(&dac128s);
// setup SPI for DAC128S
DAC128S_setupSPI(dac128sHandle);
... ...
// Build_Level_2 or Level_3, verify the estimator
dac128s.ptrData[0] = &motorVars_M1.angleGen_rad; // CH_A
dac128s.ptrData[1] = &motorVars_M1.angleEST_rad; // CH_B
dac128s.ptrData[2] = &motorVars_M1.anglePLL_rad; // CH_C
dac128s.ptrData[3] = &motorVars_M1.adcData.I_A.value[0]; // CH_D
dac128s.ptrData[4] = &motorVars_M1.adcData.V_V.value[0]; // CH_E, N/A
dac128s.ptrData[5] = &motorVars_M1.adcData.I_A.value[1]; // CH_F, N/A
dac128s.ptrData[6] = &motorVars_M1.adcData.I_A.value[2]; // CH_G, N/A
dac128s.ptrData[7] = &motorVars_M1.adcData.V_V.value[1]; // CH_H, N/A
dac128s.gain[0] = 4096.0f / MATH_TWO_PI;
dac128s.gain[1] = 4096.0f / MATH_TWO_PI;
dac128s.gain[2] = 4096.0f / MATH_TWO_PI;
dac128s.gain[3] = 2.0f * 4096.0f / USER_M1_ADC_FULL_SCALE_CURRENT_A;
dac128s.gain[4] = 2.0f * 4096.0f / USER_M1_ADC_FULL_SCALE_VOLTAGE_V;
dac128s.gain[5] = 2.0f * 4096.0f / USER_M1_ADC_FULL_SCALE_CURRENT_A;
dac128s.gain[6] = 2.0f * 4096.0f / USER_M1_ADC_FULL_SCALE_CURRENT_A;
dac128s.gain[7] = 2.0f * 4096.0f / USER_M1_ADC_FULL_SCALE_VOLTAGE_V;
dac128s.offset[0] = (uint16_t)(0.5f * 4096.0f);
dac128s.offset[1] = (uint16_t)(0.5f * 4096.0f);
dac128s.offset[2] = (uint16_t)(0.5f * 4096.0f);
dac128s.offset[3] = (uint16_t)(0.5f * 4096.0f);
dac128s.offset[4] = (uint16_t)(0.5f * 4096.0f);
dac128s.offset[5] = (uint16_t)(0.5f * 4096.0f);
dac128s.offset[6] = (uint16_t)(0.5f * 4096.0f);
dac128s.offset[7] = (uint16_t)(0.5f * 4096.0f);
下面的代碼演示了在 motor1ctrlISR() 中斷執(zhí)行期間通過 SPI 定期使用新數(shù)據(jù)更新 DAC128S 電路板。此代碼位于 motor1_drive.c 文件中。實(shí)際更新的 DAC 輸出數(shù)量將取決于 DAC_EN_CH_NUM 常數(shù)的值。
// Write the variables data value to DAC128S085
DAC128S_writeData(dac128sHandle);