本人应用DSP28335片内ADC对外部信号进行采样,其中信号为正弦波、2KHz、VPP = 2.2v,偏置1.1V(保证信号在正半轴范围内,且信号在3V范围内),应用信号源给出!其中片内ADC采样率是通过ePWM进行产生的,采样率为8KHz,通过28335片内ADC采样的波形如下图所示:
图1:片内ADC采样波形
图2:片内ADC采样波形2KHz正弦波
mangui zhang:
你好 不知道你的Graph是怎么设置的 可能是相关参数设置不合理
建议你先以查看变量的方式看看采集到的数据的大概变化是否符合正弦波
本人应用DSP28335片内ADC对外部信号进行采样,其中信号为正弦波、2KHz、VPP = 2.2v,偏置1.1V(保证信号在正半轴范围内,且信号在3V范围内),应用信号源给出!其中片内ADC采样率是通过ePWM进行产生的,采样率为8KHz,通过28335片内ADC采样的波形如下图所示:
图1:片内ADC采样波形
图2:片内ADC采样波形2KHz正弦波
zhu zhou:
回复 mangui zhang:
您好,感谢您给予回复意见,您提出的这一点在最开始就予以排除了,因为Graph中的数据类型和自身定义的数据类型不一致的话,显示的波形肯定不会正确,我现在定义的数据类型为浮点型,即float32。数据类型这一块可以排除,我最担心的是不是我的片内ADC应用的不正确。下面把我对ADC的相关配置书写如下,希望能从这一块帮忙查找一下:
AdcRegs.ADCTRL1.bit.RESET = 1; /* 复位片内ADC外设 */ AdcRegs.ADCTRL1.bit.SUSMOD = 0; /* 忽略仿真挂起 */ AdcRegs.ADCREFSEL.bit.REF_SEL = 0; /* 采用内部基准电压处理 */ AdcRegs.ADCTRL3.bit.ADCBGRFDN = 3; /* 能带隙电路和参考电路上电 */ DELAY_US(10000); AdcRegs.ADCTRL3.bit.ADCPWDN = 1; /* ADC内核中模拟电路上电 */ DELAY_US(5000); AdcRegs.ADCTRL1.bit.ACQ_PS = 2; /* SOC脉冲宽度为3个ADCLK */ AdcRegs.ADCTRL1.bit.CPS = 1; /* Fclk = HSPCLK/2 */ AdcRegs.ADCTRL1.bit.CONT_RUN = 0; /* 工作于启动-停止模式*/ AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; /* 工作于"级联模式" */ AdcRegs.ADCTRL3.bit.ADCCLKPS = 15; /* ADCLK = HSPCLK/ 15*2 *//******************************************************************************** HSPCLK *** ADCLK = ————————-*** 2×ADCLKPS ×(CPS + 1)*******************************************************************************/ AdcRegs.ADCTRL3.bit.SMODE_SEL = 0; /* 采用顺序采样模式采样 */ AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 7; /* 最大转换通道为8 */ AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x08; /* ADCINB0作为第1路SEQ1序列 */ AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x08; /* ADCINB0作为第2路SEQ1序列 */ AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x09; /* ADCINB1作为第1路SEQ1序列 */ AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x09; /* ADCINB1作为第2路SEQ1序列 */ AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0A; /* ADCINB2作为第1路SEQ2序列 */ AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x0A; /* ADCINB2作为第2路SEQ2序列 */ AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0B; /* ADCINB3作为第1路SEQ2序列 */ AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x0B; /* ADCINB3作为第2路SEQ2序列 */ AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; /* 清除SEQ1中的中断标志位INT_SEQ1 */ AdcRegs.ADCST.bit.INT_SEQ2_CLR = 1; /* 清除SEQ2中的中断标志位INT_SEQ2 */ AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; /* 立即复位发生器到CONV00状态(手动) */ AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; /* 使能INT_SEQ1的中断请求 (every EOS) */ AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2 = 0; /* 屏蔽SEQ2的中断请求 */ AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 = 0; /* 在每一个SEQ1序列结束时设置INT_SEQ1 */ AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;/* 由ePWM SOCA触发信号启动SEQ1 */ AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0; /* 清除一个不确定的SOC触发 */}
为了获得较高质量的信号,对外部信号采用了过采样处理,其中应用内部2路通道采集外部1路,采集的波形就如上面图中的那样【最开始应用的正常采样,即1路对应1路,采集的波形也是上图中的那样】。希望能给予指导和建议!