找回密码
 立即注册
查看: 755|回复: 12

STC8G 量产时adc高阻输入有问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-07-19 09:04:12

12

主题

33

回帖

202

积分

中级会员

积分
202
发表于 2024-7-8 17:27:38 | 显示全部楼层 |阅读模式
STC的各位师傅好,最近一个项目已经量产了,2000片中有一片adc口有问题

图中是ADC接口电路,R11是电位器,CN3接口也是一个电位器,
两个电位器串联分压,都可以调节(都是10k电位器)
现在的不良现象是调节R11为最大阻值,和CN3电位器分压后为2.5v,
调节CN3电位器为最小值时,电压居然升到3.7v,


CN3的3脚,
第二个电位器的电压也升到了,3.7v
更换芯片后,一切正常,想请教一下,这是怎么回事呢?




截图202407081722061825.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:117
  • 最近打卡:2025-01-21 08:42:28

0

主题

16

回帖

572

积分

高级会员

积分
572
发表于 2024-7-8 17:31:58 | 显示全部楼层
2000个有一个坏的不也很正常吗

点评

但是我怕是我设计问题  发表于 2024-7-8 17:42
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-7-8 17:39:39 | 显示全部楼层
关键我看不懂他这个原理图,我看不懂...
如下短路 R2, W1 用 10K, 接到 ADC输入,不是比较器



截图202407081738556533.jpg


回复 支持 反对

使用道具 举报 送花

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

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-7-8 17:45:09 | 显示全部楼层
本帖最后由 梁工 于 2024-7-8 18:01 编辑

断开R19,用数字万用表电流档(比如200uA档)代替R19,然后调整CN3的电位器,从最大调到最小,观察电流读数。
正常情况下,ADC输入是高阻,200uA档电流小于0.1uA,如果偏大,看看是否有漏电,或IO损坏。
按故障描述“调节CN3电位器为最小值时,电压居然升到3.7v”,这个跟电路原理严重不符。
见下图,当CN3调到最小,相当于动头接地,那么P5.5的状态不影响2个电位器本身的分压,但是现象是影响,这违背电路规律。请仔细检查。
截图202407081800299646.jpg

回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-07-19 09:04:12

12

主题

33

回帖

202

积分

中级会员

积分
202
发表于 2024-7-8 17:45:12 | 显示全部楼层
您可以理解为是这样的
截图202407081744556999.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-07-19 09:04:12

12

主题

33

回帖

202

积分

中级会员

积分
202
发表于 2024-7-10 10:56:16 | 显示全部楼层
#include "reg51.h"
#include "intrins.h"
sfr     CCON    =   0xd8;
sbit    CF      =   CCON^7;
sbit    CR      =   CCON^6;
sbit    CCF2    =   CCON^2;
sbit    CCF1    =   CCON^1;
sbit    CCF0    =   CCON^0;
sfr     CMOD    =   0xd9;
sfr     CL      =   0xe9;
sfr     CH      =   0xf9;
sfr     CCAPM0  =   0xda;
sfr     CCAP0L  =   0xea;
sfr     CCAP0H  =   0xfa;
sfr     PCA_PWM0 =  0xf2;
sfr     CCAPM1  =   0xdb;
sfr     CCAP1L  =   0xeb;
sfr     CCAP1H  =   0xfb;
sfr     PCA_PWM1 =  0xf3;
sfr     CCAPM2  =   0xdc;
sfr     CCAP2L  =   0xec;
sfr     CCAP2H  =   0xfc;
sfr     PCA_PWM2 =  0xf4;
sfr     WDT_CONTR   =   0xc1;
sfr     AUXR        =   0x8e;
sfr     ADC_CONTR   =   0xbc;
sfr     ADC_RES     =   0xbd;
sfr     ADC_RESL    =   0xbe;
sfr     ADCCFG      =   0xde;
sfr     P5          =   0xC8;
sfr     P_SW2       =   0xba;
sfr     P_SW1       =   0xA2;
#define ADCTIM  (*(unsigned char volatile xdata *)0xfea8)



sfr     P3M1    =   0xb1;
sfr     P3M0    =   0xb2;

sfr     P5M1    =   0xc9;
sfr     P5M0    =   0xca;

sbit    P33    =   P3^3;
sbit    P32    =   P3^2;
sbit    P31    =   P3^1;
sbit    P30    =   P3^0;
sbit    P54    =   P5^4;
sbit    P55    =   P5^5;

unsigned char dwq=0;
bit kg =0 ;


void Delay1ms()                //@20.000MHz
{
        unsigned char i, j;

        i = 20;
        j = 113;
        do
        {
                while (--j);
        } while (--i);
}

