主题中讨论的其他器件: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 事件就可以摆脱这种状态吗?

