TI中文支持网
TI专业的中文技术问题搜集分享网站

TM4F123 ADC精度问题

大家好!我最近在Keil MDK调试TM4F123的ADC功能时,用的是PE0口作为ADC输入口,配置代码如下,

这代码主要是TI给的官方例程,12bitADC采样,3.3V供电。外部输入的电压经过采样转化,发现计算值和输入值误差很大。输入电压较低时有0.7V的误差,输入电压较高误差也有0.3v左右。很奇怪,大家帮忙看看,有什么办法提高精度?谢谢了。

int main(void)

 {        unsigned long ulADC0_Value[1];    

         unsigned long addr;    

         SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |

                       SYSCTL_XTAL_16MHZ);    

           SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);    

           SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);  

           GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0);

           ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0); 

           ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_CH3 | ADC_CTL_IE |                           

                              ADC_CTL_END);   

           ADCSequenceEnable(ADC0_BASE, 3);    

           ADCIntClear(ADC0_BASE, 3);   

             while(1)       

                   {         

                             ADCProcessorTrigger(ADC0_BASE, 3);         

                              while(!ADCIntStatus(ADC0_BASE, 3, false))        

                                   { 

                                   }         

                             ADCSequenceDataGet(ADC0_BASE, 3, ulADC0_Value);        

                             addr=ulADC0_Value[0];      

                             SysCtlDelay(SysCtlClockGet() / 12);    

                     }

  }

Ken Wang:

Hi Paul,

   你的程序中忘了定义ADC的采样速率。可以使用SysCtlADCSpeedSet() API 函数来设定。

加上这句后,再看看实验效果。谢谢!

ken

Tang:

回复 Ken Wang:

这个没有默认值吗?

Richard Ma:

楼主你好,请试着用ReferenceSet设置参考源为ADC_REF_INT

另外楼主的偏差是如何测量出来的?能不能介绍下?

paul cai:

回复 Richard Ma:

我在电压输入端和IO之间原先有个串接电阻,现在将这个电阻阻值改小后,就比较准确了。我想可能就是这个问题。谢谢上面几位的回答了,都对我设计有帮助!

Richard Ma:

回复 paul cai:

是的,这种串联电阻不能太大,否则即使电流很小,在上面的压降也会较高,会导致不准

赞(0)
未经允许不得转载:TI中文支持网 » TM4F123 ADC精度问题
分享到: 更多 (0)