【毕业设计】54-电动汽车电池充电管理系统设计(原理图+仿真工程+源代码工程+答辩论文+答辩PPT+任务书)



【毕业设计】54-电动汽车电池充电管理系统设计(原理图+仿真工程+源代码工程+答辩论文+答辩PPT+任务书)

资料要求

资料包含:毕业设计全套资料(精品)
原理图工程文件
仿真模型工程文件
源代码工程文件
仿真截图
答辩论文低重复率文档,25010字
英文文献及翻译
任务书
答辩PPT
详情请私信!

任务书

主要研究内容:

系统采用单片机(型号需要自己选定)完成电动汽车的电池管理系统,主要针对电池的充放电进行管理,具体包括电池电压、电流、温度等基本量的监测与显示。

要求:

1、确定系统总体设计方案,给出设计方案的结构框图;

2、利用仿真软件(如:protues)完成仿真电路的具体设计;

3、利用编程软件(如:Keil5 等)完成编程;

4、对所设计的系统进行仿真调试,系统所需的设计功能。

设计说明书

摘要

科学技术的发展伴随着能源的稀缺,新能源电动汽车开始爆发式增长。电动汽车电池管理系统成为了目前研究的重点方向。电源管理系统是一项综合性多学科应用,在当前社会发展中必不可少的应用与研发方向。本系统针对目前热门研究方向,针对电动汽车电池充电管理系统设计一款可以实现电池电压、电流、温度检测功能。

电动汽车电池充电管理系统由硬件、嵌入式软件两个部分组成。电池充电管理系统硬件由单片机、测温传感器、模数转换器、放大器、显示器、按键组成。在研究系统前充分掌握当前系统的研究背景,了解高效的充放电管理系统。根据对系统方案分析、元器件选择、确认所选择的元器件、主控制器等。使用EDA软件绘制硬件原理图,将功能按照模块化分配实现电路子系统设计,方便后期调试。使用Keil软件编写嵌入式软件,绘制系统程序框架,按照功能编写驱动代码。最后使用仿真软件Proteus搭建管理系统仿真电路,对设计电路实现硬件调试,仿真测试各个电路电位电压;软件驱动调试;软硬件联调;在线调试最后测试电池电压、电流、温度检测功能,评估是否完成预期功能。

电动汽车电池充电管理系统在设计上考虑到了实际应用环境、系统运行条件以及系统的抗干扰能力,考虑市场环境最后完成设计。

设计框架架构

前 言… 1

第一章 绪论… 2

第一节 概述… 2

第二节 研究背景及意义… 3

一、国内研究背景及意义… 3

二、国外研究现状… 3

第三节 本文的主要研究内容… 4

第四节 本章小节… 5

第二章 方案设计… 6

第一节 磷酸铁锂电池的工作特性… 6

一、磷酸铁锂电池的充放电特性… 6

二、锂电池组的均衡特性… 7

第二节 系统测量算法… 8

第三节 总方案设计… 9

一、显示单元方案选择… 9

二、温度检测方案选择… 10

二、总方案功能框架确认… 11

第四节 本章小节… 11

第三章 电池管理系统电路设计… 12

第一节 单片机最小系统电路设计… 12

一、单片机介绍… 12

二、单片机最小系统… 13

第二节 电流、电压检测电路设计… 14

第三节 人机交互电路设计… 15

第四节 温度检测电路设计… 15

第五节 电源电路设计… 16

第六节 显示器电路设计… 17

第七节 系统总电路设计… 18

第八节 本章小结… 18

第四章 电池管理系统软件设计… 19

第一节 开发工具介绍… 19

第二节 系统软件总流程设计… 19

第三节 电流、电压检测程序设计… 21

第四节 温度检测程序设计… 21

第五节 液晶显示程序设计… 22

第六节 按键程序流程设计… 23

第七节 本章小结… 24

第五章 电池管理系统仿真实现… 25

第一节 仿真软件介绍… 25

第二节 仿真电路搭建… 26

第三节 仿真测试… 27

一、系统功能测试… 27

二、阈值调节… 28

第四节 本章小结… 32

结 论… 33

致 谢… 34

参考文献… 35

附 录… 37

一、英文原文… 37

二、英文翻译… 41

三、工程图纸… 45

四、源代码… 46

设计说明书及设计文件

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

源码展示

#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);
}
//=====================================================================================
//=====================================================================================
//=====================================================================================


  • 36
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cqtianxingkeji

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值