找回密码
 立即注册
查看: 391|回复: 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;
}

回复 送花

使用道具 举报

  • TA的每日心情
    开心
    2024-5-11 09:06
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    16

    主题

    724

    回帖

    2578

    积分

    超级版主

    积分
    2578
    发表于 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, 下载次数: 13

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3043

    回帖

    6859

    积分

    超级版主

    积分
    6859
    发表于 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, 下载次数: 22)

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    10

    主题

    31

    回帖

    142

    积分

    注册会员

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-19 07:49 , Processed in 0.073679 second(s), 44 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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