9744|15

192

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

有关MSP430F5529ADC12多通道序列采样时出现的问题 [复制链接]

本人最近在学习MSP430F5529这块单片机,因为手头有个题目关于均流和稳压控制的,做采样环节时使用了430的ADC12多通道序列采样,有关ADC12的初始化如下:void InitADC(void)
{
    P6SEL |= BIT6+BIT7;
    P7SEL |= BIT0;
    ADC12CTL0 = ADC12ON+ADC12SHT0_8+ADC12REFON+ADC12MSC;//采样转换时间, 打开ADC12内核
    ADC12CTL1 = ADC12SHP+ADC12CONSEQ_3+ADC12SSEL_2;//多通道序列采样,时钟为MCLK(这里是4M)
    ADC12CTL1 |= ADC12CSTARTADD2+ADC12CSTARTADD1;//开始位确定
    ADC12MCTL0 = ADC12SREF_1+ADC12INCH_6;//选择MCTL0作为采样结果寄存器,A6作为输入端口,参考电压选择模式一
    ADC12MCTL1 = ADC12SREF_1+ADC12INCH_7;//选择MCTL1作为采样结果寄存器,A7作为输入端口,参考电压选择模式一
    ADC12MCTL2 = ADC12SREF_1+ADC12INCH_12+ADC12EOS;//选择MCTL2作为采样结果寄存器,A12作为输入端口,参考电压选择模式一
    ADC12IE = BIT2;
    ADC12CTL0 |= ADC12ENC;
}

ADC的中断如下

#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{
static unsigned int m,count = 0;
float factor=0.036630;
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: break;                           // Vector  6:  ADC12IFG0
      case  8: break;                           // Vector  8:  ADC12IFG1
      case 10:
       CAresult[count] = ADC12MEM0;
       CBresult[count] = ADC12MEM1;
       OUresult[count] = ADC12MEM2;
       count++;
       if (count == 10)
             {
           for(m=0;m<10;m++)
           {
            current_a_ = CAresult[m]+current_a_;
            current_b_ = CBresult[m]+current_b_;
            out_u_ = OUresult[m]+out_u_;
           }
           current_a_=current_a_*factor;
           current_b_=current_b_*factor;
           out_u_ =out_u_ *factor;
               count = 0;
           flag=1;
               ADC12IE = 0x00;
             }
       break;
      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;
   }
}

但是,我在下载程序后发现管脚P6.6未加输入即有微弱电压,而其余两个管脚直接电压跳到了最大值,在接上直流电源后,电源电压从0到1.5V调动时,我的LCD显示的P6.7(A7)和P7.0(A12)电压呈非线性变化,起步微弱的电压输出就显示采样到最大值,而P6.6却没有变化

最新回复

我最近也在做检压和配流,检测电压在0.6v左右,但一直检测不到有效值,可以请教一些经验吗?  详情 回复 发表于 2017-8-14 18:05
 
点赞 关注

回复
举报

192

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
    ADC12CTL1 |= ADC12CSTARTADD2+ADC12CSTARTADD1;//开始位确定

这行代码是多余的,删掉了,问题依然存在,而且显示的值没有变化,这我感到很奇怪,这个不是控制起始存储寄存器的吗?为什么这行代码去掉了对程序显示结果没有影响呢?
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
我也遇到类似问题,之前是ok的,换到同学机子上拷了下程序就不好了,我昨天也发了求救贴,未加信号时就有1.2伏左右电压。着实不解,但是现在还没有大神解惑附上问题链接https://bbs.eeworld.com.cn/thread-442899-1-1.html
 
 
 

回复

101

帖子

1

TA的资源

一粒金砂(中级)

4
 
是不是那个通道没有设置好?

点评

我一直担心是这个问题,可是找了很多实例程序都是这样设置的,这期间还出现了一个很奇怪的问题,我将输入设置成A12,A13,A14时(P7.0P7.1P7.2)显示的采样结果和以A6A7A12完全不同-。-  详情 回复 发表于 2014-7-23 13:21
 
 
 

回复

951

帖子

1

TA的资源

纯净的硅(中级)

5
 
首先没见你打开参考源(你选择的是ADC12SREF_1 即为内部基准参考源,需要使能 REFON,然后选择参考电压1.5V or 2.5V),其次假设参考源已经开启了,需要加适当的延时来确保参考源能够稳定工作。。。

点评

您好,我前一个程序做单通道序列采样时ADC初始化如下: ADC12CTL0 = ADC12ON+ADC12SHT0_2+ADC12MSC;//采样转换时间, 打开ADC12内核 ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2;//单通道序列采样 ADC12MCTL0  详情 回复 发表于 2014-7-23 13:19
 
个人签名人有的时候真是奇怪,选择了会后悔,放弃了会遗憾,完美只能是一种理想,不是一种存在。
 
 

回复

192

帖子

0

TA的资源

一粒金砂(中级)

6
 
