Thread 中讨论的其他器件:DRV8837、 controlSUITE
您好!
我使用 epwm1来馈入 DRV8837 (基于2xDC 电机示例)。
我使用 ADC 来感测电机电流和3个其他信号。
在 epwm1上同步 ADC 以捕捉电机电流。
过去几个月都可以正常工作、但自从上次更新固件后、我出现了一种奇怪的行为...
我不认为我的改变是造成这种麻烦的真正原因、请参阅下文
初始代码:
// Compute filtered value of initial guide sensor position for(j = SIGNAL_LENGTH; j > 0; j--) { iirHall.input = AdcResult.ADCRESULT1 << 3; // SOC1, IQ12 to 15 iirHall.calc(&iirHall); DELAY_US(40); } // Compute filtered value of initial paddle value for(j = SIGNAL_LENGTH; j > 0; j--) { iirClick.input = (AdcResult.ADCRESULT3 - AdcResult.ADCRESULT2) << 3; // SOC3 - SOC2, IQ12 to 15 iirClick.calc(&iirClick); DELAY_US(40); }
更改:
// Compute filtered value for(j = SIGNAL_LENGTH; j > 0; j--) { // Initial guide sensor position iirHall.input = AdcResult.ADCRESULT1 << 3; // SOC1, IQ12 to 15 iirHall.calc(&iirHall); // Initial paddle value iirClick.input = (AdcResult.ADCRESULT3 - AdcResult.ADCRESULT2) << 3; // SOC3 - SOC2, IQ12 to 15 iirClick.calc(&iirClick); DELAY_US(40); }
在某些未知情况下、ADC 不会启动转换(在 AdcOffsetSelfCal 之后保持在偏移值80)或稍后启动。
TBCLKSYNC 被使能、但是当从复位开始时 TBCTR 并不总是在计数。
以下代码使问题变得更加频繁(如果从 DeviceInit()中启用了 TBCLKSYNC 并且不再更改,则不会出现此问题)
// Self calibration on internal ref AdcInit(); // Enable 5V // Note: external 3.3V ref needs 2ms settling time GpioDataRegs.GPASET.bit.GPIO10 = 1; DELAY_US(2000.0L); // Initialize PWM module pwm1.PeriodMax = PWM_PRD_MAX; EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; EDIS; PWM_INIT_MACRO(pwm1) EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; EDIS; // Initialize ADC module ADC_MACRO_INIT()
ADC 转换在 CCS 在调试模式下重新启动后运行良好、但在复位后均不运行。
在"释放"运行时、TMS320在启动前由 MSP430通过 XRS 保持在复位状态大约800ms。
如果 MSP430被复位、TMS320由 MSP430再次复位。
我想这种行为已经存在了一段时间、因为这种变化看起来微不足道、但现在 TMS320在复位后无法频繁启动转换。
有什么想法可以将定时器基座模块设置为有问题?
在设置 ADC 校准、ePWM1和 ADC SoC 时是否有其他建议?
如果在使用内部带隙进行自校准后对 ADC 使用外部基准、是否有任何建议?
配置:CCS9.3和 ti-CGT-C2000_18.12.7.LTS
谢谢你