打印
[DSP编程]

为什么DSP28335ADC采样正弦信号波形失真?

[复制链接]
4793|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 blues_more 于 2015-1-5 20:48 编辑

一个由信号发生器发出的正弦信号,信号频率为220Hz(模仿交流电信号频率,因为最终要采样交流电),方法是将数据由串口传PC,然后matlab绘图,但是结果波形有失真。主要程序和绘图结果如下。请问是什么原因呢?
Configure ADC
   AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
   AdcRegs.ADCMAXCONV.all = 0;       // Setup 2 conv's on SEQ1
   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3; // Setup ADCINA3 as 1st SEQ1 conv.
   AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1
   AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;  // Enable SEQ1 interrupt (every EOS)
Assumes ePWM1 clock is already enabled in InitSysCtrl();
   EPwm1Regs.ETSEL.bit.SOCAEN = 1;        // Enable SOC on A group
   EPwm1Regs.ETSEL.bit.SOCASEL = 4;       // Select SOC from from CPMA on upcount
   EPwm1Regs.ETPS.bit.SOCAPRD = 01;        // Generate pulse on 1st event
   EPwm1Regs.CMPA.half.CMPA = 0x0080;
   EPwm1Regs.TBPRD = 0x1D4B;              // Set period for ePWM1
   EPwm1Regs.TBCTL.bit.CTRMODE = 00;                  // count up and start

interrupt void  adc_isr(void)
{
  VoltageH[ConversionCount] = AdcRegs.ADCRESULT0 >>12;
  VoltageL[ConversionCount] = AdcRegs.ADCRESULT0 >>4;

  // If 40 conversions have been logged, start over
  if(ConversionCount == 127)
  {
    for (ConversionCount=0;ConversionCount<128;ConversionCount++)
    {
            scib_xmit(VoltageH[ConversionCount]);        
            scib_xmit(VoltageL[ConversionCount]);
    }
    for(;;);
     ConversionCount = 0;
  }
  else ConversionCount++;

  // Reinitialize for next ADC sequence
  AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;         // Reset SEQ1
  AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;       // Clear INT SEQ1 bit
  PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   // Acknowledge interrupt to PIE

  return;
}




相关帖子

沙发
zhangmangui| | 2015-1-5 23:12 | 只看该作者
建议你先在CCS的Graph下看看效果  
排除在上传等过程造成的影响

使用特权

评论回复
板凳
blues_more|  楼主 | 2015-1-7 16:02 | 只看该作者
zhangmangui 发表于 2015-1-5 23:12
建议你先在CCS的Graph下看看效果  
排除在上传等过程造成的影响

按照你的说法,用graph看了,依然有畸变,信号发生器的信号应该很光滑的啊,请问是什么其他原因呢。我采样时用epwm触发的,只用一个通道A3,每采一个数,进中断保存一下。下面四我在graph中看的信号。

使用特权

评论回复
地板
海中水| | 2015-1-7 16:06 | 只看该作者
采样的电路拿示波器勾一下,看看是什么波形?

使用特权

评论回复
5
blues_more|  楼主 | 2015-1-7 16:36 | 只看该作者
海中水 发表于 2015-1-7 16:06
采样的电路拿示波器勾一下,看看是什么波形?

下面是示波器显示的信号,三个图是一个信号,我调了一下比例,你觉得怎么样,是不是信号发生器的信号本来就有锯齿

使用特权

评论回复
6
海中水| | 2015-1-7 17:02 | 只看该作者
blues_more 发表于 2015-1-7 16:36
下面是示波器显示的信号,三个图是一个信号,我调了一下比例,你觉得怎么样,是不是信号发生器的信号本来 ...

信号是OK的,采样的保持时间放长一点,而且采完之后清0。实在不行试一下双缓存吧!

使用特权

评论回复
7
blues_more|  楼主 | 2015-1-7 17:33 | 只看该作者
海中水 发表于 2015-1-7 17:02
信号是OK的,采样的保持时间放长一点,而且采完之后清0。实在不行试一下双缓存吧! ...

改了保持时间,还是不行,请问具体什么是双缓存呢?

使用特权

评论回复
8
海中水| | 2015-1-7 17:39 | 只看该作者
blues_more 发表于 2015-1-7 17:33
改了保持时间,还是不行,请问具体什么是双缓存呢?

你上面的那个波形是勾的信号发生器输出的吗?如果是不要勾那里的,勾AD采样引脚的。双缓存我估计也不行。

