ADC采集电池电压方法(串联分压电路)

首先明白  串联电阻分压公式:U1=R1/(R1+R2)U
推理公式  串联电路电流处处相等 I1=I2    ----> u1/r1 = u2/r2 ----> u2=(r2 * u1)/r1
        串联电路电压U = U1 + U2 
             带入U2    = U1 + (R2 * U1)/R1
        提取公因式U1  = U1(1+R2/R1)
    对括号内的式子通分  =U1*(R1+R2)/R1

图解:
 

ADC采集电池电压的原理就是 用串联分压电路

PA4 ADC采集的电压 = 1/(10+1) * VIN

求出VIN

应用在项目中

ADC采集电源电压 原理图

VOLP处(通道0)测量出电压

校准电压VCC (1.19v)

测量电压VIN

代码

 /* 测量电源电压 */
    for(i=0;i<numofsam;i++)  //numofsam取样次数30次
    {
        powvol_average[i]=get_adc(vol_channel);//读取电源ADC值 通道0
    }
    for(i=0;i<numofsam;i++)
    {
        vcc+=(1.19*4096)/get_adc(vcc_channel);//测试内部 1.19V
    }
    vcc/=numofsam;  
    for(i=0;i<numofsam;i++)
    {
        powvol+=19*vcc*(powvol_average[i]/4096);  
    }
    powvol/=numofsam;

### 使用ADC采集电压计算电池剩余电量 #### 计算方法与公式 为了计算电池的剩余电量,通常采用如下公式: \[ \text{剩余电量百分比} = \left( \frac{\text{采集电压} - \text{battery\_L}}{\text{battery\_H} - \text{battery\_L}} \right) \times 100\% \] 其中: - `采集电压` 是通过ADC读取的实际电压值, - `battery_L` 表示电池最低工作电压, - `battery_H` 表示电池最高工作电压。 该公式的目的是将采集到的浮点型电压转换成整数形式表示的电量百分比[^1]。 对于具体的C程序实现部分,在代码中会定义一个函数用于获取当前电池电压。此过程涉及配置ADC通道并调用相应的API完成数据读取操作。例如,当使用STM32 HAL库时,可以通过初始化ADC模块并将指定引脚设置为模拟输入来准备硬件资源[^5]。 一旦获得了原始AD值,则可以根据上述提到的比例关系将其映射至对应的物理量——即真实的电压水平,并进一步应用前述公式得出最终的结果[^2]。 值得注意的是,这种方法属于较为基础的方式之一,在某些应用场景下可能还需要考虑其他因素的影响,比如温度变化对测量精度带来的偏差等问题。因此,在一些更复杂的产品设计里可能会引入额外的技术手段来进行校正或优化处理[^3]。 ```c // 获取电池电压的例子 float ReadBatteryVoltage(void){ uint32_t adc_raw; float voltage; /* 启动一次单次模式下的规则组转换 */ HAL_ADC_Start(&hadc1); /* 等待EOC标志位置位 */ HAL_ADC_PollForConversion(&hadc1, ADC_TIMEOUT); /* 获取最近一次ADC1规则组的转换结果 */ adc_raw = HAL_ADC_GetValue(&hadc1); // 将ADC数值转化为实际电压值 voltage = (adc_raw * VREF) / MAX_ADC_VALUE; return voltage; } ``` 在此基础上,如果想要更加精确地反映真实情况的话,还可以参考专门针对某款设备编写的文档资料中的具体做法,如X-CTR100控制器所使用的基于锂电池特性的简化模型[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值