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.

[参考译文] TMS320F28375S:16位 ADC 提供了奇怪的结果(或 ADC 锁定在12位模式)

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/785068/tms320f28375s-16-bit-adc-gives-weird-results-or-adc-locked-in-12-bit-mode

器件型号:TMS320F28375S

您好!  

我尝试在差分模式下使用3 16位 ADC 同时对3个信号进行采样。  

我的设置:  

差分部分连接到:A2、A3和 B2、B3和 C2、C3

我的信号链的计算值为0v、因此在 ADC 引脚上、我测量的是差分电压为0.04mVac (噪声)的1.498Vdc (VCM)。  

但我得到 的 ADC 结果是2047、2048、2047…

然后、我尝试查看我是否可以测量单端。 我将 ADCA 设置为 DIFF、将 ADCB 设置为单端以测量 B2、将 ADCC 设置为单端以测量 C4 (保持浮动)。

我得到 ADCA 2047、2048、2047、ADCB 2047、2047、2047、2047、2047、... ADCC 506、232、34、0、0、 0、...

我的代码基于 ADC_SoC_ePWM_cpu01示例:   

void Init_ADC (void){

ConfigureADC();
ConfigureEPWM();
SetSOCs();
}

void ConfigureEPWM (void)
{
EALLOW;
//假设 ePWM 时钟已启用
EPwm1Regs.ETSEL.bit.SOCAEN = 0;//禁用组上的 SOC
EPwm1Regs.ETSEL.bit.SOCASEL = 4;//在递增计数时选择 SOC
EPwm1Regs.ETPS.bit.SOCAPRD = 1; //在发生第一个事件时生成脉冲
EPwm1Regs.CMPA.bit.CMPA = 0x0800; //将比较 A 值设置为2048个计数
EPwm1Regs.TBPRD = 0x1000; //将周期设置为4096个计数
EPwm1Regs.TBCTL.bit.CTRMODE = 3; //冻结计数器
EDIS;
}

void ConfigureADC (void){
EALLOW;

//
//写入配置
//
AdcaRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4
AdcbRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4
AdccRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4

AdcSetMode (ADC_ADCA、ADC_Resolution_16BIT、ADC_SIGNALMODE_differential);
AdcSetMode (ADC_ADCB、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);
AdcSetMode (ADC_ADCC、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);


//
//将脉冲位置设置为晚期
//
AdcaRegs.ADCCTL1.bit.INTPULSEPOS=1;
AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdccRegs.ADCCTL1.bit.INTPULSEPOS = 1;

//
//为 ADC 加电
//
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
AdccRegs.ADCCTL1.bit.ADCPWDNZ = 1;

//
//延迟1ms 以允许 ADC 加电时间
//
DELAY_US (1000);

EDIS;
}

void SetSOC (void){

EALLOW;
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 2;//SOC0将转换引脚 A0
AdcbRegs.ADCSOC0CTL.bit.CHSEL = 2;//SOC0将转换引脚 A0
AdccRegs.ADCSOC0CTL.bit.CHSEL = 4;//SOC0将转换引脚 A0

AdcaRegs.ADCSOC0CTL.bit.ACQPS = 63;//采样窗口为100个 SYSCLK 周期
AdcbRegs.ADCSOC0CTL.bit.ACQPS = 63;//采样窗口为100个 SYSCLK 周期
AdccRegs.ADCSOC0CTL.bit.ACQPS = 63;//采样窗口为100个 SYSCLK 周期

AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5;// ePWM1 SOCA/C 上的触发
AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 5;// ePWM1 SOCA/C 上的触发
AdccRegs.ADCSOC0CTL.bit.TRIGSEL = 5;// ePWM1 SOCA/C 上的触发

AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0;// SOC0结束将设置 INT1标志
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用 INT1标志
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保 INT1标志被清除
EDIS;

} 

中断:  

_interrupt void adca1_ISR (void)
{

LED_7_PIN_TOGGLE ();

AdcAResults[resultsIndex]= AdcResultRegs.ADCRESULT0;
AdcBResults[resultsIndex]= AdcbResultRegs.ADCRESULT0;
AdcResults[resultsIndex++]= AdcResultRegs.ADCRESULT0;

if (results_buffer_size <= resultsIndex)
{
resultsIndex = 0;
bufferFull = 1;
}

AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//清除 INT1标志
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
} 

在 main 中运行:  

操作
{
EALLOW;
//
//启动 ePWM
//
EPwm1Regs.ETSEL.bit.SOCAEN = 1;//启用 SOCA
EPwm1Regs.TBCTL.bit.CTRMODE = 0;//取消冻结、并进入递增计数模式

//
//等待、而 ePWM 导致 ADC 转换、然后导致中断、
//填充结果缓冲区,最终设置 bufferFull
//flag
//
while (!bufferFull);
bufferFull = 0;//清除缓冲区已满标志

//
//停止 ePWM
//
EPwm1Regs.ETSEL.bit.SOCAEN = 0;//禁用 SOCA
EPwm1Regs.TBCTL.bit.CTRMODE = 3;//冻结计数器

//
//此时,AdcaResults[]包含一系列转换
//从所选通道
//

//
//软件断点,再次点击运行以获取更新的转换
//
asm (" ESTOP0");
} while (1); 

我缺少什么?  

此致、  

Marko  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我是出于绝望而尝试的
    e2e.ti.com/.../327693

    但我在1个月前购买了我的芯片、因此我不知道该芯片怎么可能是"早期 TMX 样片没有编程 OTP "。

    我的芯片标记为:
    TMS329
    F28375SPTPT
    YFC-7AA529W
    G4
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Marko、

    根据 DS、TMS320F28375S 器件不支持16位 ADC 模式

    http://www.ti.com/document-viewer/TMS320F28377S/datasheet/device-comparison-sprs8814652#SPRS8814652 

    因此、即使寄存器位设置为16位模式、它也不会被写入、器件将始终以12位模式运行。

    您需要获得基于 F28379/7/6的器件才能利用片上 ADC 的16位功能。

    最棒的
    Matthew

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    o DAM、我不知道我是如何错过它的。 如果我在同一个176引脚 PTP 封装中使用28377S、我可以直接更换芯片吗? (相同的引脚输出)

    奇怪的是、将 DevCfgRegs.PERCENF1.all 设置为0会解锁全功能的16位 ADC。