你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

芯片通过ad采样压值问题还没解决,AD还是有问题,盼解

[复制链接]
vvhhbc1 提问时间:2015-11-28 12:53 /
本帖最后由 vvhhbc1 于 2015-11-28 12:59 编辑

我用的是stm32F0 芯片通过ad采样压值,
电池电压经分压电阻分压后输入PA0 -WKUP1管脚,
经检测,当输入PA0的压值为0.6v时,AD转换值全部都在750左右,经计算,该ad值属于正常。

但是问题来了:当电池电压经分压后,输入PA0的压值为1.05v时,AD转换值如下:
QQ图片20151128123936.png

读取的12位ad值,几乎全是4095,中间偶有1294,1293等值, 经计算,这个1294,1293等值应该是对应1.05v的AD转换值

为什么采样值中有这么多的4095呢?

我的代码如下:
void BATT_Initial(void)
{
        HAL_ADCEx_Calibration_Start(&hadc);                //adc较准
}

u32 GetBattValue(void)
{
        static u32 bat;

        if(HAL_ADC_Start(&hadc) != HAL_OK)
                ;
               
  if (HAL_ADC_PollForConversion(&hadc, 10) != HAL_OK)
                ;
               
  if(HAL_ADC_GetState(&hadc) & HAL_ADC_STATE_REG_EOC)
  {
    bat = HAL_ADC_GetValue(&hadc);
    printf("bat=%ld\r\n",(unsigned long)bat);
  }
        
         return (bat);
}


AD设置如下:
QQ图片20151128124917.jpg

请问问题出在哪里呢?盼能得到帮助,谢谢!




收藏 1 评论5 发布时间:2015-11-28 12:53

举报

5个回答
Paderboy 回答时间:2015-11-28 13:35:55
本帖最后由 Paderboy 于 2015-11-28 13:42 编辑
vvhhbc1 发表于 2015-11-28 13:30
这不是问题的根源阿,谢谢!

你先用3.3v的测试下你的,ad数据吧。。 正常3.3v的时候才是你的ad满量程。。。 难道使用的是外部基准?
这个是我测试的F030R8的,没有问题。。。。用的是HAL 1.40的库

if(HAL_ADC_Start(&hadc) != HAL_OK)
{
/* Start Conversation Error */
//HAL_GPIO_WritePin (GPIOC ,GPIO_PIN_13,GPIO_PIN_SET );
}
  if (HAL_ADC_PollForConversion(&hadc, 10) != HAL_OK)
  {
    /* End Of Conversion flag not set on time */
    HAL_GPIO_WritePin (GPIOA ,GPIO_PIN_5,GPIO_PIN_SET );
  }
  else
  {
    /* ADC conversion completed */
    /*##-5- Get the converted value of regular channel  ########################*/
    uhADCxConvertedValue = HAL_ADC_GetValue(&hadc);
  }
float value=0;
value = uhADCxConvertedValue*3300/4095;
printf ("PA0 ADC=%.2fV\r",value/1000 );



Paderboy 回答时间:2015-11-28 13:20:51
本帖最后由 Paderboy 于 2015-11-28 13:28 编辑

static u32 bat?


u16 GetBattValue(void)
{
        u16 bat;

        if(HAL_ADC_Start(&hadc) != HAL_OK)
                ;
               
  if (HAL_ADC_PollForConversion(&hadc, 10) != HAL_OK)
                ;
               
  if(HAL_ADC_GetState(&hadc) & HAL_ADC_STATE_REG_EOC)
  {
    bat = HAL_ADC_GetValue(&hadc);
    printf("bat=%d\r\n",bat);
  }
        
         return (bat);
}


vvhhbc1 回答时间:2015-11-28 13:30:00
Paderboy 发表于 2015-11-28 13:20
static u32 bat?
uint16_t bat就足够了

这不是问题的根源阿,谢谢!
abclsl 回答时间:2015-11-29 12:01:46
时钟分频改大一点,采样周期改长一些试试看
abclsl 回答时间:2015-11-29 12:02:37
还有确定你硬件电路没有问题的。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版