void pwm_init(){
                CCON = 0x00;
    CMOD = 0x0A;                                //PCA时钟为系统时钟
    CL = 0x00;
    CH = 0x00;
    CCAPM0 = 0x42;                              //PCA模块2为PWM工作模式
    PCA_PWM0 = 0x00;                            //PCA模块2输出8位PWM
    CCAP0L = 0xff;                               //PWM占空比为0%[(100H-20H)/100H]
    CCAP0H = 0xff;
          CR=1;
    }

void main()
{
          P54=1;
          P55=0;
    P33=1;
          P32=0;
          P31=1;
          P30=1;
    P3M0 = 0x0C;
          P3M1 = 0x00;
    P33=1;
          P32=0;
          P31=1;
          P30=1;
    P5M0 = 0x10;
          P5M1 = 0x20;
   
   
    //ADC
          P_SW2 |= 0x80;
    ADCTIM = 0x3f;                              //设置ADC内部时序
    P_SW2 &= 0x7f;
    ADCCFG = 0x0f;                              //设置ADC时钟为系统时钟/2/16
    ADC_CONTR = 0x85;                           //使能ADC模块
   
    WDT_CONTR = 0x24;                           //使能看门狗,溢出时间约为39-65

    while (1){
                   WDT_CONTR = 0x34;                       //清看门狗,否则系统复位
                         Delay1ms();
                         ADC_CONTR |= 0x40;                       //启动AD转换
       _nop_();
       _nop_();
                         _nop_();
       _nop_();
                         while (!(ADC_CONTR & 0x20));             //查询ADC完成标志
       ADC_CONTR &= ~0x20;                     //清完成标志
                           dwq=(ADC_RES*10)/12;
       
                         if(255-dwq<250 && kg==0){
                         pwm_init();
                         kg=1;         
                         }
                         if(kg==1){
                          if(255-dwq>=250){
                            PCA_PWM0 |= 0x3F;
                                        CCAP0H=255;
                                 }
                         if(255- dwq<CCAP0H &&255- dwq<250){
                         if(CCAP0H>250){
                         PCA_PWM0 = (PCA_PWM0 & ~0x32) |((dwq >> 4) & 0x30);
                         CCAP0H=255;
                         CCAP0H -=1 ;
       Delay1ms();                                 
                         CCAP0H -=1 ;
       Delay1ms();
                         CCAP0H -=1 ;
       Delay1ms();
       CCAP0H -=1 ;
       Delay1ms();
       CCAP0H -=1 ;
       Delay1ms();                 
                         }
                          CCAP0H -=1 ;
                       
                         }
                        if(255- dwq>CCAP0H){
                  
                        CCAP0H +=1 ;

                }
                       
                        if(CCAP0H>=250){
                        PCA_PWM0 |= 0x3F;
                        CCAP0H=255;       
                        }       
                }     
}
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:365
  • 最近打卡:2025-05-02 00:20:03

6

主题

319

回帖

2206

积分

金牌会员

积分
2206
发表于 2024-7-10 14:22:54 | 显示全部楼层
不用看程序,这简单应用,如果程序有问题会大批不良.
换芯片就正常,问题只能出在焊接和芯片本身.你把拆下来的芯片换到另一块板子上试试,
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-07-19 09:04:12

12

主题

33

回帖

202

积分

中级会员

积分
202
发表于 2024-7-10 14:50:43 | 显示全部楼层
网*** 发表于 2024-7-10 14:22
不用看程序,这简单应用,如果程序有问题会大批不良.
换芯片就正常,问题只能出在焊接和芯片本身.你把拆下来的 ...

前辈您好,换到别的板子也是不行,梁工说怕是程序运行当中,把端口改为了准双向口,所以我就担心是程序的问题
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-05-01 09:38:35

10

主题

70

回帖

1307

积分

金牌会员

积分
1307
发表于 2024-8-1 10:59:25 | 显示全部楼层
看了一下楼主的程序,这一句有可能会出问题: dwq=(ADC_RES*10)/12; dwq和ADC_RES都是8位数据,ADC_RES*10有可能会发生溢出错误。楼主这个程序也敢出产品,真是服了,正常人使用ADC一般前面一两次数据都会丢弃,然后8次以上ADC取平均。楼主一次过牛

点评

确实是,我没空详细看其程序,这句确实有问题的,应该强转一下: dwq=((u16))ADC_RES*10)/12;  详情 回复 发表于 2024-8-4 20:49
回复 支持 反对

使用道具 举报 送花

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

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-8-4 20:49:21 | 显示全部楼层
hhh*** 发表于 2024-8-1 10:59
看了一下楼主的程序,这一句有可能会出问题: dwq=(ADC_RES*10)/12; dwq和ADC_RES都是8位数据,ADC_RES*10 ...

确实是,我没空详细看其程序,这句确实有问题的,应该强转一下:
dwq=((u16))ADC_RES*10)/12;
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:35 , Processed in 0.145588 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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