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

28335ADC问题

老师您好!我在做直流电机控制的项目,下面一段关于ADC配置的程序,为什么我在Watch中监测时,结果不对,模拟信号接在了ADCINA0上,电压为2.4V。在Watch中我监测了AdcRegs.ADCRESULT0>>4和Voltage[0]时,值不对,为什么?

…….

//150M的系统时钟

SysCtrlRegs.HISPCP.all=0x3;

……

void AdcSetup(void)

{

InitAdc();

AdcRegs.ADCTRL3.bit.ADCCLKPS=0X0;

AdcRegs.ADCTRL1.bit.ACQ_PS=0xf;

AdcRegs.ADCTRL1.bit.SEQ_CASC=1;

AdcRegs.ADCTRL3.bit.SMODE_SEL=0;

AdcRegs.ADCMAXCONV.bit.MAX_CONV1=0;

AdcRegs.ADCCHSELSEQ1.bit.CONV00=0X0;

AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1=1;

AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;

}

//pwm模块的其他配置就不列举了,PWM已经调试正常,下面列举ET模块中的几条语句

void PwmSetup(void)

{

……

EPwm1Regs.ETSEL.bit.SOCAEN=1;

EPwm1Regs.ETSEL.bit.SOCASEL=0X1;

EPwm1Regs.ETPS.bit.SOCAPRD=0X1;

}

interrupt void adc_isr(void)

{

Voltage[0]=AdcRegs.ADCRESULT0>>4;

}

中断检查了,都打开了,我的配置有没有问题?感谢了

Young Hu:

能够进中断么?怎么不正常了?

老师您好!我在做直流电机控制的项目,下面一段关于ADC配置的程序,为什么我在Watch中监测时,结果不对,模拟信号接在了ADCINA0上,电压为2.4V。在Watch中我监测了AdcRegs.ADCRESULT0>>4和Voltage[0]时,值不对,为什么?

…….

//150M的系统时钟

SysCtrlRegs.HISPCP.all=0x3;

……

void AdcSetup(void)

{

InitAdc();

AdcRegs.ADCTRL3.bit.ADCCLKPS=0X0;

AdcRegs.ADCTRL1.bit.ACQ_PS=0xf;

AdcRegs.ADCTRL1.bit.SEQ_CASC=1;

AdcRegs.ADCTRL3.bit.SMODE_SEL=0;

AdcRegs.ADCMAXCONV.bit.MAX_CONV1=0;

AdcRegs.ADCCHSELSEQ1.bit.CONV00=0X0;

AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1=1;

AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;

}

//pwm模块的其他配置就不列举了,PWM已经调试正常,下面列举ET模块中的几条语句

void PwmSetup(void)

{

……

EPwm1Regs.ETSEL.bit.SOCAEN=1;

EPwm1Regs.ETSEL.bit.SOCASEL=0X1;

EPwm1Regs.ETPS.bit.SOCAPRD=0X1;

}

interrupt void adc_isr(void)

{

Voltage[0]=AdcRegs.ADCRESULT0>>4;

}

中断检查了,都打开了,我的配置有没有问题?感谢了

user4539844:

回复 Young Hu:

可以进中断,不过结果不对,2.4V对应的结果不应该是3277吗?(ADCL0接地) 在Watch中我监测了AdcRegs.ADCRESULT0>>4和Voltage[0]。哪里出问题了?还是我监测的不对啊?

老师您好!我在做直流电机控制的项目,下面一段关于ADC配置的程序,为什么我在Watch中监测时,结果不对,模拟信号接在了ADCINA0上,电压为2.4V。在Watch中我监测了AdcRegs.ADCRESULT0>>4和Voltage[0]时,值不对,为什么?

…….

//150M的系统时钟

SysCtrlRegs.HISPCP.all=0x3;

……

void AdcSetup(void)

{

InitAdc();

AdcRegs.ADCTRL3.bit.ADCCLKPS=0X0;

AdcRegs.ADCTRL1.bit.ACQ_PS=0xf;

AdcRegs.ADCTRL1.bit.SEQ_CASC=1;

AdcRegs.ADCTRL3.bit.SMODE_SEL=0;

AdcRegs.ADCMAXCONV.bit.MAX_CONV1=0;

AdcRegs.ADCCHSELSEQ1.bit.CONV00=0X0;

AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1=1;

AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;

}

//pwm模块的其他配置就不列举了,PWM已经调试正常,下面列举ET模块中的几条语句

void PwmSetup(void)

{

……

EPwm1Regs.ETSEL.bit.SOCAEN=1;

EPwm1Regs.ETSEL.bit.SOCASEL=0X1;

EPwm1Regs.ETPS.bit.SOCAPRD=0X1;

}

interrupt void adc_isr(void)

{

Voltage[0]=AdcRegs.ADCRESULT0>>4;

}

中断检查了,都打开了,我的配置有没有问题?感谢了

user4539844:

回复 Jason Wu4:

好吧,我在看看,还有个问题,我在看ADC_DMA的例程时,下面的几句话,有问题,请帮助解答!

#pragma DATA_SECTION(ADC_Result,"DMARAML4");

volatile float ADC_Result[160];

#pragma DATA_SECTION(DMABuf1,"DMARAML4");

volatile float DMABuf1[160];

问题1:DMARAML4是自定义的映射区域?为什么要写这条语句,作用是什么?转换的结果不是都在AdcRegs.ADCRESULTx中吗?转化结束,就把这个ADC结果寄存器的值存储到DMA中不就行了吗?

问题2:DMA模块是个存储器?还是一个搬运数据的工具(简单说就是个搬运工)?要是存储器,他有多大啊?要是个搬运数据的一个模块,那么要是没有外设存储器件,他搬运的数据存在哪里了?是RAM中吗?

以下是另一个问题。我看例程中有这样的两句话:

……..

InitSysCtrl();

EALLOW;

SysCtrlRegs.HISPCP.all=0x3;

EDIS;

InitSysCtrl()这个函数中包含了一个这样的函数InitPeripheralClocks();

而InitPeripheralClocks()中有一条语句是SysCtrlRegs.HISPCP.all=0x0001;

问题出现了,高速外设时钟分频寄存器在一个程序中设置了两次,而且值不一样,为什么程序还能正确的转换出结果?这样做不是ADC的时钟就不一样了吗?为什么呢?

 

 

 

赞(0)
未经允许不得转载:TI中文支持网 » 28335ADC问题
分享到: 更多 (0)