毕业设计 stm32便携用电功率统计系统 -物联网 嵌入式 单片机

news2024/12/23 4:29:41

文章目录

  • 0 前言
  • 1 简介
  • 2 主要器件
  • 3 实现效果
  • 4 设计原理
    • 4.1 降压电路
    • 4.2 接口部分
    • 4.3 主控
    • 4.4 OLED模块
  • 5 部分核心代码
  • 5 最后


0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 基于stm32的便携用电功率统计系统

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

1 简介

使用单片机设计一款功率测试仪,外观不限,要求可显示电压、电流、功率,且输入最大功率100W以上。

2 主要器件

  • INA220电源
  • stm32g030f6p6主控芯片
  • OLED屏幕模块

3 实现效果

器件构造
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

检测手机充电器的功率、电流、电压大小
在这里插入图片描述

在这里插入图片描述

图为60W充电器,可见检测精确率还是较高的。

4 设计原理

主要框架图
在这里插入图片描述

4.1 降压电路

降压部分为MCU、INA220、OLED屏等提供3.3V电源,由于整个系统消耗的电流最大不会超过60mA,低负载下普通的DC-DC变换器效率较低,所以最好选择带burst、skip、pfm等轻载节能功能的芯片,这里用的是立创商城买的RY9320AT6,上/下管内阻100/50mΩ,频率500k,正常工作是PSM模式,轻载进入PFM模式。而且一片只要1块5,性价比超高。实测5V供电时只需要从VUBS获取9mA电流,而在大部分快充的9-12V区间只需要4mA左右电流,大大降低了测量误差。

4.2 接口部分

A口使用5PIN定制接口,用于测试小米、OPPO的快充以及QC等使用普通A口的快充,Type-C接口主要用于测试PD快充。这种A口实际上是把USB3.0的GND脚复用成了私有协议的识别脚,并且VBUS和GND加宽。理论上直接用USB3.0接口也能识别,但USB3.0接口过不了太大电流有风险。母座立创商城就有,公头立创商城的一直没货,从淘宝买的。Type-C直接立创商城找个大电流的就行,注意不要用只有6PIN的那种“大电流”,因为少一对VBUS和GND。

4.3 主控

主控使用stm32g030f6p6,体积小,性能较高。大概是目前stm32里最便宜的一款了,淘宝只要2-3块,凑个红包可能就一两块。g030系列可能是因为使用了更先进工艺,一块晶圆能切出更多的die,性能更强的同时甚至比f030系列还便宜。

主控原理图
  在这里插入图片描述

4.4 OLED模块

原理图
在这里插入图片描述

5 部分核心代码

IDE使用STM32CubeIDE,固件库使用HAL库,初始化代码使用STM32CubeMX生成。

多级菜单

key_table table[30]=
{
    {0,0,0,1,(*fun0)}, //第0层,显示主界面

    {1,4,2,5,(*fun1)}, //第一层,显示【亮度设置】、快充、数据记录、返回
    {2,1,3,6,(*fun2)}, //第一层,显示亮度设置、【快充】、数据记录、返回
    {3,2,4,9,(*fun3)}, //第一层,显示亮度设置、快充、【数据记录】、返回
    {4,3,1,0,(*fun4)}, //第一层,显示亮度设置、快充、数据记录、【返回】

    {5,5,5,1,(*fun5)}, //第二层,亮度设置

    {6,8,7,10,(*fun6)},//第二层,快充层下显示【QC 2.0】、QC3.0、返回
    {7,6,8,11,(*fun7)}, //第二层,快充层下显示QC 2.0、【QC3.0】、返回
    {8,7,6,2,(*fun8)},  //第二层,快充层下显示QC 2.0 、QC3.0、【返回】

    {9,9,9,3,(*fun9)}, //第二层,数据记录

    {10,10,10,6,(*fun10)},   //第三层,快充QC 2.0
    {11,11,11,7,(*fun11)},//第三层,快充QC 3.0

主函数循环

 while (1)
  {
      OLED_Refresh();//刷新显存
      if(time_1s_ok)
      {
          time_1s_ok=0;
          voltage     = INA220_GetVoltage();
          current     = INA220_GetCurrent();
          power       = INA220_GetPower();
          energy_temp = energy_temp + power*0.00027777;
          energy      = energy_temp;

          if(power!=0&&mem_addr_base<0xE00)
          {
              HAL_I2C_Mem_Write(&hi2c1,0xA0,mem_addr_base,I2C_MEMADD_SIZE_16BIT,(u8*)ina220_data,4,100);
              mem_addr_base=mem_addr_base+4;
          }
      }
      /*******************find index****************************/
      if((key_enter==1)||(key_up==1)||(key_down==1))
      {
          if(key_up==1)
          {
              func_index=table[func_index].up;    //up
              key_up=0;
          }
          if(key_down==1)
          {
              func_index=table[func_index].down;    //down
              key_down=0;
          }
          if(key_enter==1)
          {
              OLED_Clear();
              func_index=table[func_index].enter;    //enter
              key_enter=0;
          }

      }
      if(key_back==1)
      {
          key_back=0;
          if(oled_on==1)
              oled_on=0;
          else
              oled_on=1;
      }
      current_operation_index=table[func_index].current_operation;
      (*current_operation_index)();//执行当前操作函数
      HAL_Delay(10);
  }
}

