要使用外部的REF3020 作为 F2808 ADC 的外部参考,但ADC ADCRESULTn 中得到的结果却是以3V为参考基准的。帮忙看看以下程序有何问题?
通过设置断点查看寄存器的位已设置成功。外部电路已按照手册的接法接好,ADCREFP接2.2uF,ADCREFM接2.2uF ADCRESEXT接22K 都检查过。
作了个测试,当外部输入2.048v时,ADC的结果寄存器数值为2800左右(应为0xFFF 呀??)。
void InitAdc(void)
{
extern void DSP28x_usDelay(Uint32 Count);
AdcRegs.ADCREFSEL.bit.REF_SEL = 0x1; // 1:选择外部参考, ADCREFIN = 2.048v
AdcRegs.ADCTRL3.all = 0xE0; // Power up bandgap/reference/ADC circuits
DELAY_US(ADC_usDELAY); // Delay before converting ADC channels
AdcRegs.ADCTRL1.bit.ACQ_PS = 0x0F;
AdcRegs.ADCTRL3.bit.ADCCLKPS = 2;
AdcRegs.ADCTRL1.bit.CPS = 1;
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;
AdcRegs.ADCTRL3.bit.SMODE_SEL = 1;
AdcRegs.ADCTRL1.bit.CONT_RUN = 0;
AdcRegs.ADCMAXCONV.all = 0x0007;
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x0;
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x1;
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x1;
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x2;
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x2;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x4;
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x4;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 = 0;
}
卡住了,大家帮忙啊,应该有很多人用过F2808的。
问题仍然存在,难道没有人用过?
我对此的理解是:
当选择3V基准时,若ad通道输入3V,结果应为0xFFF;
当选择2.048V基准时,若ad通道输入2.048V,结果应为0xFFF;
当选择1.5V基准时,若ad通道输入1.5V,结果应为0xFFF;
当选择1.024V基准时,若ad通道输入1.024V,结果应为0xFFF;
但是作了实验,好像不是那么回事。
能否把你的原理图及其测试程序发到我的邮箱看看。
haierdzl@126.com
个人理解是
当使用外部基准是,0XFFF对应的电压值仍为3V
当选择2.048V基准时,ad通道输入电压范围是多少能超过2.048V吗?
当选择2.048V基准时,结果应为2.048/3*0xFFF;
回复 楼主 chipsos 的帖子
2808的数据结果是以3V为最大值的,并不是跟随电压基准浮动;
另外在Piccolo系列里面,增加了ADC的转换模式,可以实现变比的转换,也就是你需要的模式,ADC的最大值以外部基准为最大值。