工具/软件:Code Composer Studio
我使用的器件是 TMS320F28377S、ADC 模块具有以下校准功能。 ADC 转换误差非常大、大于+5%。 我不知道问题在哪里?
空 CalAdcINL (UINT16 ADC)
{switch (ADC){
ADC_ADCA 案例:
if (0xFFFF!=*((UINT16*) CalAdcaINL)(* CalAdcaINL)();//trimp 函数被编程到 OTP 中、所以将其调用
中断;
ADC_ADCB 案例:
if (0xFFFF!=*((UINT16*) CalAdcbINL)(* CalAdcbINL)();//trimp 函数被编程到 OTP 中、所以将其调用
中断;
ADC_ADCD 案例:
if (0xFFFF!=*((UINT16*) CalAdcdINL)(* CalAdcdINL)();//trim 函数被编程到 OTP 中、所以调用它
中断;
}
}
void AdcSetMode (UINT16 ADC、UINT16分辨率、UINT16 signalmode)
{uint16 adcOffsetTrimOTPIndex;//索引到 ADC 偏移调整的 OTP 表中
uint16 adcOffsetTrim;//临时 ADC 失调电压修整
CalAdcINL (ADC);//重新填充 INL 修整
if (0xFFFF!=*((UINT16*) GetAdcOffsetTrimOTP)){//offset 调整函数被编程到 OTP 中、所以将其调用
adcOffsetTrimOTPIndex = 4*ADC + 2*resolution + 1*signalmode;//计算 OTP 偏移调整和调用表中的索引
adcOffsetTrim =(* GetAdcOffsetTrimOTP)(adcOffsetTrimOTPIndex);//函数返回正确的失调电压修整
}
否则 adcOffsetTrim = 0;//offset 修整函数未填充、因此将 offset 修整设置为0
//将分辨率和 signalmode 应用于指定的 ADC。
//还应用偏移修整和线性修整(如果需要)。
switch (ADC){
ADC_ADCA 案例:
AdcaRegs.ADCCTL2.bit.resolution =分辨率;
AdcaRegs.ADCCTL2.bit.SGNALMODE = signalmode;
AdcRegs.ADCOFFTRIM。ALL = adcOffsetTrim;
if (adc_resolution_12bit = resolution){//12位线性修整权变措施
AdcaRegs.ADCINLTRIM1 &= 0xFFFFFF0000;
AdcaRegs.ADCINLTRIM2 &= 0xFFFFFF0000;
AdcaRegs.ADCINLTRIM4 &= 0xFFFFFF0000;
AdcaRegs.ADCINLTRIM5 &= 0xFFFFFF0000;
}
中断;
ADC_ADCB 案例:
AdcbRegs.ADCCTL2.bit.resolution =分辨率;
AdcbRegs.ADCCTL2.bit.SGNALMODE = SIGNALMODE;
AdcbRegs.ADCOFFTRIM。ALL = adcOffsetTrim;
if (adc_resolution_12bit = resolution){//12位线性修整权变措施
AdcbRegs.ADCINLTRIM1 &= 0xFFFFFF0000;
AdcbRegs.ADCINLTRIM2 &= 0xFFFFFF0000;
AdcbRegs.ADCINLTRIM4 &= 0xFFFFFF0000;
AdcbRegs.ADCINLTRIM5 &= 0xFFFFFF0000;
}
中断;
ADC_ADCD 案例:
AdcdRegs.ADCCTL2.bit.resolution =分辨率;
AdcdRegs.ADCCTL2.bit.SIGNALMODE = SIGNALMODE;
AdcdRegs.ADCOFFTRIM。ALL = adcOffsetTrim;
if (adc_resolution_12bit = resolution){//12位线性修整权变措施
AdcdRegs.ADCINLTRIM1 &= 0xFFFFFF0000;
AdcdRegs.ADCINLTRIM2 &= 0xFFFFFF0000;
AdcdRegs.ADCINLTRIM4 &= 0xFFFFFF0000;
AdcdRegs.ADCINLTRIM5 &= 0xFFFFFF0000;
}
中断;
}
}
AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE);
AdcSetMode (ADC_ADCB、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);
AdcSetMode (ADC_ADCD、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);