发新帖我要提问
12
返回列表
打印

ADC12遇到了一个问题!!!采集不到信号

[复制链接]
楼主: gesper3187
手机看帖
扫描二维码
随时随地手机跟帖
21
程序配置没有问题,楼主的ADC信号测量过了吗?

使用特权

评论回复
22
gesper3187|  楼主 | 2017-4-6 14:28 | 只看该作者
dirtwillfly 发表于 2017-3-29 08:04
能否上传下你ad采样部分的原理图,这个现象比较像阻抗匹配的问题

这两天赶进度,一直没上论坛,问题解决了,确实是阻抗匹配的问题

使用特权

评论回复
23
dirtwillfly| | 2017-4-6 14:33 | 只看该作者
gesper3187 发表于 2017-4-6 14:28
这两天赶进度,一直没上论坛,问题解决了,确实是阻抗匹配的问题

解决了就好

使用特权

评论回复
24
51xlf| | 2017-4-6 15:29 | 只看该作者
这个数据会不会变量?

使用特权

评论回复
25
51xlf| | 2017-4-6 15:34 | 只看该作者
ADC采样找个例程代码参考学习就行。

使用特权

评论回复
26
gesper3187|  楼主 | 2017-4-6 17:33 | 只看该作者
candysnape 发表于 2017-3-29 09:34
外部参考电压引脚应该是P5.0和P5.1吧,也没看到相关的配置呀

再问一下哈,我用的msp4305438A,采用外部基准时,需要P5SEL|=0x01;吗,我发现加上ADC12CTL2|=ADC12REFOUT;后采集到的结果只有88了。。。

使用特权

评论回复
27
gesper3187|  楼主 | 2017-4-6 17:38 | 只看该作者
改了硬件后,放大器输出为160mV, 我用的MSP430F5438A,想问下各位大大这个ADC模块有什么问题吗,我读取的电压值总是不对,输入电压160mV,换算后应该是270左右,而实际ADC采样到的是700到800,我尝试把ADC12SHT0_2变大,加长采样周期,结果得到的值是1400。。。(难道意思是ADC12SHT0_2采样时间还不够,那这误差也太大了。。1400和270)当我把ADC12CTL2 |= ADC12REFOUT打开时,ADC采到的数又变成了88。
我用的外置基准2.5V,实际测量硬件也是2.5V, 采样通道是P6.4,存储通道式ADC12MEM0,


#include "msp430x54x.h"

void InitADC12()
{
  P5SEL = BIT0;
  ADC12CTL0 &= ~ADC12ENC;
  P6SEL |= 0x10;                                                          // Enable P6.4 as A/D channel input
  ADC12CTL0 = ADC12ON + ADC12SHT0_2 + ADC12CSTARTADD_0;                             // Turn on ADC12, set sampling time, 16ADC12CLK cycles
  ADC12CTL1 = ADC12SHP + ADC12CONSEQ_0 + ADC12SSEL_2;   // Use sampling timer, single time single channel,MCLK=4M
  ADC12MCTL0 = ADC12SREF_2 + ADC12INCH_4;                                 // ref+ = VeREF+, ref- = AVSS, channel = A4
  //ADC12CTL2 = ADC12REFOUT;
  //ADC12IE = ADC12IE0;                                                         // Enable ADC12IFG.0
  //ADC12CTL0 |= ADC12ENC;                                                  // Enable conversions
}

unsigned int read_ad()                   //开启一次AD转换,并读值
{
  unsigned int ad_value;
  ADC12CTL0|=ADC12SC + ADC12ENC;                   //给转换开始脉冲        
  ADC12CTL0&=~ADC12SC;

  while((ADC12CTL1&0X01)==1);           //ADC转换忙信号时等待
  ad_value=ADC12MEM0;                   //读取转换结果值
  ADC12CTL0 &= ~ADC12ENC;
  return ad_value;
}

