关于OELD屏显示电池电量的简易方法

2023-11-01

如何采集电源电压大家可能都熟悉,stm32的ADC+DMA能很方便迅速的帮我们采集到自己想要的电压数据。使用DMA进行数据搬运也能很好的减轻CPU的一部分压力。但是这样只是第一步——数据。

用户想看到的有时候并不是数据,他们想要更直观方便的看到自己设备的电量。这就要求我们能在显示屏上通过更直观的方法显示电量。(怎么样,下面这样够直观吧。)

这也是现在嵌入式设备中常用的方法,用一个小电池图标表示,不同的电量里面就是不同的填充度。这样可以很直观的看到设备的剩余电量。

其实说是电量,实际就是用采样来的电压除以总电压,得到一个百分比,然后根据这个百分比显示不同的电池模式,就可以实现不同电量的刷新。一开始看到有人用一个小框框,然后框框里面用一个百分数表示当前的电量百分比,但我觉得那种方法不是很好。还是电池的饱和度更直观一点。

关于stm32的ADC采集电源电压可以看我的上一篇博客,或者网上也有很多优秀的文章,这里暂且假设我们已经获取了电源电压了。而获取电源电压只是第一步,还需要对电源电压进行一下简单的均值滤波。这里我每次在DMA中断里面每30个数取一个平均,得到较为稳定的电源电压。

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就更新一次;
}
上面得到的实际上是ADC的16位原始数据,需要进一步处理成我们需要的实际电压值:

float ADC_cal_aveg(void)
{
	float temp = 0;
	temp = (float)(after_filter) * (3.3 / 4096);//计算电压
	return temp;
}
这样就完成了第一阶段。后面就是利用OLED的显示操作把数字显示成更直观的电池图标。

我的OLED屏是128*64分辨率的,我想在右上角显示一个电池小图标,用PCtoLCD2002取模软件进行图片取模。我选取电池规格为8*16的像素,(我不会告诉你上面这些点都是我一点点点上去的。。)

然后在这个电池里面进行填充,每填充一格就取一次模,所以一共可以取14个模型出来,也就是说电池可以14级电量显示。
这是取出来的部分模型:


3.3V的电压用14级显示出来,那么每3.3/14 = 0.24V就可以刷新一次电池。

所以我就想了可以这样处理,就是把采集来的电压,先除以0.24,得数的整数部分就是他的级数,

3.3V / 0.24 = 13  级,也就是满电量。

2.8V / 0.24 = 11  级

这个级数正好可以被显示函数使用,显示函数就是根据不同的电量级数显示不同的电池模型的。

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);   //上面的级数直接在这里面使用,配合电池模型顺序即可。	
}
最后一个函数为OLED的显示函数,可以在屏上显示自己取出的字模。

最后吧这个函数放在主函数的while循环里,不断采样电池电压,不断根据电压刷新电池模型的显示。目前的问题就是不知道这个方法获得的电压是不是稳定。可能还是需要更精确的ADC滤波算法。

