Part Number: TMS320F28377D
本人想用28377芯片的16位差分采集,但是接线之后用16位分辨率的数据转换公式处理不太对,但是将转换公式中的65536换成4096就对了,这是为什么,是16位坏了吗
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.
Part Number: TMS320F28377D
本人想用28377芯片的16位差分采集,但是接线之后用16位分辨率的数据转换公式处理不太对,但是将转换公式中的65536换成4096就对了,这是为什么,是16位坏了吗
AdcSetMode(ADC_ADCA, ADC_RESOLUTION_16BIT, ADC_SIGNALMODE_DIFFERENTIAL);
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0; // 使用 ADCINA0 通道
AdcaRegs.ADCSOC0CTL.bit.ACQPS = 63; // 采样窗口长度
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 1; // 使用软件触发
AdcaRegs.ADCSOC1CTL.bit.CHSEL = 1; // 使用 ADCINA1 通道
AdcaRegs.ADCSOC1CTL.bit.ACQPS = 63; // 采样窗口长度
AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 1; // 使用软件触发
基本就改了这几个配置,然后公式模样是16位的,就把65535换成4096就可以,不知道为什么
void ConfigureADC(void)
{
EALLOW;
// 配置 ADC 控制寄存器和电源控制寄存器
AdcaRegs.ADCCTL2.bit.PRESCALE = 6; // ADCCLK 分频器设置为 /4
AdcbRegs.ADCCTL2.bit.PRESCALE = 6; // ADCCLK 分频器设置为 /4
AdcdRegs.ADCCTL2.bit.PRESCALE = 6; // ADCCLK 分频器设置为 /4
AdcSetMode(ADC_ADCA, ADC_RESOLUTION_16BIT, ADC_SIGNALMODE_DIFFERENTIAL);
AdcSetMode(ADC_ADCB, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
AdcSetMode(ADC_ADCD, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
// 设置 ADC 的触发位置
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdcdRegs.ADCCTL1.bit.INTPULSEPOS = 1;
// 启动 ADC 电源
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
AdcdRegs.ADCCTL1.bit.ADCPWDNZ = 1;
EDIS;
}
void SetupADCSoftware(void)
{
EALLOW;
// 配置 ADC SOC0 和 SOC1
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0; // 使用 ADCINA0 通道
AdcaRegs.ADCSOC0CTL.bit.ACQPS = 63; // 采样窗口长度
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 1; // 使用软件触发
AdcaRegs.ADCSOC1CTL.bit.CHSEL = 1; // 使用 ADCINA1 通道
AdcaRegs.ADCSOC1CTL.bit.ACQPS = 63; // 采样窗口长度
AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 1; // 使用软件触发
AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0; // 使用 ADCINB0 通道
AdcbRegs.ADCSOC0CTL.bit.ACQPS = 14; // 采样窗口长度
AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 1; // 使用软件触发
AdcbRegs.ADCSOC1CTL.bit.CHSEL = 1; // 使用 ADCINB1 通道
AdcbRegs.ADCSOC1CTL.bit.ACQPS = 14; // 采样窗口长度
AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = 1; // 使用软件触发
AdcdRegs.ADCSOC0CTL.bit.CHSEL = 0; // 使用 ADCINB0 通道
AdcdRegs.ADCSOC0CTL.bit.ACQPS = 14; // 采样窗口长度
AdcdRegs.ADCSOC0CTL.bit.TRIGSEL = 1; // 使用软件触发
AdcdRegs.ADCSOC1CTL.bit.CHSEL = 1; // 使用 ADCINB1 通道
AdcdRegs.ADCSOC1CTL.bit.ACQPS = 14; // 采样窗口长度
AdcdRegs.ADCSOC1CTL.bit.TRIGSEL = 1; // 使用软件触发
// 配置 ADC 中断控制
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 1; // EOC1 生成 ADC 中断
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1; // 使能 ADC 中断
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; // 清除 ADC 中断标志
AdcbRegs.ADCINTSEL1N2.bit.INT1SEL = 1; //end of SOC1 will set INT1 flag
AdcbRegs.ADCINTSEL1N2.bit.INT1E = 1; //enable INT1 flag
AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared
AdcdRegs.ADCINTSEL1N2.bit.INT1SEL = 1; //end of SOC1 will set INT1 flag
AdcdRegs.ADCINTSEL1N2.bit.INT1E = 1; //enable INT1 flag
AdcdRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared
EDIS;
}
这是AD配置部分的代码