打印
[STM32F0]

STM32F051 ADC端口有高压是什么问题?

[复制链接]
3710|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yzhlj|  楼主 | 2014-12-5 11:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yzhlj 于 2014-12-5 11:35 编辑

哪位用过STM32F051的ADC,遇到一个奇怪的问题,只要运行ADC_StartOfConversion(ADC1);相应的通道输入引脚就有高电压,而且比电源电压都高,3.7V,有人遇到过这个问题吗?
ADC_InitTypeDef     ADC_InitStructure;
  GPIO_InitTypeDef    GPIO_InitStructure;
        /* GPIOA Periph clock enable */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

  /* ADC1 Periph clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

  /* Configure ADC Channel 0-6 as analog input */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
//        GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        /* ADCs DeInit */  
  ADC_DeInit(ADC1);

  /* Initialize ADC structure */
  ADC_StructInit(&ADC_InitStructure);

  /* Configure the ADC1 in continous mode withe a resolutuion equal to 12 bits  */
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
  ADC_Init(ADC1, &ADC_InitStructure);

  /* Convert the ADC1 Channel 0 with 239.5 Cycles as sampling time */
  ADC_ChannelConfig(ADC1, ADC_Channel_0 , ADC_SampleTime_239_5Cycles);   

  /* ADC Calibration */
  ADC_CAL_value = ADC_GetCalibrationFactor(ADC1);

  /* Enable ADCperipheral[PerIdx] */
  ADC_Cmd(ADC1, ENABLE);     

  /* Wait the ADCEN falg */
  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN));

  /* ADC1 regular Software Start Conv */
  ADC_StartOfConversion(ADC1);
沙发
mmuuss586| | 2014-12-5 12:24 | 只看该作者

输入接个下拉电阻看看;
3.7怎么测试的?用示波器看的吗?

使用特权

评论回复
板凳
yzhlj|  楼主 | 2014-12-5 14:07 | 只看该作者
mmuuss586 发表于 2014-12-5 12:24
输入接个下拉电阻看看;
3.7怎么测试的?用示波器看的吗?

3.7V是用万用表测试的,因出差在外无示波器。
现在找到问题原因了,是液晶屏干扰的,拨到液晶屏就好了。只要插上液晶屏就不行,即使不驱动不显示也不行。显示芯片是RA8806
问量是找到了,但不知道怎么解决,因无示波器,无法判断干扰是哪来的,怀疑是负压,影响的,看液晶屏上的布线,负压线和数据线是垂直的(不在一面)

使用特权

评论回复
地板
yzhlj|  楼主 | 2014-12-5 14:13 | 只看该作者
mmuuss586 发表于 2014-12-5 12:24
输入接个下拉电阻看看;
3.7怎么测试的?用示波器看的吗?

端口是有下拉的,150欧的电阻采样4-20mA信号,悬空是为了测试,即使接上下拉也会被拉高,例如输入9mA的信号,电压应在1.3V左右,但带着液晶屏时电压就会变成1.7V以上,信号越大被拉的越高,没有线性,不能准确测量。

使用特权

评论回复
5
mmuuss586| | 2014-12-5 17:50 | 只看该作者
yzhlj 发表于 2014-12-5 14:13
端口是有下拉的,150欧的电阻采样4-20mA信号,悬空是为了测试,即使接上下拉也会被拉高,例如输入9mA的 ...

地线哪里有很大的压降吧;
先查查硬件,特别是电源;
也可以用示波器看下波形,截个图上来看看也行;

使用特权

评论回复
6
dopuda| | 2015-6-29 13:05 | 只看该作者
同样的问题 你是怎么解决的?

使用特权

评论回复
7
Thor9| | 2015-6-29 19:46 | 只看该作者
先查查硬件看,有时候可能是硬件的一个小问题

使用特权

评论回复
8
冰河w| | 2015-6-29 20:07 | 只看该作者
要不把电路上来看看

使用特权

评论回复
9
龙荡乾坤| | 2016-3-17 10:35 | 只看该作者
请问楼主解决问题了吗。。我现在也遇到了这样的问题啊!

使用特权

评论回复
10
APT| | 2016-3-23 12:43 | 只看该作者
楼主解决了吗?我也碰到这问题:
我的ADC输入脚悬空的,但是DR寄存器一直为0xFFF,如果对地短路,DR寄存器约为0x0FF.
用万用表测量输入脚为3.3V,接上LED还能点亮.
跟踪调试,发觉只要一执行 ADC_StartOfConversion(ADC1),就有电压输出.

附库函数:
void ADC_StartOfConversion(ADC_TypeDef* ADCx)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
   ADCx->CR |= (uint32_t)ADC_CR_ADSTART;//注:#define ADC_CR_ADSTART ((uint32_t)0x00000004) <即ADC1的CR寄存器的ADSTART位设为1>
}

使用特权

评论回复
11
啊哲HZQ| | 2016-4-18 23:02 | 只看该作者
我也遇到ADC DMA连续采样,用示波器测试输入引脚有强上拉到电源电压?大家有没有找到问题呀?如果ADC输入端有接104电容的,则输入电平上叠加锯齿波。使测试值偏高。

使用特权

评论回复
12
UBC-Jason| | 2016-5-5 11:03 | 只看该作者
您好,请问您这边用的是STM32F030F4P6吗?楼主现在问题解决了吗?

使用特权

评论回复
13
zxm19820916| | 2016-6-6 11:00 | 只看该作者
我用的是STM32F030F4P6芯片,也是一上电就有1.3V多的电压输出,什么原因?

使用特权

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

本版积分规则

3

主题

10

帖子

0

粉丝