您好!
对来自温度传感器的电压进行采样时出现问题、ADC 为 ADC 的每个"步进"获取不同的数据。
我将一个 NTC 热敏电阻安装到分压器中、该分压器由3.3V 电压供电、并有一个3.9千欧的固定电阻、
固定电阻器是接地电阻器。 此分压器的输出进入跟随器配置中的运算放大器
为了减轻负载的影响、运算放大器的输出进入多路复用器、多路复用器的输出进入
微控制器的 ADC 引脚。
我对程序进行调试、以便始终观察传感器的温度和电阻是怎样的。 为了进行测试、我将
热敏电阻的电阻值固定时、PCB 上测量的电压是根据电阻值预期的电压、
但 code composer 中的温度与该电阻值不同、甚至比理论值高出10摄氏度。
你能给我什么建议吗?
void MUX_GPIO() //CONFIGURA LOS CANALES DE ADC PARA CADA COMBINACIÓN DE LOS MULTIPLEXORES
{
//CANAL 0 DEL ADC
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00);//ENABLE1 del primer multiplexor NEGADA EN INTEGRADO
/*
//entrada S3
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_5, 0xFF);//IN2
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_4, 0x00);//IN1
ADCSequenceConfigure(ADC0_BASE, 0, ADC_TRIGGER_PROCESSOR,0);
ADCSequenceStepConfigure(ADC0_BASE, 0,0, 0);//(paso 1)
ADCSequenceStepConfigure(ADC0_BASE, 0,1, 0);//(paso 2)
ADCSequenceStepConfigure(ADC0_BASE, 0,2, 0);//(paso 3)
ADCSequenceStepConfigure(ADC0_BASE, 0,3, 0);//(paso 4)
ADCSequenceStepConfigure(ADC0_BASE, 0,4, 0);//(paso 5)
ADCSequenceStepConfigure(ADC0_BASE, 0,5, 0);//(paso 6)
ADCSequenceStepConfigure(ADC0_BASE, 0,6, 0);//(paso 7)
ADCSequenceStepConfigure(ADC0_BASE, 0,7, 0|ADC_CTL_IE|ADC_CTL_END);//(paso 8)
ADCSequenceEnable(ADC0_BASE,0);
ADCIntClear(ADC0_BASE,0); //limpia las banderas de interrupción del ADC
ADCProcessorTrigger(ADC0_BASE,0); //Causa un trigger para una secuencia de muestreo
while(!ADCIntStatus(ADC0_BASE,0,false)) //indica el estado de las interrupciones
{
}
ADCSequenceDataGet(ADC0_BASE,0,buffer_ADC);//obtiene los datos capturados por el adc
mu_T=(buffer_ADC[0]+buffer_ADC[1]+buffer_ADC[2]+buffer_ADC[3]+buffer_ADC[4]+buffer_ADC[5]+buffer_ADC[6]+buffer_ADC[7])/8;
vol_T=mu_T*3.3/4096; //aqui hubo breakpoint
RT=((3900*(3.3-vol_T))/vol_T);
T=(1/(0.000634544+(0.000321866*log(RT))+(-0.000000306*pow(log(RT),3))))-273.15;//aqui hubo breakpoint
arreglo[2]=T;*/
//entrada S4
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_5, 0xFF);//IN2
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_4, 0xFF);//IN1
ADCSequenceConfigure(ADC0_BASE, 0, ADC_TRIGGER_PROCESSOR,0);
ADCSequenceStepConfigure(ADC0_BASE, 0,0, 0);//(paso 1)
ADCSequenceStepConfigure(ADC0_BASE, 0,1, 0);//(paso 2)
ADCSequenceStepConfigure(ADC0_BASE, 0,2, 0);//(paso 3)
ADCSequenceStepConfigure(ADC0_BASE, 0,3, 0);//(paso 4)
ADCSequenceStepConfigure(ADC0_BASE, 0,4, 0);//(paso 5)
ADCSequenceStepConfigure(ADC0_BASE, 0,5, 0);//(paso 6)
ADCSequenceStepConfigure(ADC0_BASE, 0,6, 0);//(paso 7)
ADCSequenceStepConfigure(ADC0_BASE, 0,7, 0|ADC_CTL_IE|ADC_CTL_END);//(paso 8)
ADCSequenceEnable(ADC0_BASE,0);
ADCIntClear(ADC0_BASE,0); //limpia las banderas de interrupción del ADC
ADCProcessorTrigger(ADC0_BASE,0); //Causa un trigger para una secuencia de muestreo
while(!ADCIntStatus(ADC0_BASE,0,false)) //indica el estado de las interrupciones
{
}
ADCSequenceDataGet(ADC0_BASE,0,buffer_ADC);//obtiene los datos capturados por el adc
mu_T=(buffer_ADC[0]+buffer_ADC[1]+buffer_ADC[2]+buffer_ADC[3]+buffer_ADC[4]+buffer_ADC[5]+buffer_ADC[6]+buffer_ADC[7])/8;
vol_T=mu_T*3.3/4096; //aqui hubo breakpoint
RT=((3900*(3.3-vol_T))/vol_T);
T=(1/(0.000634544+(0.000321866*log(RT))+(-0.000000306*pow(log(RT),3))))-273.15;//aqui hubo breakpoint
arreglo[3]=T;
//--------------------------------------------------------------------------------------------------------------------------------
}
这是我的代码
梅拉