到此,就可以在显示屏上面显示不同的电池图标了



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于OELD屏显示电池电量的简易方法 的相关文章

  • 在 MCU 内部 FLASH 中从一个固件跳转到另一个固件

    我目前正在开发针对 STM32F030C8 的引导加载程序固件应用程序 我在分散文件中指定引导加载程序应用程序将占用主内存位置 0x08000000 到 0x08002FFF 扇区 0 到扇区 2 我还编写了一个主固件应用程序 存储在0x0
  • 138-基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真+源程序

    资料编号 138 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 LED灯 蜂鸣器 电位器 制作一个基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真 2 通过DHT1
  • 133-基于stm32单片机停车场车位管理系统Proteus仿真+源程序

    资料编号 133 一 功能介绍 1 采用stm32单片机 4位数码管 独立按键 制作一个基于stm32单片机停车场车位管理系统Proteus仿真 2 通过按键进行模拟车辆进出 并且通过程序计算出当前的剩余车位数量 3 将剩余的车位数量显示到
  • rt-thread studio中新建5.0不能用

    文章目录 一 版本对比 二 文件和文件夹打斜杠 在使用RT Thread studio创建新工程5 0版本的时候 结果发现新建完成之后程序不能正常运行 但是创建4 10版本的时候却能运行 那肯定是新版本出现了BUG 一 版本对比 首先对比了
  • STM32F103概要

    The STM32F103x4 STM32F103x6 STM32F103xC STM32F103xD and STM32F103xE are a drop in replacement for STM32F103x8 B medium d
  • STM32 GPIO工作原理详解

    STM32 GPIO介绍 1 STM32引脚说明 GPIO是通用输入 输出端口的简称 是STM32可控制的引脚 GPIO的引脚与外部硬件设备连接 可实现与外部通讯 控制外部硬件或者采集外部硬件数据的功能 以STM32F103ZET6芯片为例
  • [屏驱相关]【SWM166-SPI-Y1.28C1测评】+ 有点惊艳的开箱

    耳闻华芯微特许久了 看到论坛得评测活动赶紧上了末班车 毕竟对有屏幕得板子也是很喜欢得 京东快递小哥客客气气 微笑着把快递给了我 好评 直接拆了包 在此之前没看过视频号 所以这个圆盘盘得模具还是有点惊喜的 正面照如下 开机有灯光秀 还有动画
  • SHT10温湿度传感器——STM32驱动

    实验效果 硬件外观 接线 3 3V供电 IIC通讯 代码获取 查看下方 END
  • [MM32硬件]搭建灵动微MM32G0001A6T的简易开发环境

    作为学习单片机的经典 自然是通过GPIO点亮LED 或者是响应按钮的外部中断例程 这我们看看SOP8封装的芯片MM32G0001A6T得引脚 除了VDD和GND固定外 我们可以使用PA14 PA1 PA13 PA15 PA2 PA3这六个G
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • STM32 暂停调试器时冻结外设

    当到达断点或用户暂停代码执行时 调试器可以停止 Cortex 中代码的执行 但是 当皮质停止在暂停状态下执行代码时 调试器是否会冻结其他外设 例如 DMA UART 和定时器 您只能保留时间 r 取决于外围设备 我在进入主函数时调用以下代码
  • 深入浅出《Delta-Sigma Data Converters》(可下载)

    在数字信号处理领域 数据转换器是实现模拟与数字世界之间无缝转换的关键组件 而在这个子领域中 Delta Sigma Data Converter s 一书以其全面和深入的内容 为工程师 学者甚至爱好者们提供了一个极其宝贵的资源 今天将为大家
  • CMSIS & STM32,如何开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 STM32 上使用 CMSIS 启动项目 网上一搜 没找到具体的教程 有些使用 SPL 开始项
  • STM32F4XX的12位ADC采集数值超过4096&右对齐模式设置失败

    文章目录 一 前言 二 问题1 数值超过4096 三 问题1的排错过程 四 问题2 右对齐模式设置失败 五 问题2的解决方法 5 1 将ADC ExternalTrigConv设置为0 5 2 使用ADC StructInit 函数 一 前
  • 核心耦合内存在 STM32F4xx 上可执行吗?

    尝试从 STM32F429s CCM 运行代码 但每当我命中 CCM 中的第一条指令时 我总是会遇到硬故障 并且 IBUSERR 标志被设置 该指令有效且一致 STM32F4xx 是否可能不允许从 CCM 执行 数据访问效果良好 alios
  • 通过JTAG恢复STM32 MCU磨掉的标记

    我有一块可能带有 STM32 MCU 的板 我想为该板制作定制固件 因为库存板有很多问题 不幸的是 电路板制造商很友善地磨掉了所有标记 有没有办法通过 jtag 获取设备 系列 ID 并将其交叉引用到型号 我能找到的一切都是关于获取芯片的唯
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C
  • STM32 上的位置无关代码 - 指针

    我已成功在 STM32 上构建并运行位置无关的代码 向量表和 GOT 已修补 一切正常 但我对这样的代码有问题 double myAdd double x return x 0 1 double ptrmyAdd double myAdd
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后

