TI中文支持网
TI专业的中文技术问题搜集分享网站

28335和28377的ADC有哪些不一样,看寄存器的比较已经晕了

28335和28377的ADC有哪些不一样,看寄存器的比较已经晕了

10#:

简单来说,F28377D/S的ADC模块个数由F28335的一个增加到了4个,并且由原来只支持12位变成每一个都可以单独配置为12位或16位,对应使用单端或差分输入。F28377D/S的每个ADC只有一个采样保持器(S/H),但原来的F28335有两个。F28377D/S的ADC采样范围由原来的3v扩大到3.3v,可同时支持内部或外部参考。它的采样机制比F28335更加灵活,使用SOC进行触发,可以采样任意通道,并且有多个触发源,还支持SOC的优先级配置。最后,F28377D/S的ADC增加了后端处理单元PPB,可以在硬件上对ADC采样结果进行处理,比较实现比较和零偏补偿等等,然后产生对应的中断或者事件对EPWM进行触发。

如果看得比较麻烦,建议可以先了解一下Piccolo系列比如F2803x或者F2806x等的ADC是如何工作的,然后再进一步了解F28377D/S,因为后者是在前者的基础上增加了更多功能和灵活性。也可以使用TI例程进行测试进行学习。

28335和28377的ADC有哪些不一样,看寄存器的比较已经晕了

Wenhao Wu2:

回复 10#:

1.在F28377S上,LaunchPad只给出了ADCA和ADCB的引脚,频道选择的时候,如果我想用ADCB的第二个通道是直接使用AdcbRegs.ADCSOC1CTL.bit.CHSEL     = 2;这样吗?还是怎么回事;

还有一个问题,如果只有AB的引脚,那C和D的引脚又在哪?是使用引脚复用吗?

28335和28377的ADC有哪些不一样,看寄存器的比较已经晕了

10#:

回复 Wenhao Wu2:

是的,只有ADC A和ADC B模块是有引脚接出来了的,请参考C:\ti\controlSUITE\development_kits\LAUNCHXL-F28377S\HwDevPkg路径下的原理图LAUNCHXL-F28377S.pdf第6页。如果要使用ADC C和ADC D,只能自己另画控制板,或者使用TI提供的其它开发板。

.

如果想对ADCINB2通道进行采样,可以使用ADC B的任意一个SOC寄存器(ADCSOCxCTL)进行配置,是通过它的CHSEL进行选择,请仔细查看该寄存器的定义和详细说明。

28335和28377的ADC有哪些不一样,看寄存器的比较已经晕了

Wenhao Wu2:

回复 10#:

非常谢谢你的回答,让我扫去了很多迷茫。

我查看并阅读了你说的相关资料,并参照例程进行了AD的设置,设置如下:

ADC初始化程序:

AdcaRegs.ADCCTL2.bit.PRESCALE = 6; //set ADCCLK divider to /4 AdcaRegs.ADCCTL2.bit.RESOLUTION = RESOLUTION_12BIT;//0 AdcaRegs.ADCCTL2.bit.SIGNALMODE = SIGNAL_SINGLE;//0

//Set pulse positions to late AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;

//power up the ADC AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;

ADC采样频道设置:

AdcaRegs.ADCSOC1CTL.bit.CHSEL = 2; // SOC1 will convert pin A2 AdcaRegs.ADCSOC1CTL.bit.ACQPS = 30; // sample window in SYSCLK cycles AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 4; //  // Configure PPB to eliminate subtraction related calculation AdcaRegs.ADCPPB2CONFIG.bit.CONFIG = 1; // PPB is associated with SOC1 AdcaRegs.ADCPPB2OFFCAL.bit.OFFCAL = 0; // Write zero to this for now till offset ISR is run

ADC结果读取:

do { // //convert, wait for completion, and store results //start conversions immediately via software, ADCA // AdcaRegs.ADCSOCFRC1.all = 0x0003; //SOC0 and SOC1

// //wait for ADCA to complete, then ackn while(AdcaRegs.ADCINTFLG.bit.ADCINT1 == 0); AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;

// //wait for ADCB to complete, then acknowledge flag // //while(AdcbRegs.ADCINTFLG.bit.ADCINT1 == 0); //AdcbRegs.ADCINTFLGCLR.b

// //store results // AdcaResult0 = AdcaResultRegs.ADCRESULT0; AdcaResult1 = AdcaResultRegs.ADCRESULT1;

asm(" ESTOP0");

}while(1);

在这样的情况下,在接电位器的情况下,AD并不能采集数据,您能再帮我看下错误在哪吗

28335和28377的ADC有哪些不一样,看寄存器的比较已经晕了

10#:

回复 Wenhao Wu2:

请详细对照TRM里这些寄存器的位设置为你程序里的值时,了解具体是什么含义。

AdcaRegs.ADCSOC1CTL.bit.CHSEL = 2; // SOC1 will convert pin A2AdcaRegs.ADCSOC1CTL.bit.ACQPS = 30; // sample window in SYSCLK cyclesAdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 4; //

以上配置里,你需要采样ADC A模块的A2通道,使用的采样窗口是30,触发源为GPIO,那么你可以确定电位器接的是A2通道吗?你有通过GPIO触发ADC进行采样吗?从你的代码里看,你是使用AdcaRegs.ADCSOCFRC1.all = 0x0003; //SOC0 and SOC1 软件来触发SOC0和SOC1的,可是实际情况是它不会生效,除非TRIGSEL位等于0:

04h ADCTRIG4 – GPIO, ADCEXTSOC

赞(0)
未经允许不得转载:TI中文支持网 » 28335和28377的ADC有哪些不一样,看寄存器的比较已经晕了
分享到: 更多 (0)