找回密码
 立即注册
楼主: Emmetttttt

关于AI8G1K08A-8Pin的ADC采样问题

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:117
  • 最近打卡:2025-03-06 09:50:21

6

主题

142

回帖

638

积分

高级会员

积分
638
发表于 2024-11-22 09:54:22 | 显示全部楼层
论坛里有可以达到16位的方法
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2024-12-02 14:21:39
已绑定手机

1

主题

11

回帖

65

积分

注册会员

积分
65
发表于 2024-11-22 09:57:11 | 显示全部楼层
Mat*** 发表于 2024-11-22 09:54
论坛里有可以达到16位的方法

现在的问题不是精度的问题,是adc采样转换无法得到成功的标志
这是官方例程里的获取成功标志位的方法,一样是输出4096
        for(i=0; i<250; i++)                //超时返回,正常i等于10以内就可以转换完成
        {
                if(ADC_CONTR & ADC_FLAG)
                {
                        ADC_CONTR &= ~ADC_FLAG;
                        if(ADCCFG &  (1<<5))                //转换结果右对齐。
                        {
                                adc = ((u16)ADC_RES << 8) | ADC_RESL;
                        }
                        else                //转换结果左对齐。
                        {
                                #if ADC_RES_12BIT==1
                                        adc = (u16)ADC_RES;
                                        adc = (adc << 4) | ((ADC_RESL >> 4)&0x0f);
                                #else
                                        adc = (u16)ADC_RES;
                                        adc = (adc << 2) | ((ADC_RESL >> 6)&0x03);
                                #endif
                        }
                        return        adc;
                }
        }
        return        4096;        //错误,返回4096,调用的程序判断

点评

你的单片机具体型号是什么?  详情 回复 发表于 2024-11-22 10:00
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-11-22 10:00:10 | 显示全部楼层
Emmet*** 发表于 2024-11-22 09:57
现在的问题不是精度的问题,是adc采样转换无法得到成功的标志
这是官方例程里的获取成功标志位的方法,一 ...

你的单片机具体型号是什么?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2024-12-02 14:21:39
已绑定手机

1

主题

11

回帖

65

积分

注册会员

积分
65
发表于 2024-11-22 10:10:21 | 显示全部楼层
梁*** 发表于 2024-11-22 10:00
你的单片机具体型号是什么?

8G1K08A

点评

用户请先别修改程序, 直接下载“ADC相关程序-STC8G1K08A-8PIN”里的"02-5路ADC转换-BandGap-串口1(P3.1)返回结果-C语言"里的"ADC.hex"测试. 下载时选择主频11.0592MHZ。 测试时, 电脑的串口助手设置115200,8,n,1.  详情 回复 发表于 2024-11-22 11:32
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-11-22 11:32:37 | 显示全部楼层

用户请先别修改程序, 直接下载“ADC相关程序-STC8G1K08A-8PIN”里的"02-5路ADC转换-BandGap-串口1(P3.1)返回结果-C语言"里的"ADC.hex"测试. 下载时选择主频11.0592MHZ。
测试时, 电脑的串口助手设置115200,8,n,1.

本程序演示4路ADC(P3.0 P3.2 P3.3 P5.4 P5.5)和bandgap查询采样,通过串口1(P3.1)发送给上位机,波特率115200,8,n,1.
0~3通道对应P3.0~P3.3, 4通道-->P5.4, 5通道-->P5.5, 15通道为内部1.19V基准电压做输入的ADC值.
STC8G系列-ADC相关程序.rar (341.32 KB, 下载次数: 108)




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2024-12-02 14:21:39
已绑定手机

1

主题

11

回帖

65

积分

注册会员

积分
65
发表于 2024-11-22 11:48:08 | 显示全部楼层
本帖最后由 Emmetttttt 于 2024-11-22 11:57 编辑
梁*** 发表于 2024-11-22 11:32
用户请先别修改程序, 直接下载“ADC相关程序-STC8G1K08A-8PIN”里的"02-5路ADC转换-BandGap-串口1(P3.1) ...

这样的测试是好的
[11:46:50.377]接收←
                               ADC00=1023  
