你(们)好。 我在这块板上遇到一些 ADC 问题,但我没有找到解决方案。 我在以前的一些主板上完成了类似的 ADC 任务,但没有遇到此问题。 同样的处理器。 此时,我已经将其最小化为最基本的 ADC 代码,但仍然看到问题。
我正在从一个2轴模拟操纵杆读取值。 每个轴上的电压都为0-3V。 我现在已经将代码向下剥离,只读一个轴,因为我不知道发生了什么。
#define SEQ_NUM 3.
UINT32_t pui32ADC0Value[4];
UINT32_t pui32ADC1Value[4];
void 多功能操作手柄初始化(void){
SysPeripheralEnable (sysctl_Periph_GPIOD);
SysPeripheralEnable (sysctl_Periph_ADC0);
GPIOPinTypeADC (GPIO _PORTD_BASE,GPIO _PIN_2);
ADCReferenceSet (ADC0_BASE,ADC_REF_EXT_3V);
ADCSequenceDisable (ADC0_BASE,SEQ_NUM);
ADCSequenceConfigure (ADC0_BASE,SEQ_NUM,ADC_TRIG_PROCESSOR, 0);
ADCSequenceStepConfigure (ADC0_BASE,SEQ_NUM,0,ADC_CTL_CH13 | ADC_CTL_IE | ADC_CTL_END);
ADCSequenceEnable (ADC0_BASE,SEQ_NUM);
ADCIntClear (ADC0_BASE,SEQ_NUM);
}
操纵杆螺纹无效(无效){
当(1){
ADCProcessorTrigger (ADC0_base,SEQ_NUM);
当(!ADCIntStatus (ADC0_BASE,SEQ_NUM,FALSE)为{时
}
ADCIntClear (ADC0_BASE,SEQ_NUM);
ADCSequenceDataSet (ADC0_base,SEQ_NUM,pui32ADC0Value);
输入值=(pui32ADC0Value[0]和0xFFF);
sprintf (字符串,“raw =%d”,输入值);
send_string_msg (string_command,0,string);
SystlDelay (ui32SysClock /120);
}
}
send_string_msg()将该值发送到 LED 显示屏。
这一切看起来都很基本,但大多数时候,我得到了 ADC 的预期值,但可能是10%的时间,我得到了一个值,0,3,7,15, 31,63,127, 255,你明白了。 这会对控制系统造成严重破坏。
我在循环中的延迟似乎无关紧要。 我尝试执行序列,例如使用序列号0或1,并读取4个值。 我尝试过使用过采样,但后来我得到的值低于预期值,因为平均值较低。 我尝试在 序列步骤中添加 ADC_CTL_SHOL_16值。 例如,如果我执行了4个步骤的序列,则4个样本中的任何一个在任何时候都可能是正确的,或者可能是低的,例如,一个或两个样本是低的,则其他两个样本是预期的。
也许解决方案就在我面前,我已经看了一段时间了,现在还没有看到。 我们非常感谢您的帮助。