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.
DSP28335 ADC部分的转换启动有三种方式:1.软件方式启动;2.ePWM方式启动;3.外部管脚启动。
我想了解的是:应用ePWM方式启动ADC,如何确定该部分的采样率就是自己配置的,如10K大小的采样率。
还有就是,ADC中的采样窗口对序列转换的时间有什么影响,因为序列转换完成后才会触发中断,进而进行相应的 操作处理,而ePWM方式给出采样率是触发启动的ADC转换,此处的关系有些不太清晰?
望高手给予指点!谢谢!
ePWM触发ADC整体就是用途就是可以做到在PWM波的高电平时的某个阶段去采集AD值
确保PWM控制的模块的电压值达到一个稳定的状态后去采集
关于采样频率就直接与PWM波的频率有关了
问题描述:
应用的平台是TMS320F28335;
应用其片内外设ADC对模拟信号进行采样处理;
使用方式:
ADC使用级联方式,工作于启动/停止方式,SOC启动通过ePWM触发,片内ADC的工作时钟配置为1.171875MHz,采样窗大小为3个;其中配置源程序如下:
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(2000);
AdcRegs.ADCTRL1.bit.ACQ_PS = 2; /* SOC脉冲宽度为3ADCLK*/
AdcRegs.ADCTRL1.bit.CPS = 1; /* Fclk = HSPCLK/2 */
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; /* 工作于启动-停止模式 */
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; /* 工作于"级联模式" */
AdcRegs.ADCTRL3.bit.ADCCLKPS = 15; /* ADCLK = HSPCLK/ 15*2 */
AdcRegs.ADCTRL3.bit.SMODE_SEL = 0; /* 采用顺序采样模式采样 */
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0; /* 4路采样,提高其精度 */
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; /* ADCINA0作为第1路SEQ1序列 */
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触发 */
****************************************************************************************
其中ePWM则采用递增计数模式,直接产生方波信号进行处理运算,其配置如下:
EALLOW;
/* 在 InitSysCtrl()中已经将ePWM1的时钟进行了使能 */
/* 用来配置ADC的采样率 */
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Disable TBCLK within the ePWM
/* ePWM1的相关配置,以供片内ADC的启动 */
EPwm1Regs.TBCTL.bit.CLKDIV = 0;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 1; /* TBCLK = SYSCLK/2 = 75MHz*/
EPwm1Regs.ETSEL.bit.SOCAEN = 1; /* 使能ADC开始转换A脉冲,使能ePWMxSOCA脉冲 */
EPwm1Regs.ETSEL.bit.SOCASEL = 2;/* 使能,ePWMxSOCA脉冲当定时器递增时时间基准计数器等于CMPA */
EPwm1Regs.ETPS.bit.SOCAPRD = 1; /* 在第一个事件上生成ePWMxSOCA脉冲 */
EPwm1Regs.TBPRD = 0x493E; /* 设置时间基准计数器的周期,决定 PWM1的频率 */
EPwm1Regs.TBCTR = 0; /* 清空计数器 */
EPwm1Regs.TBCTL.bit.CTRMODE = 0; /* 设置计数器模式为递增计数模式 */
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Enable TBCLK within the ePWM
EDIS;
按理讲,TBPRD的值是产生SOCA信号的关键,实际上当把ePWM用于自身中断时已经进行了试验,对其进行的是驱动IO口翻转处理,试验证明TBPRD的值能够实现周期计数的变化;但是当把ePWM用于ADC时,在ADC中断函数中同样驱动IO口翻转处理,但是IO口翻转的频率和TBPRD的值没有关系,反倒是更改ADC的SOC窗口的大小对ADC的采样率有一定的影响。
各中原因尚不明确,望高手给与指导建议!
您好,我用的ccs5.2版本,利用controlsuite的28335A/Dsoc例程采样时,当输入采集电压值0-3v时,我在watch窗口的expression添加电压变量值观看采集进来的的电压数值是否有变化,结果一直是0没有数值变化,请教原因。
另外有人推荐看波形窗口,我从网上找这个窗口没有找到,请教那个窗口是观看采集进来的电压值波形呢?
谢谢指导!急求
ADC采用时候,采样频率不一定等于EPWM的周期,这取决于你的出发方式以及PWM波形。只有比如你可以设置上升沿触发,可以设置下降沿触发,也可以设置上升下降沿均触发。在不同的方式下,两者的关系不同。当设置上升沿触发时候,ADC与PWM的频率相同
ADC采样频率是否等于PWM频率,一个要看SOC设置的触发点再一个PWM周期是几个,比如增减模式,就可能在一个周期触发两次ADC SCO的采样。另外你所说的采样率是不是指采样窗的大小还是最快的采样频率?