This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F280039C:电机抖动问题

Guru**** 2943400 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1291298/tms320f280039c-motor-jitter-problem

器件型号:TMS320F280039C

大家好、

客户有问题需要您的帮助:

之前0049的电机控制电机正常、但是移植到0039后出现电机转速抖动、分析是 AD 采样问题。

Re 在电路板上绘制、现象仍然是相同的、以下是 ADC 的初始化程序、用于帮助查看是否有任何错误:

void InitSetAdc(Uint type)
{
volatile Uint waite;
int trigsel;


trigsel = 5;


//EALLOW;
#define ANALOGSUBSYS_BASE 0x0005D700U
ADC_setVREF(ANALOGSUBSYS_BASE, 0, 0);
//AnalogSubsysRegs.ANAREFCTL.bit.ANAREFSEL = 0; // 内部基准,1.65(0~3.3V)
//AnalogSubsysRegs.ANAREFCTL.bit.ANAREFBSEL = 0;
//AnalogSubsysRegs.ANAREFCTL.bit.ANAREFCSEL = 0;
EALLOW;
AdcaRegs.ADCCTL2.bit.PRESCALE = 0x02;
AdcbRegs.ADCCTL2.bit.PRESCALE = 0x02;
AdccRegs.ADCCTL2.bit.PRESCALE = 0x02;

AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1; All analog circuitry inside the core is powered up
AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
AdccRegs.ADCCTL1.bit.ADCPWDNZ = 1;
//================================================================================================================

============================================================================================================================================================================================================== waite<5000; waite++){} //Delay
//------------------------------------------------------------------------------------------------
asm(" RPT #28 || NOP"); Two ADCCLKs are required; Delay of 28 empty cycles
/
/ Start setting the ADC's control registers, conversion channel selection registers, etc.
AdcaRegs.ADCBURSTCTL.bit.BURSTEN
= 0; SOC Burst Mode Enable
AdcbRegs.ADCBURSTCTL.bit.BURSTEN = 0; SOC Burst Mode Enable
AdccRegs.ADCBURSTCTL.bit.BURSTEN = 0; SOC Burst Mode Enable

//AdcaRegs.ADCOFFTRIM.all = 0;
//AdcbRegs.ADCOFFTRIM.all = 0;
//AdccRegs.ADCOFFTRIM.all = 0;

AdcbRegs.ADCINTSEL1N2.bit.INT1SEL = 4; Channel 3 conversion completes and produces interrupt
ADCINT1 if (0 == type)
{
AdcbRegs.ADCINTSEL1N2.bit.INT1E = 1; } ADCINT1 is enabled
}
else
{
AdcbRegs.ADCINTSEL1N2.bit.INT1E = 0; ADCINT1 is disabled
}
AdcbRegs.ADCINTOVFCLR.bit.ADCINT1 = 1;

#define ADC_IW_A2 0x02 // IW A2
#define ADC_AI4_A5 0x05 // AI4 A5
#define ADC_VV_A6 0x06 // VV A6

#define ADC_IU_B2 0x02 // IU B2
#define ADC_VDC_B5 0x05 // VDC B5
#define ADC_AI5_B8 0x08 // AI5 B8
#define ADC_AI6_B9 0x09 // AI6 B9
#define ADC_IV_B11 0x0B // IV B11

#define ADC_UV_C0 0x00 // UV C0
#define ADC_AI1_C2 0x02 // AI1 C2
#define ADC_TD_C3 0x03 // TD C3
#define ADC_WV_C4 0x04 // WV C4
#define ADC_AI2_C5 0x05 // AI2 C5

#define ADC_ACQPS 2
//********************************ePWM1 ADCSOCA触发,
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdcaRegs.ADCSOC2CTL.bit.CHSEL = ADC_IW_A2; // 18:15 SOC0 Channel Select
AdcaRegs.ADCSOC0CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
/*
AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdcaRegs.ADCSOC1CTL.bit.CHSEL = ADC_IW_A2; // 18:15 SOC0 Channel Select
AdcaRegs.ADCSOC1CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdcaRegs.ADCSOC2CTL.bit.CHSEL = ADC_IW_A2; // 18:15 SOC0 Channel Select
AdcaRegs.ADCSOC2CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
AdcaRegs.ADCSOC3CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdcaRegs.ADCSOC3CTL.bit.CHSEL = ADC_IW_A2; // 18:15 SOC0 Channel Select
AdcaRegs.ADCSOC3CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
*/
AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdcaRegs.ADCSOC1CTL.bit.CHSEL = ADC_AI4_A5; // 18:15 SOC0 Channel Select
AdcaRegs.ADCSOC1CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdcaRegs.ADCSOC0CTL.bit.CHSEL = ADC_VV_A6; // 18:15 SOC0 Channel Select
AdcaRegs.ADCSOC2CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale

AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdcbRegs.ADCSOC2CTL.bit.CHSEL = ADC_IU_B2; // 18:15 SOC0 Channel Select
AdcbRegs.ADCSOC0CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
/*
AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdcbRegs.ADCSOC1CTL.bit.CHSEL = ADC_IU_B2; // 18:15 SOC0 Channel Select
AdcbRegs.ADCSOC1CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
AdcbRegs.ADCSOC2CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdcbRegs.ADCSOC2CTL.bit.CHSEL = ADC_IU_B2; // 18:15 SOC0 Channel Select
AdcbRegs.ADCSOC2CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
AdcbRegs.ADCSOC3CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdcbRegs.ADCSOC3CTL.bit.CHSEL = ADC_IU_B2; // 18:15 SOC0 Channel Select
AdcbRegs.ADCSOC3CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
*/
AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdcbRegs.ADCSOC1CTL.bit.CHSEL = ADC_VDC_B5; // 18:15 SOC0 Channel Select
AdcbRegs.ADCSOC1CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
AdcbRegs.ADCSOC2CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdcbRegs.ADCSOC0CTL.bit.CHSEL = ADC_AI5_B8; // 18:15 SOC0 Channel Select
AdcbRegs.ADCSOC2CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
AdcbRegs.ADCSOC3CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdcbRegs.ADCSOC3CTL.bit.CHSEL = ADC_AI6_B9; // 18:15 SOC0 Channel Select
AdcbRegs.ADCSOC3CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
AdcbRegs.ADCSOC4CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdcbRegs.ADCSOC4CTL.bit.CHSEL = ADC_IV_B11; // 18:15 SOC0 Channel Select
AdcbRegs.ADCSOC4CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale

AdccRegs.ADCSOC0CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdccRegs.ADCSOC0CTL.bit.CHSEL = ADC_UV_C0; // 18:15 SOC0 Channel Select
AdccRegs.ADCSOC0CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
AdccRegs.ADCSOC1CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdccRegs.ADCSOC1CTL.bit.CHSEL = ADC_AI1_C2; // 18:15 SOC0 Channel Select
AdccRegs.ADCSOC1CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
AdccRegs.ADCSOC2CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdccRegs.ADCSOC2CTL.bit.CHSEL = ADC_TD_C3; // 18:15 SOC0 Channel Select
AdccRegs.ADCSOC2CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
AdccRegs.ADCSOC3CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdccRegs.ADCSOC3CTL.bit.CHSEL = ADC_WV_C4; // 18:15 SOC0 Channel Select
AdccRegs.ADCSOC3CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
AdccRegs.ADCSOC4CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA
AdccRegs.ADCSOC4CTL.bit.CHSEL = ADC_AI2_C5; // 18:15 SOC0 Channel Select
AdccRegs.ADCSOC4CTL.bit.ACQPS = ADC_ACQPS; // 8:0 SOC0 Acquisition Prescale
AdccRegs.ADCSOC5CTL.bit.TRIGSEL = trigsel; //ePWM1, ADCSOCA

AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;

EDIS;
}

谢谢。此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ben:

    一些问题:

    • 它们是否考虑了任何系统时钟差异? F28004x 是100MHz 器件、而 F28003x 可在高达120MHz 的频率下运行
    • 其 ACQPS 相当小、设置为2。 他们是否曾尝试过提高亮度?
    • 他们在使用什么硬件? EVM 还是定制?
      • 除 C2000器件外、F28004x 和 F28003x 系统硬件之间是否有差异?
    • 他们可以通过在开环控制下运行电机并绘制检测到的数据(电流/电压)来比较和验证其 ADC 采样性能
      • 您可以尝试使用 F28004x 和 F28003x 系统来比较

    此致!

    凯文

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kevin:

    考虑到了时钟差异、28034和28335平台没有遇到任何问题。 硬件是自己设计的。 目前、永磁同步电机无法以纯开环运行电机。 目前、我们改为使用其他平台、这对于电机是正常的。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ben:

    28034和28335平台未遇到任何问题

    F2803x/F2833x 器件是第2代器件、其外设与 F28004x/F28003x 器件截然不同。

    目前,永磁同步电机无法以纯开环方式操作电机。 [/报价]

    好的。

    目前,我们改为其他平台,这是正常的电机。[/报价]

    您说其他平台意味着什么? 他们使用的 F28004x 和 F28003x 硬件之间是否有任何差异?

    他们可以查看下面的 F28004x 到 F28003x 迁移指南、可能需要考虑一些重要差异。

    https://www.ti.com/lit/spruiw3

    此致!

    凯文

    [/quote]