使用特权

评论回复
9
海中水| | 2015-1-7 17:41 | 只看该作者
双缓存就是读取值的时候有两个缓存值,两个交替转换。一个用来操作数据,一个用来获取AD转换。

使用特权

评论回复
10
blues_more|  楼主 | 2015-1-7 21:10 | 只看该作者
海中水 发表于 2015-1-7 17:39
你上面的那个波形是勾的信号发生器输出的吗?如果是不要勾那里的,勾AD采样引脚的。双缓存我估计也不行。 ...

勾的就是AD采样引脚

使用特权

评论回复
11
blues_more|  楼主 | 2015-1-7 22:22 | 只看该作者
海中水 发表于 2015-1-7 17:41
双缓存就是读取值的时候有两个缓存值,两个交替转换。一个用来操作数据,一个用来获取AD转换。 ...

软件或者硬件矫正一下是不是会好

使用特权

评论回复
12
zhangmangui| | 2015-1-7 22:26 | 只看该作者
blues_more 发表于 2015-1-7 22:22
软件或者硬件矫正一下是不是会好

软件矫正  肯定有效果

使用特权

评论回复
13
海中水| | 2015-1-8 10:23 | 只看该作者
blues_more 发表于 2015-1-7 22:22
软件或者硬件矫正一下是不是会好

AD采样矫正一下应该会好,但是你的是实时的信号。你先试一下吧!这种每个点都要的应用我还真没有做过。

使用特权

评论回复
14
blues_more|  楼主 | 2015-1-8 13:55 | 只看该作者
zhangmangui 发表于 2015-1-7 22:26
软件矫正  肯定有效果

请问你说的软件矫正是adc_cal吗,这个我已经声明了,并且我看在例程的init_adc函数中也调用了啊。还是需呀做别的,另外想请教你一个关于adc_cal的问题,我看到在其中是这么写的
_ADC_cal
MOVW DP, #ADCREFSEL_LOC >> 6
MOV @28, #0xAAAA
MOV @29, #0xBBBB
LRETR
我的理解后两句中0XAAAA和0XBBBB是不是需要根据自己情况去修改?

使用特权

评论回复
15
sunpotty| | 2015-1-15 15:00 | 只看该作者
软件应该这样矫正的吧,或者在程序中加个滤波器看看?

无标题.jpg (146.41 KB )

无标题.jpg

使用特权

评论回复
16
blues_more|  楼主 | 2015-1-25 13:10 | 只看该作者
zhangmangui 发表于 2015-1-7 22:26
软件矫正  肯定有效果

版主你好,为什么我结贴给分时候一直提示分数未分配或分配错误啊。。。没法给大家分数,实在不好意思

使用特权

评论回复
17
zhangmangui| | 2015-1-25 21:49 | 只看该作者
blues_more 发表于 2015-1-25 13:10
版主你好,为什么我结贴给分时候一直提示分数未分配或分配错误啊。。。没法给大家分数,实在不好意思 ...

你说的这种
_ADC_cal
MOVW DP, #ADCREFSEL_LOC >> 6
MOV @28, #0xAAAA
MOV @29, #0xBBBB
LRETR

我也不知道什么原理
软件矫正   我的理解是加各种滤波算法

使用特权

评论回复
18
wang168506| | 2015-1-26 14:17 | 只看该作者
这就不错了  不可能百分百还原的 ,硬件上的干扰还是很容易串进来的

使用特权

评论回复
19
去月球读博士| | 2015-1-30 15:25 | 只看该作者
blues_more 发表于 2015-1-25 13:10
版主你好,为什么我结贴给分时候一直提示分数未分配或分配错误啊。。。没法给大家分数,实在不好意思 ...

楼主你好,请问你的问题 解决了吗,我用28335 AD 进行采样的时候也遇到类似问题,AD 管脚的电压很好,但是AD 采样出来的数字量 毛刺就很多,百思不得其解

使用特权

评论回复
20
banjinbaliang| | 2015-11-2 14:41 | 只看该作者
blues_more 发表于 2015-1-7 16:02
按照你的说法,用graph看了,依然有畸变,信号发生器的信号应该很光滑的啊,请问是什么其他原因呢。我采 ...

你好,可以说一下你的graph的具体设置吗?

使用特权

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

本版积分规则

14

主题

39

帖子

1

粉丝