long read_avg()                 //数字滤波
{
  long ad_avg=0;                //滤波次数,滤波累加变量
  unsigned int flt_t;
  for(flt_t=0;flt_t<500;flt_t++)   
  {
    ad_avg+=read_ad();
  }
  ad_avg/=500;
  return ad_avg;
}

使用特权

评论回复
28
火山LF| | 2017-4-7 08:33 | 只看该作者
gesper3187 发表于 2017-4-6 17:38
改了硬件后,放大器输出为160mV, 我用的MSP430F5438A,想问下各位大大这个ADC模块有什么问题吗,我读取的电 ...

1、首先要确定你ADC采样的硬件电压实际是多少?是否真的是160mV
2、确定你使用是参考电压是否为2.5V?还是3.3V?我用3.3V换算了一下,好像你采到的值是正确的
3、在这个采样程序前面有没有采其他的ADC,如果有的话,在你现在的程序开始应该要加:
        ADC12_B_disable(ADC12_B_BASE);
        ADC12_B_enable(ADC12_B_BASE);
先禁止掉ADC,再使能,然后再配置通道,因为我试过如果没有这两条语句,通道值设定了但是寄存器没有改变之前的值
4、再不行用例程来尝试,看看例程的能不能采集,而你的为什么不对

使用特权

评论回复
29
火山LF| | 2017-4-7 08:35 | 只看该作者
gesper3187 发表于 2017-4-6 17:38
改了硬件后,放大器输出为160mV, 我用的MSP430F5438A,想问下各位大大这个ADC模块有什么问题吗,我读取的电 ...

滤波的方法,建议用去极值取中间平均法
意思就是先排序,把前4个和后4个去掉,中间的值求平均

使用特权

评论回复
30
gesper3187|  楼主 | 2017-4-7 17:52 | 只看该作者
火山LF 发表于 2017-4-7 08:35
滤波的方法,建议用去极值取中间平均法
意思就是先排序,把前4个和后4个去掉,中间的值求平均 ...

非常有帮助,发现测得的输出信号大部分是270左右,有个别的几个400多500多,请问这个是因为输出不稳定造成的吗

使用特权

评论回复
31
gesper3187|  楼主 | 2017-4-7 19:45 | 只看该作者
本帖最后由 gesper3187 于 2017-4-7 20:39 编辑

287*2500/4095=175mV

509*2500/4095=310mV
写了去极值去中间平均法,还是会出现这种情况,用万用表测量电压一直是180mV,为啥ADC采样会有跳变。。
设置中断,不断循环采样,大多数情况是280多,但是总是会突然出现500多的情况

搞定了!!!!!!!!!谢谢大家



使用特权

评论回复
32
iamaiqiyi| | 2017-4-7 22:21 | 只看该作者
信号采集到什么问题?

使用特权

评论回复
33
iamaiqiyi| | 2017-4-7 22:21 | 只看该作者
模拟输入A4,IO配置有问题。

使用特权

评论回复
34
kmzuaz| | 2017-4-8 22:16 | 只看该作者
使用示波器测量电压是多大?

使用特权

评论回复
35
kmzuaz| | 2017-4-8 22:17 | 只看该作者
楼主这是用的哪个芯片采样的?

使用特权

评论回复
36
youtome| | 2017-4-9 16:29 | 只看该作者
采集的ADC数值大小不变吗?

使用特权

评论回复
37
youtome| | 2017-4-9 16:30 | 只看该作者
如果数值能够变化,就说明ADC采样时正确,你的读取方式错误。

使用特权

评论回复
38
xyz549040622| | 2017-8-14 10:20 | 只看该作者
今早上广告太多了,估计误删你的了。稍后联系小跑堂恢复你的帖子。小跑堂的qq知道吗?

使用特权

评论回复
39
21小跑堂| | 2017-8-14 10:38 | 只看该作者
我QQ :1298790957

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则