1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【毕业设计】13-基于单片机的锂电池管理系统(原理图+源码+仿真工程+论文)

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

时间:2023-05-19 22:38:34

相关推荐

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

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

文章目录

【毕业设计】13-基于单片机的锂电池管理系统(原理图+源码+仿真工程+答辩论文+答辩PPT)资料下载链接任务书设计说明书摘要设计框架架构设计说明书及设计文件源码展示

资料下载链接

资料链接

包含此题目毕业设计全套资料:

原理图工程文件

源码工程

仿真工程

论文低重复率,字数:27821。

任务书

研究基本内容:

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"#defineu8 unsigned char#defineu16 unsigned int#defineuchar unsigned char#defineuint unsigned intuchar 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 工作方式为1TH0 = 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); //精确延时,大于480usDQ = 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);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。