随机推荐

  • 对 React 状态管理的理解及方案对比

    1 React 状态 通信 React 为什么需要状态管理 React 特点 专注 view 层 专注 view 层 的特点决定了它不是一个全能框架 相比 angular 这种全能框架 React 功能较简单 单一 UI render da
  • MongoDB学习笔记番外篇:JDBC方式操作MongoDB示例

    1 pom xml中依赖包设置 在项目中引入MongoDB JDBC 驱动mongo java driver X X X jar
  • 2.1-梯度下降

    文章目录 一 调整学习率 1 1 自适应学习率 Adaptive Learning Rates 1 2 Adagrad 二 随机梯度下降 Stochastic Gradient Descent 三 特征缩放 Feature Scaling
  • js如何获取上个月第一天和最后一天

    js如何获取上个月第一天和最后一天 var nowdays new Date var year nowdays getFullYear var month nowdays getMonth if month 0 month 12 year
  • 刷脸支付免费领取保险全额赔付保安全

    现在账户升级后 每位用户都可以免费领取保险 此前未投保的可获得100万保额 已付费投保的则可提额至500万 上支付宝搜 账户安全险 完成升级 即可领到保单 如果账户被盗 不管是手机丢失 还是密码泄露 都能全额赔付 原本由用户支付的保费将由支
  • 解析域名的IP地址

    linux和windows环境下 nslookup windows的powershell环境下 resolve DnsName
  • 怎么用excel管理固定资产

    在当今的数字时代 我们已经习惯了使用各种电子工具来提高我们的生产力 其中 Excel无疑是一个强大的工具 它不仅可以帮助我们处理数据 还可以用来进行复杂的计算和分析 然而 你可能不知道的是 Excel也可以用来管理固定资产 这是一种非常有效
  • 【大唐杯备考】——5G系统勘察设计(学习笔记)

    前言 本期介绍5G系统勘察设计 目录 1 概述 1 1 5G网络预规划 1 1 1 5G建网需求确认 1 1 2 4G现网评估 1 1 3 站点规模估算 1 1 4 5G仿真评估 1 2 5G工程执行 1 2 1 站点勘察 1 2 2 5G
  • 无刷电机换相-六步换向-两两导通与三三导通

    六步换向两两导通和三三导通的区别2 一 三三导通的不常用 之前检索六步换向的方式都为无刷电机如何换向 也未有文献提到三三导通方式 上午检索三三导通方式 文献也极少 其应用多为BLDCM高频链驱动器 查看原因 三三导通可以提高绕组利用率 但容
  • 自动驾驶之入门目录【转】

    从零开始做自动驾驶定位 一 开篇 知乎 从零开始做自动驾驶定位 二 数据集 知乎 从零开始做自动驾驶定位 三 软件框架 知乎 从零开始做自动驾驶定位 四 前端里程计之初试 知乎 从零开始做自动驾驶定位 五 前端里程计之代码优化 知乎 从零开
  • STL-----模拟实现一级空间配置器

    众所周知 STL中有六大组件 容器 容器适配器 仿函数 迭代器 算法 空间配置器 在之前的学习中前面五种我们都已经接触过了 但是在学习其他组件的过程中 我们会发现一个东西隐藏在了一切组件的背后 它就是空间配置器 以STL的实现角度而言 空间
  • SSL证书格式转换

    JKS转PFX格式 keytool importkeystore srckeystore D server jks destkeystore D server pfx srcstoretype JKS deststoretype PKCS1
  • 怎么安装elementUI完整步骤

    安装elementUI完整步骤 安装命令 vue add element 安装过程如图选择 按照步骤一步步来就成功啦 安装成功后会多一个文件夹 src plugins element js element js import Vue fro
  • 数据结构-串(字符串)

    my string h ifndef MY STRING H define MY STRING H include
  • 常用哈希函数介绍

    转载自 常用哈希函数介绍 哈希函数介绍 什么是哈希 在记录的关键字与记录的存储地址之间建立的一种对应关系叫哈希函数 哈希函数就是一种映射 是从关键字到存储地址的映射 通常 包含哈希函数的算法的算法复杂度都假设为O 1 这就是为什么在哈希表中
  • Jmeter入门级使用,带cookies的get/post请求

    1 通过moco创建一个测试接口 a 编写json文件 description get请求cookies request uri get with cookies method get cookies login true response
  • 【Flink】HttpClient 报错 I/O SocketException caught when processing request to Connection Reset

    文章目录 1 场景1 1 1 概述 N 参考 1 场景1 1 1 概述 在flink中大概写了这样一个程序 如下 private CloseableHttpClient closeableHttpClient Before public v
  • 用VScode替换CCS(eclipse)来编译程序

    Vscode 替换CCS 原理说明 其实本质上CCS就是一个套壳的eclipse 它使用eclipse当做编辑器 真正的编译器是gmake 所以只需要在vscode中去跑gamke理论上就可以进行代码的编译 找到ccs目录下的gmake目录
  • stm32呼吸灯程序_嵌入式开发基础-STM32 使用仿真器下载程序

    前言 上一篇文章介绍了STM32芯片程序的开发工具Keil5 以及如何安装Keil5 现在我们就可以开始编程了吗 是的 我们可以开始编程了 但是程序编写完成 并且成功编译后 如何让程序在STM32指南者开发板上运行 我们需要使用仿真器将程序
  • 关于OELD屏显示电池电量的简易方法

    如何采集电源电压大家可能都熟悉 stm32的ADC DMA能很方便迅速的帮我们采集到自己想要的电压数据 使用DMA进行数据搬运也能很好的减轻CPU的一部分压力 但是这样只是第一步 数据 用户想看到的有时候并不是数据 他们想要更直观方便的看到