我遇到了问题、因为 ADC 无法按预期工作。
底部列出了 ADC 设置。
========================================================================================
只有"0"作为从"ADCIND0"获取的数据返回。
========================================================================================
触发器正确完成、例如 ADCIND2、3等。可以获取信息。
我用示波器检查了它、但(很抱歉、我无法放置图像)
在触发时、ADCIND2会暂时降低电压、并立即返回到正常电压、并且可以进行正常采样。
在触发时、ADCIND0的负电压约为500nsec、1.5 μ s 内不会恢复正常电压。
如果软件方面的设置有任何错误、或者有类似的情况、您会告诉我吗?
[软件设置]
===========================================================================================================================================
/*通过 Init 调用以下函数。 ******** /
void ConfigureADC( void )
{
EALLOW;
//写入配置
AdcaRegs.ADCCTL2.bit.prescale = 8;//将 ADCCLK 分频器设置为/5
AdcbRegs.ADCCTL2.bit.prescale = 8;//将 ADCCLK 分频器设置为/5
AdccRegs.ADCCTL2.bit.prescale = 8;//将 ADCCLK 分频器设置为/5
AdcdRegs.ADCCTL2.bit.prescale = 8;//将 ADCCLK 分频器设置为/5
AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE);
AdcSetMode (ADC_ADCB、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);
AdcSetMode (ADC_ADCC、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);
AdcSetMode (ADC_ADCD、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);
//将脉冲位置设置为晚期
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;//中断脉冲生成时序。
AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdccRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdcdRegs.ADCCTL1.bit.INTPULSEPOS = 1;
//为 ADC 加电
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
AdccRegs.ADCCTL1.bit.ADCPWDNZ = 1;
AdcdRegs.ADCCTL1.bit.ADCPWDNZ = 1;
//延迟1ms 以允许 ADC 加电时间
DELAY_US (1000);
EDIS;
}
void SetupADCSoftware( void )
{
uint16_t acqps;
//根据分辨率确定最小采集窗口(在 SYSCLKS 中)
if (adc_resolution_12bit =AdcaRegs.ADCCTL2.bit.resolution){// 12位或16位
acqps = 79;//400ns
}
否则{//分辨率为16位
acqps = 63;//320ns
}
/*选择要转换的通道和转换结束标志*/
EALLOW;
// ADC-A
AdcaRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;
// ad_in[1]
AdcaRegs.ADCSOC2CTL.bit.CHSEL = 2;
AdcaRegs.ADCSOC2CTL.bit.ACQPS = acqps;
AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = 0xE;
// IP[1]
AdcaRegs.ADCSOC3CTL.bit.CHSEL = 3;
AdcaRegs.ADCSOC3CTL.bit.ACQPS = acqps;
AdcaRegs.ADCSOC3CTL.bit.TRIGSEL = 0xE;
// VA_MNT
AdcaRegs.ADCSOC4CTL.bit.CHSEL = 4;
AdcaRegs.ADCSOC4CTL.bit.ACQPS = acqps;
AdcaRegs.ADCSOC4CTL.bit.TRIGSEL = 0xE;
// ADC-B
AdcbRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 1;
// I_HP01
AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0;
AdcbRegs.ADCSOC0CTL.bit.ACQPS = acqps;
AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 0xE;
// ad_in[2]
AdcbRegs.ADCSOC2CTL.bit.CHSEL = 2;
AdcbRegs.ADCSOC2CTL.bit.ACQPS = acqps;
AdcbRegs.ADCSOC2CTL.bit.TRIGSEL = 0xE;
// IP[2]
AdcbRegs.ADCSOC3CTL.bit.CHSEL = 3;
AdcbRegs.ADCSOC3CTL.bit.ACQPS = acqps;
AdcbRegs.ADCSOC3CTL.bit.TRIGSEL = 0xE;
// ADC-C
AdccRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0;
// ad_in[3]
AdccRegs.ADCSOC2CTL.bit.CHSEL = 2;
AdccRegs.ADCSOC2CTL.bit.ACQPS = acqps;
AdccRegs.ADCSOC2CTL.bit.TRIGSEL = 0xE;
// IP[3]
AdccRegs.ADCSOC3CTL.bit.CHSEL = 3;
AdccRegs.ADCSOC3CTL.bit.ACQPS = acqps;
AdccRegs.ADCSOC3CTL.bit.TRIGSEL = 0xE;
// M_CUR
AdccRegs.ADCSOC4CTL.bit.CHSEL = 4;
AdccRegs.ADCSOC4CTL.bit.ACQPS = acqps;
AdccRegs.ADCSOC4CTL.bit.TRIGSEL = 0xE;
// ADC-D
AdcdRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 1;
// 15V_PWR_IN
AdcdRegs.ADCSOC0CTL.bit.CHSEL = 0;
AdcdRegs.ADCSOC0CTL.bit.ACQPS = acqps;
AdcdRegs.ADCSOC0CTL.bit.TRIGSEL = 0xE;
// ad_in[4]
AdcdRegs.ADCSOC2CTL.bit.CHSEL = 2;
AdcdRegs.ADCSOC2CTL.bit.ACQPS = acqps;
AdcdRegs.ADCSOC2CTL.bit.TRIGSEL = 0xE;
// IP[4]
AdcdRegs.ADCSOC3CTL.bit.CHSEL = 3;
AdcdRegs.ADCSOC3CTL.bit.ACQPS = acqps;
AdcdRegs.ADCSOC3CTL.bit.TRIGSEL = 0xE;
EDIS;
}
// EPWM5软件 ADConversion 触发 ADCSOCB。
EALLOW;
EPwm5Regs.ETSEL.bit.SOCBSEL = 1;// EPwm5Regs.TBCTR 上的 EPWM5SOCB =零
EPwm5Regs.ETPS.bit.SOCBPRD = 1;//在第1个偶数上生成 SOCB
EPwm5Regs.ETSEL.bit.SOCBEN = 1;//启用 SOCB 生成
EDIS;
/***** 使用 EPWM5中断****调用以下函数 /
test1 = AdcResultRegs.ADCRESULT4;//未确认
test2 = AdcaResultRegs.ADCRESULT4;//未确认
test3 = AdcdResultRegs.ADCRESULT0;// NG
TEST4 = AdcaResultRegs.ADCRESULT3;//确定
Test5 = AdcbResultRegs.ADCRESULT3;//确定
TEST6 = AdccResultRegs.ADCRESULT3;//确定
TEST7 = AdcdResultRegs.ADCRESULT3;//确定
最恰当的考虑。
