STC AD采样 如何准确得到基准电压和VCC

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STC AD采样 如何准确得到基准电压和VCC相关的知识,希望对你有一定的参考价值。

VCC4.83V 用TL431基准,万用表测得2.49V,用手册286页AD典型应用线路接入,这时候采样点电压变成了2.79V,悬空采样引脚,测得引脚上电压3.33V。

直接用采样脚连接2.5V基准,换了好几种基准芯片,采样出来的10bit 数值都在469左右。(引脚已经配置为高阻状态)

按照手册 10bit 采样值 = 1024 x Vin/Vcc 的公式
469 = 1024 x 2.49 /Vcc
求得 VCC = 5.43V, 而实际上VCC只有 4.83V

而通过手册的典型应用线路采样Vcc,采样值是920

如果用 469/920 = (2.49基准)/Vcc ,此时求出Vcc为4.88V,比较接近实际测量值

后来又发现一个问题,换了电源给单片机供电,万用表实测4.95V。这时如果直接采样Vcc的话,和前面4.83V供电的采样值是一样的,都是920,但采样基准(万用表实测还是2.49v)的值变化了,为458。

不知道大家用TL431之类的2.5v基准stc采样出来的数值是多少?怎么处理这个基准问题
问下采样最大值1024 是对应着实际的Vcc吗 ? 怎么样才能得到准确的基准电压进而求解出Vcc呢,请教解惑

使用一个引脚来釆集基准,就是2.5伏那个,如果是8位,电源是5伏,那釆来的值就是128

如果电源为4伏,此时基准仍是2.5伏,那釆来的值大于128

根据釆来的值的差计算出当前的电源电压,就可精确得到釆集值了。
另外stc单片机的基准电压就是比电源电压低0.几伏的一个电压

单片机的运算能力有限,不可能每次釆集都先算下电源电压,但电源也不可能变化很快,所以可以每釆集几十次再算次基准。或者每次上电时釆集一次。
参考技术A 这款芯片我没有用过。
通常 ADC 参考电压 VREF 的选择,由程序设置内部控制字决定,可设置为内部 VREF(通常是2.5V)、Vcc(5V) 或外部引脚 输入(通常是2.5V)。我没明白你采用哪种基准源。
选用 Vcc 做基准是最差的质量。选用2.5V基准源时,测量精度与电源电压无关。外接TL431时,紧挨着输入脚用1~2uF钽电容并联高瓷介电容接地。
校准测量误差时,不能把外部 输入的基准源(TL431)作为被采集信号输入,应该另外搭建基准源供采集。
ADC测量的稳定性是最重要的,绝对误差程序容易修正。由于数字电路的高频干扰,采集直流电压应该由程序设置循环,连续采集几次,求出平均值。
如果 ADC 模拟输入电压范围是 0 ~ 5 V,采集数据对应值是 0 ~ 1023 。
参考技术B 电路设计 再检查一遍,滤波和抗干扰要做好,431有最低工作电流限制的,你再计算 核对一下

STC系列AD采集-P14端口模拟量以及转换电压值发送到串口

【STC系列】AD采集-P14端口模拟量以及转换电压值发送到串口


相关的知识点

  • Keil C51重定向printf到串口。

将串口打印实现函数进行再封装

//重写putchar函数
char putchar(char c)

	SendByte(c);
	return c;

  • 数据转换

将模拟量转换为电压值,换算公式:Voltage =(res/1023.0)*5;

主程序

/*-----------------------------------------------------------------------   
 * 项目名称:

     STC15F2K60S2 AD采集程序

 * 配置说明:
     MCU:             STC15F2K60S2
     开发板:       	  STC15W408AS开发板
     晶振:      	  外部时钟:11.0592MHz
     扩展模块:  	  -10K可调定位器

 * 备注:
     - 将开发板的串口与电脑串口连接

----------------------------------------------------------------------*/  
/************************包含头文件***************************************************/
#include "stdio.h"
#include<STC15W.h>
#include<USART.h>
#include<ADC.h>

//定义要采集AD通道
#define ch	4		//即P1.4端口

//sfr P1M1 = 0x91;    //PxM1.n,PxM0.n     =00--->Standard,    01--->push-pull
//sfr P1M0 = 0x92;    //                  =10--->pure input,  11--->open drain

/************************主函数******************************************************/
void main()

    unsigned int res=0;
    unsigned char result[4] = 0;
		unsigned char Volbuf[4] = 0;
		float Voltage =0.0;
//将P1.x口设置为高阻输入模式
	P1M1 |= (1<<ch);		// 把ADC口设置为高阻输入
	P1M0 &= ~(1<<ch);
	P1ASF = (1<<ch);		//P1.x做ADC

    InitSerialPort(); 		//初始化串口,波特率9600,8bit数据位,1停止位,无校验
    OpenADC_CHx(ch);

    while(1)
    
        //发送数据采集结果
        SendByte('\\t');
        SendString("AD_Value = ");
        GetADCResult_Char(ch,result);
        SendString(result);
					res = GetADCResult(ch);
			Voltage =(res/1023.0)*5;
		//	sprintf(Volbuf, "%3.2f",Voltage);
			printf("\\t Voltage:%3.2fV \\r\\n",Voltage);
		//	printf("电压: %d.%d%d V\\r\\n",Volbuf[0],Volbuf[1],Volbuf[2],Volbuf[3]);
        //SendByte(GetADCResult_High(ch));
        //SendByte(GetADCResult_Low(ch));
        //换行
        SendByte('\\r');
        //延时
        Delay(30);
    

/*********************************The End****************************************/

程序源码

链接:https://pan.baidu.com/s/17LcWOepmg9lMv0B_F1_kXA 
提取码:3ufo

以上是关于STC AD采样 如何准确得到基准电压和VCC的主要内容,如果未能解决你的问题,请参考以下文章

AD模块2.5基准电压,怎样采集1~5V的电压信号?

如何解决GD32F103在重新上电AD采样时偶尔有6个码的跳动

AD转化的基准电压的作用是啥?

单片机如何检测自身电压?或者基准电压?请看下面详细说明,求高手帮忙,分都不是问题!!

5V带AD转换单片机的基准电压是不是能超过5V 也就是说5V单片机是不是能测量超过5V的电压?求赐教

STC单片机通过ADC分段采样读按键实现方法