ZHCUBZ5A September 2021 – April 2024
DAC128S 模塊可將最多 8 個軟件變量轉換為 12 位整數(shù)值,并通過 SPI 將數(shù)據(jù)傳輸至 DAC128S085EVM 上的數(shù)模轉換器 (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 個 SPI 模塊,該模塊在 BoosterPack 站點 1 和站點 2 之間共享。這需要在 LaunchPad 上填充 0Ω 電阻器來將 SPI 信號連接到 DAC128S085EVM 連接到的 BoosterPack 站點 2。有關特定的電阻器標識符,請參閱 LAUNCHXL-F2800137 原理圖中的 SPI 路由 部分。 (2) 跳線將 C2000 SPI_STE (SCS) 引腳接至 DAC128S085EVM 上的 SYNC 引腳 JA-2。C2000 SPI_STE 引腳使用情況將取決于所使用的逆變器 BoosterPack:
|
使用 DAC128S085EVM 時需要進行硬件更改。要啟用 DAC128S 功能,必須在工程屬性中添加預定義的符號 DAC_128S_ENABLE,如圖 3-19 所示。
下面的代碼演示了 DAC128S 對象的聲明。此代碼位于 sys_main.c 文件中。
DAC128S_Handle dac128sHandle; //!< the DAC128S interface handle
DAC128S_Obj dac128s; //!< the DAC128S interface object
DAC128S085 具有 8 通道 12 位數(shù)模轉換器 (DAC),因此用戶可以通過更改 dac128s085.h 文件中 DAC_EN_CH_NUM define 的值將輸出數(shù)設置為 1 到 8 之間的值。盡管 sys_main.c 文件將 8 個 ptrData[] 模塊輸入初始化為 8 個不同的變量地址,但在代碼執(zhí)行期間實際發(fā)送和使用的模塊輸入數(shù)量將由 dac128s085.h 文件中定義的 DAC_EN_CH_NUM 常量的值決定(如下所示)。大多數(shù)示波器只有四個探針,因此使用 8 個 DAC128S085 輸出中的 4 個是本示例中的默認設置。使用 4 個輸出是本示例實驗中的默認設置,因為大多數(shù)示波器只有四個探針。更多的輸出將占用更多的 ISR 時間來轉換和傳輸數(shù)據(jù),這可能會對用于其他任務的時間產(chǎn)生負面影響,如果用戶希望使用不止 4 個輸出,必須考慮這一因素。
#define DAC_EN_CH_NUM (4) // 1~8
下面的代碼演示了 DAC128S 對象、句柄和參數(shù)的初始化和設置。代碼會配置八個模塊輸入 ptrData[0] - ptrData[7],以指向八個不同軟件變量的地址,但實際使用的模塊輸入數(shù)量由 dac128s085.h 文件中定義的 DAC_EN_CH_NUM 常量的值決定。dac128s 數(shù)據(jù)指向不同的系統(tǒng)變量,具體取決于構建級別和定義的控制算法。此代碼可在 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 文件中。實際更新的 DAC 輸出數(shù)量將取決于 DAC_EN_CH_NUM 常數(shù)的值。
// Write the variables data value to DAC128S085
DAC128S_writeData(dac128sHandle);