找回密码
 立即注册
查看: 4095|回复: 39

ADC的转换参考电压永远是ADC_VRef+ 和 1.19V 辅助固定信号源无关,如何接 ?

[复制链接]

该用户从未签到

550

主题

9235

回帖

1万

积分

管理员

积分
13946
发表于 2023-6-24 15:38:47 | 显示全部楼层 |阅读模式
ADC 的 转换参考电压
永远是 ADC_VRef+,
1.19V 辅助固定信号源 无任何关系

======================================================================

ADC_VREF+ 如何接 ?MCU_VCC, 2.5V/3.0V/3.3V/4.096V/5V
1,无追求可以直接接到 MCU的VCC电源管脚 ADC_VREF+ =【ADC_AVCC = MCU_VCC】
     用ADC15通道接的1.19V固定信号源来反推当时的变化中的MCU_VCC/ADC_AVCC,
   【对ADC15通道采样转换各1次,对实际要采样转换的 ADCx通道采样转换1次】
     假定2次ADC采样转换时间内,MCU_VCC/ADC_AVCC不变或忽略不计,实际计算是,
     2个通道比较计算1次就可以得到 ADCx的输入模拟量值

2,一般要求接外部普通的的参考源,须满足 2.4V <= ADC_VREF+ <=【ADC_AVCC = MCU_VCC】
      2.5V的超简易参考源 TL431/CD431, 价格<RMB0.1附近


3,不计代价的高要求,接欧美的外部专门的参考源, 须满足 2.4V <= ADC_VREF+ <=【ADC_AVCC = MCU_VCC】
     2.5V专业参考源 / 3.0V / 3.3V / 4.096V / 5.0V专业参考源,RMB1.35 ~ RMB5

     这些专业参考源太贵,比STC专业级的ADC型MCU贵太多,RMB1.35 ~ RMB5
     ===最近REF3025AIDBZR已降价到RMB1.35以下,有高要求的可以考虑使用
     STC内部校准用的都是这些专业级的参考源,普通用户没必要如此奢华
====== ADCx输入通道的外部输入电压 <= ADC_VREF+ ================

1,无追求可以直接接到 MCU的VCC电源管脚 ADC_VREF+ =【ADC_AVCC = MCU_VCC】
     ADC输入通道接个 0.1uF / 0.01uF / 0.001uF的电容到模拟地

ADC_VREF+ 如何接 ?-1.png
============================================================================

2,一般要求接外部普通的的参考源,须满足 2.4V <= ADC_VREF+ <=【ADC_AVCC = MCU_VCC】
      2.5V的超简易参考源 TL431/CD431, RMB0.1附近
      ADC输入通道接个 0.1uF / 0.01uF / 0.001uF的电容到模拟地

ADC_VREF+ 如何接 ?-1.png
ADC_VREF+ 如何接 ?-2.png
ADC_VREF+ 如何接 ?-3.png

ADC_VREF+ 如何接 ?-4.png
============================================================================

3,不计代价的高要求,接外部专门的参考源,
     须满足 2.4V <= ADC_VREF+ <=【ADC_AVCC = MCU_VCC】
     2.5V专业参考源 / 3.0V专业参考源 / 3.3V专业参考源

     4.096V专业参考源 / 5.0V专业参考源
      ADC输入通道接个 0.1uF / 0.01uF / 0.001uF的电容到模拟地
ADC_VREF+ 如何接 ?-1.png
这些专业参考源太贵,比STC专业级的ADC型MCU贵太多,RMB1.75 ~ RMB5
===最近REF3025AIDBZR已降价到RMB1.35以下,有高要求的可以考虑使用
STC内部校准用的都是这些专业级的参考源,普通用户没必要如此奢华
截图202311191723244900.jpg


REF3012-20-25-30-33-40.pdf

1.88 MB, 下载次数: 34

回复 送花

使用道具 举报

该用户从未签到

550

主题

9235

回帖

1万

积分

管理员

积分
13946
 楼主| 发表于 2023-6-24 16:36:10 | 显示全部楼层
19.6.4                 利用ADC第15通道测量外部电压或电池电压
STC8H系列ADC的第15通道用于测量内部固定信号源1.19V,由于内部固定信号源很稳定,约为1.19V,
且不会随芯片的工作电压的改变而变化,所以可以通过测量内部固定信号源1.19V,然后通过ADC的值便
可反推出外部电压或外部电池电压。
===也可以使用ADC的第15通道固定接的内部固定信号源1.19V反推外部ADCx通道输入电压
1.png
C语言代码

//测试工作频率为11.0592MHz
#include "stc8h.h"
#include "intrins.h"
#define       FOSC                 11059200UL
#define       BRT                    (65536-(FOSC / 115200+2) / 4)
//2操作是为了让Keil编译器
                                                                                                                //自动实现四舍五入运算
