打印
[DSP编程]

DSP28335 AD采样毛刺太多

[复制链接]
3970|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
     小弟最近在调试DSP8335的 AD发现采样回来的数字量毛刺太大,峰峰值能达到96(移位后模拟量1.65V-数字量2048左右),DSP上电运行时测量AD口的电压(电网电压)还是比较好的,但是转换成数字量之后,却不尽人意。
     使用EPWM中断触发AD 采样,采样频率15K。换成别人的dsp开发板依然会出现这个问题,把我自己的dsp开发板插到别人的控制板上,数字量波动基本都在20左右。 说明不是DSP开发板的问题,AD部分初始化程序和别人的是一样的,他采样时是没有问题的。

    图片展示了AD口的模拟电压,及采样后的数字量的对比,说明数字量化后毛刺较多。而仅采样1.65V偏置电压时,可以清晰的看到毛刺现象(数字处理过程中已减去直流偏置)

    一开始怀疑是3.3V电压源的问题(产生直流偏置,和对AD口进行限幅),今天换了一块TPS7333Q 芯片,发现问题依然存在。
    加大AD 口的滤波电容(由101 变成471),没有效果。下面附AD初始化程序:
   希望大侠们提提意见,万分感谢!:handshake


void Init_Adc(void)
{   
        int i1=0;
        AdcRegs.ADCTRL1.bit.RESET=1; //复位AD模块
        for(i1=0;i1<9;i1++)
        {;}                                                         //复位ADC需要等待2个时钟循环
        AdcRegs.ADCTRL1.bit.RESET=0; //写0扌А?
        AdcRegs.ADCTRL1.bit.SUSMOD=0;//忽略仿真挂起
        AdcRegs.ADCTRL1.bit.ACQ_PS=1; ///设定采集窗口大小,即决定保持多长时间,可理解为相邻采样之间时间差,即SOC的宽度为ADCTRL1[11:8]+1个ADCCLK
        AdcRegs.ADCTRL1.bit.CPS=1;         //ADCCLK=HSPCLK/(CPS+1)=12.5MHz
        AdcRegs.ADCTRL1.bit.CONT_RUN=0; //工作在启停模?
        AdcRegs.ADCTRL3.bit.ADCBGRFDN=3;//带隙和参考电路上电
        for(i1=0;i1<10000;i1++)
        {;}                           //adc上电顺序
        AdcRegs.ADCTRL3.bit.ADCPWDN=1;
        for(i1=0;i1<5000;i1++)
        {;}
        AdcRegs.ADCTRL3.bit.ADCCLKPS=0;///将HSPCLK,分频产生核心时钟ADCCLK=12.5Mhz
                                                                        //此处HSPCLK不分频了,12.5MHz是ADC的转换时间为80ns
            //注意ACQ_PS=15时,保持时间为(15+1)/12.5M=1.3us,感觉太长了;可以使ACQ_PS=1,则具有0.16us的保持时间
        //具体参数需要权衡!
}                                                                       

void ConfigAdc(void)
{
        AdcRegs.ADCTRL1.bit.SEQ_CASC=1;//级联模式
        AdcRegs.ADCTRL3.bit.SMODE_SEL=0;//0-顺序采样,1-同步采样
        AdcRegs.ADCMAXCONV.all=0x000F;//SEQ1与SEQ2均转换8个通道
        AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x7;  //电网电压UG
        AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x5;  //入网电流IL2
        AdcRegs.ADCCHSELSEQ1.bit.CONV02=0xB0; //1/2直流电压
        AdcRegs.ADCCHSELSEQ1.bit.CONV03=0xA0;  //直流输入总电压
        AdcRegs.ADCCHSELSEQ2.bit.CONV04=0x7;
        AdcRegs.ADCCHSELSEQ2.bit.CONV05=0x5;
        AdcRegs.ADCCHSELSEQ2.bit.CONV06=0xB0;
        AdcRegs.ADCCHSELSEQ2.bit.CONV07=0xA0;
           AdcRegs.ADCCHSELSEQ3.bit.CONV08=0x7;
        AdcRegs.ADCCHSELSEQ3.bit.CONV09=0x5;
        AdcRegs.ADCCHSELSEQ3.bit.CONV10=0xB0;
        AdcRegs.ADCCHSELSEQ3.bit.CONV11=0xA0;
        AdcRegs.ADCCHSELSEQ4.bit.CONV12=0x7;
        AdcRegs.ADCCHSELSEQ4.bit.CONV13=0x5;
        AdcRegs.ADCCHSELSEQ4.bit.CONV14=0xB0;
        AdcRegs.ADCCHSELSEQ4.bit.CONV15=0xA0;

        AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;//清除SEQ1的中断标志位
        AdcRegs.ADCST.bit.INT_SEQ2_CLR=1;//清除SEQ2的中断标志位
        AdcRegs.ADCTRL2.bit.EPWM_SOCB_SEQ=0;//

        AdcRegs.ADCTRL2.bit.RST_SEQ1=1;
        AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=0;//禁止INT_ENA_SEQ1中断请求
        AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0;//
        AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1=1;//允许EPWM启动
        AdcRegs.ADCTRL2.bit.EXT_SOC_SEQ1=0;//禁止I/O口启动

        AdcRegs.ADCTRL2.bit.RST_SEQ2=1;
        AdcRegs.ADCTRL2.bit.SOC_SEQ2=0;
        AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2=0;
        AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2=0;
        AdcRegs.ADCTRL2.bit.EPWM_SOCB_SEQ2=1;

}

相关帖子

沙发
zhangmangui| | 2015-1-30 23:28 | 只看该作者
我觉得是楼主的graph设置的问题    你对比一下设置   重点是选择的数据类型和buffer

使用特权

评论回复
板凳
去月球读博士|  楼主 | 2015-1-31 10:31 | 只看该作者
zhangmangui 发表于 2015-1-30 23:28
我觉得是楼主的graph设置的问题    你对比一下设置   重点是选择的数据类型和buffer ...

我看了下结果寄存器的数值,跟graph 的结果是对应的,波动比较大。

使用特权

评论回复
地板
zhangmangui| | 2015-2-4 23:33 | 只看该作者
去月球读博士 发表于 2015-1-31 10:31
我看了下结果寄存器的数值,跟graph 的结果是对应的,波动比较大。

那就看看配置是否合理    还有共地
输如固定电压值看看恩

使用特权

评论回复
5
去月球读博士|  楼主 | 2015-2-5 08:37 | 只看该作者
换了个仿真器(将ICETEK-5100USB V2.0A 换成了LT-XDS100),重新装了个驱动,发现采样毛刺小了很多,30以内了。下面是电网采样的波形,谢谢你的回答:handshake

使用特权

评论回复
6
茫然闲| | 2018-10-9 16:15 | 只看该作者
28335的AD输入电压值0~3V,偏置电压为什么是1.65而不是1.5V?

使用特权

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

本版积分规则

3

主题

17

帖子

0

粉丝