• 【毕业设计】13-基于单片机的锂电池管理系统(原理图+源码+仿真工程+论文)


    【毕业设计】13-基于单片机的锂电池管理系统(原理图+源码+仿真工程+论文)

    任务书要求

    研究基本内容:
    1.了解在以单片机为基础上的动力锂电池管理系统的研究目的、意义及研究现状;
    2.利用单片机实动力电池电压、电流、温度检测的功能,并完成电路设计及仿真;
    3.设计一套在以单片机为基础上的动力锂电池管理系统,完成相应管理功能;
    拟解决的主要问题:
    1.确定在以单片机为基础上的动力锂电池管理系统的基本框架及组成。
    2.确定论文大致方向,围绕着安全、准确、绿色、节能、节耗、环保为中心,对以单片机为基础的动力锂电池管理系统查找资料文献和后期的论文进展做打算。
    3.通过大量查阅资料,了解以单片机为基础的动力锂电池管理系统的主要构成部分,并针对其结构系统的学习每个分支知识点。

    需要完成的事项

    原理图工程文件
    源码工程
    仿真工程
    论文低重复率
    需要资料请私信

    设计说明书

    摘要

    电池管理系统的研究与开发应用都涉及到传感器技术,电气控制技术以及智能化控制技术。智能化控制技术是一门综合性的技术性学科,在当代的研究控制领域中也变得越发广泛。在本次设计基于动力锂电池管理系统的设计是一款具前沿科学的锂电池管理控制系统。本系统设计并实现,需要实现系统的电压、电流、温度检测功能。
    需要对系统功能规划系统设计完成系统的硬件电路部分、软件编程部分、焊接组装部分、调试测试部分,最终完成本次论文的研究与设计。分别为系统研究背景分析了解当前电池管理方案了解,电池高效管理研发情况掌握当前最新的研发背景;根据功能对系统的方案进行分析确认系统的研发方案,并且对系统的元器件选择,确认传感器、主控芯片、电压、电流检测电路等;确认方案后对系统的硬件电路设计,对系统的各个子电路设计然后分配单片机资源;硬件电路设计然后对系统的软件部分编写,绘制系统程序设计总流程,程序进行模块化设计实现功能分区,再将各个功能驱动调用在主函数中;最后对系统的仿真调试调试,通过仿真软件验证测试,最终评估是否完成系统的设计预期功能。
    系统在设计过程中充分考虑到了系统的稳定性和系统的抗干扰能力,是一款合格的动力锂电池管理系统。

    设计框架架构

    在这里插入图片描述

    前言 1
    第一章 绪论 2
    第一节 系统概述 2
    第二节 研究背景及意义 2
    一、国内研究背景及意义 2
    二、国外研究现状 3
    第三节 本文的主要研究内容 4
    第四节 本章小结 5
    第二章 系统方案设计 6
    第一节 磷酸铁锂电池的工作特性 6
    一、磷酸铁锂电池的充放电特性 6
    二、锂电池组的均衡特性 7
    第二节 系统总方案设计 8
    第三节 系统测量算法 9
    一、测量算法介绍 9
    二、内阻与电动势的测量 10
    第四节 元器器件方案选择 12
    一、主控芯片选择 12
    二、温度传感器选择 13
    第五节 本章小结 13
    第三章 系统电路设计 14
    第一节 单片机最小系统电路设计 14
    一、单片机介绍 14
    二、单片机最小系统 16
    第二节 电流、电压检测电路设计 17
    第三节 人机交互电路设计 17
    第四节 温度检测电路设计 18
    第五节 电源电路设计 19
    第六节 显示器电路设计 20
    第七节 系统总电路设计 21
    第八节 本章小结 21
    第四章 系统软件设计 22
    第一节 开发工具介绍 22
    第一节 系统软件总流程设计 22
    一、主程序设计流程 22
    二、主函数程序 24
    第二节 电流、电压检测程序设计 25
    一、电流、电压检测程序设计流程 25
    二、电流、电压检测子程序 26
    第三节 温度检测程序设计 26
    一、温度检测设计流程 26
    二、温度检测子程序 27
    第四节 液晶显示程序设计 28
    一、液晶显示设计流程 28
    二、液晶显示子程序 29
    第五节 按键程序流程设计 30
    一、按键程序设计流程 30
    二、按键驱动子程序 30
    第六节 本章小结 31
    第五章 系统的仿真实现 32
    第一节 仿真软件介绍 32
    第二节 仿真电路搭建 33
    第三节 仿真测试 34
    一、系统功能测试 34
    二、阈值调节 35
    第四节 本章小结 39
    结 论 40
    致 谢 41
    参考文献 42
    附 录 44
    一、英文原文 44
    二、英文翻译 48
    三、工程图纸 53
    四、源代码 54

    设计说明书及设计文件

    在这里插入图片描述

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

    字数:27821。
    在这里插入图片描述

    源码展示

    #include "reg52.H"
    #include "stdio.h"
    #include "intrins.h"
    #define     u8  			unsigned char
    #define     u16   		unsigned int
    #define     uchar  			unsigned char
    #define     uint   		unsigned int
    uchar yushe_wendu=50;				//温度预设值
    uchar wenduchar=0;
    uint wendu; 								//温度值全局变量
    #define const_dpy_time_half  200  //数码管闪烁时间的半值
    #define const_dpy_time_all   400/数码管闪烁时间的全值 一定要比const_dpy_time_half 大
    sbit K1 = P3^5;//设置键
    sbit K2 = P3^6;//加键
    sbit K3 = P3^7;//减键
    unsigned char pre_key = 0x0f;//记录按键状态
    unsigned char key_value = 20;//获取到的按键值
    #define DB P0//液晶并行数据接口
    sbit  RS = P1^2;//液晶指令数据信号
    sbit  RW = P1^3;//液晶读写信号
    sbit  E  = P1^4;//液晶使能信号
    unsigned char   curr_menu = 0;//设置参数
    unsigned char ucWd=1;  //本程序的核心变量,窗口显示变量。类似于一级菜单的变量。代表显示不同的窗口。
    unsigned char ucWd1Update=0; //窗口1更新显示标志
    unsigned char ucWd2Update=0; //窗口2更新显示标志
    unsigned char ucPart=0;//本程序的核心变量,局部显示变量。类似于二级菜单的变量。代表显示不同的局部。
    unsigned char ucWd1Part1Update=0; //在窗口1中,局部1的更新显示标志
    unsigned char ucWd1Part2Update=0; //在窗口1中,局部2的更新显示标志
    unsigned char ucWd2Part1Update=0; //在窗口2中,局部1的更新显示标志
    unsigned char ucWd2Part2Update=0; //在窗口2中,局部2的更新显示标志
    unsigned char ucDpyTimeLock=0; //原子锁
    unsigned int  uiDpyTimeCnt=0;  //数码管的闪烁计时器,放在定时中断里不断累加
    unsigned char   i;//循环变量
    unsigned char   cnt_100ms = 0,cnt_500ms =0;//100ms计数
    unsigned char   time_100ms_flag = 0;//100ms标志
    unsigned char   blank_flg;//闪烁标志
    unsigned char   blank_tim_cnt;//闪烁计数
    sbit  CS=P1^5;
    sbit  CLK=P1^6;
    sbit  DIO=P1^7;
    unsigned int   ad_val_a;
    unsigned int   ad_val_b;
    unsigned int  v_alarm_tl=80;// 欠压报警器值
    unsigned int  i_alarm_th=130;// 过流报警值
    sbit  v_alm=P2^0;//欠压显示灯
    sbit  i_alm=P2^1;//过流显示灯
    void delay_ms(unsigned int cnt)//软件延时1MS
    {
    	unsigned int x;
    	for( ; cnt>0; cnt--)//通过for循环执行空指令延时
    	{
    		for(x=110; x>0; x--);
    	}
    }
    void delay_us(unsigned int cnt)//软件延时1us
    {
    	while(--cnt);
    }
    void time_init(void)//定时器初始化
    {
    	  TMOD |= 0x11;//time0 工作方式为1
    	  TH0 = 0xf8;//装载初值
    	  TL0 = 0x2f;//装载初值,为2ms(65535-63535)
          TR0 = 1;//开启定时器
    	  ET0 = 1;//打开中断
    	  EA=1;//打开总中断
    }
    /
    /***********************************************************************************************************
    DS18B20相关函数
    ***********************************************************************************************************/
    sbit DQ = P1^0;				 //ds18b20的数据引脚
    /*****延时子程序:该延时主要用于ds18b20延时*****/
    void Delay_DS18B20(int num)
    {
      while(num--) ;
    }
    /*****初始化DS18B20*****/
    void Init_DS18B20(void)
    {
      unsigned char x=0;
      DQ = 1;         //DQ复位
      Delay_DS18B20(8);    //稍做延时
      DQ = 0;         //单片机将DQ拉低
      Delay_DS18B20(80);   //精确延时,大于480us
      DQ = 1;         //拉高总线
      Delay_DS18B20(14);
      x = DQ;           //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
      Delay_DS18B20(20);
    }
    /*****读一个字节*****/
    unsigned char ReadOneChar(void)
    {
      unsigned char i=0;
      unsigned char dat = 0;
      for (i=8;i>0;i--)
      {
        DQ = 0;     // 给脉冲信号
        dat>>=1;
        DQ = 1;     // 给脉冲信号
        if(DQ)
        dat|=0x80;
        Delay_DS18B20(4);
      }
      return(dat);
    }
    /*****写一个字节*****/
    void WriteOneChar(unsigned char dat)
    {
      unsigned char i=0;
      for (i=8; i>0; i--)
      {
        DQ = 0;
        DQ = dat&0x01;
        Delay_DS18B20(5);
        DQ = 1;
        dat>>=1;
      }
    }
    /*****读取温度*****/
    unsigned int ReadTemperature(void)
    {
      unsigned char a=0;
      unsigned char b=0;
      unsigned int t=0;
      float tt=0;
      Init_DS18B20();
      WriteOneChar(0xCC);  //跳过读序号列号的操作
      WriteOneChar(0x44);  //启动温度转换
      Init_DS18B20();
      WriteOneChar(0xCC);  //跳过读序号列号的操作
      WriteOneChar(0xBE);  //读取温度寄存器
      a=ReadOneChar();     //读低8位
      b=ReadOneChar();    //读高8位
      t=b;
      t<<=8;
      t=t|a;
      tt=t*0.0625;
      t= tt*10+0.5;     //放大10倍输出并四舍五入
      return(t);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
  • 相关阅读:
    一整套美团面经(给对象超用心整理的)
    Map接口的实现类---HashMap
    四、RabbitMQ TTL、死信队列以及延迟队列
    流媒体协议,直播视频是如何呈现在我们面前的
    DETR纯代码分享(五)__init__.py(datasets)
    【C++】命名空间深度理解
    服务与发现
    docker 笔记11: Docker容器监控之CAdvisor+InfluxDB+Granfana
    【Pytorch报错】RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR
    认识HTTP协议---2
  • 原文地址:https://blog.csdn.net/weixin_42341109/article/details/127901327