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.

[参考译文] CCS/TMS320F2.8335万:如何正确读取ADC镜像?

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/620655/ccs-tms320f28335-how-to-read-adc-mirror-correctly

部件号:TMS320F2.8335万

工具/软件:Code Composer Studio

你好

我想用ADC读取三个电压值,这些值不在0-3V范围内,所以使用运算放大器,我将它们衰减(使用系数q),然后加上恒定电压(p)以获得0-3V的电压,然后用ADC读取。

我的问题:

1.读取此值后,我从结果中减去加电压,然后将其乘以q以获得实际电压。 我应该使用ADC镜像寄存器还是ADC结果寄存器?  到目前为止,我一直在执行以下代码,但没有结果:

AdcRegs.ADCMAXCONV.ALL = 0x0003; //在SEQ1上设置2个conv
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x2;//将ADCINA2设置为第一个SEQ1转换
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x3;//将ADCINA3设置为2nd SEQ1 Conv.
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x4;

AdcRegs.ADCTRL1.bit.ACQ_PS=0x3;
AdcRegs.ADCTRL2.bit.ePWM_SOCA_SEQ1 = 1;

AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;//启用SEQ1中断(每个EOS)

EPwm1Regs.ETSEL.bit.SOCAEN = 1; //在组上启用SOC
EPwm1Regs.ETSEL.bit.SOCASEL = 4;//在计数增加时从CPMA中选择SOC
EPwm1Regs.ETPS.bit.SOCAPRD = 1; //在第一个事件上生成脉冲
EPwm1Regs.CMPA.Half.CMPA = 0x0080;// set比较值
EPwm1Regs.TBPRD = 0xC8; //为ePWM1设置期间
EPwm1Regs.TBCTL.bit.CTRMODE = 0;//开始计数

__interrupt void
ADC_ISR(void)
{


#define Offset2 0x7BB;




Voltage1 = AdcMirror.ADCRESULT0-Offset1;
Voltage2 = AdcMirror.ADCRESULT1-Offset1;
Voltage3 = AdcMirror.ADCRESULT2-Offset1;

电流=(电压1 -电压2);
电压=(电压2 -电压3);


AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; //重置SEQ1
AdcRegs.ADCST.Bit.INT_SEQ1_CLR = 1; //清除INT SEQ1位
PIECtrlRegs.PIEACK/ALL = PIEACK_Group1;//确认中断到PIE

返回;
}

2.我已将A2,A3,A4定义为我的通道,并使用它们。但是,当我检查ADC寄存器时,其中4个具有值(ADCRESULT0,ADCRESULT1,ADCRESULT2,ADCRESULT3)。 难道不应该是三个寄存器吗? 我的意思是,如果我只有3个信道,我应该如何读取这4个寄存器?

此致,

ATA

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

    读取此值后,我从结果中减去加电压,然后将其乘以q以实际电压。 我应该使用ADC镜像寄存器还是ADC结果寄存器?  到目前为止,我一直在执行以下代码,但没有结果:[/QUOT]

    这听起来像是一种可接受的方法,假设偏移量已归一为12位转换值。  请注意,大多数变量都声明为无符号整数,如果偏移量大于ADC结果,则会出现问题。

    I已将A2,A3,A4定义为我的通道,我使用它们。但是,当我检查ADC寄存器时,其中4个具有值(ADCRESULT0,ADCRESULT1,ADCRESULT2,ADCRESULT3)。 难道不应该是三个寄存器吗? 我的意思是,如果我只有3个信道,我应该如何读取这四个寄存器?[/QUOT]

    执行此语句时,您初始化了四个转换:

    AdcRegs.ADCMAXCONV.ALL = 0x0003;

    如ADC参考指南中所示