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.
工具与软件:
大家好、我是 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