4417|9

28

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

LaunchPad的DTS模式下,ADC得到的数据总是最大值 [复制链接]

本人菜鸟,从零起步,如犯了些低级错误,还望大家多多谅解

最近想DIY一下移动电源,主控选用2231,先用LaunchPad+面包板进行程序实验

大致流程如下(尽我所能把程序描述清楚,如果大家对步骤还有哪里不知道,我愿与大家及时交流):
main函数开始时各个模块初始化,之后进入低功耗模式
待启动键按下(ProPower.h中的ONOFF_BTM定义)
进入中断,启动电源(对应ONOFF_CTL管脚,控制MOS管),启动定时器,关闭低功耗
此时跳转至main函数中的ADC部分

ADC用于检测输出电流与锂电池电压,DTS模式,P1.0 P1.1输入
当输出电流过大(curval变量)时关闭输出
电池电量过低(batval变量)时…………暂时未定义
保护功能在PowProtect()函数中实现

定时器仍未开发多少,因此只用做状态机,实现短按开机长按关机的功能

目前的问题是:
不论把PowProtect()函数放在while死循环中,或是定时器中,或是ADC中断函数中
全速运行时,curval = adcval[0],这个变量,读取的数值全部为最大(有时batval = adcval[1];)也会出现类似情况
采样值用IAR软件Debug模式下的Watch窗口

如果一步一步地运行程序,则大约有一半的情况,curval采样值是正确的
对此有些不理解
PS:电位器的电压输出值用万用表量过,电压是正确的

个人猜测会不会是采样的时间不足,或是初始化变量不对
网大家帮我看看这个问题
谢谢啦

附上实验环境的照片和源代码

ProPower.rar (1.96 KB, 下载次数: 13)

最新回复

果然未拔  受用了   感谢啊  详情 回复 发表于 2012-7-30 20:58
 
点赞 关注

回复
举报

28

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
采用了一种掩耳盗铃的方法
if(adcval[0] < 1000)
    curval = adcval[0];       //current output value
  if(adcval[1] < 1000)
    batval = adcval[1];       //battery value
当采样值过大时,直接忽略
现象略有改善。。。
 
 

回复

28

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
之后又发现,ADC采样时,最好将定时器中断关闭(出现过几次情况,每次暂停时,系统都运行在TimerA的中断函数中)
下面这个是While(1)中的语句
    PowProtect();
    ADC10CTL0 &= ~ENC;
    CCTL0 &= ~CCIE;            //turn off timer while adc is running
    while (ADC10CTL1 & BUSY);               // Wait if ADC10 core is active
    //ADC10SA = 0x200;                      // Data buffer start
    ADC10SA = (int)adcval;                   // Data buffer start
    ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
    __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
    CCTL0 |= CCIE;            //turn on timer
 
 
 

回复

28

帖子

0

TA的资源

一粒金砂(中级)

4
 
目前已经成功解决上述问题,参考了很多国内外帖子的内容
再加上过电流、低电压检测,程序部分基本就完工啦
到时候把代码一起发上来,哈哈
 
 
 

回复

28

帖子

0

TA的资源

一粒金砂(中级)

5
 
因为要测试长、短按键的效果,以及程序可靠性
LaunchPad上的按钮都快被我按报废啦!~~
 
 
 

回复

7219

帖子

195

TA的资源

五彩晶圆(高级)

6
 
请教下楼主 什么是DTS模式
 
 
 

回复

28

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 6楼 常见泽1 的帖子

如果需要ADC采样多个通道
就可以通过DTS模式,交给ADC一个数组的起始地址
启动采样……
之后ADC会自动对多个通道进行自动采样,并依次将采样值放进数组
采样完成后直接取用数组中的值就OK了~ 很方便!

点评

求详解!最近在做launchpad的ADC多路通道采样,不知道如何得到多路AD的转换结果,求大神赐教!  详情 回复 发表于 2012-7-12 00:44
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 7楼 zgxcom123 的帖子

求详解!最近在做launchpad的ADC多路通道采样,不知道如何得到多路AD的转换结果,求大神赐教!
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

9
 
楼主那个串口的短接冒拔了没有?
P1.1和P1.2连在串口通信上,如果短接冒没拔,P1.1直接是3.6
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

10
 
果然未拔  受用了   感谢啊
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表