问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32+OLED实现电池电量可视化显示

创作时间:
作者:
@小白创作中心

STM32+OLED实现电池电量可视化显示

引用
CSDN
1.
https://blog.csdn.net/m0_37655357/article/details/79172904

在嵌入式系统开发中,如何直观地显示设备的剩余电量是一个常见的需求。本文将详细介绍如何在STM32微控制器上使用OLED显示屏实现电池电量的可视化显示。

一、数据采集与处理

1. 电源电压采集

STM32的ADC(模数转换器)配合DMA(直接内存访问)可以很方便地采集到所需的电压数据。DMA的数据搬运机制也能有效减轻CPU的负担。

2. 数据滤波

为了获得更稳定的电源电压读数,可以在DMA中断中对采集到的数据进行均值滤波处理。以下是一个简单的滤波函数示例:

static void ADC_filter(void)
{
    int sum = 0;
    u8 i = 0;
    for(i = 0;i < N;i++)
    {
        sum+= AD_value[i];
    }
    after_filter = sum / N;    //每一次调用这个函数after_filter就更新一次;
}

3. 电压转换

将滤波后的ADC原始数据转换为实际电压值:

float ADC_cal_aveg(void)
{
    float temp = 0;
    temp = (float)(after_filter) * (3.3 / 4096); //计算电压
    return temp;
}

二、电量显示实现

1. OLED显示屏设置

使用12864分辨率的OLED显示屏,在右上角显示一个816像素的电池图标。通过PCtoLCD2002取模软件进行图片取模,共取14个不同电量级别的电池模型。

2. 电量级别计算

将3.3V的电压分为14级显示,每级对应0.24V的电压变化。通过以下函数计算当前电量级别:

void OLED_Show_RealTime_Battery(u8 x,u8 y)
{
    float ADC_Val = 0;
    unsigned int ADC_Int = 0;    
    ADC_Val = ADC_cal_aveg();
    ADC_Int = (int)(ADC_Val / 0.24);  //这个0.24为 3.3/14 得来的数,就是每一级的步长,然后采样电压值除以步长就是级数
    OLED_Show_Battery(x,y,ADC_Int);   //上面的级数直接在这里面使用,配合电池模型顺序即可。    
}

3. 显示函数

最后,将上述函数放在主循环中,不断采样电池电压并刷新电池模型的显示。

三、总结

通过上述步骤,我们可以在OLED显示屏上直观地显示设备的剩余电量。这种方法简单易行,适用于各种需要显示电池电量的嵌入式系统项目。需要注意的是,为了获得更稳定的电压读数,可能还需要进一步优化ADC的滤波算法。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号