打印

stm8s207的AD是不是有bug??

[复制链接]
3698|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
有意思|  楼主 | 2010-11-11 11:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 有意思 于 2010-11-11 11:39 编辑

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

void ADCConfig(void){   
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);
    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);
    ADC2_SchmittTriggerConfig(ADC2_SCHMITTTRIG_ALL, DISABLE);    ADC2_ITConfig(DISABLE);    ADC2_Cmd(ENABLE);    /*Start Conversion */    //ADC2_StartConversion();}

u16 GetADCAverageValue(u8 ch)
{   
    u8 i=0;   
    u16 Conversion_Value=0;
    //ADC2_ConversionConfig(ADC2_CONVERSIONMODE_SINGLE, ch,    //ADC2_ALIGN_RIGHT);
    /* Clear the ADC2 channels */   
    ADC2->CSR &= (u8)(~ADC2_CSR_CH);   
     /* Select the ADC2 channel */    ADC2->CSR |= (u8)(ch);

        for (i=0; i<8;i++) {        
            ADC2_StartConversion();        
            while (!ADC2_GetFlagStatus());        
             Conversion_Value += ADC2_GetConversionValue();   
        }   
        Conversion_Value = Conversion_Value >> 3;    return Conversion_Value;
}

void BusADCSample(P_ADCValue AD)
{
    AD->BusHighADC = GetADCAverageValue(ADCHANEL_BUSHIGH);   
    AD->BusLowADC = GetADCAverageValue(ADCHANEL_BUSLOW);   
}
in main()
{     
    while (1) {        
        BusADCSample(&AD);   
     }
}


沙发
香水城| | 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);
    }

使用特权

评论回复
5
有意思|  楼主 | 2010-11-11 11:53 | 只看该作者
AD通道是对外部电压进行采样的,不能悬空!
香水城 发表于 2010-11-11 11:36

不好意思,刚写快了,错了
是拉到VCC的,Vref到地,中间接两个104电容

使用特权

评论回复
6
香水城| | 2010-11-11 11:55 | 只看该作者
请注意通道的等效阻抗。

使用特权

评论回复
7
香水城| | 2010-11-11 11:56 | 只看该作者
不好意思,刚写快了,错了
是拉到VCC的,Vref到地,中间接两个104电容
有意思 发表于 2010-11-11 11:53


请帖出电路图。

使用特权

评论回复
8
有意思|  楼主 | 2010-11-11 13:38 | 只看该作者
电路如图,其中RJ3和RJ5已经去掉,

2.JPG (59.63 KB )

2.JPG

23.JPG (32.83 KB )

23.JPG

使用特权

评论回复
9
香水城| | 2010-11-11 13:48 | 只看该作者
1)楼主位说“有的板子OK,有的不行”,这是什么意思?什么叫OK?
2)请减小外部电路阻抗,把RJ4和RJ6减小到1K以下。
3)请保证VCAP连接正确。

使用特权

评论回复
10
有意思|  楼主 | 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口被烧坏了,也不应该产生方波啊??

如果说

使用特权

评论回复
11
香水城| | 2010-11-11 14:17 | 只看该作者
1)“OK就是工作正常”,怎么叫正常? 没有电压输出是正常还是测量正确叫正常?还是两者取其一?
2)你不是说已经去掉RJ3和RJ5了吗?怎么又说ADC口线在4V左右?

使用特权

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

就是因为去掉了RJ3和RJ4还有4V输出,才奇怪啊,所以怀疑芯片坏了

使用特权

评论回复
13
有意思|  楼主 | 2010-11-15 20:01 | 只看该作者
可以确定AD烧坏了,第23脚AIN7与地短路,坏机的裸片量的,但这个脚并没有用于AD采样,而是作为
普通输入脚使用的,外部也没啥高压啊

使用特权

评论回复
14
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芯片被这个高压打坏

使用特权

评论回复
15
有意思|  楼主 | 2010-11-21 18:05 | 只看该作者
基本上找到原因了,很可能是ESD引起的,现在将几个输入口线将保护,在做实验验证下就O啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

79

主题

331

帖子

0

粉丝