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

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

[复制链接]
vvhhbc 提问时间: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);
}


vvhhbc 回答时间: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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版