打印
[STM32L4]

采集电池电压不准

[复制链接]
820|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 | 只看该作者

还有什么现象?能再详细描述下吗?

使用特权

评论回复
5
supernan|  楼主 | 2020-1-18 15:05 | 只看该作者

采集出来的电压值 和实际不符,我电池电压在3.5的时候,输出才有3.15左右   看手册 看了好几遍了   也没看出哪里还有问题

使用特权

评论回复
6
lizhezhe1988| | 2020-1-18 16:52 | 只看该作者
supernan 发表于 2020-1-18 15:05
采集出来的电压值 和实际不符,我电池电压在3.5的时候,输出才有3.15左右   看手册 看了好几遍了   也没看 ...

1.采集实际电压之前不妨先给改ADC输入管脚输入一个0V和3.3V,看看单片机采集出来的电压是否与实际电压相等。
2.ADC有个电压校准接口,可以尝试一下。

使用特权

评论回复
7
lizhezhe1988| | 2020-1-18 16:54 | 只看该作者
lizhezhe1988 发表于 2020-1-18 16:52
1.采集实际电压之前不妨先给改ADC输入管脚输入一个0V和3.3V,看看单片机采集出来的电压是否与实际电压相 ...

再者,采集电压3.5V如果直接接到单片机,应该是不行的。

使用特权

评论回复
8
supernan|  楼主 | 2020-1-20 21:13 | 只看该作者
来点人 指导下  这手册看的都快吐了     测refint通道测出来的值和内部存储器57aa地址的值 也有差距

使用特权

评论回复
9
chuxh| | 2020-1-20 21:18 | 只看该作者

你芯片的vdda是多少?

使用特权

评论回复
10
dingy| | 2020-1-20 21:21 | 只看该作者
待测信号电压不得高于VDDA,而VDDA又不高于3.6V.

使用特权

评论回复
11
renyaq| | 2020-1-20 21:25 | 只看该作者
如果你外接VREF,它不得高于VDDA。

使用特权

评论回复
12
lizye| | 2020-1-20 21:27 | 只看该作者
另外,你把采样时间适当调长点。

使用特权

评论回复
13
houcs| | 2020-1-20 21:29 | 只看该作者
是不是输入阻抗的问题

使用特权

评论回复
14
supernan|  楼主 | 2020-1-20 21:32 | 只看该作者
片子电源VDDA为3.0v    vabt为 3.5v  vref接vdda 为3.0v      试过延时 时间长 也是一样

使用特权

评论回复
15
supernan|  楼主 | 2020-1-20 21:39 | 只看该作者
这个就是电池的正极直接接单片机vbat引脚 ,应该是输入阻抗在20mΩ以下

使用特权

评论回复
16
spark周| | 2020-1-20 21:44 | 只看该作者

参考电压准吗,采集时间够吗

使用特权

评论回复
17
liuzaiy| | 2020-1-20 21:47 | 只看该作者
你测试vbat电压,这个电压高于vdda,不行。

使用特权

评论回复
18
supernan|  楼主 | 2020-1-20 21:51 | 只看该作者

好的,我明天去单位试一下,多谢各位大侠了哈        

使用特权

评论回复
19
观海| | 2020-2-5 17:45 | 只看该作者
跟硬件电路也有关系

使用特权

评论回复
20
guanjiaer| | 2020-2-5 17:46 | 只看该作者
被采样的频率是多少啊

使用特权

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

本版积分规则

730

主题

10412

帖子

6

粉丝