搜索
bottom↓
回复: 5

为什么每次采样总是少0.2V左右啊

[复制链接]

出200入429汤圆

发表于 2013-3-27 09:20:59 | 显示全部楼层 |阅读模式
#include "msp430x54x.h"
unsigned int T1;
/********************************************
函数名称:Init_ADC
功    能:初始化ADC
参    数:无
返回值  :无
********************************************/
void Init_ADC(void)
{
    P6SEL |= 0x01;                            // 使能ADC通道
    ADC12CTL0 = ADC12ON+ADC12SHT0_2+ADC12REFON+ADC12REF2_5V+ADC12MSC;//打开ADC12模块,设置采样时间,转换使能,打开内部参考电压且选择2.5V
    ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2;                 // 使用采样定时器,选择单通道多次转换模式  
    ADC12CTL0 |= ADC12ENC;                         // 使能转换,由SAMPCON上升沿启动首次转换
    ADC12MCTL0 =ADC12SREF_1+ADC12INCH_0;//参考电压源选择内参考,采样通道选择A0
    ADC12CTL0 |= ADC12SC;                     // 开始转换,启动AD
    ADC12IE = 0x01;                           // 使能ADC中断
}

void main(void)
{
  WDTCTL = WDTPW+WDTHOLD;                   // 关闭看门狗
  Init_ADC();
  _EINT();
  while (1)
  {               
    __no_operation();                       // SET BREAKPOINT HERE
  }
}
#pragma vector = ADC12_VECTOR
__interrupt void ADC12_ISR(void)
{
  switch(__even_in_range(ADC12IV,34))
  {
  case  0: break;                           // Vector  0:  No interrupt
  case  2: break;                           // Vector  2:  ADC overflow
  case  4: break;                           // Vector  4:  ADC timing overflow
  case  6:                                  // Vector  6:  ADC12IFG0
  T1= ADC12MEM0;

  case  8: break;                           // Vector  8:  ADC12IFG1
  case 10: break;                           // Vector 10:  ADC12IFG2
  case 12: break;                           // Vector 12:  ADC12IFG3
  case 14: break;                           // Vector 14:  ADC12IFG4
  case 16: break;                           // Vector 16:  ADC12IFG5
  case 18: break;                           // Vector 18:  ADC12IFG6
  case 20: break;                           // Vector 20:  ADC12IFG7
  case 22: break;                           // Vector 22:  ADC12IFG8
  case 24: break;                           // Vector 24:  ADC12IFG9
  case 26: break;                           // Vector 26:  ADC12IFG10
  case 28: break;                           // Vector 28:  ADC12IFG11
  case 30: break;                           // Vector 30:  ADC12IFG12
  case 32: break;                           // Vector 32:  ADC12IFG13
  case 34: break;                           // Vector 34:  ADC12IFG14
  default: break;
  }
}
为什么每次采样总是少0.2V啊

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-3-27 10:45:27 | 显示全部楼层
有些时候也会遇到,但不会相差那么大

出200入429汤圆

 楼主| 发表于 2013-3-27 17:14:23 | 显示全部楼层
zhoufly 发表于 2013-3-27 10:05
模拟输入的地连接没有,模拟电源地连接没有

这个寄存器ADC12SREF      为什么只有设置为0时是对的,设置为1使用内部参考,采样直接溢出??这是为什么?????我用的是5438A

出0入0汤圆

发表于 2013-3-27 21:16:32 | 显示全部楼层
本帖最后由 jetlib 于 2013-3-27 21:18 编辑

430的确这样,如果采样时钟和保持时间配的不对,那采到的数据的确相差很大。我做的系统对电池电压每3秒采样一次,结果发现时钟配的不同时,AD采样结果最大相差200多。后来测试了一个时钟,AD结果偏差大概在50mV,就作罢了。至于为什么,我也很奇怪。因为对干电池这种变化斜率非常缓慢的信号采样,不应该有这么大的差别的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 22:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表