This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28335: ADC采样ACQ_PS怎么设置

Part Number: TMS320F28335

我在修改TMS320F28335  ADC配置:AdcRegs.ADCTRL1.bit.ACQ_PS = 1为AdcRegs.ADCTRL1.bit.ACQ_PS = 0xF 会影响通道的采样时间吗?我修改后,用软件启动采样,用通用输出管脚监控下边程序执行时间,并没有变化,按照自己的理解,修改后采样时间会变化,下边执行时间应该也有变化,不变是为什么?谢谢!

AdcRegs.ADCTRL2.all = 0x2000;
while (AdcRegs.ADCST.bit.INT_SEQ1== 0){}
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;

下边是ADC配置:

AdcRegs.ADCTRL1.bit.SUSMOD=3;//仿真器挂起后,ADC停止
AdcRegs.ADCTRL1.bit.ACQ_PS = 0xF; // zdh 1
AdcRegs.ADCTRL1.bit.CPS = 0;//ADCLOCK=HISCLK/1
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; //级联排序模式
AdcRegs.ADCTRL1.bit.CONT_RUN = 0;// start-stop mode
AdcRegs.ADCTRL1.bit.SEQ_OVRD=0;//

AdcRegs.ADCTRL2.bit.EPWM_SOCB_SEQ=0;
AdcRegs.ADCTRL2.bit.RST_SEQ1=1;
AdcRegs.ADCTRL2.bit.SOC_SEQ1=0;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x0;//forbid ADC 中断
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0;
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 0x0;//不允许adc被epwm启动
AdcRegs.ADCTRL2.bit.EXT_SOC_SEQ1=0;
AdcRegs.ADCTRL2.bit.RST_SEQ2=0;
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=0;


//AdcRegs.ADCTRL3.bit.SMODE_SEL = 0x1; // Setup simultaneous sampling mode
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // Cascaded mode(ADCMAXCONV设置为0~15)
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x6; // 
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0xA; // 
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x2;
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x7; // 
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x6; // 
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0xA; // 
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x2; // 
AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x8;
AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0x9;
AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0x7; // 
AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0xA; // 
AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0x2; // 
AdcRegs.ADCCHSELSEQ4.bit.CONV13 = 0xD;
AdcRegs.ADCCHSELSEQ4.bit.CONV14 = 0xE;
AdcRegs.ADCCHSELSEQ4.bit.CONV15 = 0xF;

AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0xF; //队列里16次转换
AdcRegs.ADCTRL2.bit.RST_SEQ1=1;//
AdcRegs.ADCTRL1.bit.CONT_RUN = 1;//每次启动AD转换只有当最大转换通道转换后重新开始(0:启停方式,1:持续转换)
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1;// Sequencer override feature,转换完成之后通道指针重新开始

  • 你好,不知道你的GPIO监控点设置在程序什么位置?以及你提到的“采样时间会变化”是指单次采样的时间还是指采样频率对应的时间?

    修改ACQ_PS会影响单次采样时间,也就是从采样保持到转换结束的时间

    这个可以看TRM的7.3.2.1 Sequential Sampling Mode标示的挺清楚的

  • 您好,我是这么监控的:

    GpioDataRegs.GPBCLEAR.bit.GPIO58 = 1;   // 监控GPIO拉低

    AdcRegs.ADCTRL2.all = 0x2000;
    while (AdcRegs.ADCST.bit.INT_SEQ1== 0){}
    AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;

    GpioDataRegs.GPBSET.bit.GPIO58 = 1;        // 监控GPIO拉高

    我也是看的手册这部分才理解为改变ACQ_PS,单次采样时间会变化,然后监控的这段程序时间不应该变化吗?也就是各个通道全部采样完成并更新的总时间不会加长吗?

    还有就是单次采样时间和采样频率对应的时间不同吗?您能给解释一下吗?

  • 这个其实跟吃饭是一个道理。

    单词采样就是每次吃饭的时间,采样频率可以看成每天吃饭的频率。

    采样分采样保持和转换两个阶段,采样保持看成进食阶段,转换看成消化阶段。

    改变进食的时间可以改变单次吃饭的时间,但是每天吃饭的频率不会改变。

    当然,如果是吃完这顿马上吃下一顿的采样模式,那采样频率对应的时间还是跟采样保持时间有关系的。

    比较笼统,不知道能否理解。

  • 嗯,这个理解了,那么那段程序的执行时间我认为和ACQ_PS设置有关,结果监控的时间不变,您能给再解释一下吗?那个不是吃完这顿马上吃下一顿的采样模式吗?

  • 你好,抱歉由于F28335的adc模块跟后面的几款芯片都不太一样,所以我也有点混乱,重新捡起来花了点时间。

    从你的程序上来看,你的采样模式设置的是Continuous conversion mode,那么采样频率的计算应该就是ADCCLK/(ACQ_PS +1),这样的话改变ACQ_PS的值肯定会对采样时间有影响。

    我觉得问题可能出在你的while语句上,也就是

    AdcRegs.ADCST.bit.INT_SEQ1== 0

    AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;

    因为你的代码中设置了

    AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x0;//forbid ADC 中断
    AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0;

    我建议你用CCS监控一下,INT_SEQ1寄存器是否一直都是0的状态。