stm8s207的AD是不是有bug??

[复制链接]
 楼主| 有意思 发表于 2010-11-11 11:34 | 显示全部楼层 |阅读模式
本帖最后由 有意思 于 2010-11-11 11:39 编辑

我在使用AD时发现一个问题,AD在采样时,该通道居然有2V的电平输出,我已经断开了外围电路,AIN2只有一个电阻到地,应该是0V,我用示波器看到口线居然是200us左右的脉冲,高电平正好是采样期间,问题是,同样的software,有的板子OK,有的不行。Vref+直接使用VCC做参考电压,,下面是测试code

  1. void ADCConfig(void){   
  2. ADC2_DeInit();    //ADC2_Init(ADC2_ConvMode_TypeDef ADC2_ConversionMode, ADC2_Channel_TypeDef ADC2_Channel,                         //ADC2_PresSel_TypeDef ADC2_PrescalerSelection, ADC2_ExtTrig_TypeDef ADC2_ExtTrigger,                         //FunctionalState ADC2_ExtTriggerState, ADC2_Align_TypeDef ADC2_Align,    ADC2_Init(ADC2_CONVERSIONMODE_SINGLE, ADC2_CHANNEL_0, ADC2_PRESSEL_FCPU_D4,                         ADC2_EXTTRIG_TIM, DISABLE, ADC2_ALIGN_RIGHT, ADC2_SCHMITTTRIG_CHANNEL0, DISABLE);
  3.     ADC2_Init(ADC2_CONVERSIONMODE_SINGLE, ADC2_CHANNEL_1, ADC2_PRESSEL_FCPU_D4,                         ADC2_EXTTRIG_TIM, DISABLE, ADC2_ALIGN_RIGHT, ADC2_SCHMITTTRIG_CHANNEL1, DISABLE);                            ADC2_Init(ADC2_CONVERSIONMODE_SINGLE, ADC2_CHANNEL_2, ADC2_PRESSEL_FCPU_D4,                         ADC2_EXTTRIG_TIM, DISABLE, ADC2_ALIGN_RIGHT, ADC2_SCHMITTTRIG_CHANNEL2, DISABLE);
  4.     ADC2_SchmittTriggerConfig(ADC2_SCHMITTTRIG_ALL, DISABLE);    ADC2_ITConfig(DISABLE);    ADC2_Cmd(ENABLE);    /*Start Conversion */    //ADC2_StartConversion();}

  5. u16 GetADCAverageValue(u8 ch)
  6. {   
  7.     u8 i=0;   
  8.     u16 Conversion_Value=0;
  9.     //ADC2_ConversionConfig(ADC2_CONVERSIONMODE_SINGLE, ch,    //ADC2_ALIGN_RIGHT);
  10.     /* Clear the ADC2 channels */   
  11.     ADC2->CSR &= (u8)(~ADC2_CSR_CH);   
  12.      /* Select the ADC2 channel */    ADC2->CSR |= (u8)(ch);

  13.         for (i=0; i<8;i++) {        
  14.             ADC2_StartConversion();        
  15.             while (!ADC2_GetFlagStatus());        
  16.              Conversion_Value += ADC2_GetConversionValue();   
  17.         }   
  18.         Conversion_Value = Conversion_Value >> 3;    return Conversion_Value;
  19. }

  20. void BusADCSample(P_ADCValue AD)
  21. {
  22.     AD->BusHighADC = GetADCAverageValue(ADCHANEL_BUSHIGH);   
  23.     AD->BusLowADC = GetADCAverageValue(ADCHANEL_BUSLOW);   
  24. }
  25. in main()
  26. {     
  27.     while (1) {        
  28.         BusADCSample(&AD);   
  29.      }
  30. }


香水城 发表于 2010-11-11 11:36 | 显示全部楼层
AD通道是对外部电压进行采样的,不能悬空!
 楼主| 有意思 发表于 2010-11-11 11:50 | 显示全部楼层
如果两个通道一起采,则两个AIN输入脚的口线都是方波脉冲,而且是反向的,及AIN1为高时,AIN2为低,AIN1为低时,AIN2为高,下面是测试程序

    while (1) {
        //BusADCSample(&AD);
        GetADCAverageValue(1);
        Delay1ms(10);
        GetADCAverageValue(2);
        Delay1ms(10);
    }
 楼主| 有意思 发表于 2010-11-11 11:52 | 显示全部楼层
如果只采一个通道,则该通道口线电平一直为高,2v左右,下面是测试程序

    while (1) {
        //BusADCSample(&AD);
        GetADCAverageValue(1);
        Delay1ms(10);
        //GetADCAverageValue(2);
        //Delay1ms(10);
    }
 楼主| 有意思 发表于 2010-11-11 11:53 | 显示全部楼层
AD通道是对外部电压进行采样的,不能悬空!
香水城 发表于 2010-11-11 11:36

不好意思,刚写快了,错了
是拉到VCC的,Vref到地,中间接两个104电容
香水城 发表于 2010-11-11 11:55 | 显示全部楼层
请注意通道的等效阻抗。
香水城 发表于 2010-11-11 11:56 | 显示全部楼层
不好意思,刚写快了,错了
是拉到VCC的,Vref到地,中间接两个104电容
有意思 发表于 2010-11-11 11:53


请帖出电路图。
 楼主| 有意思 发表于 2010-11-11 13:38 | 显示全部楼层
电路如图,其中RJ3和RJ5已经去掉,
2.JPG
23.JPG
香水城 发表于 2010-11-11 13:48 | 显示全部楼层
1)楼主位说“有的板子OK,有的不行”,这是什么意思?什么叫OK?
2)请减小外部电路阻抗,把RJ4和RJ6减小到1K以下。
3)请保证VCAP连接正确。
 楼主| 有意思 发表于 2010-11-11 14:12 | 显示全部楼层
