你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8L051,AD值误差大

[复制链接]
keed 提问时间:2015-2-5 10:06 /
悬赏7ST金币未解决
金币全给了,不要嫌少,问题如下

前段时间在使用STM8S在一个锂电池管理项目上,但是发现给MCU供电不是很好处理,故改用STM8L051 发现一个比较奇怪的问题!
单独转换通道 AD值还是比较准确的,但是4个通道轮番扫描一次就 ,AD值就有比较大的误差,程序如下
  程序放在中断里面,无关部分省略…………
  for(ADCCH=0;ADCCH<4;)
  {
     if(ADCCH == 0)
      {
        InputTep = InputTep + ADC_CONV(ADCCH);      
      }
    if(ADCCH == 1)
      {
        BattTep = BattTep + ADC_CONV(ADCCH);
      }
    if(ADCCH == 2)
      {
        VBusTep = VBusTep + ADC_CONV(ADCCH);
      }
    if(ADCCH == 3)
      {
        LoadCurrTep = LoadCurrTep + ADC_CONV(ADCCH);
      }
    ADCCH++;
  }
  ADCCNT++;
  if(ADCCNT == 8)
  {
    InputAVGOld = InputAVG;
    BattAVGOld = BattAVG;
    VBusAVGOld = VBusAVG;
    LoadCurrAVGOld = LoadCurrAVG;
    InputAVG = InputTep>>3;
    BattAVG = BattTep>>3;
    VBusAVG = VBusTep>>3;
    LoadCurrAVG = LoadCurrTep>>3;
    InputTep = 0;
    BattTep = 0;
    VBusTep = 0;
    LoadCurrTep = 0;
    ADCCNT = 0;

}

void Init_AD(void)
{
                ADC1_CR2 = 0x83;
                ADC1_CR3 = 0x80;
                ADC1_SQR1 = 0x80;
                ADC1_SQR2 = 0;
                ADC1_SQR4 = 0;
}

unsigned int ADC_CONV(unsigned char ADCH)
{
   unsigned int DataTep;
   unsigned int DataTep1;
    ADC1_SQR3 = 0x08<<ADCH;
    ADC1_CR1|=0x02;
    while(ADC1_SR_EOC == 0);
    DataTep = ADC1_DRL;
    DataTep1 = ADC1_DRH;
    DataTep1 = DataTep1<<8;
    DataTep = DataTep|DataTep1;
    ADC1_SR_EOC = 0;
    ADC1_SQR3 = 0;
    return DataTep;
}

收藏 1 评论9 发布时间:2015-2-5 10:06

举报

9个回答
博根 回答时间:2015-2-5 10:53:50
ADC_CONV函数里面可以对ADC1_CR1进行清零一下
keed 回答时间:2015-2-5 11:04:14
z00 发表于 2015-2-5 10:53
ADC_CONV函数里面可以对ADC1_CR1进行清零一下

清理ADC1_CR1_CON位还是 star位  ADC POWERON 模式来回切换那样采样 也还是不准确。
foxglove 回答时间:2015-2-5 17:01:32
看看怎么能解决
阿里巴巴 回答时间:2015-2-6 21:00:42
xxxxxxxxxx.jpg
lcdi 回答时间:2015-2-6 23:18:37
建议AD转换函数里,设置完AD通道后,加少许延时(比如说加一些空指令),然后再启动AD。
试试看?
doctorsoft 回答时间:2015-3-15 17:37:53
转换通道后第一次AD值应该丢弃,AVR是这样建议的,不知ST是否这样。
1、建议转换通道后连续采样多次(第一次结果丢弃),得到通道N的AD值(平均法)
2、改变通道N,进行下一个通道的AD采集。
kqh1120 回答时间:2015-3-15 19:32:53
不会帮顶 14.gif
jeromeRo 回答时间:2015-3-16 11:25:09
我觉得是通道需要清除,可能没清除引起的,不知道是不是,楼主现在怎么样了
759611 回答时间:2015-3-16 12:00:57
楼主误差究竟多大?
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版