主题中讨论的其他器件:SysConfig
您好:专家,
我已将 SDFM 模块配置为使用控制环路 OCR 为58的 SIN3滤波器、这将为我提供大约12位(ENOB)
以下是 SDFM 设置:
void HAL_setupSDFM(HAL_MTR_Handle handle) { HAL_MTR_Obj *obj = (HAL_MTR_Obj*) handle; // // Input Control Unit // // Configure Input Control Unit: Modulator Clock rate = Modulator data rate // SDFM_setupModulatorClock(obj->sdfmHandle, SDFM_FILTER_1, SDFM_MODULATOR_CLK_EQUAL_DATA_RATE); SDFM_setupModulatorClock(obj->sdfmHandle, SDFM_FILTER_2, SDFM_MODULATOR_CLK_EQUAL_DATA_RATE); SDFM_setupModulatorClock(obj->sdfmHandle, SDFM_FILTER_3, SDFM_MODULATOR_CLK_EQUAL_DATA_RATE); // // Configure comparator filter settings(Not used) // SDFM_configComparator(obj->sdfmHandle, (SDFM_FILTER_1 | SDFM_FILTER_SINC_1 | SDFM_SET_OSR(32)), SDFM_THRESHOLD(32767,0)); SDFM_configComparator(obj->sdfmHandle, (SDFM_FILTER_2 | SDFM_FILTER_SINC_1 | SDFM_SET_OSR(32)), SDFM_THRESHOLD(32767,0)); SDFM_configComparator(obj->sdfmHandle, (SDFM_FILTER_3 | SDFM_FILTER_SINC_1 | SDFM_SET_OSR(32)), SDFM_THRESHOLD(32767,0)); // // Configure data filter settings(Page 1814 of Tech Manual) // SDFM_configDataFilter(obj->sdfmHandle, (SDFM_FILTER_1 | SDFM_FILTER_SINC_3 | SDFM_SET_OSR(58)), (SDFM_FILTER_ENABLE | SDFM_DATA_FORMAT_16_BIT | SDFM_SHIFT_VALUE(3))); SDFM_configDataFilter(obj->sdfmHandle, (SDFM_FILTER_2 | SDFM_FILTER_SINC_3 | SDFM_SET_OSR(58)), (SDFM_FILTER_ENABLE | SDFM_DATA_FORMAT_16_BIT | SDFM_SHIFT_VALUE(3))); SDFM_configDataFilter(obj->sdfmHandle, (SDFM_FILTER_3 | SDFM_FILTER_SINC_3 | SDFM_SET_OSR(58)), (SDFM_FILTER_ENABLE | SDFM_DATA_FORMAT_16_BIT | SDFM_SHIFT_VALUE(3))); // // Configure SDSYNC (Filter reset from PWM) // SDFM_disableExternalReset(obj->sdfmHandle, SDFM_FILTER_1); SDFM_disableExternalReset(obj->sdfmHandle, SDFM_FILTER_2); SDFM_disableExternalReset(obj->sdfmHandle, SDFM_FILTER_3); SDFM_enableInterrupt(obj->sdfmHandle, SDFM_FILTER_1, SDFM_DATA_FILTER_ACKNOWLEDGE_INTERRUPT); SDFM_enableInterrupt(obj->sdfmHandle, SDFM_FILTER_2, SDFM_DATA_FILTER_ACKNOWLEDGE_INTERRUPT); SDFM_enableInterrupt(obj->sdfmHandle, SDFM_FILTER_3, SDFM_DATA_FILTER_ACKNOWLEDGE_INTERRUPT); SDFM_disableInterrupt(obj->sdfmHandle, SDFM_FILTER_1, (SDFM_HIGH_LEVEL_THRESHOLD_INTERRUPT | SDFM_LOW_LEVEL_THRESHOLD_INTERRUPT | SDFM_MODULATOR_FAILURE_INTERRUPT)); SDFM_disableInterrupt(obj->sdfmHandle, SDFM_FILTER_2, (SDFM_HIGH_LEVEL_THRESHOLD_INTERRUPT | SDFM_LOW_LEVEL_THRESHOLD_INTERRUPT | SDFM_MODULATOR_FAILURE_INTERRUPT)); SDFM_disableInterrupt(obj->sdfmHandle, SDFM_FILTER_3, (SDFM_HIGH_LEVEL_THRESHOLD_INTERRUPT | SDFM_LOW_LEVEL_THRESHOLD_INTERRUPT | SDFM_MODULATOR_FAILURE_INTERRUPT)); // // Enable master interrupt so that any of the filter interrupts can trigger // by SDFM interrupt to CPU // Note: This is enabled in PWM ISR, so that phase currents are ready once every PWM cycle // SDFM_disableMasterFilter(obj->sdfmHandle); }
我发现此 Excel 工具很有用:
在 Excel 中、它说滤波器稳定时间将为 17.4微秒。
查看 MCU 的技术参考手册、在 AFx 事件部分中:
那么、这是否意味着只要启用主中断(SDCTL.MIE = 1)、AFx 事件发生就需要17.4微秒?
其次、您能否确认 SDFM 模块的所有四个滤波器通道都并行工作? 我需要检查所有 AFX 事件的状态吗、还是 只轮询任何一个 AFX 事件就可以摆脱这种状态吗?