8415|4

12

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

AD通道间相互干扰问题 [复制链接]

       最近新做了一块LM3S8962的板子 测试AD部分的时候各通道之间会相互影响,比如说三个通道都上拉到3.3V后,将其中一个通道接地,发现其它通道的转换结果也会变小,代码的主要部分如下:(完整的MDK工程见附件,欢迎下载测试并给出意见,烧进片子后打开串口调试助手即可观察结果) 

 

//  ADC初始化
void adcInit(void)
{
    SysCtlPeriEnable(SYSCTL_PERIPH_ADC);                    //  使能ADC模块
    SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS);             //  设置ADC采样速率
    ADCSequDisable(ADC_BASE, 0);                            //  配置前先禁止采样序列

    //  采样序列配置:ADC基址,采样序列编号,触发事件,采样优先级
    ADCSequConfig(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);

    //  ADC采样序列步进配置:ADC基址,采样序列0,步值,采样通道
    ADCSequStepConfig(ADC_BASE, 0, 0, ADC_CTL_CH0);         //  第0步:采样ADC0
    ADCSequStepConfig(ADC_BASE, 0, 1, ADC_CTL_CH1);         //  第1步:采样ADC1
    ADCSequStepConfig(ADC_BASE, 0, 2, ADC_CTL_CH2);         //  第2步:采样ADC2
    //ADCSequStepConfig(ADC_BASE, 0, 3, ADC_CTL_CH0);         //  第3步:再次采样ADC0

    ADCSequStepConfig(ADC_BASE, 0, 3, ADC_CTL_CH3 |         //  第4步:采样ADC3后
                                      ADC_CTL_END |         //         结束,并
                                      ADC_CTL_IE);          //         申请中断

    ADCIntEnable(ADC_BASE, 0);                              //  使能ADC中断
    IntEnable(INT_ADC0);                                    //  使能ADC采样序列中断
    IntMasterEnable();                                      //  使能处理器中断

    ADCSequEnable(ADC_BASE, 0);                             //  使能采样序列
}


//  ADC采样:ulVal[]保存采样结果
void adcSample(unsigned long ulVal[])
{
    ADCProcessorTrigger(ADC_BASE, 0);                       //  处理器触发采样序列
    while (!ADC_EndFlag);                                   //  等待采样结束
    ADC_EndFlag = false;                                    //  清除ADC采样结束标志
    ADCSequDataGet(ADC_BASE, 0, ulVal);                     //  自动读取全部ADC结果
}


int main(void)
{
    unsigned long ulVal[5];
    char cBuf[30];
    unsigned long i, v;

    //jtagWait();                                             //  防止JTAG失效,重要!
    clockInit();                                            //  时钟初始化:PLL,20MHz
    uartInit();                                             //  UART初始化
    adcInit();                                              //  ADC初始化

    for (;;)
    {
        adcSample(ulVal);                                   //  ADC采样

        for (i = 0;  i < 4;  i++)
        {
            v = (ulVal * 3000) / 1024;                   //  转换成电压值
            sprintf(cBuf, "ch%d = %d(mV)   ", i, v);     //  采样值格式化为电压值
            uartPuts(cBuf);                                 //  通过UART输出电压值
        }

        uartPuts("\r\n");
        SysCtlDelay(1500 * (TheSysClock / 3000));           //  延时约1500ms
    }
}


//  ADC采样序列0的中断
void ADC_Sequence_0_ISR(void)
{
    unsigned long ulStatus;

    ulStatus = ADCIntStatus(ADC_BASE, 0, true);             //  读取中断状态
    ADCIntClear(ADC_BASE, 0);                               //  清除中断状态,重要

    if (ulStatus != 0)                                      //  如果中断状态有效
    {
        ADC_EndFlag = true;                                 //  置位ADC采样结束标志
    }
}

 

 

 

多通道采样.rar

1.02 MB, 下载次数: 64

完整的工程 下载后可直接编译或烧写

最新回复

我的和你类似的问题找到了,AD7193基准使用的是电阻分压的,10V的电压使用2个18k的电阻分压,改成2个330R电阻分压后,解决。  详情 回复 发表于 2013-1-25 17:08
 
点赞 关注

回复
举报

2641

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
是不是你布板的问题?
 
 

回复

22

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
我也碰到一样问题
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

4
 
我用的是AD7190和AD7193两个都有这种问题,试了很多次很多方法,无解。
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

5
 
我的和你类似的问题找到了,AD7193基准使用的是电阻分压的,10V的电压使用2个18k的电阻分压,改成2个330R电阻分压后,解决。
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表