下午好、我尝试每2ms 同时读取8个 ADC 通道(HW 缓冲器-过采样8)、我注意到我有2个通道、在我的软件中这些通道是 AIN8 (PE5)和 AIN9 (PE4)、 在 Launchpad EK-TM4C129XL 的仿真中、"ui32ADCValues[4]和 ui32ADCValues[5]中这些通道的读数会对另一个信号产生干扰、这在我在下面开发的代码中是否可行? 我是否在该微控制器 TM4C1294NCPDT 的 ADC 外设的配置(setupADC)或读取(读取 ADC)方面遇到了问题?
设置 ADC:
"。。
无效
setupADCs()
{
SysCtlPeripheralReset (SYSCTL_Periph_GPIOE);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
SysCtlPeripheralReset (SYSCTL_Periph_GPIOB);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
SysCtlPeripheralReset (SYSCTL_Periph_ADC0);
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
GPIOPinTypeADC(.
GPIO_Porte _BASE、
GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1
| GPIO_PIN_0);
GPIOPinTypeADC (GPIO_PORTB_BASE、GPIO_PIN_4);
// ADCSequenceDisable (ADC0_BASE、0);
// ADCSequenceDisable (ADC0_BASE、1);
// ADCSequenceDisable (ADC0_BASE、2);
// ADCSequenceDisable (ADC0_BASE、3);
// ADCSequenceDisable (ADC0_BASE、4);
// ADCSequenceDisable (ADC0_BASE、5);
// ADCSequenceDisable (ADC0_BASE、6);
//SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
ADCHardwareOversampleConfigure (ADC0_BASE、ADC_SAMPLE_BUF_SIZE);
SysCtlDelay (10);
ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_PROCESSOR、0);
// ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_AUSE_0);
// ADCSequenceConfigure (ADC0_BASE、1、ADC_TRIGGER_PROCESSOR、1);
// ADCSequenceConfigure (ADC0_BASE、2、ADC_TRIGGER_PROCESSOR、2);
// ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、3);
// ADCSequenceConfigure (ADC0_BASE、4、ADC_TRIGGER_PROCESSOR、4);
// ADCSequenceConfigure (ADC0_BASE、5、ADC_TRIGGER_PROCESSOR、5);
// ADCSequenceConfigure (ADC0_BASE、6、ADC_TRIGGER_PROCESSOR、6);
ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_CH0);// P. Entr。 应
ADCSequenceStepConfigure (ADC0_BASE、0、1、ADC_CTL_CH1);// P. Entr。 O2
ADCSequenceStepConfigure (ADC0_BASE、0、2、ADC_CTL_CH2);// Fluxo AR
ADCSequenceStepConfigure (ADC0_BASE、0、3、ADC_CTL_CH3);// Fluxo O2
ADCSequenceStepConfigure (ADC0_BASE、0、4、ADC_CTL_CH8);// P.Insp
ADCSequenceStepConfigure (ADC0_BASE、0、5、ADC_CTL_CH9);// Cell O2
ADCSequenceStepConfigure (ADC0_BASE、0、6、(ADC_CTL_CH10 | ADC_CTL_IE | ADC_CTL_END));// P. Piloto Exalação
ADCSequenceEnable (ADC0_BASE、0);
// ADCSequenceEnable (ADC0_BASE、1);
// ADCSequenceEnable (ADC0_BASE、2);
// ADCSequenceEnable (ADC0_BASE、3);
// ADCSequenceEnable (ADC0_BASE、4);
// ADCSequenceEnable (ADC0_BASE、5);
// ADCSequenceEnable (ADC0_BASE、6);
ADCIntClear (ADC0_BASE、0);
// ADCIntEnable (ADC0_BASE、0);// Entender melhor este status?
IntEnable (INT_ADC0SS0);
// ADCIntEnable (ADC0_BASE、0);// Entender melhor este status?
}
"
读数 ADC (8个通道)
"。。
无效
读取 ADC (CMD_INPUT *输入信号)
{
uint32_t ui32ADCValues[10];// Lendo OS 7 canais ADC
float readadc;
//uint8_t number_sample_;
//number_sample = WaitAndReadADC (ui32ADCValues);
//从 ADC 读取值。
ADCIntClear (ADC0_BASE、0);
// ADCIntClear (ADC0_BASE、1);
// ADCIntClear (ADC0_BASE、2);
// ADCIntClear (ADC0_BASE、3);
// ADCIntClear (ADC0_BASE、4);
// ADCIntClear (ADC0_BASE、5);
// ADCIntClear (ADC0_BASE、6);
////[TODO ] investigar o temp de 50us para conversão muito temp na visão do Feed (04-12-20)
ADCSequenceDataGet (ADC0_BASE、0、ui32ADCValues);
// WaitAndReadADC (ui32ADCValues);
///---------------------------------------------- Leitura PRESSAO de entrada de AR
//读取 ADC0 (进气压力传感器- NXP5700)和数字转换
readadc =(3.0 *(float) ui32ADCValues[0])/4096.0;
inputRad->inletPressAir =(readADC - CAL_OFFSET_INPUT_PRESS_AIR)
/增益_进口_压力_空气;
//------------------------------
//limites min e max
if (inputRad->inletPressAir < 0)
{
inputRad->inletPressAir = 0;
}
否则(inputRad->inletPressAir >700)
{
inputRad->inletPressAir = 700;
}
//-------------------------------- Leitura PRESSAO de entrada de O2
//读取 ADC1 (O2入口压力传感器- NXP5700)和数字转换
readadc =(3.0 *(float) ui32ADCValues[1])/4096.0;
inputRad->inletPressO2 =(readADC - CAL_OFFSET_INPUT_PRESS_O2)
/ GAIN_INGIN_PRESS _O2;
//limites min e max
if (inputRad->inletPressO2 < 0)
{
inputRad->inletPressO2 = 0;
}
否则(inputRad->inletPressO2 >700)
{
inputRad->inletPressO2 = 700;
}
///---------------------------------------------- 利图拉 F未爆弹 药
//公式 DO 传感器 Fluxo PMF4102V -流速=[(Vout - 1V)/4V] x 满量程流速
// inputRead->flowAir =(3.3 *(float) ui32ADCValues[2])/4096.0;
readadc =(3.0 *(float) ui32ADCValues[2])/4096.0;
inputRad->flowAir =(readADC - CAL_OFFSET_FLOAD_AIR)/ GAIN_FLOAD_AIR;
//limites min e max
if (inputRad->flowAir <0)
{
inputRad->flowAir = 0;
}
否则(inputRad->flowAir >150)
{
inputRad->flowAir = 150;
}
///---------------------------------------------- Leitura F未爆弹 药接口 O2
//读取 ADC3 (O2流量传感器)和数字转换
// inputRead->flowO2 =(3.3 *(float) ui32ADCValues[3])/4096.0;
readadc =(3.0 *(float) ui32ADCValues[3])/4096.0;
inputRad->flowO2 =(readADC - CAL_OFFSET_FLOG_O2)/ GAIN_FLOG_O2;
//limites min e max
if (inputRad->flowO2 <0)
{
inputRad->flowO2 = 0;
}
否则(inputRad->flowO2 >150)
{
inputRad->flowO2 = 150;
}
///---------------------------------------------- Leitura PRESSÃO INSPIRATÓRIA í a
//读取 ADC8 (吸气压力)和数字转换
//inputRead->inspuPress =(3.3 *(float) ui32ADCValues[4])/4096.0;
readadc =(3.0 *(float) ui32ADCValues[4])/4096.0;
inputRead->insppress =(readADC - CAL_OFFSET_PRESS)/ gain_press_inSP;
//limites min e max
if (inputRad->inspoPress < 0)(如果(inputRead->inspoPress < 0))
{
inputRad->inspinPress = 0;
}
否则(inputRad->inspinPress >140)
{
inputRad->inspinPress = 140;
}
///---------------------------------------------- Leitura CÉLULA de O2
//读取 ADC9 (氧传感器)和数字转换
//inputRead->cellO2 =(3.3 *(float) ui32ADCValues[5])/4096.0;
readadc =(3.0 *(float) ui32ADCValues[5])/4096.0;
inputRad->cellO2 = 21.0 +((readADC - CAL_OFFSET_CELL_O2)/ GAIN_CELL_O2);
//limites min e max
if (inputRad->cellO2 <0)
{
inputRad->cellO2 = 0;
}
否则(inputRad->cellO2 >105)
{
inputRad->cellO2 = 105;
}
///---------------------------------------------- Leitura PRESSÃO piloto EXALAÇÃO
//读取 ADC10 (先导呼气压力)和数字转换
//inputRead->inspuPress =(3.3 *(float) ui32ADCValues[6])/4096.0;
readadc =(3.0 *(float) ui32ADCValues[6])/4096.0;
inputRead->expPilotPress =(readADC - CAL_OFFSET_press_pilot_EXP)
/ gain_press_pilot_EXP;
ADCProcessorTrigger (ADC0_BASE、0);
// ADCProcessorTrigger (ADC0_BASE、1);
// ADCProcessorTrigger (ADC0_BASE、2);
// ADCProcessorTrigger (ADC0_BASE、3);
// ADCProcessorTrigger (ADC0_BASE、4);
// ADCProcessorTrigger (ADC0_BASE、5);
// ADCProcessorTrigger (ADC0_BASE、6);
}
"
谢谢!