这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 5410ad,ad 5410ad的ad变换线形不成比例

共3条 1/1 1 跳转至

5410ad,ad 5410ad的ad变换线形不成比例

院士
2006-09-17 18:14:16     打赏
5410ad,ad 5410ad的ad变换线形不成比例



关键词: 5410ad     变换     线形     不成比例    

院士
2006-12-22 22:43:00     打赏
2楼
问 采用5410ad-PLCc32-0622ct0204.00c的片子,对电压进行变换,电源电压为4.769v,lm336产生的比较电压用电阻分压是2.4v,对3.15v和3.01v的电压进行ad变换产生的值是
2.4v  -----493
3.15 ------654
3.01 ------625
对比数据以上电压变换产生的值不成线形关系,为进行比较又用别的5410ad进行试验,其数据与上述数据基本相同,请斑竹解释,急急急! 1: 本来就这样,而且跳变也达4个字,只有这个价格,不要要求太高不要要求太高啊,要线性好只有用单独的A/D了 2: 板主说话吧。是不是这样,或者是使用不当呢? 3: 我也用过跳变只有一个字,但线性确实不行,我原来还以为是运放造成的,听楼主说来与5410也有关系,不过也不能怪他,资料不是说用于键盘嘛。 4: 按现在的ad变换线形根本就不可能计算ad变换的电压ad变换的值不能线形,另外在ad变换期间用示波器可以看到电压明显下降,说明ad变换吸收电流很大。不知为何原因,请版主分析。 5: 版主请分析原因 6: 将图和程序贴出来,让大家看一下,大家好帮忙将图和程序贴出来,让大家看一下,大家好帮忙 7: 电路和程序lm336加1k可变和12k电阻1k的中间输出连接P11并上0.1u电容,P10直接输入可调电压。
程序
sfr ADCONTR = 0xc5;  /**/
sfr ADCH    = 0xc6;  /**/
sfr ADCL    = 0xbe;  /**/
/****启动ADC转换**********************/
uint  start_adc(uchar _ch) /*启动ADC转换*/
{
  uchar _sh;
  uint _adcvalue;
  ADCONTR =0x87; /*启动ADC内部电源*/
  msec(1);/*延时等待ADC内部电源稳定*/
  P1M0 =0x1f;
  P1M1 =0x1f; /*作为AD使用口设为高阻输入*/
  ADCH =0x0;
  ADCL =0x0;
  _sh =0x80+_ch;
  ADCONTR =_sh; /*ad通道开启*/
  _nop_();
  _nop_();
  _sh =0x88+_ch;/*ad电源转换启动及通道*/
  ADCONTR =_sh; /*启动ADC转换*/
  while((ADCONTR&0x10)==0)
  {
   _nop_();
   _nop_();
   } /*等待ADC转换结束*/
  ADCONTR =0x87; /*停止ad转换*/
  _sh =ADCH;
  _adcvalue =0;
  _adcvalue +=(uint)_sh;
  _sh =ADCL;
  _sh =(_sh&0x03);
  _adcvalue =(_adcvalue<<2);
  _adcvalue +=(uint)_sh;
  P1M0 =0x0;
  P1M1 =0x0; /*恢复双向口*/
  return _adcvalue;
}
void main(void)    
{
  uchar adcsh,adcsl;
  int   adca,adcb;
  init_uart(); /*使用T1作波特率发生器*/
  
  while(1)
  {
    sendbyte(0xaa); /*串口发送一字节******/
    adca =start_adc(0); /*启动ADC转换*/
    adcb =start_adc(1); /*启动ADC转换*/
    adcsh =(uchar)(adca>>8);
    adcsl =(uchar)adca;
    sendbyte(adcsh); /*串口发送一字节******/
    sendbyte(adcsl); /*串口发送一字节******/
    adcsh =(uchar)(adcb>>8);
    adcsl =(uchar)adcb;
    sendbyte(adcsh); /*串口发送一字节******/
    sendbyte(adcsl); /*串口发送一字节******/
    sendbyte(0xbb); /*串口发送一字节******/
    msec(2000);
  }
等待版主分析 8: 看数据应该没有错,就是都差了0.1V左右4.769/1024=0.004657
2.4v  -----493   *0.004657=2.296
3.15 ------654   *0.004657=3.046
3.01 ------625   *0.004657=2.911
9: 看数据,可能测量有问题看测量数据:
4.769
2.4
3.15
3.01
有效数字差别巨大,显然LZ没多少误差的概念,要不就是使用了不同的测量工具或完全不同的档位,甚至什么是“线性”和“线形”可能也不清楚。
再者要看线性,3个点的数据是不够的,至少要5个点(在量程范围内均匀分布)。

建议如下测量:
首先保证硬件电路无误,如源阻抗足够小,输入有合适的滤波,有适当的抗干扰措施,地回路设置正确等。
测量仪表分辨率超过5000,并且只使用同一个档位不要切换(否则要保证不同档位的一致性),在较短的时间内测量5组以上的点,保证温度等条件变化不大,测量一个回程(从小测到大,再从大测到小),同时记录电源电压,数据记录的有效数字要一致,从这样的数据中我们才可以看出ADC的线性到底怎样。
以上要求并不过分,是高等物理实验课的基本要求。
有言语不敬之处请原谅。

专家
2022-08-10 21:01:16     打赏
3楼

学习学习


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]