请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:EK-TM4C1294XL 您好!
我已将 ADC 设置为单端操作、并提供了准确的读数。
但是、当我将其更改为差分模式时、我会得到一些毫无意义的值。 我按照差分示例操作、不确定发生了什么情况;当我将 PE2接地、将 PE3接至3.3V 时、我得到的 ADC 读数为4095、这是正确的。 但是、如果我将 PE2和 PE3接地、我会得到大约1900的读数、它在这个范围内会跳很多+/-几百个读数。 在单端操作中、当我将 PE3接地时、我将获得预期读数0、峰值为4、偶尔会一次。
我有一个电流传感器(通过 LEM 提供电压输出的 XS 20-NP)、该传感器有一个基准电压、我正在尝试测量基准电压(大约2.5V)与电压输出之间的差异。 如果没有电流、传感器输出和参考值将为我提供相同的 2.5V 值。 当 PE2连接到电压基准引脚且 PE3连接到 Vout 引脚时、我本来期望的、在没有电流过的情况下、我会为 ADC 获得0值、但是、当两个引脚都接地时、我将获得相同类型的值。
以下是我的代码、我们希望您能提供任何帮助。
void ConfigureADC (void)
{
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
GPIOPinTypeADC (GPIO_Porte _BASE、(GPIO_PIN_3 | GPIO_PIN_2));
while (!SysCtlPeripheralReady (SYSCTL_Periph_ADC0))
{
}
ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、0);
ADCSequenceStepConfigure (ADC0_BASE、3、0、(ADC_CTL_D | ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END));
ADCSequenceEnable (ADC0_BASE、3);
ADCIntClear (ADC0_BASE、3);
}
void ADCGetValue (void)
{
uint32_t ADCValues[1];
uint32_t VoltageValue = 0;
uint32_t 电流值= 0;
TimerIntClear (Timer1_base、timer_TINA_TIMEOUT);
ADCProcessorTrigger (ADC0_BASE、3);
while (!ADCIntStatus (ADC0_BASE、3、false))
{
}
ADCIntClear (ADC0_BASE、3);
ADCSequenceDataGet (ADC0_BASE、3、ADCValues);
VoltageValue =(uint32_t)((float)(ADCValues[0]*3300)/4096);
AmperageValue =(10000*((uint32_t)(ADCValues[0]- 3103)))/775;
UARTprintf ("ADC 值=%d\n"、ADCValues[0]);
UARTprintf ("电压值(mV):%3D\n"、VoltageValue);
UARTprintf ("当前值(mA):%3D\n"、安培值);
// SysCtlDelay (10000000);
}
void ADCTimerConfig (void)
{
SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
TimerConfigure (Timer1_base、timer_CFG_PERIODICRACRACASE);
TimerClockSourceSet (Timer1_base、timer_clock_system);
TimerLoadSet (Timer1_base、timer_A、g_ui32SysClock);
IntRegister (INT_TIMER1A、ADCGetValue);
IntPrioritySet (INT_TIMER1A、2);//更改优先级
TimerIntClear (Timer1_base、timer_TINA_TIMEOUT);
TimerIntEnable (Timer1_base、timer_TINA_TIMEOUT);
IntEnable (INT_TIMER1A);
TimerEnable (Timer1_base、timer_A);
}