1)楼主位说“有的板子OK,有的不行”,这是什么意思?什么叫OK?
2)请减小外部电路阻抗,把RJ4和RJ6减小到1K以下。
3)请保证VCAP连接正确。
香水城 发表于 2010-11-11 13:48


1。OK就是工作正常,我把不OK的板子的芯片和OK的板子的芯片对调,不OK的变OK,OK的变OK了,就是说和芯片相关,
2. 采样是接到24V的,通过两个电阻进行分压,所以说ADC口线在4V左右,
3.Vcap肯定正确,不正确的话,芯片不能正常工作的
如果说AD口被烧坏了,也不应该产生方波啊??

如果说
香水城 发表于 2010-11-11 14:17 | 显示全部楼层
1)“OK就是工作正常”,怎么叫正常? 没有电压输出是正常还是测量正确叫正常?还是两者取其一?
2)你不是说已经去掉RJ3和RJ5了吗?怎么又说ADC口线在4V左右?
 楼主| 有意思 发表于 2010-11-11 18:31 | 显示全部楼层
1)“OK就是工作正常”,怎么叫正常? 没有电压输出是正常还是测量正确叫正常?还是两者取其一?
2)你不是说已经去掉RJ3和RJ5了吗?怎么又说ADC口线在4V左右? ...
香水城 发表于 2010-11-11 14:17

就是因为去掉了RJ3和RJ4还有4V输出,才奇怪啊,所以怀疑芯片坏了
 楼主| 有意思 发表于 2010-11-15 20:01 | 显示全部楼层
可以确定AD烧坏了,第23脚AIN7与地短路,坏机的裸片量的,但这个脚并没有用于AD采样,而是作为
普通输入脚使用的,外部也没啥高压啊
IJK 发表于 2010-11-15 21:39 | 显示全部楼层
1。OK就是工作正常,我把不OK的板子的芯片和OK的板子的芯片对调,不OK的变OK,OK的变OK了,就是说和芯片相关,
2. 采样是接到24V的,通过两个电阻进行分压,所以说ADC口线在4V左右,
3.Vcap肯定正确,不正确的话, ...
有意思 发表于 2010-11-11 14:12


采样是接到24V的---或许某些情况下(比如接地电阻虚焊),STM8芯片被这个高压打坏
 楼主| 有意思 发表于 2010-11-21 18:05 | 显示全部楼层
基本上找到原因了,很可能是ESD引起的,现在将几个输入口线将保护,在做实验验证下就O啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

79

主题

331

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

79

主题

331

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部