ZHCUBZ4 April 2024
DATALOG 模块将用户可选软件变量(缺省情况下为四个变量)的实时值存储在 TI MCU 上提供的数据 RAM 中,如图 4-29 所示。通过将模块输入配置为四个变量的地址来选择四个变量。四个 RAM 缓冲区位置的起始地址为 &((datalog).datalogBuff)[0]、&((datalog).datalogBuff)[1]、&((datalog).datalogBuff)[2] 和 &((datalog).datalogBuff)[3]。这些 Datalog 缓冲区是包含值触发数据的大型数组,这些数据随后可以显示在图形中。DATALOG 预分频器是可配置的,这使得 Datalog 函数只能从每个预分频样本中记录一个。可以在 datalog_input.h 文件中选择数据日志缓冲区的数量、缓冲区大小和数据类型。
要启用 DATALOG 功能,必须在工程属性中添加预定义符号 DATALOG_EN,如图 4-2 所示。
以下代码演示了一个 DATALOG 对象和句柄的声明。此代码位于 datalog.c 文件中。
__attribute__ ((section("datalog_data"))) DATALOG_Obj datalog;
DATALOG_Handle datalogHandle; //!< the handle for the Datalog object
这会将数据日志对象置于存储器的 datalog_data 段中。该段可以是 TCM 或 OCRAM。通常,我们建议使用 OCRAM,因为 TCM 大小有限,且为软件的时间关键型部分所需。在 CCS12.6 中,禁用数据高速缓存以便能够记录 OCRAM 中的数据。要禁用数据缓存,必须取消选中 Tools > ARM Advanced Features 中的 Data Cache Enabled,如图 4-30 所示。
以下代码展示了 datalog 对象、句柄和参数的初始化和设置。此代码位于 sys_main.c 文件中。
// Initialize Datalog
datalogHandle = DATALOG_init(&datalog, sizeof(datalog), manual, 0, 1);
DATALOG_Obj *datalogObj = (DATALOG_Obj *)datalogHandle;
以下代码展示了指向变量地址的模块输入的配置。datalog 模块输入指向不同的系统变量,具体取决于构建级别。此代码位于 sys_main.c 文件中:
datalogObj->iptr[0] = (float32_t*) &motorVars_M1.adcData.V_V.value[0];
datalogObj->iptr[1] = (float32_t*) &motorVars_M1.adcData.I_A.value[0];
datalogObj->iptr[2] = (float32_t*) &motorVars_M1.adcData.I_A.value[1];
datalogObj->iptr[3] = (float32_t*) &motorVars_M1.angleFOC_rad;
以下代码演示了在 motor1ctrlISR() 中断执行期间使用新数据定期更新 datalog 缓冲区。此代码位于 motor1_drive.c 文件中。
#if defined(DATALOG_EN)
DATALOG_update(datalogHandle);
#endif // DATALOG_EN
datalog 模块与图形工具一同使用,该工具提供了一种直观检查变量并判断系统性能的方法。CCS 中提供了图形工具,可以各种图形类型显示数据数组。数据数组以各种格式存储在器件的存储器中。
当工程处于调试模式时,打开并设置时间图窗口来绘制数据日志缓冲区,如图 4-31 中所示。或者,用户可以导入位于工程文件夹中的图形配置文件。要导入它们,请点击:Tools -> Graph -> Single Time…,选择“import”并浏览到以下位置 <workspace>\universal_motorcontrol_am263x_r5fss0-0_nortos_ti-arm-clang\src_control\debug\,然后选择 datalog.graphProp 文件。点击“OK”,这样会将 Graphs 添加到调试视图中。点击图形选项卡左上角的“Continuous Refresh”按钮。