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呢,请教解惑
如果电源为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的主要内容,如果未能解决你的问题,请参考以下文章
如何解决GD32F103在重新上电AD采样时偶尔有6个码的跳动
单片机如何检测自身电压?或者基准电压?请看下面详细说明,求高手帮忙,分都不是问题!!