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.

[参考译文] TMS320F28384S:ADC 启动

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1466077/tms320f28384s-adcs-startup

器件型号:TMS320F28384S
Thread 中讨论的其他器件:C2000WARE

工具与软件:

你(们)好

我正在测试一个基于28384S 的新电路板、在启动两个 ADC 模块时遇到问题:

高使用 PWM1生成 SOCA 和 SOCB (可能只能使用一个)

//
EPwm1Regs.ETPS.bit.SOCPSSEL = 1;
// Generate ADCA SOC
EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO;
EPwm1Regs.ETSOCPS.bit.SOCAPRD2 = 2;
EPwm1Regs.ETSEL.bit.SOCAEN = 1;
//生成 ADCC SOC
EPwm1Regs.ETSEL.bit.SOCBSEL = ET_CTR_ZERO;
EPwm1Regs.ETSOCPS.bit.SOCBPRD2 = 2;
EPwm1Regs.ETSEL.bit.SOCBEN = 1;

我使用两个相似的过程来设置 ADCA 和 ADCC、唯一的区别是所访问的 ADC

void set_adca (void)

EALLOW;
AdcaRegs.ADCCTL2.bit.prescale = 14;
AdcSetMode (ADC_ADCA、ADC_Resolution_12bit、ADC_SIGNALMODE_SINGLE);
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
EDIS;
DELAY_US (1000);

EALLOW;
AdcaRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0x10;

// ADCINA2 = AZ A 相电流
AdcaRegs.ADCSOC0CTL.bit.ACQPS = 14;
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 2;
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5;

// ADCINA3 = AZ B 相电流
AdcaRegs.ADCSOC1CTL.bit.ACQPS = 14;
AdcaRegs.ADCSOC1CTL.bit.CHSEL = 3;
AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 5;

// ADCINA4 = EL A 相电流
AdcaRegs.ADCSOC2CTL.bit.ACQPS = 14;
AdcaRegs.ADCSOC2CTL.bit.CHSEL = 4;
AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = 5;

// ADCINA5 = EL B 相电流
AdcaRegs.ADCSOC3CTL.bit.ACQPS = 14;
AdcaRegs.ADCSOC3CTL.bit.CHSEL = 5;
AdcaRegs.ADCSOC3CTL.bit.TRIGSEL = 5;

// EOC 触发中断
AdcaRegs.ADCINTSEL1N2.bit.INT2SEL = 3;
AdcaRegs.ADCINTSEL1N2.bit.INT2E = 1;
AdcaRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;

EDIS;
}

过程中复杂得多

/*==============================================
函数名称:
目的:
说明:
域:
准确度:
注释:
============================================================ */
__interrupt void adca_isr (void)

Volatile uint16_t TempPIEIER = PieCtrlRegs.PIEIER10.all;

//设置中断优先级:
IER |= M_INT10;
IER &= MINT10;/*设置"全局"优先级*/
PieCtrlRegs.PIEIER10.all &= MG10_2;/*设置"group"优先级*/
PieCtrlRegs.PIEACK.all = 0xFFFF;/*启用 PIE 中断*/
__ asm (" NOP");
EINT;
//读取转换
ADCA_READING [0]= AdcaResultRegs.ADCRESULT0 - 2048;
ADCA_READing[1]= AdcaResultRegs.ADCRESULT1 - 2048;
ADCA_READing[2]= AdcaResultRegs.ADCRESULT2 - 2048;
ADCA_READing[3]= AdcaResultRegs.ADCRESULT3 - 2048;
//清除 ADCINT 标志
AdcaRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;
//恢复寄存器已保存:
颜色;
PieCtrlRegs.PIEIER10.all = TempPIEIER;
}

/*==============================================
函数名称:
目的:
说明:
域:
准确度:
注释:
============================================================ */
_interrupt void ADCC_ISR (void)

Volatile uint16_t TempPIEIER = PieCtrlRegs.PIEIER10.all;

//设置中断优先级:
IER |= M_INT10;
IER &= MINT10;/*设置"全局"优先级*/
PieCtrlRegs.PIEIER10.all &= MG10_10;/*设置"组"优先级*/
PieCtrlRegs.PIEACK.all = 0xFFFF;/*启用 PIE 中断*/
__ asm (" NOP");
EINT;
//读取转换
ADCC_READING [0]= AdccResultRegs.ADCRESULT0;
ADCC_READing[1]= AdccResultRegs.ADCRESULT1;
ADCC_READing[2]= AdccResultRegs.ADCRESULT2;
ADCC_READing[3]= AdccResultRegs.ADCRESULT3;
//清除 ADCINT 标志
AdccRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;
//恢复寄存器已保存:
颜色;
PieCtrlRegs.PIEIER10.all = TempPIEIER;
}

我设置 ADC、调用过程:

//为电源监视器设置 ADCC
SET_ADCC();
//设置 ADCA 以测量电机电流
set_adca();

但是、只有最后一个设置通道才能工作、在这种情况下、只有 ADCA 才能工作并生成中断、模块 ADCC 既不会生成中断。 但只设置一个模块就可以了。

此致

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

    您好!

    问题没有明确说明。 您计划实现什么目标?您面临的问题是什么? 我会进行调查、并尝试提供相应的建议。

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

    尊敬的 Stevan

    我希望两个 ADC 模块正常工作并触发相关的中断过程、现在只有最后一个已初始化的 ADC 模块将触发中断、而另一个模块不会触发中断。  模块都能正常工作、那么这一点很重要。

    此致

    Luca.

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

    您好!

    感谢您的澄清。 请查看 C2000Ware 器件支持示例以查看是否已正确配置所有内容: C:\ti\c2000\C2000Ware_5_03_00_00\device_support\f2837xd\examples\cpu1\adc_soc_ePWM

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

    你(们)好

    只需查看示例和勘误表、我想我可以解决这个问题。 解决方案是在 ADC 准备好工作后启动 PWM、因为 ADC 设置过程中的延迟可能是在 ADC 就绪之前 PWM 触发器到达的第一个、并且不会产生进一步的中断。

    此致 Luca