打印
[STM32L4]

stm32l471 采集电池电压不准问题

[复制链接]
2327|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zkp2046236|  楼主 | 2018-7-4 14:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不啰嗦,直接上程序
static void MX_ADC1_Init(void)
{
  ADC_ChannelConfTypeDef sConfig;

    /**Common config
    */
  hadc1.Instance = ADC1;
  hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  hadc1.Init.LowPowerAutoWait = DISABLE;
  hadc1.Init.ContinuousConvMode = DISABLE;
  hadc1.Init.NbrOfConversion = 1;
  hadc1.Init.DiscontinuousConvMode = DISABLE;
  hadc1.Init.NbrOfDiscConversion = 1;
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  hadc1.Init.DMAContinuousRequests = DISABLE;
  hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  hadc1.Init.OversamplingMode = DISABLE;
  if (HAL_ADC_Init(&hadc1) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }


    /**Configure Regular Channel
    */
  sConfig.Channel = ADC_CHANNEL_VBAT;  //ADC_CHANNEL_TEMPSENSOR  ADC_CHANNEL_VBAT ADC_CHANNEL_VREFINT
  sConfig.Rank = ADC_REGULAR_RANK_1;
  sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
  sConfig.SingleDiff = ADC_SINGLE_ENDED;
  sConfig.OffsetNumber = ADC_OFFSET_NONE;
  sConfig.Offset = 0;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}
float GetVbat11(void)
{
        volatile uint32_t ad;
        float v;
        HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);
        MyDelay(10000);
        HAL_ADC_Start(&hadc1);
        MyDelay(10000);
        ad = HAL_ADC_GetValue(&hadc1);
        MyDelay(10000);
        ad = HAL_ADC_GetValue(&hadc1);
        //HAL_Delay(10);
        HAL_ADC_Stop(&hadc1);
        v = ad / 4096.0 * 3 * 3 * 1000;
        return v;
}

采集出来的电压值 和实际不符,我电池电压在3.5的时候,输出才有3.15左右   看手册 看了好几遍了   也没看出哪里还有问题
沙发
zkp2046236|  楼主 | 2018-7-4 14:42 | 只看该作者
来点人 指导下  这手册看的都快吐了     测refint通道测出来的值和内部存储器57aa地址的值 也有差距

使用特权

评论回复
板凳
香水城| | 2018-7-4 23:31 | 只看该作者
你芯片的vdda是多少?待测信号电压不得高于VDDA,而VDDA又不高于3.6V.
如果你外接VREF,它不得高于VDDA。
另外,你把采样时间适当调长点。

使用特权

评论回复
地板
ayb_ice| | 2018-7-5 08:59 | 只看该作者
是不是输入阻抗的问题

使用特权

评论回复
5
zkp2046236|  楼主 | 2018-7-6 08:10 | 只看该作者
香水城 发表于 2018-7-4 23:31
你芯片的vdda是多少?待测信号电压不得高于VDDA,而VDDA又不高于3.6V.
如果你外接VREF,它不得高于VDDA。
另 ...

片子电源VDDA为3.0v    vabt为 3.5v  vref接vdda 为3.0v      试过延时 时间长 也是一样

使用特权

评论回复
6
zkp2046236|  楼主 | 2018-7-6 08:11 | 只看该作者
ayb_ice 发表于 2018-7-5 08:59
是不是输入阻抗的问题

这个就是电池的正极直接接单片机vbat引脚 ,应该是输入阻抗在20mΩ以下

使用特权

评论回复
7
xinpian101| | 2018-7-9 22:28 | 只看该作者
参考电压准吗,采集时间够吗

使用特权

评论回复
8
一周一天班| | 2018-7-9 22:58 | 只看该作者
你测试vbat电压,这个电压高于vdda,不行。

使用特权

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

本版积分规则

4

主题

47

帖子

1

粉丝