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的滤波算法。
热门推荐
什么是钛白粉?钛白粉的特性、用途及来源解析
自恋型人格障碍怎么治疗
如何通过项目质量管理案例提升团队效率和项目成功率?
腰部去寒气最快的方法
浙江省质量科学研究院新添2项计量标准 填补省级相关领域技术空白
八段锦:传统养生功法在现代的传承与推广
尘肺病的症状与预防措施
如何选择正确的建站平台
细腻解构时代记忆,深入挖掘现实议题,韩国年代剧迎来新爆款
中国煤矿智能化行业发展目标明确且动因充足 市场已进入爆发式增长阶段
两队均三连败开局!足球报谈亚泰vs三镇:亚泰力争打好第一个主场
长春亚泰即将对战武汉三镇 对阵双方可谓难兄难弟
小心,别让预制菜单变身医院的挂号单!
花鼓戏也吊威亚?沉浸式幻境秀《新刘海砍樵》来了
左肾盂扩张是怎么回事
门萨智商测试:揭秘全球最出名的高智商人群俱乐部
门的种类有哪些?各自优缺点是什么?
澳门文化局新增10处世遗景点线上VR导览服务
物业和业主是什么关系民法典解读,构建和谐社区
女神节必看!蒸汽眼罩选购与使用指南来了
“手机辐射致癌”传言从未消停,新研究已证实
武夷山旅游攻略:探索世界遗产的绝美山水与文化风情
左耳鸣是什么原因引起的怎么解决好
右肺结节是什么意思?一文读懂定义、诊断与处理方法
电脑显示屏花屏竖条纹修复图解(详细教你修复电脑显示屏花屏竖条纹的方法)
奥运首金得主黄雨婷这一路:打好每一枪,走好每一步
黄雨婷破世界纪录夺冠 盛李豪0.1环险胜摘金
工程项目管理EAC如何计算
从“冰雪”到“研学”,西岭雪山打造文旅融合新典范
烤鲍鱼怎么烤 烤鲍鱼要烤多久