找回密码
 立即注册
查看: 742|回复: 3

STC8G1K17的ADC15通道采样不准,3.9V读出3.4V

[复制链接]

10

主题

31

回帖

142

积分

注册会员

积分
142
发表于 2023-9-14 08:44:51 | 显示全部楼层 |阅读模式
#include "ADCVDC_Driver.h"


int *BGV;//内部 Bandgap 电压值存放在 idata 中
                                 //idata 的 EFH 地址存放高字节
         //idata 的 F0H 地址存放低字节
         //电压单位为毫伏(mV)



/**
* @brief  初始化ADC
* @param  无
* @retval 无
*/
void ADCInit(void)
{
        BGV = (int idata *)0xef;
       
        P_SW2 |= 0x80;
        ADCTIM = 0x3f;                              //设置ADC内部时序
        P_SW2 &= 0x7f;

        ADCCFG = 0x2f;                              //设置ADC时钟为系统时钟/2/16
        ADC_CONTR = 0x8f;                           //使能ADC模块,并选择第15通道
       
        ES = 1;
}

int ADCRead()
{
        int res;

        ADC_CONTR |= 0x40;                          //启动AD转换
        _nop_();
        _nop_();
        while (!(ADC_CONTR & 0x20));                //查询ADC完成标志
        ADC_CONTR &= ~0x20;                         //清完成标志
        res = (ADC_RES << 8) | ADC_RESL;            //读取ADC结果

        return res;
}
/**
* @brief  计算电池电压
* @param  无
* @retval 无
*/

int VBACCount(void)
{
    int res;
    int vcc;
    int i;

                ADCRead();
                ADCRead();                                  //前两个数据建议丢弃

    res = 0;
    for (i=0; i<8; i++)
    {
        res += ADCRead();                       //读取8次数据
    }
    res >>= 3;                                  //取平均值

    vcc = (int)(1024L * *BGV / res);            //(10位ADC算法)计算VREF管脚电压,即电池电压
                return res;
}

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:59
  • 最近打卡:2025-06-18 10:27:21

26

主题

1037

回帖

3974

积分

超级版主

积分
3974
发表于 2023-9-14 10:37:36 | 显示全部楼层
附加是我的测试代码

万用表测量VCC电压4.97V
示波器测量的VCC纹波为50mV左右
串口输出的ADC测量VCC为4960mV~4980mV
使用BGV反推出的VCC电压还是比较准确的

你那边需要看看你的VCC是或否纹波太大导致误差大
另外你程序这里return的是res,而不是vcc,是否是笔误
截图202309141037318734.jpg

bgv2vcc.zip

36.98 KB, 下载次数: 44

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:96
  • 最近打卡:2025-06-18 10:41:10

74

主题

6095

回帖

1万

积分

超级版主

积分
12741
发表于 2023-9-14 11:33:42 | 显示全部楼层
直接下载“ADC相关程序-STC8G1K08-20PIN”里的“03-ADC读取BandGap计算VCC-串口1(P3.1)返回结果-C语言”里的"ADC.hex"测试. 下载时选择主频11.0592MHZ。

测试时, 电脑的串口助手设置115200,8,n,1.

本程序演示查询方式读取bandgap转换的ADC值并计算MCU的工作电压VCC, 通过串口1(P3.1)发送给上位机,波特率115200,8,n,1.

STC8G系列-ADC相关程序.rar (341.32 KB, 下载次数: 55)

回复 支持 反对

使用道具 举报 送花

10

主题

31

回帖

142

积分

注册会员

积分
142
发表于 2023-9-14 14:02:41 | 显示全部楼层
好的
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-18 15:17 , Processed in 0.160360 second(s), 70 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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