就是239.5个AD时钟周期,AD时钟最快为14MHz 1/14Mhz*239= 17us
但是通过计算得知,如果输入阻抗为 300KΩ,那么充电时间约为 2.4uS。在软件上把采样周期调到最大(ADC_SampleTime_239_5Cycles,频率为 12M,时间 19.9uS),还是存在误差。说明此时跟周期不是主要原因。 问题出在输如阻抗大于 IC 里 ADC 允许的最大阻抗。充电时电流分两路,一路经过 R1 到 R2 到地,还有一路经过 R...
ADC_RegularChannelConfig ( ADC1, ADC_Channel_1, 2, ADC_SampleTime_239Cycles5 ); ADC_RegularChannelConfig ( ADC1, ADC_Channel_2, 3, ADC_SampleTime_239Cycles5 ); ADC_RegularChannelConfig ( ADC1, ADC_Channel_3, 4, ADC_SampleTime_239Cycles5 ); ADC_RegularChannelConfig ( ADC1, ADC_Channel_4,...
ADC_SampleTime:指定ADC通道的采样时间值 (取值范围?请看下面的附录图4) */ ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5 ); ADC_Cmd(ADC1, ENABLE); //使能指定的ADC 注意:函数ADC_Cmd只能在其他ADC设置函数之后被调用 /*下面4步按流程走,走完就行*/ ADC_ResetCalibratio...
ADC_RegularChannelConfig(ADC1,ADC_Channel_2,3,ADC_SampleTime_239Cycles5);//内部通道测参考电压//开启ADC的DMA支持(要实现DMA功能,还需独立配置DMA通道等参数)ADC_DMACmd(ADC1, ENABLE); ADC_Cmd(ADC1,ENABLE);//使能ADC模块ADC_ResetCalibration(ADC1);//使能复位校准while(ADC_GetResetCalibrationStatus(AD...
ADC_RegularChannelConfig(ADC1,ADC_Channel_11, 1, ADC_SampleTime_239Cycles5 ); ADC_DMACmd(ADC1,ENABLE); ADC_Cmd(ADC1,ENABLE); ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); ...
ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);//1:只有一个通道被转换 ADC_SampleTime_239Cycles5:采样时间随便选 /*开启软件转换*/ ADC_SoftwareStartConvCmd(ADC1,ENABLE); while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);//等待软件交换结束,ADC_FLAG_EOC:转换结束标志,=reset...
可以尝试修改代码,将三个通道的采样时间设置为相同的值,例如:ADC_SampleTime_239_5Cycles,保证采样的时间一致,从而减少数据错位的可能性。同时,修改代码中的采样顺序,按照先采样第一个通道,再采样第二个通道,最后采样第三个通道的方式进行,确保数据的顺序正确。例如:while (1) { switch (event) { ...
通过以上数据知道,采集精度跟采集时间和输入阻抗有关。但是通过计算得知,如果输入阻抗为300KΩ,那么充电时间约为2.4us。在软件上把采样周期调到最大(ADC_SampleTime_239_5Cycles,频率为12M,时间19.9us),还是存在误差,说明此时跟周期不是主要原因。问题出在输入阻抗大于ADC允许的最大阻抗。
ADC_RegularChannelConfig(ADC1,ADC_Channel_17,2,ADC_SampleTime_239Cycles5); //这里需要根据数据手册来设定通道,数据手册上会说明那个引脚对应那个通道,外接电源接到那个引脚上就可以了,必须按照数据手册的要求来,不然肯定会出错,博主在这里就有一个很大很大的教训,望读者谨记 ...