huixianfxt 发表于 2014-7-23 09:28
首先没见你打开参考源(你选择的是ADC12SREF_1 即为内部基准参考源,需要使能 REFON,然后选择参考电压1.5V ...

您好,我前一个程序做单通道序列采样时ADC初始化如下:
    ADC12CTL0 = ADC12ON+ADC12SHT0_2+ADC12MSC;//采样转换时间, 打开ADC12内核
    ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2;//单通道序列采样
    ADC12MCTL0 = ADC12SREF_0+ADC12INCH_6;//选择MCTL0作为采样结果寄存器,A6作为输入端口,参考电压选择模式一
    ADC12CTL0 |= ADC12ENC;

这样同样没有选参考源,出来测试的结果很准,电压上限3V左右,我认为系统默认以3V作为参考电压,还有ADC12SREF这个寄存器选择的是参考电压源,我认为这里的参考源是之前在 ADC12CTL0里选择的参考源,而这里只是选择了组合的方式,是吗?

点评

ADC12SREF_0 直接选择的是Vcc和Vss,不是内部基准源电压....如果ADC12SREF_1则启用的是内部基准源电压......看看寄存器的配置呢!!!  详情 回复 发表于 2014-7-23 13:37
 
 
 

回复

192

帖子

0

TA的资源

一粒金砂(中级)

7
 
够了 发表于 2014-7-23 09:12
是不是那个通道没有设置好?

我一直担心是这个问题,可是找了很多实例程序都是这样设置的,这期间还出现了一个很奇怪的问题,我将输入设置成A12,A13,A14时(P7.0P7.1P7.2)显示的采样结果和以A6A7A12完全不同-。-

点评

SYW
请问A6输入通道的端口是谁啊?这些通道对应的端口在哪里可以找到呢? 现在面临很基础很基础的ADC问题,也是初学,真的非常感谢  详情 回复 发表于 2015-7-13 16:15
 
 
 

回复

951

帖子

1

TA的资源

纯净的硅(中级)

8
 
shannon2014 发表于 2014-7-23 13:19
您好,我前一个程序做单通道序列采样时ADC初始化如下:
    ADC12CTL0 = ADC12ON+ADC12SHT0_2+ADC12MSC; ...

ADC12SREF_0 直接选择的是Vcc和Vss,不是内部基准源电压....如果ADC12SREF_1则启用的是内部基准源电压......看看寄存器的配置呢!!!

点评

我按照您的建议打开了内部参考电压,设置为1.5V但是效果依然,就是A6不接时显示0.0几,A7和A12显示接近满额,接了电压后效果很差,我在程序里写了过流保护程序A6和A7输入和大于4.5会报警,奇怪的是每次我给A7接输入  详情 回复 发表于 2014-7-23 13:50
 
个人签名人有的时候真是奇怪,选择了会后悔,放弃了会遗憾,完美只能是一种理想,不是一种存在。
 
 

回复

192

帖子

0

TA的资源

一粒金砂(中级)

9
 
huixianfxt 发表于 2014-7-23 13:37
ADC12SREF_0 直接选择的是Vcc和Vss,不是内部基准源电压....如果ADC12SREF_1则启用的是内部基准源电压.... ...

我按照您的建议打开了内部参考电压,设置为1.5V但是效果依然,就是A6不接时显示0.0几,A7和A12显示接近满额,接了电压后效果很差,我在程序里写了过流保护程序A6和A7输入和大于4.5会报警,奇怪的是每次我给A7接输入,一接就报警,我可以把代码给您看一看,您能帮我参考下吗
 
 
 

回复

192

帖子

0

TA的资源

一粒金砂(中级)

10
 
我将寄存器设定为单通道序列采样,同样的程序,结果却很准
 
 
 

回复

192

帖子

0

TA的资源

一粒金砂(中级)

11
 
经过了一个下午的努力,我成功通过软件实现了单通道异步采样作为多通道的程序,这个问题以另一种方式解决了,但是大家如果能发现我原先程序中多通道采样的问题,请大家告知,谢谢,如能交流,万分感谢
 
 
 

回复

101

帖子

1

TA的资源

一粒金砂(中级)

12
 
其实我一直在想一个问题,采样通道和采样的配置和管脚设置有没有什么问题
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

13
 
shannon2014 发表于 2014-7-23 13:21
我一直担心是这个问题,可是找了很多实例程序都是这样设置的,这期间还出现了一个很奇怪的问题,我将输入 ...

请问A6输入通道的端口是谁啊?这些通道对应的端口在哪里可以找到呢?
现在面临很基础很基础的ADC问题,也是初学,真的非常感谢

点评

可以查看TI公司的芯片手册  详情 回复 发表于 2015-7-14 10:51
 
 
 

回复

192

帖子

0

TA的资源

一粒金砂(中级)

14
 
SYW 发表于 2015-7-13 16:15
请问A6输入通道的端口是谁啊?这些通道对应的端口在哪里可以找到呢?
现在面临很基础很基础的ADC问题, ...

可以查看TI公司的芯片手册
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

15
 
你好,我想问一下有关msp430中adc12的问题,就是输入电压如果给1.5V可以直接连接引脚p6.1吗?是否还需要外加限流电阻?
同时它的电压范围应该在什么地方可以找到,看它的datasheet内容太多不知道去哪里找。 谢谢
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

16
 
我最近也在做检压和配流,检测电压在0.6v左右,但一直检测不到有效值,可以请教一些经验吗?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表