[STM8] 能不能用单片机的AD转换采集电源电压呢

[复制链接]
 楼主| WATS 发表于 2016-7-23 17:54 | 显示全部楼层 |阅读模式
本人想设计一个检测电源电压的功能,当电源低于某一个电压值时,就把单片机处于另一个工作状态。能不能利用AD采集电源电压值来实现呢
lulugl 发表于 2016-7-23 18:05 | 显示全部楼层
可以呀,用ADC采样,再判断就行了
李志博32 发表于 2016-7-23 18:57 | 显示全部楼层
可以
mmuuss586 发表于 2016-7-23 22:52 | 显示全部楼层
可以啊,电阻分压后接到ADC;
 楼主| WATS 发表于 2016-7-24 10:30 | 显示全部楼层
mmuuss586 发表于 2016-7-23 22:52
可以啊,电阻分压后接到ADC;

为什么我用4.7V的电源和3.2V的电源供电,采集到的电源电压一直是4.9V呢
采集代码如下

static u8 AD_ADON_Flag=1;//n=0;
  
  u8 i=0,j,k=0;
  u16 GetADCVal[10],tmp;
  
//  if(ADC1->CSR&0X80)  //不开缓冲区   转换结束的标志位
//  {
//    ADC1->CSR&=~0X80;//清除
   
    if(AD_ADON_Flag)//通道选择标志位   
    {
      AD_ADON_Flag=0;
      
//      for( k=0; k<10; k++ )//滤波用的
//      {
        ADC1->CR1 |= 0X01; //启动ADC
        
        while(!(ADC1->CSR&0X80));
        ADC1->CSR&=~0X80;//清除
        
        TEMPVal0 = ADC1_GetConversionValue();  
//        
//      }
//      for(j=0;j<10;j++)//滤波用的
//        for(i=0;i<10-i;i++)
//        {
//          if( GetADCVal>GetADCVal[i+1] )
//          { tmp=GetADCVal; GetADCVal=GetADCVal[i+1]; GetADCVal[i++]=tmp; }
//        }      
      
      TEMPVal0=(int)(((float)TEMPVal0/1024)*50); //把电压值扩大10倍    50V
      ADC_Init(); //初始化AD转换
      ADC1->CSR |= 0X01;//切换到通道1  
        
      return 0;
    }

    else
    {
      AD_ADON_Flag=1;
      
      for( k=0; k<10; k++ )   //滤波用的
      {
        ADC1->CR1 |= 0X01; //启动ADC
        
        while(!(ADC1->CSR&0X80));
        ADC1->CSR&=~0X80;//清除标志位
        
        GetADCVal[k] = ADC1_GetConversionValue();  
        
      }      
      for(j=0;j<9;j++)//滤波用的
        for(i=0;i<9-i;i++)
        {
          if( GetADCVal>GetADCVal[i+1] )
          { tmp=GetADCVal; GetADCVal=GetADCVal[i+1]; GetADCVal[i+1]=tmp; }
        }      
      
      TEMPVal1=(int)(((float)GetADCVal[6]/1024)*50); //把电压值扩大10倍    50V
      ADC_Init(); //AD转换初始化
      ADC1->CSR &= ~0X01;//切换到通道0  
        
      return 0;
    }
doublesan 发表于 2016-7-24 20:20 | 显示全部楼层
ADC就是用来采集这些数据的,你的ADC中硬件的ADC参考和软件配置要一致才能搞定ADC吧!
capturesthe 发表于 2016-7-25 14:49 | 显示全部楼层
用adc采集电压,设置一个阈值,得用滤波器滤波
gaonima 发表于 2016-7-26 09:10 | 显示全部楼层
这是 多么简单的 一个 问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

36

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部