TI中文支持网
TI专业的中文技术问题咨询交流网站

TMSF28035 AD 采集值的温度补偿

尊敬的TI大神,您好,我现在用到的28035的MCU,用的内部AD采集外部电路的电压值,但是随着问题的升高,采集的电压值发生了比较的变化,我想请教下,这个内部AD有温度补偿吗?我在仔细研读了外设AD手册和28035的手册,没有找到关于AD采集温度补偿的相关说明或者温度曲线,现在请教您可以实现我要的方法吗?或者这个AD随着温度的偏移怎么进行软件处理?万分感谢您的回答。

Eric Ma:

我想请教下,这个内部AD有温度补偿吗?我在仔细研读了外设AD手册和28035的手册,没有找到关于AD采集温度补偿的相关说明或者温度曲线,现在请教您可以实现我要的方法吗?或者这个AD随着温度的偏移怎么进行软件处理?万分感谢您的回答。

ERIC:

看如下例程,内部是有温度传感器,可以用这个去做补偿。

C:\ti\controlSUITE\device_support\f2803x\v130\DSP2803x_examples_ccsv5\adc_temp_sensor

尊敬的TI大神,您好,我现在用到的28035的MCU,用的内部AD采集外部电路的电压值,但是随着问题的升高,采集的电压值发生了比较的变化,我想请教下,这个内部AD有温度补偿吗?我在仔细研读了外设AD手册和28035的手册,没有找到关于AD采集温度补偿的相关说明或者温度曲线,现在请教您可以实现我要的方法吗?或者这个AD随着温度的偏移怎么进行软件处理?万分感谢您的回答。

congming guo:

回复 Eric Ma:

大神您好,我现在还是没有明白,我应该做温度补偿处理,在TMS320280x and TMS3202801x ADC Calibration 第十七页中看到,Gain and Offset Temperature Drift 中的gain和offset进行怎么设置,gain和offset必须是写到特定的内存地址里面还是必须自己算这个gain和offset?谢谢您的指导!

尊敬的TI大神,您好,我现在用到的28035的MCU,用的内部AD采集外部电路的电压值,但是随着问题的升高,采集的电压值发生了比较的变化,我想请教下,这个内部AD有温度补偿吗?我在仔细研读了外设AD手册和28035的手册,没有找到关于AD采集温度补偿的相关说明或者温度曲线,现在请教您可以实现我要的方法吗?或者这个AD随着温度的偏移怎么进行软件处理?万分感谢您的回答。

Eric Ma:

回复 congming guo:

我现在还是没有明白,我应该做温度补偿处理,在TMS320280x and TMS3202801x ADC Calibration 第十七页中看到,Gain and Offset Temperature Drift 中的gain和offset进行怎么设置,gain和offset必须是写到特定的内存地址里面还是必须自己算这个gain和offset?谢谢您的指导!

Eric:

看一下这个文档,里面有谈到关于校准的。

TMS320x2802x, 2803x Piccolo Analog-to-DigitalConverter (ADC) and Comparator

简单的说,只有offset 校准和gain 校准,offset校准通过采样ADC VRELO进行校准,Gain offset是用出厂参数,调用一下device_cal就好。

这两个都直接调用adc.c里面的函数就可以了。不用你自己去做。

另外,再看手册,6.11.11 On-Chip Analog-to-Digital Converter

里面有采样误差的各种系数,其中主要是offset error 和 gain error,都是在上面校准之后能达到的性能,如果你觉得性能不够,则需要进一步校准。这就是需要手动的啦。

如offset error, 需要周期性的校准,调用ADC Zero Offset Calibration 函数,这样可以移除一些系统或温度对ADC的影响。这样offset error可以做到-4~+4 LSB.

Periodic self-recalibration will remove system-level and temperature dependencies on the ADC zero offset error. This can be performedas needed in the application without sacrificing an ADC channel by using the procedure listed in the "ADC Zero Offset Calibration"section of the TMS320x2802x, 2803x Piccolo Analog-to-Digital Converter (ADC) and Comparator Reference Guide (literature numberSPRUGE5).

同理,如果增益误差性能你觉得不满意,我个人觉得,你就得额外输入一路基准,然后进行换算校正,最后用软件方式校准其他采样值即可。

尊敬的TI大神,您好,我现在用到的28035的MCU,用的内部AD采集外部电路的电压值,但是随着问题的升高,采集的电压值发生了比较的变化,我想请教下,这个内部AD有温度补偿吗?我在仔细研读了外设AD手册和28035的手册,没有找到关于AD采集温度补偿的相关说明或者温度曲线,现在请教您可以实现我要的方法吗?或者这个AD随着温度的偏移怎么进行软件处理?万分感谢您的回答。