OLED屏使用硬件I2C驱动,直接调用HAL库中的HAL_I2C_Mem_Write()即可实现大量显存的连续写入。 该函数原本是用于读写eeprom的,但其它需要写入两个地址的应用同样可以使用。

//刷新显存
void OLED_Refresh(void)
{
    u8 i;
    for(i=0;i<8;i++)
    {
    OLED_WR_Byte(0xb0+i,OLED_CMD); //设置行起始地址
    OLED_WR_Byte(0x00,OLED_CMD);   //设置低列起始地址
    OLED_WR_Byte(0x10,OLED_CMD);   //设置高列起始地址
    HAL_I2C_Mem_Write(&hi2c2,OLED_ADDRESS,0x40,I2C_MEMADD_SIZE_8BIT,&OLED_GRAM[i][0],128,100);
    //写入显存
    }
}

INA220的读写由于也要写入两个地址,所以同样可以直接使用HAL_I2C_Mem_R/W()函数读写,这样就不用另外花时间去实现。 但由于INA220中的寄存器是16位的,该函数只能读写u8,所以要手动把两个u8合成一个u16。

//INA220初始化
void INA220_Init(void)
{
u8 CFG[2] = {0x27,0xff}; //配置寄存器0x21D7
u8 CAL[2] = {0x20,0x00}; //校准寄存器0x5000,1ma/bit

HAL_I2C_Mem_Write(&hi2c1,INA220_ADDR,CFG_REG,I2C_MEMADD_SIZE_8BIT,&CFG[0],2,100);//设置配置寄存器
HAL_I2C_Mem_Write(&hi2c1,INA220_ADDR,CAL_REG,I2C_MEMADD_SIZE_8BIT,&CAL[0],2,100);//设置校准寄存器
}

5 最后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小黑被劝退了,生活学习依然继续的leetcode之旅:572. 另一棵树的子树

