TI论坛
直播中

樊忠甫

7年用户 217经验值
私信 关注
[问答]

f28035例程adc采样结果不正确是为什么?

使用的开发板
我下载的28035例程关于adc采样的,DSP2803x_examplesadc_soc,我在程序中跑时,从AdcResult.ADCRESULT0得到的采样数字量与实际电压值经过
4096*(input  Analog -0)/3.3运算得到的值不对,要小的多这是为什呢,我程序都没动,基准电压是用的内部参考:
AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; // Power ADC BG
AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; // Power reference
AdcRegs.ADCCTL1.bit.ADCPWDN = 1; // Power ADC
AdcRegs.ADCCTL1.bit.ADCENABLE = 1; // Enable ADC
AdcRegs.ADCCTL1.bit.ADCREFSEL = 0; // Select interal BG

回帖(7)

张嘉

2020-6-1 16:03:16
你好,
AdcResult.ADCRESULT0寄存器数据时高12位有效,所以需要先右移四位,然后这个值/4093*3(ADC的输入是0~3V,不是DSP引脚电压3.3V)得到DSP引脚电压,这个电压是经过电路处理得到的,通常是经过比例和增益等到的结果,所以一般要减去一个偏置值,乘以一个系数,得到真实的电流值。
举报

冯敬宇

2020-6-1 16:11:38
要进行偏置校准。
在adc.c中有一个函数void AdcOffsetSelfCal()
Eric
                                                                         - ERIC
举报

朱燕媚

2020-6-1 16:22:28
引用: guigui_7044 发表于 2020-6-1 23:47
要进行偏置校准。
在adc.c中有一个函数void AdcOffsetSelfCal()
Eric

你好,我想问一个关于AdcOffsetSelfCal函数的一个问题。我根据例程写的ADC程序,然后在RAM里面运行好好的,但是我一烧录到flash里面运行后,程序就在这个函数里面的一个标志位判断上面死循环了。而且在flash里面执行InitAdc中的延时函数DALAYUS时会出错
举报

冯敬宇

2020-6-1 16:41:48
引用: otinn 发表于 2020-6-1 23:58
你好,我想问一个关于AdcOffsetSelfCal函数的一个问题。我根据例程写的ADC程序,然后在RAM里面运行好好的,但是我一烧录到flash里面运行后,程序就在这个函数里面的一个标志位判断上面死循环了。而且在flash里面执行InitAdc中的延时函数DALAYUS时会出错 ...

当程序跑在flash的时候,你需要调用memcpy函数,将有些运行在RAM的函数复制到RAM中运行,如DELAY US,如initlfash。
参考历程
C:ticontrolSUITEdevice_supportf2803xv130DSP2803x_examples_ccsv5flash_f28035
Eric
                                                                         - ERIC
举报

更多回帖

发帖
×
20
完善资料,
赚取积分