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.

[参考译文] TMDSCNCD28379D:ADC 结果寄存器问题(与 SOC 不匹配)

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1433903/tmdscncd28379d-adc-result-register-problem-not-matched-to-soc

器件型号:TMDSCNCD28379D
主题中讨论的其他器件:TMS320F28379D

工具与软件:

大家好、我是 eunjin。

我当前正在尝试激活 TMS320F28379D 控制卡上的 ADC。 在系统中使用它之前、我要检查 ADC 寄存器是否已正确分配、但发生了错误。

我打算使用 ADCA0~5 ADCB0~5、其中 SOC0被分配给 ADCA0、SOC1被分配给 ADCA1、...依顺序依此类推。

相关代码的设置如下

void setupADC(void)
{

//single ended

AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
AdcSetMode(ADC_ADCB, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);

EALLOW;
//ADCA
AdcaRegs.ADCCTL2.bit.PRESCALE = 0;

AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1; 

AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1; 

//ADCB
AdcbRegs.ADCCTL2.bit.PRESCALE = 0;

AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1; 

AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1; 

EDIS;

DELAY_US(1000);
}

void setupADCSOC(void)
{

    EALLOW;
//ADCA

   AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0;     // SOC0(=ADCA0)
   AdcaRegs.ADCSOC0CTL.bit.ACQPS = 50;    
   AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 1;   // Trigger on CPUTIMER0


   AdcaRegs.ADCSOC1CTL.bit.CHSEL = 1;     // SOC1(=ADCA1)
   AdcaRegs.ADCSOC1CTL.bit.ACQPS = 50;     
   AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 1;   // Trigger on CPUTIMER0
//
   AdcaRegs.ADCSOC2CTL.bit.CHSEL = 2;     // SOC2(=ADCA2)
   AdcaRegs.ADCSOC2CTL.bit.ACQPS = 50;     
   AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = 1;   // Trigger on CPUTIMER0

   AdcaRegs.ADCSOC3CTL.bit.CHSEL = 3;     // SOC3(=ADCA3)
   AdcaRegs.ADCSOC3CTL.bit.ACQPS = 50;     
   AdcaRegs.ADCSOC3CTL.bit.TRIGSEL = 1;   // Trigger on CPUTIMER0


   AdcaRegs.ADCSOC4CTL.bit.CHSEL = 4;     // SOC4(=ADCA4)
   AdcaRegs.ADCSOC4CTL.bit.ACQPS = 50;    
   AdcaRegs.ADCSOC4CTL.bit.TRIGSEL = 1;   // Trigger on CPUTIMER0


   AdcaRegs.ADCSOC5CTL.bit.CHSEL = 5;     // SOC5(=ADCA5)
   AdcaRegs.ADCSOC5CTL.bit.ACQPS = 50;    
   AdcaRegs.ADCSOC5CTL.bit.TRIGSEL = 1;   // Trigger on CPUTIMER0

//   AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0; // End of SOC5 will set INT1 flag
//   AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1; // Enable INT1 flag
//   AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; // Make sure INT1 flag is cleared

   //ADCB

   AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0;  // SOC0(=ADCB0)
   AdcbRegs.ADCSOC0CTL.bit.ACQPS = 50;     
   AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 1;   // Trigger on CPUTIMER0

   AdcbRegs.ADCSOC1CTL.bit.CHSEL = 1;     //  SOC1(=ADCB1)
   AdcbRegs.ADCSOC1CTL.bit.ACQPS = 50;     
   AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = 1;   // Trigger on CPUTIMER0

   AdcbRegs.ADCSOC2CTL.bit.CHSEL = 2;     //  SOC2(=ADCB2)
   AdcbRegs.ADCSOC2CTL.bit.ACQPS = 50;     
   AdcbRegs.ADCSOC2CTL.bit.TRIGSEL = 1;   // Trigger on CPUTIMER0

   AdcbRegs.ADCSOC3CTL.bit.CHSEL = 3;     //  SOC3(=ADCB3)
   AdcbRegs.ADCSOC3CTL.bit.ACQPS = 50;     
   AdcbRegs.ADCSOC3CTL.bit.TRIGSEL = 1;   // Trigger on CPUTIMER0

   AdcbRegs.ADCSOC4CTL.bit.CHSEL = 4;     //  SOC4(=ADCB4)
   AdcbRegs.ADCSOC4CTL.bit.ACQPS = 50;     
   AdcbRegs.ADCSOC4CTL.bit.TRIGSEL = 1;   // Trigger on CPUTIMER0

   AdcbRegs.ADCSOC5CTL.bit.CHSEL = 5;     //  SOC5(=ADCB5)
   AdcbRegs.ADCSOC5CTL.bit.ACQPS = 50;    
   AdcbRegs.ADCSOC5CTL.bit.TRIGSEL = 1;   // Trigger on CPUTIMER0

  // AdcbRegs.ADCINTSEL1N2.bit.INT1SEL = 5; // End of SOC5 will set INT1 flag
   //AdcbRegs.ADCINTSEL1N2.bit.INT1E = 1; // Enable INT1 flag
  // AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; // Make sure INT1 flag is cleared


   EDIS;
}

正如预期的那样、当 向 ADCA0引脚施加3.3V 电压时、RESULT0寄存器应输出4095、而 当 向 ADCA0引脚施加0V 电压时、结果0应产生0。

但是、将 3.3V 施加到 ADCA0会更改 RESULT1和 RESULT2寄存器中的值 (在这个情况下、引脚 ADCA1至 ADCA5被连接至 GND。)

此外、当向 ADCA1施加3.3V 电压(将 ADCA0和 ADCA 2至5 连接至 GND)时、RESULT1寄存器的值没有变化。

我已正确分配引脚、将 SW2:基准电压设置为0–3.3V、 但我仍然遇到结果寄存器值的意外变化以及 ADCB 中的同样问题。

                          

 寄存器1和2更改

     

和 adcA1 3.3V (黄线)(adc0、2~5:0V)-->全部结果0

总之、当向 ADC 引脚施加电压时、结果值不会改变、或者不同的结果寄存器的结果也会改变  

提前感谢。
此致、恩津

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

    您好!

    我知道要在代码中将 SOC1的通道设置为 A1、但我担心您项目中的其他内容会改变该 SOC 的输入。  

    您是否可以使用 CCS 检查 SOC 控制寄存器的值以验证输入通道?  

    谢谢!

    Ben Collier

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

      

    您好、 感谢您的答复。

    已检查 SOC 控制寄存器、似乎没有问题

    (这张照片是在向 ADCA1施加3.3V 电压时拍摄的)

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

    请允许我对此进行研究、并尽快与您联系。  

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

    您好!

    我终于花了一些时间来研究这个问题、我无法重现你的问题。 是否对您的控制卡 PCB 进行了任何修改、以致这些引脚可能已短接在一起?  

    谢谢!

    Ben Collier