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的滤波算法。
热门推荐
中国白酒的分类
嘎嘣脆的贡菜就是莴笋?毛豆竟是“年轻的”黄豆?
民法典中买卖合同的客体是什么
83《射雕》黄蓉选角内幕:3000佳丽火爆比拼,翁美玲凭啥大杀四方
知足常乐:修炼一颗知足之心的秘诀
巢湖景点推荐:游玩指南与行程规划
合同约定"仅在收到第三方的相关款项后才向对方付款"有用吗?
宝宝各阶段喝奶量大揭秘!妈妈们必看!
冷冻胚胎:技术、优势与成功率全解析
事关未成年人安全用网,这一重磅报告发布!
软件测试如何判断结束
如何保证缓存与数据库的双写一致性?
一学就会!炒面的家常做法。
园林造景中八大常用观景置石
小叶赤楠的养殖管理方法和注意事项
员工试用期转正流程及权益保护指南
84消毒液能否消灭真菌和螨虫?健康使用指南
研究证实:健康饮食可降低类风湿关节炎患者死亡风险
怀孕后劳动合同到期了怎么办
奇门遁甲符号体系全解析:认知世界、预测未来的智慧钥匙
泰拉瑞亚史莱姆雨攻略:触发条件与战斗技巧详解
上大学以后才知道,高考500分以下的二本学生,不适合学这5个专业
国际视野里的唐代丝路文物
债务人死亡后,谁来承担其债务?
控制你能控制的,接受你不能控制的
残荷鹰鹭图:吕纪的传世之作
高考地理考点解读:深度剖析大气热力环流与风的形成
C语言链表操作详解:初始化、插入、头插、尾插与逆转
用智能机器人连接AI与社会,陪伴人类并提供家务、医疗和养老援助(上)
酒后查血,影响血脂值吗