congming guo:

回复 Eric Ma:

Ti大神您好,我已经在这个初始化里进行了Device_Cal()了,如下所述,那么默认的gain和offset已经配置进去了吧,

void InitAdc(void){ extern void DSP28x_usDelay(Uint32 Count);

EALLOW; SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; (*Device_cal)(); EDIS;

}

那这个函数

void AdcOffsetSelfCal(){ Uint16 AdcConvMean; EALLOW; AdcRegs.ADCCTL1.bit.ADCREFSEL = 0; //Select internal reference mode AdcRegs.ADCCTL1.bit.VREFLOCONV = 1; //Select VREFLO internal connection on B5 AdcChanSelect(13); //Select channel B5 for all SOC AdcRegs.ADCOFFTRIM.bit.OFFTRIM = 80; //Apply artificial offset (+80) to account for a negative offset that may reside in the ADC core AdcConvMean = AdcConversion(); //Capture ADC conversion on VREFLO AdcRegs.ADCOFFTRIM.bit.OFFTRIM = 80 – AdcConvMean; //Set offtrim register with new value (i.e remove artical offset (+80) and create a two's compliment of the offset error) AdcRegs.ADCCTL1.bit.VREFLOCONV = 0; //Select external ADCIN5 input pin on B5 EDIS;}初始化后还用调用该函数吗?

尊敬的TI大神,您好,我现在用到的28035的MCU,用的内部AD采集外部电路的电压值,但是随着问题的升高,采集的电压值发生了比较的变化,我想请教下,这个内部AD有温度补偿吗?我在仔细研读了外设AD手册和28035的手册,没有找到关于AD采集温度补偿的相关说明或者温度曲线,现在请教您可以实现我要的方法吗?或者这个AD随着温度的偏移怎么进行软件处理?万分感谢您的回答。

Eric Ma:

回复 congming guo:

在ADC初始化的时候调用AdcOffsetSelfCal。

同理,如果你觉得这个性能足够,以后就不用再调用啦。

ERIC

尊敬的TI大神,您好,我现在用到的28035的MCU,用的内部AD采集外部电路的电压值,但是随着问题的升高,采集的电压值发生了比较的变化,我想请教下,这个内部AD有温度补偿吗?我在仔细研读了外设AD手册和28035的手册,没有找到关于AD采集温度补偿的相关说明或者温度曲线,现在请教您可以实现我要的方法吗?或者这个AD随着温度的偏移怎么进行软件处理?万分感谢您的回答。

congming guo:

回复 congming guo:

您好,void AdcOffsetSelfCal()里面进行了配置为什么要用B5了,而且调用函数AdcConversion()的时候进行了一系列的配置,因为需要的是某些通道采集,这个里面进行了所有的通道采集,主要看了半天,没有太明白这两个函数的意思,我默认直接调用AdcOffsetSelfCal(),我感觉不对啊,希望大神在稍微详细的指导下这个配置过程,我的配置AD过程如下:

void ADC_Init(void){ //重定义AD中断入口 EALLOW; PieVectTable.ADCINT1 = &adc_isr; EDIS; //初始化AD模块 InitAdc(); //Init_ADC();

ConversionCount = 0; EALLOW; AdcRegs.ADCCTL1.bit.TEMPCONV = 1; //Connect internal temp sensor to channel ADCINA5. EDIS; //配置AD通道和采样时钟 EALLOW; //AdcRegs.ADCSAMPLEMODE.bit.SIMULEN0 = 1; AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //当转换结果存入结果寄存器时再开启ADC中断 AdcRegs.INTSEL1N2.bit.INT1E = 1; //使能ADCINT1 AdcRegs.INTSEL1N2.bit.INT1CONT = 0; //禁止连续转换模式 AdcRegs.INTSEL1N2.bit.INT1SEL = 9; //选择EOC8模块 触发中断1 ADCInterrupt 1 //Select the channel to be converted when SOCx is received // 选择SOC某模块与ADCA0,A1,A3,A7,B0,B3中某脚对应 AdcRegs.ADCSOC0CTL.bit.CHSEL = 0; //SOC0使用 ADCINA0 AdcRegs.ADCSOC1CTL.bit.CHSEL = 1; //SOC1使用 ADCINA1 AdcRegs.ADCSOC2CTL.bit.CHSEL = 2; //SOC2使用 ADCINA2 AdcRegs.ADCSOC3CTL.bit.CHSEL = 3; //SOC2使用 ADCINA3 AdcRegs.ADCSOC4CTL.bit.CHSEL = 4; //SOC2使用 ADCINA4 AdcRegs.ADCSOC5CTL.bit.CHSEL = 6; //SOC2使用 ADCINA6 AdcRegs.ADCSOC6CTL.bit.CHSEL = 7; //SOC3使用 ADCINA7 AdcRegs.ADCSOC7CTL.bit.CHSEL = 8; //SOC5使用 ADCINB0 AdcRegs.ADCSOC8CTL.bit.CHSEL = 11; //SOC6使用 ADCINB3 AdcRegs.ADCSOC9CTL.bit.CHSEL = 5; //SOC9使用 ADCINA5

AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 0x05;//0x05–>EPWM1A//6; //设置SOC0触发->EPWM1B AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 0x05;//6; //设置SOC1触发->EPWM1B AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 0x05;//6; //设置SOC2触发->EPWM1B AdcRegs.ADCSOC3CTL.bit.TRIGSEL = 0x05;//6; //设置SOC3触发->EPWM1B AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 0x05;//6; //设置SOC4触发->EPWM1B AdcRegs.ADCSOC5CTL.bit.TRIGSEL = 0x05;//6; //设置SOC5触发->EPWM1B AdcRegs.ADCSOC6CTL.bit.TRIGSEL = 0x05;//6; //设置SOC6触发->EPWM1B AdcRegs.ADCSOC7CTL.bit.TRIGSEL = 0x05;//6; //设置SOC7触发->EPWM1B AdcRegs.ADCSOC8CTL.bit.TRIGSEL = 0x05;//6; //设置SOC8触发->EPWM1B AdcRegs.ADCSOC9CTL.bit.TRIGSEL = 0x05;//0x0b–>EPWM4//6; //设置SOC8触发->EPWM1B

AdcRegs.ADCSOC0CTL.bit.ACQPS = 6; //设置采样时间为7个ADC时钟 AdcRegs.ADCSOC1CTL.bit.ACQPS = 6; //设置采样时间为7个ADC时钟 AdcRegs.ADCSOC2CTL.bit.ACQPS = 6; //设置采样时间为7个ADC时钟 AdcRegs.ADCSOC3CTL.bit.ACQPS = 6; //设置采样时间为7个ADC时钟 AdcRegs.ADCSOC4CTL.bit.ACQPS = 6; //设置采样时间为7个ADC时钟 AdcRegs.ADCSOC5CTL.bit.ACQPS = 6; //设置采样时间为7个ADC时钟 AdcRegs.ADCSOC6CTL.bit.ACQPS = 6; //设置采样时间为7个ADC时钟 AdcRegs.ADCSOC7CTL.bit.ACQPS = 6; //设置采样时间为7个ADC时钟 AdcRegs.ADCSOC8CTL.bit.ACQPS = 6; //设置采样时间为7个ADC时钟 AdcRegs.ADCSOC9CTL.bit.ACQPS = 6; //设置采样时间为7个ADC时钟 EDIS;

}

如果我后面在进行AdcOffsetSelfCal()计算,感觉不对啊!万分感谢您的指导!

尊敬的TI大神,您好,我现在用到的28035的MCU,用的内部AD采集外部电路的电压值,但是随着问题的升高,采集的电压值发生了比较的变化,我想请教下,这个内部AD有温度补偿吗?我在仔细研读了外设AD手册和28035的手册,没有找到关于AD采集温度补偿的相关说明或者温度曲线,现在请教您可以实现我要的方法吗?或者这个AD随着温度的偏移怎么进行软件处理?万分感谢您的回答。

Eric Ma:

回复 congming guo:

void AdcOffsetSelfCal()里面进行了配置为什么要用B5了,而且调用函数AdcConversion()的时候进行了一系列的配置,因为需要的是某些通道采集,这个里面进行了所有的通道采集,主要看了半天,没有太明白这两个函数的意思,我默认直接调用AdcOffsetSelfCal(),

Eric:

自己去看看这个例程,这是一般是用ADC的推荐初始化配置过程。

B5是内部连接到VREFLO。

C:\ti\controlSUITE\device_support\f2803x\v130\DSP2803x_examples_ccsv5\adc_soc

赞(0)
未经允许不得转载:TI中文支持网 » TMSF28035 AD 采集值的温度补偿
分享到: 更多 (0)