int              *BGV;                                                                                  //内部参考信号源值存放在idata
//idataEFH地址存放高字节
//idataF0H地址存放低字节
//电压单位为毫伏(mV)
bit               busy;
void UartIsr() interrupt 4
{
         if(TI)
         {
                  TI = 0;
                  busy = 0;
         }
         if(RI)
         {
                  RI = 0;
         }
}
void UartInit()
{
         SCON= 0x50;
         TMOD= 0x00;
         TL1= BRT;
         TH1= BRT >> 8;
         TR1= 1;
         AUXR= 0x40;
         busy= 0;
}
void UartSend(char dat)
{
         while(busy);
         busy= 1;
         SBUF= dat;
}
void ADCInit()
{
         ADCTIM= 0x3f;                                                                          //设置ADC内部时序
         ADCCFG= 0x2f;                                                                         //设置ADC时钟为系统时钟/2/16
         ADC_CONTR= 0x8f;                                                                  //使能ADC模块,并选择第15通道
}
int     ADCRead()
{
         intres;
         ADC_CONTR|= 0x40;                                                                //启动AD转换
         _nop_();
         _nop_();
         while(!(ADC_CONTR & 0x20));                                                //查询ADC完成标志
         ADC_CONTR&= ~0x20;                                                            //清完成标志
         res= (ADC_RES << 8) | ADC_RESL;                                        //读取ADC结果
         returnres;
}
void main()
{
         intres;
         intvcc;
         inti;
         P_SW2|= 0x80;                                                                            //使能访问XFR
         P0M0= 0x00;
         P0M1= 0x00;
         P1M0= 0x00;
         P1M1= 0x00;
         P2M0= 0x00;
         P2M1= 0x00;
         P3M0= 0x00;
         P3M1= 0x00;
         P4M0= 0x00;
         P4M1= 0x00;
         P5M0= 0x00;
         P5M1= 0x00;
         BGV= (int idata *)0xef;
         ADCInit();                                                                                     //ADC初始化
         UartInit();                                                                                     //串口初始化
         ES= 1;
         EA= 1;
//       ADCRead();
//       ADCRead();                                                                                  //前两个数据建议丢弃
         res= 0;
         for(i=0; i<8; i++)
         {
                  res += ADCRead();                                                             //读取8次数据
         }
         res>>= 3;                                                                                      //取平均值
         vcc= (int)(4096L * *BGV / res);                                                 //(12ADC算法)计算VREF管脚电压,即电池电压
//       vcc= (int)(1024L * *BGV / res);                                                 //(10ADC算法)计算VREF管脚电压,即电池电压
//注意,此电压的单位为毫伏(mV)
         UartSend(vcc>> 8);                                                                     //输出电压值到串口
         UartSend(vcc);
         while(1);
}

上面方法是使用ADC的第15通道反推外部电池电压的。在ADC测量范围内,ADC外部待测量电压与ADC的测量值是成正比例的,所以也可以使用ADC的第15通道反推外部通道输入电压,假设当前已获取了内部固定信号源电压为BGV,内部固定信号源的ADC测量值为resbg,外部ADCx通道输入电压的ADC测量值为resx,则外部通道输入电压
Vx=BGV / resbg * resx
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    开心
    昨天 23:10
  • 签到天数: 46 天

    [LV.5]常住居民I

    15

    主题

    221

    回帖

    1157

    积分

    金牌会员

    积分
    1157
    发表于 2023-6-25 13:33:22 | 显示全部楼层
    路过,学习了解了更专业的知识
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    4

    回帖

    51

    积分

    注册会员

    积分
    51
    发表于 2023-7-5 16:14:23 | 显示全部楼层
    2,一般要求,接外部普通的的参考源,须满足 2.4V <= ADC_VREF+           .
    这句提示使我知道了STC8H1KO8使用VREF引脚作输入端子时(为的想节省一个IO口),
    电压低于2v的误差大,低于1.2v无法测量的原因了。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    5

    回帖

    32

    积分

    新手上路

    积分
    32
    发表于 2023-9-19 16:05:20 | 显示全部楼层
    须满足 2.4V <= ADC_VREF+ <=【ADC_AVCC = MCU_VCC】?
    我ADC_VREF用1.24V行不行?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 13:47
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    0

    主题

    26

    回帖

    310

    积分

    中级会员

    积分
    310
    发表于 2023-10-11 11:54:35 | 显示全部楼层

    不行,要大于2.4V
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    擦汗
    3 天前
  • 签到天数: 69 天

    [LV.6]常住居民II

    1

    主题

    63

    回帖

    300

    积分

    中级会员

    积分
    300
    发表于 2023-11-27 10:42:09 | 显示全部楼层
    感谢分享,学习了
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    8 小时前
  • 签到天数: 154 天

    [LV.7]常住居民III

    67

    主题

    832

    回帖

    2756

    积分

    金牌会员

    积分
    2756
    发表于 2023-12-2 16:26:55 | 显示全部楼层
    太详细了,先收藏。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    难过
    昨天 06:47
  • 签到天数: 147 天

    [LV.7]常住居民III

    134

    主题

    187

    回帖

    1596

    积分

    金牌会员

    积分
    1596
    发表于 2023-12-3 16:55:00 | 显示全部楼层
    测电池电压是不是就是在测ADC_VREF引脚上的电压

    点评

    反推出 ADC-VRef+ 的电压, 如 ADC-VRef+接到哪了, 那那个点的电压也是ADC-VRef+ 的电压  详情 回复 发表于 2023-12-3 16:59
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9235

    回帖

    1万

    积分

    管理员

    积分
    13946
     楼主| 发表于 2023-12-3 16:59:07 | 显示全部楼层
    QQ624353765 发表于 2023-12-3 16:55
    测电池电压是不是就是在测ADC_VREF引脚上的电压

    反推出 ADC-VRef+ 的电压,
    如 ADC-VRef+接到哪了,
    那那个点的电压也是ADC-VRef+ 的电压

    点评

    大侠们,帮找错误来,用ADC控制LED闪烁延时的例子  发表于 2024-4-11 11:05
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-29 16:05 , Processed in 0.088143 second(s), 69 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表