[STM32L4] 采集电池电压不准

[复制链接]
1259|21
 楼主| supernan 发表于 2020-1-18 14:50 | 显示全部楼层 |阅读模式
yszong 发表于 2020-1-18 14:53 | 显示全部楼层
你得上程序啊
 楼主| supernan 发表于 2020-1-18 14:58 | 显示全部楼层

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;
}
jlyuan 发表于 2020-1-18 15:01 | 显示全部楼层

还有什么现象?能再详细描述下吗?
 楼主| supernan 发表于 2020-1-18 15:05 | 显示全部楼层

采集出来的电压值 和实际不符,我电池电压在3.5的时候,输出才有3.15左右   看手册 看了好几遍了   也没看出哪里还有问题
lizhezhe1988 发表于 2020-1-18 16:52 | 显示全部楼层
supernan 发表于 2020-1-18 15:05
采集出来的电压值 和实际不符,我电池电压在3.5的时候,输出才有3.15左右   看手册 看了好几遍了   也没看 ...

1.采集实际电压之前不妨先给改ADC输入管脚输入一个0V和3.3V,看看单片机采集出来的电压是否与实际电压相等。
2.ADC有个电压校准接口,可以尝试一下。
lizhezhe1988 发表于 2020-1-18 16:54 | 显示全部楼层
lizhezhe1988 发表于 2020-1-18 16:52
1.采集实际电压之前不妨先给改ADC输入管脚输入一个0V和3.3V,看看单片机采集出来的电压是否与实际电压相 ...

再者,采集电压3.5V如果直接接到单片机,应该是不行的。
 楼主| supernan 发表于 2020-1-20 21:13 | 显示全部楼层
来点人 指导下  这手册看的都快吐了     测refint通道测出来的值和内部存储器57aa地址的值 也有差距
chuxh 发表于 2020-1-20 21:18 | 显示全部楼层

你芯片的vdda是多少?
dingy 发表于 2020-1-20 21:21 | 显示全部楼层
待测信号电压不得高于VDDA,而VDDA又不高于3.6V.
renyaq 发表于 2020-1-20 21:25 | 显示全部楼层
如果你外接VREF,它不得高于VDDA。
lizye 发表于 2020-1-20 21:27 | 显示全部楼层
另外,你把采样时间适当调长点。
houcs 发表于 2020-1-20 21:29 | 显示全部楼层
是不是输入阻抗的问题
 楼主| supernan 发表于 2020-1-20 21:32 | 显示全部楼层
片子电源VDDA为3.0v    vabt为 3.5v  vref接vdda 为3.0v      试过延时 时间长 也是一样
 楼主| supernan 发表于 2020-1-20 21:39 | 显示全部楼层
这个就是电池的正极直接接单片机vbat引脚 ,应该是输入阻抗在20mΩ以下
spark周 发表于 2020-1-20 21:44 | 显示全部楼层

参考电压准吗,采集时间够吗
liuzaiy 发表于 2020-1-20 21:47 | 显示全部楼层
你测试vbat电压,这个电压高于vdda,不行。
 楼主| supernan 发表于 2020-1-20 21:51 | 显示全部楼层

好的,我明天去单位试一下,多谢各位大侠了哈        
观海 发表于 2020-2-5 17:45 | 显示全部楼层
跟硬件电路也有关系
guanjiaer 发表于 2020-2-5 17:46 | 显示全部楼层
被采样的频率是多少啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

730

主题

10412

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部