[11:46:50.576]接收←ADC02=0000  
[11:46:50.775]接收←ADC03=0000  
[11:46:50.975]接收←ADC04=0000  
[11:46:51.174]接收←ADC05=0234  
[11:46:51.388]接收←ADC15=0249



那种收不到转换成功的标志位是偶尔出现的,而且是运行挺久才有可能出现,这样的测试感觉有些难复现那种情况
我不确定是不是电压采集频率过快导致的了,或者说是母线电压出现了波动,因为将这个电压采集出来显示再数码管的时候,平常会有540v跳到490v这样的情况

点评

ADC是硬件外设,一旦启动,就会自动转换直至完成,绝对不会出现卡死的情况。 ADC设置采样时间要要合适,不知道你说的“电压采集频率过快”指的什么? 你可能程序中将ADC关闭了,所以等不来ADC转换完成标志,否则一旦  详情 回复 发表于 2024-11-22 12:22
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-11-22 12:22:58 | 显示全部楼层
本帖最后由 梁工 于 2024-11-22 12:25 编辑
Emmet*** 发表于 2024-11-22 11:48
这样的测试是好的
[11:46:50.377]接收←
                               ADC00=1023  

ADC是硬件外设,一旦启动,就会自动转换直至完成,绝对不会出现卡死的情况。
ADC设置采样时间要要合适,不知道你说的“电压采集频率过快”指的什么?
你可能程序中将ADC关闭了,所以等不来ADC转换完成标志,否则一旦启动,必然会完成。

我的例子没有超时处理,你可以连续通电一个月(要保证电源可靠哦),看看会不会出现你说的问题。我用过无数ADC场合,没有遇到ADC会完成不了的情况。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2024-12-02 14:21:39
已绑定手机

1

主题

11

回帖

65

积分

注册会员

积分
65
发表于 2024-11-22 13:17:42 | 显示全部楼层
梁*** 发表于 2024-11-22 12:22
ADC是硬件外设,一旦启动,就会自动转换直至完成,绝对不会出现卡死的情况。
ADC设置采样时间要要合适,不 ...

if(div_01ms)                                                //0.1ms任务
{
        GetVinValue();
        div_01ms = 0;
}
if(div_1ms)                                                        //1ms任务
{
        GetTempValue();
        Get_BrkFanFlag();
        div_1ms = 0;
}
电压采集ADC开启转换频率是10KHz,温度是1KHz,ADC采样时间设置的是最大的
程序里没有关闭ADC的代码,应该不是这个问题
按照官方例程里的代码也是由于获取不到标志位导致函数输出4096
//========================================================================
// 函数: u16        Get_ADCResult(u8 channel)
// 描述: 查询法读一次ADC转换结果.
// 参数: channel: 选择要转换的ADC通道.
// 返回: ADC转换结果.
// 版本: V1.0, 2012-10-22
//========================================================================
u16        Get_ADCResult(u8 channel)        //channel = 0~15
{
        u16        adc;
        u8        i;

        if(channel > ADC_CH15)        return        4096;        //错误,返回4096,调用的程序判断       
        ADC_RES = 0;
        ADC_RESL = 0;

        ADC_CONTR = (ADC_CONTR & 0xf0) | channel;
        ADC_CONTR |= ADC_START;                        //启动转换
        NOP(10);

        for(i=0; i<250; i++)                //超时返回,正常i等于10以内就可以转换完成
        {
                if(ADC_CONTR & ADC_FLAG)
                {
                        ADC_CONTR &= ~ADC_FLAG;
                        if(ADCCFG &  (1<<5))                //转换结果右对齐。
                        {
                                adc = ((u16)ADC_RES << 8) | ADC_RESL;
                        }
                        else                //转换结果左对齐。
                        {
                                #if ADC_RES_12BIT==1
                                        adc = (u16)ADC_RES;
                                        adc = (adc << 4) | ((ADC_RESL >> 4)&0x0f);
                                #else
                                        adc = (u16)ADC_RES;
                                        adc = (adc << 2) | ((ADC_RESL >> 6)&0x03);
                                #endif
                        }
                        return        adc;
                }
        }
        return        4096;        //错误,返回4096,调用的程序判断
}


回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:48 , Processed in 0.159510 second(s), 99 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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