打印

请教高手ADC死区问题。

[复制链接]
2821|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qiang6091|  楼主 | 2010-12-3 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用STM32F103RCT6做ADC采集时,将外部的信号电压连接到ADC的IN1管脚上。在信号电压由1V到3V慢速变化时,其ADC的输出在输入电压由2.25V到2.28V之间没有变化,即出现了采集的死区。我的ADC时钟速度是12MHZ,采样保持周期为239.5。
     将ADC的时钟设置为18MHZ以及9MHZ后,就能实现连续变化。将系统时钟改为56MHZ,ADC时钟为14MHZ后也能连续,只有12MHZ时会出现死区。
     有朋友遇到过类似的问题吗?等待解答。
沙发
qiang6091|  楼主 | 2010-12-3 17:31 | 只看该作者
//   ADC2 configuration
void ADC2_Init(void)
{
//  RCC->CFGR   |=  RCC_CFGR_ADC1PRE;   //Set ADC2 clock frequency PCLK2/6   12MHZ
  RCC->APB2ENR|=  RCC_APB2Periph_ADC2;      // enable periperal clock for ADC2      
  ADC2->CR1   |=  ADC_Mode_Independent;            // use independant mode
  ADC2->SMPR2 |=  (ADC_SampleTime_239Cycles5<<3);  //Set ADC2 Channel 1 sample time 239.5
  ADC2->SQR3  |=  ADC_Channel_1;                                    //select ADC channal
  ADC2->CR2   |= ADC_CR2_CAL;                 //selfcalibration ADC
  ADC2->CR2   |=  ADC_CR2_Exttrig;                  //External Trigger Conversion
  ADC2->CR2   |=  ADC_ExternalTrigConv_None;           // External event
  ADC2->CR2   |= ADC_CR2_ADON;                     //A/D converter ON and start
  DelayuS(10);                            //Wait power stable   
}

以上程序是ADC2的初始化设置。在主函数中读取的函数如下:
Send_Int_Four(ADC2->DR);
  USART1_CRLF();
  DelayuS(100);
  ADC2->CR2   |=  ADC_CR2_Swstart;   
   DelayuS(1000000);

使用特权

评论回复
板凳
airwill| | 2010-12-3 21:07 | 只看该作者
我感觉不应该有这样的问题, 有机会也来试试.
你的芯片是什么版本的? 也请香版主也测试一下.

使用特权

评论回复
地板
qiang6091|  楼主 | 2010-12-3 21:19 | 只看该作者
楼上你可以试试,我试了好几个板子都这样。我用ADC也好几年了。这个问题也是头一次遇到。实在不行就只能找ST的技术支持了来解决了。
   采集速度很低,一秒一次。ADC的输入脚是一个RC滤波,100k电阻,0.1uF电容。将电阻改为30k后仍旧存在问题,可以排除是输入阻抗的问题。

使用特权

评论回复
5
香水城| | 2010-12-4 02:05 | 只看该作者
你这样试试:把输入信号固定在那个测不到的电压,然后初始化后不要改变输入电压,看看读到什么。

使用特权

评论回复
评论
梦幻的帅帅 2022-3-8 14:45 回复TA
@�λõ�˧˧ :随着实际电压值的继续增大,采集值比实际值小的越来越多,然后又到了一个死区,电压值增大,采集值先是不变,然后就直接跳到和实际电压值相同的值,然后死区过了,采集值又慢慢的比实际值大了,然后就不停地循环刚才的过程 这是因为MCU内部校准的缘故嘛 
梦幻的帅帅 2022-3-8 14:44 回复TA
香主,我也遇到这个问题了,刚采集低电压时,采集值比实际值大一点,然后随着实际电压值的升高,采集值比实际值大的越来越多,电压再升高时,到了一个死区,实际电压值加大,采集出来的值不变,慢慢的采集值就比实际电压值小了 
6
qiang6091|  楼主 | 2010-12-4 09:13 | 只看该作者
香主,不改变输入电压后得到的输出值不是对应的电压,差值有0.05V。将ADC频率改为18MHZ或9MHZ后读到的电压值与输入电压一致。

使用特权

评论回复
7
wubing1211| | 2010-12-4 12:32 | 只看该作者
刚才也玩了

使用特权

评论回复
8
qiang6091|  楼主 | 2010-12-6 08:21 | 只看该作者
楼上,结果怎么样?

使用特权

评论回复
9
qiang6091|  楼主 | 2010-12-6 10:01 | 只看该作者
问题好像有了点眉目。我在VDDA端由3.3V之间加了一个4.7uH的电感,将这个电感用镊子短接后竟然能达到那个电压值。但是用万用表测量电感两端的电压值是相等的。

使用特权

评论回复
10
香水城| | 2010-12-6 10:03 | 只看该作者
请楼主上传完整的测试项目和测试电路图,并告知详细的芯片型号和版本号,我们测试一下。谢谢!

使用特权

评论回复
11
qiang6091|  楼主 | 2010-12-6 10:52 | 只看该作者
香主,将电感换成0欧电阻后能测试到连续输入电压了。我怀疑有电源上的干扰造成了ADC的死区。我在查找电源上的问题。谢谢!

使用特权

评论回复
12
IJK| | 2010-12-6 11:21 | 只看该作者
问题好像有了点眉目。我在VDDA端由3.3V之间加了一个4.7uH的电感,将这个电感用镊子短接后竟然能达到那个电压值。但是用万用表测量电感两端的电压值是相等的。 ...
qiang6091 发表于 2010-12-6 10:01


这是个有趣的现象。记得有篇**谈到类似的问题。LZ可以这样试验一下,在4.7uH后面多加个10uF~200uF的电容,应该也可以解决。

使用特权

评论回复
13
qiang6091|  楼主 | 2010-12-6 13:47 | 只看该作者
楼上和我想的一样,我准备在后端加一个0.1uF的电容。

使用特权

评论回复
14
kiwis66| | 2022-3-11 15:35 | 只看该作者
先确认下最小步进,
之前也怀疑过,不过后来发现可能是源的问题,还有万用表自身误差,后来用了四位半的表,结合测试,效果明显

使用特权

评论回复
15
sfd123| | 2022-3-12 16:29 | 只看该作者
MARK!有意义!

使用特权

评论回复
16
andygirl| | 2022-3-17 10:43 | 只看该作者
特意试了试,没发现这个现象,
不知道是型号不一致,还是测量有误差
期待楼主后续试验

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

124

帖子

0

粉丝