小黑代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def isSubtree(self, root: Optional[TreeNode],…

PyTorch~cpp_extension

还是pytorch哈~~ 结合 Python 与 C 各自的优点,在 PyTorch 中加入 C / CUDA的扩展,详细解释C/CUDA 算子实现和调用全流程 代码来源:MMCV, PyTorch。 https://github.com/open-mmlab/mmcv https://github.com/pytorch/pytorch 注&#xff1a…

python 编程 函数的返回值

作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.函数 1.函数的返回值介绍 2.函数的返回值定义 例子: 3.函…

【图像去噪】均值+中值滤波图像去噪(含PNSR)【含GUI Matlab源码 372期】

⛄一、图像去噪及滤波简介 1 图像去噪 1.1 图像噪声定义 噪声是干扰图像视觉效果的重要因素,图像去噪是指减少图像中噪声的过程。噪声分类有三种:加性噪声,乘性噪声和量化噪声。我们用f(x,y)表示图像,g(x,y&#xff0…

面试题:进程 线程 协程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位 通俗的讲:进程可以理解为我们在电脑上正在运行的一个个应用,例如:QQ,微信,LOL…

数据结构---寻找一个整数所有数字全排列的下一个数

寻找一个整数所有数字全排列的下一个数储备知识第一步第二步第三步JAVA实现给出一个正整数,找出这个正整数所有数字全排列的下一个数。说通俗点就是在一个整数所包含数字的全部组合中,找到一个大于且仅大于原数的新整数。 例子: 如果输入123…

【翻译】GPT-3是如何工作的

前排提示 这是我补充的内容,仅代表个人观点,和作者本人无关。 主要是意译我的补充,想看原文表达的拖到最底下有链接。 原文翻译 在科技界我们可以看到很多关于GPT-3的新闻。大型语言模型(比如GPT-3)已经展示出让我们惊…

[附源码]Python计算机毕业设计Django现代诗歌交流平台

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

一篇ThreadLocal走天下

尺有所短,寸有所长;不忘初心,方得始终。 请关注公众号:星河之码 在面试的时候经常会有人文ThreadLocal是啥,首先明确的一点是:虽然ThreadLocal提供了一种解决多线程环境下成员变量的问题,但是Th…

SSM框架学习记录-SpringMVC_day01

1.SpringMVC概述 SpringMVC功能与优点 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 SpringMVC技术与Servlet技术功能一样(对Servlet进行了封装),都属于Web层开发技术 SpringMVC的主要的作用就是用来接收前端发过来的请求和数据然后经过处理并将处理的结果…

自定义注解实现参数校验

个人博客地址: http://xiaohe-blog.top/ 文章目录1. 为什么要进行参数校验2. 如何实现参数校验3. 注解实现参数校验4. 自定义注解实现参数校验1. 为什么要进行参数校验 在后端进行工作时,需要接收前端传来的数据去数据库查询,但是如果有些数…

目前智慧工厂建设面临的急需解决的问题有哪些?

当前国内诸多制造业企业面临着巨大的转型压力。一方面,劳动力成本迅速攀升、产能过剩、竞争激烈、客户个性化需求日益增长等因素,迫使制造企业从低成本竞争策略转向建立差异化竞争优势。具体在工厂层面,制造企业面临着招工难,以及…

去应聘测试管理职位时遇到的面试题

前言: 在测试管理的路上,少不了招聘测试管理的测试人员,或自己去应聘测试管理人员的时候,因此梳理了关于测试管理职位的面试题: 1、请你列举你曾经担任的测试工作职位? 2、你认为项目测试经理的工作职责和…

简单个人网页设计作业 静态HTML个人博客主页 DW个人网站模板下载 大学生简单个人网页作品代码 个人网页制作 学生个人网页设计作业

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

【印刷字符识别】OCR键盘数字+字母识别【含Matlab源码 807期】

⛄一、OCR简介 1 什么是OCR技术? OCR英文全称是Optical Character Recognition,中文叫做光学字符识别。它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。文字识别是计算机视觉…

Java项目:SSM服装出租服装店租赁服装管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目为后台管理系统; 管理员角色包含以下功能: 管理员登录,用户管理,公告管理,服装类型管理,服装信息管理,客户信息管…

计算机毕设Python+Vue新生报到管理(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Java项目:SSM在线甜品商城平台

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 管理员角色包含以下功能: 管理员登录,套餐管理,甜品管理,预定管理等功能。 用户角色包含以下功能: 用户登录与注册,查看…

Activiti7-流程变量

流程变量 流程变量的作用域 设置流程定义的key为myEvection2 使用流程变量 定义好流程变量后&#xff0c;就可以在整个流程定义中使用这些流程变量了。例如可以在某些任务属性如 assignee上使用${assignee}&#xff0c;或者在某些连线上使用${day<3}。 Activiti中可以使用…

C语言初阶_初识C语言(2)

我尝试用这博客记录下我所热爱 ​我只不过是个无名小辈 ​无休止地更新 ​在名利中苦苦挣扎 ​世事变幻莫测 ​就算每一次早早被淘汰 ​在失败边缘挣扎 我的数据结构与算法系列开始了&#xff0c;有一定C语言基础的同学可以去学习&#xff01; 数据结构与算法_时间复杂度 有…