电量曲线的插值法

本文介绍了如何设计一款充电宝电量显示的算法,通过分块折线拟合曲线来实现0-100%电量的精确显示。在项目中,作者根据不同的需求调整电量下降速度,并给出了具体的电压与百分比映射表。通过比较ADC值与预设电压值,计算出当前电量百分比,从而实现电量的动态显示。
摘要由CSDN通过智能技术生成

前段时间做了一款充电宝的项目,电量要0-100%实时显示,由于自己的原因,这个项目被严重延期,自己想想从这个项目收获很多…其他不说了进入正题。
设计电量曲线的时候可以根据不同需求设置不同的掉电电量的下降的速度,可以分块来设计,相当于用折线来拟合曲线,如下设计电量和对应的百分比值。

static const float Set_Voltage[] =
    {
        Voltage_Table1,Voltage_Table2,
        Voltage_Table3, Voltage_Table4,
        ...
    };
    static const uint8_t Set_Percentage[] =
    {
        Percentage_Table1, Percentage_Table2,
        Percentage_Table3, Percentage_Table4,
        ...
    };
[(get_adc_value - Voltage_Table2)/(Voltage_Table1 - Voltage_Table2)] *  (Percentage_Table1 - Percentage_Table2) + Percentage_Table2
    static uint8_t cal_percentage(uint16_t adc_value)
    {
        uint8_t length = (sizeof(Set_Voltage)/sizeof(Set_Voltage[0]))
        uint8_t i  = 0;
        for(i = 0; i< length ; ++i) {

            if(adc_value >= Set_Voltage[i]) {
                break;
            }
        }

    if( i>= length) {
        return 0;
    }

    if(i == 0) {
        return 100;
    }

    return (adc_value - Set_Voltage[i])/((Set_Voltage[i-1] - Set_Voltage[i])/(Set_Percentage[i-1] - Set_Percentage[i])) + Set_Percentage[i];

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值