void Init_my_ADC()
{
EALLOW; //读写保护
#if (CPU_FRQ_150MHZ) //预处理中的条件编译,如果CPU_FRQ_150MHZ为真,编译此段
#define ADC_MODCLK 0x3 // 宏定义ADC_MODCLK=0x3使得高速时钟HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3)= 25.0 MHz
#endif
#if (CPU_FRQ_100MHZ) //预处理中的条件编译,如果CPU_FRQ_100MHZ为真,编译此段
#define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz
#endif
EDIS; //读写保护
InitAdc();//ADC上电
EALLOW; //读写保护
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/(2*ADC_MODCLK)//设置外设高速时钟频率为25MHz
EDIS;//读写保护
//AdcRegs.ADCTRL1.bit.ACQ_PS=0x0;//设置启动脉冲的宽度为0+1个ADCCLK周期
AdcRegs.ADCTRL1.bit.ACQ_PS=0xf;
AdcRegs.ADCTRL3.bit.ADCCLKPS=0x1;//设置采用2分频,得到频率为12.5MHz,ADCCLK=HSPCLK/[(2*ADCCLKPS)*(ADCTRL1[7]+1)]
AdcRegs.ADCTRL1.bit.CPS=0x0;//对ADCCLKPS分频后的高频信号不分频,ADC频率为12.5MHz,ADCTRL1[7]即CPS
AdcRegs.ADCTRL1.bit.SUSMOD=3;//仿真挂起模式,排序器和其他逻辑在仿真挂起时停止
AdcRegs.ADCTRL1.bit.CONT_RUN=1;//自动排序模式
//AdcRegs.ADCTRL1.bit.SEQ_OVRD=0;//连续模式下,转换完MAX_CONVx通道指针复位到处是状态
AdcRegs.ADCTRL3.bit.SMODE_SEL=0;//顺序采样模式
AdcRegs.ADCTRL1.bit.SEQ_CASC=1;//级联模式 AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1=1;//EPWM模块来驱动采样
AdcRegs.ADCMAXCONV.bit.MAX_CONV1=3;//设置3通道
AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;//信号源
AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x0;
AdcRegs.ADCCHSELSEQ1.bit.CONV02=0x0;
AdcRegs.ADCCHSELSEQ1.bit.CONV03=0x0;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;
AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;//清除中断标志位 }
if(flag>=512)flag=0;
while(AdcRegs.ADCST.bit.INT_SEQ1==0) {}//等待采样的完成
AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;//清除中断标志位
Uadc_ab1=AdcRegs.ADCRESULT0>>4;//采样电压
Uadc_ab2=AdcRegs.ADCRESULT1>>4;
Uadc_ab3=AdcRegs.ADCRESULT2>>4;
Uadc_ab4=AdcRegs.ADCRESULT3>>4;
Uadc_ab=Uadc_ab1+Uadc_ab2+Uadc_ab3+Uadc_ab4;
Uadc_ab>>=2;
ui=(Uadc_ab)*0.0007326;
//AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1
Ua[flag]=ui;
flag++;
各位大神能帮我看下为什么我的采样会这个样子?非常感谢
mangui zhang:
被采集的源肯定没问题是吧
个人觉得怎么像是在256的时候数据转换了 你在确认一下你的代码
查看graph时让一个一个的显示 不要一段
void Init_my_ADC()
{
EALLOW; //读写保护
#if (CPU_FRQ_150MHZ) //预处理中的条件编译,如果CPU_FRQ_150MHZ为真,编译此段
#define ADC_MODCLK 0x3 // 宏定义ADC_MODCLK=0x3使得高速时钟HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3)= 25.0 MHz
#endif
#if (CPU_FRQ_100MHZ) //预处理中的条件编译,如果CPU_FRQ_100MHZ为真,编译此段
#define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz
#endif
EDIS; //读写保护
InitAdc();//ADC上电
EALLOW; //读写保护
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/(2*ADC_MODCLK)//设置外设高速时钟频率为25MHz
EDIS;//读写保护
//AdcRegs.ADCTRL1.bit.ACQ_PS=0x0;//设置启动脉冲的宽度为0+1个ADCCLK周期
AdcRegs.ADCTRL1.bit.ACQ_PS=0xf;
AdcRegs.ADCTRL3.bit.ADCCLKPS=0x1;//设置采用2分频,得到频率为12.5MHz,ADCCLK=HSPCLK/[(2*ADCCLKPS)*(ADCTRL1[7]+1)]
AdcRegs.ADCTRL1.bit.CPS=0x0;//对ADCCLKPS分频后的高频信号不分频,ADC频率为12.5MHz,ADCTRL1[7]即CPS
AdcRegs.ADCTRL1.bit.SUSMOD=3;//仿真挂起模式,排序器和其他逻辑在仿真挂起时停止
AdcRegs.ADCTRL1.bit.CONT_RUN=1;//自动排序模式
//AdcRegs.ADCTRL1.bit.SEQ_OVRD=0;//连续模式下,转换完MAX_CONVx通道指针复位到处是状态
AdcRegs.ADCTRL3.bit.SMODE_SEL=0;//顺序采样模式
AdcRegs.ADCTRL1.bit.SEQ_CASC=1;//级联模式 AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1=1;//EPWM模块来驱动采样
AdcRegs.ADCMAXCONV.bit.MAX_CONV1=3;//设置3通道
AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;//信号源
AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x0;
AdcRegs.ADCCHSELSEQ1.bit.CONV02=0x0;
AdcRegs.ADCCHSELSEQ1.bit.CONV03=0x0;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;
AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;//清除中断标志位 }
if(flag>=512)flag=0;
while(AdcRegs.ADCST.bit.INT_SEQ1==0) {}//等待采样的完成
AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;//清除中断标志位
Uadc_ab1=AdcRegs.ADCRESULT0>>4;//采样电压
Uadc_ab2=AdcRegs.ADCRESULT1>>4;
Uadc_ab3=AdcRegs.ADCRESULT2>>4;
Uadc_ab4=AdcRegs.ADCRESULT3>>4;
Uadc_ab=Uadc_ab1+Uadc_ab2+Uadc_ab3+Uadc_ab4;
Uadc_ab>>=2;
ui=(Uadc_ab)*0.0007326;
//AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1
Ua[flag]=ui;
flag++;
各位大神能帮我看下为什么我的采样会这个样子?非常感谢
onebyte:
是采样的周期设置的不对吗