打印
[STM8]

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

[复制链接]
874|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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;

使用特权

评论回复
5
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;
    }

使用特权

评论回复
6
doublesan| | 2016-7-24 20:20 | 只看该作者
ADC就是用来采集这些数据的,你的ADC中硬件的ADC参考和软件配置要一致才能搞定ADC吧!

使用特权

评论回复
7
capturesthe| | 2016-7-25 14:49 | 只看该作者
用adc采集电压,设置一个阈值,得用滤波器滤波

使用特权

评论回复
8
gaonima| | 2016-7-26 09:10 | 只看该作者
这是 多么简单的 一个 问题

使用特权

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

本版积分规则

12

主题

36

帖子

0

粉丝