Other Parts Discussed in Thread: SYSCONFIG
器件型号: TMS320F28P659DK-Q1
主题: SysConfig 中讨论的其他器件
尊敬的 Texas 社区:
我当前正在运行 PWM 并成功生成 SOCA 和 SOCB 触发的事件 ADC 转换 。
下一步是锁存 eQEP (增强型正交编码器脉冲)位置 SOCA 或 SOCB 信号、从而使电机位置与 ADC 采集同步。
我已使用 SysConfig 工具尝试以下配置:
-
更改了 频闪 时钟源 “选通信号或与 ADCSOCA 进行“ (或 ADCSOCB)。
-
已尝试使用读取锁定位置
EQEP_getStrobePositionLatch(myEQEP0_BASE)。
问题在于此值 始终为零 。
请您深入了解配置中可能缺少的内容吗?
SysConfig 工具生成的相关代码为:
void myEQEP0_init(){
//
// Disable, clear all flags and interrupts
//
EQEP_disableInterrupt(myEQEP0_BASE,
(EQEP_INT_GLOBAL |
EQEP_INT_POS_CNT_ERROR |
EQEP_INT_PHASE_ERROR |
EQEP_INT_DIR_CHANGE |
EQEP_INT_WATCHDOG |
EQEP_INT_UNDERFLOW |
EQEP_INT_OVERFLOW |
EQEP_INT_POS_COMP_READY |
EQEP_INT_POS_COMP_MATCH |
EQEP_INT_STROBE_EVNT_LATCH |
EQEP_INT_INDEX_EVNT_LATCH |
EQEP_INT_UNIT_TIME_OUT |
EQEP_INT_QMA_ERROR));
EQEP_clearInterruptStatus(myEQEP0_BASE,
(EQEP_INT_GLOBAL |
EQEP_INT_POS_CNT_ERROR |
EQEP_INT_PHASE_ERROR |
EQEP_INT_DIR_CHANGE |
EQEP_INT_WATCHDOG |
EQEP_INT_UNDERFLOW |
EQEP_INT_OVERFLOW |
EQEP_INT_POS_COMP_READY |
EQEP_INT_POS_COMP_MATCH |
EQEP_INT_STROBE_EVNT_LATCH |
EQEP_INT_INDEX_EVNT_LATCH |
EQEP_INT_UNIT_TIME_OUT |
EQEP_INT_QMA_ERROR));
EQEP_SourceSelect source_myEQEP0 =
{
EQEP_SOURCE_DEVICE_PIN, // eQEPA source
EQEP_SOURCE_DEVICE_PIN, // eQEPB source
EQEP_SOURCE_DEVICE_PIN, // eQEP Index source
};
//
// Selects the source for eQEPA/B/I signals
//
EQEP_selectSource(myEQEP0_BASE, source_myEQEP0);
//
// Set the strobe input source of the eQEP module.
//
EQEP_setStrobeSource(myEQEP0_BASE,EQEP_STROBE_OR_ADCSOCA);
//
// Sets the polarity of the eQEP module's input signals.
//
EQEP_setInputPolarity(myEQEP0_BASE,false,false,false,false);
//
// Configures eQEP module's quadrature decoder unit.
//
EQEP_setDecoderConfig(myEQEP0_BASE, (EQEP_CONFIG_QUADRATURE | EQEP_CONFIG_2X_RESOLUTION | EQEP_CONFIG_NO_SWAP | EQEP_CONFIG_IGATE_DISABLE));
//
// Set the emulation mode of the eQEP module.
//
EQEP_setEmulationMode(myEQEP0_BASE,EQEP_EMULATIONMODE_STOPIMMEDIATELY);
//
// Configures eQEP module position counter unit.
//
EQEP_setPositionCounterConfig(myEQEP0_BASE,EQEP_POSITION_RESET_IDX,1999U);
//
// Sets the current encoder position.
//
EQEP_setPosition(myEQEP0_BASE,0U);
//
// Disables the eQEP module unit timer.
//
EQEP_disableUnitTimer(myEQEP0_BASE);
//
// Disables the eQEP module watchdog timer.
//
EQEP_disableWatchdog(myEQEP0_BASE);
//
// Configures the quadrature modes in which the position count can be latched.
//
EQEP_setLatchMode(myEQEP0_BASE,(EQEP_LATCH_UNIT_TIME_OUT|EQEP_LATCH_RISING_STROBE|EQEP_LATCH_RISING_INDEX));
//
// Set the quadrature mode adapter (QMA) module mode.
//
EQEP_setQMAModuleMode(myEQEP0_BASE,EQEP_QMA_MODE_BYPASS);
//
// Disable Direction Change During Index
//
EQEP_disableDirectionChangeDuringIndex(myEQEP0_BASE);
//
// Enables individual eQEP module interrupt sources.
//
EQEP_enableInterrupt(myEQEP0_BASE,(EQEP_INT_INDEX_EVNT_LATCH));
//
// Configures the mode in which the position counter is initialized.
//
EQEP_setPositionInitMode(myEQEP0_BASE,(EQEP_INIT_FALLING_INDEX));
//
// Sets the software initialization of the encoder position counter.
//
EQEP_setSWPositionInit(myEQEP0_BASE,false);
//
// Sets the init value for the encoder position counter.
//
EQEP_setInitialPosition(myEQEP0_BASE,0U);
//
// Enables the eQEP module.
//
EQEP_enableModule(myEQEP0_BASE);
}
提前感谢您、
Luciano。


