【毕业设计】18-基于单片机的数字直流电源设计(源代码工程+仿真工程+答辩论文+答辩PPT)


typora-root-url: ./

【毕业设计】18-基于单片机的数字直流电源设计(源代码工程+仿真工程+答辩论文+答辩PPT)

任务书

一、主要研究内容:

设计一种满足小型电子设备供电需要的开关稳压电源。电源设计的主要指标是:输入电压为AC220V,输入频率为50HZ,输入电压范围为AC165V~265V,输出电压为直流0~10V可调,输出最大电流为150mA,输出最大功率为2.25W。

二、方法和要求:

1、阅读大量稳压直流电源系统的相关文献资料,掌握其技术的原理和电路的结构,理解程序实现的核心思想;

2、积累相关资料确定论文的主体内容,重点进行研究;

3、每一周进行一次论文进度的汇报,指导老师解答遇到的问题;

把握好论文的进度,按照学校的要求完成各个阶段目标。
资料链接
仿真模型工程文件
仿真截图
答辩论文低重复率文档
英文文献及翻译
答辩PPT

设计说明书

摘要

本次系统在设计上首先对系统进行研究了解直流电源当前输出精度不够高,这个问题来设计数字直流电源,通过分析本次系统所需要实现的功能确定系统设计方案。然后对系统的硬件、软件设计,最后通过仿真软件来来测试整个系统的功能是否满足设计要求,本次设计系统考虑到多方面的原因,包括抗干扰能力,输出精度以及输出范围等因素,并且考虑到了整个系统的制作成本,保证系统性价比高,稳定性强。

设计框架架构

前 言… 1

第一章 绪论… 2

第一节 研究背景… 2

第二节 研究意义… 2

第三节 研究现状… 3

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

第二章 直流数字电源系统方案分析… 5

第一节 系统设计功能分析… 5

第二节 直流电源系统方案比较与选择… 5

一、传统的直流稳压电源… 5

二、数控直流稳压电源… 6

三、方案选择… 7

第三节 系统总设计方案及系统结构… 7

一、系统设计方案… 7

二、数字直流电源结构… 8

第四节 主要元器件介绍… 9

一、ADC0832模数转换器… 9

二、TCL5615数模转换器… 9

第五节 抗干扰设计… 10

本章小结… 11

第三章 直流数字电源硬件设计… 13

第一节 单片机最小系统设计… 13

第二节 辅助电源电路设计… 14

第三节 ADC0832电路设计… 16

第四节 TLC5615电路设计… 16

第五节 放大电路设计… 17

第六节 显示电路设计… 18

第七节 总电路设计… 19

本章小结… 20

第四章 直流数字电源软件设计… 21

第一节 开发工具Keil软件介绍… 21

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

第三节 ADC0832软件设计流程… 22

第四节 TLC5615软件设计流程… 24

第五节 显示电路软件设计流程… 25

本章小结… 26

第五章 直流数字电源仿真… 27

第一节 仿真软件Proteus介绍… 27

第二节 系统调试… 28

第三节 系统功能测试… 29

本章小结… 33

总结与展望… 34

致 谢… 35

参考文献… 36

附 录… 38

一、英文原文… 38

二、英文翻译… 40

三、总电路图… 42

四、源代码… 43

设计说明书及设计文件

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

源码展示

#include <reg52.h>
#include <intrins.h>
#include "timer.h"
#include "global.h"
#define delay4us() {_nop_();_nop_();_nop_();_nop_();}
#define vout 1
#define vset 0
#define vmode
sbit RS = P2^0;
sbit RW = P2^1;
sbit EN  = P2^2;
sbit DACSCLK = P2^3;
sbit DACCS = P2^4;
sbit DACDIN  = P2^5;
sbit CS  = P1^0;
sbit CLK = P1^1;
sbit DIO = P1^2;
sbit KEY1 = P3^6;
sbit KEY2 = P3^7;
#ifdef vmode
uchar Display_Buffer[] = "00.00V           ";
uchar code Line1[] = "Current Voltage:";
#else
uchar Display_Buffer[] = "                ";
uchar code Line1[]     = "Current Speed:  ";
#endif
extern uint speed;
void Delayms(uint ms)
{
 	uchar i;
	while(ms--)
	{
	 	for(i=0;i<120;i++);
	}
}
uchar Busy_Check()
{
 	uchar LCD_Status;
	RS = 0;
	RW = 1;
	EN = 1;
	Delayms(1);
   	LCD_Status = P0;
	EN = 0;
	return LCD_Status;
}
void Write_LCD_Command(uchar cmd)
{
 	while((Busy_Check()&0x80)==0x80);
	RS = 0;
	RW = 0;
	EN = 0;
	P0 = cmd;
	EN = 1;
	Delayms(1);
	EN = 0;
}
void Write_LCD_Data(uchar dat)
{
 	while((Busy_Check()&0x80)==0x80);
	RS = 1;
	RW = 0;
	EN = 0;
	P0 = dat;
	EN = 1;
	Delayms(1);
	EN = 0;
}
void Initialize_LCD()
{
 	Write_LCD_Command(0x38);
	Delayms(1);	
	Write_LCD_Command(0x01);
	Delayms(1);	
	Write_LCD_Command(0x06);
	Delayms(1);	
	Write_LCD_Command(0x0c);
	Delayms(1);	
}
void ShowString(uchar x,uchar y,uchar *str)
{
 	uchar i = 0;
	if(y == 0)
		Write_LCD_Command(0x80 | x);
	if(y == 1)
		Write_LCD_Command(0xc0 | x);
	for(i=0;i<16;i++)
	{
	 	Write_LCD_Data(str[i]);	
	}
}
uchar Get_AD_Result(uchar ch)
{
 	uchar i,dat1=0,dat2=0;
	CS  = 0;
	CLK = 0;
	DIO = 1; _nop_(); _nop_();
	CLK = 1; _nop_(); _nop_();
	CLK = 0;
	DIO = 1; _nop_(); _nop_();
	CLK = 1; _nop_(); _nop_();
	CLK = 0;
	if(ch)
	DIO = 1;
	else
	DIO = 0;
	 _nop_(); _nop_();
	CLK = 1; _nop_(); _nop_();
	CLK = 0;
	DIO = 1; _nop_(); _nop_();
	for(i=0;i<8;i++)
	{
	 	CLK = 1; _nop_(); _nop_();
		CLK = 0; _nop_(); _nop_();
		if(DIO) dat1 |=0x80>>i;	
	}
	for(i=0;i<8;i++)
	{
		if(DIO) dat2 |=0x01<<i;
		CLK = 1; _nop_(); _nop_();
		CLK = 0; _nop_(); _nop_();
	}	 
	CS = 1;	
	if (dat1 == dat2)
		return dat1;
	else
		return 0x00;
}
void Set_DAC(uint dacvalue)
{
 	uchar i;
	uint dat;
	dat = dacvalue;
	dat &= 0x03ff;
	DACCS  = 0;
	DACSCLK = 0;
	for(i=0;i<12;i++)
	{
	 	if(dat & 0x0200)
			DACDIN = 1;
		else
			DACDIN = 0;
		DACSCLK = 1;
		dat <<= 1;
		DACSCLK = 0;
	}
	DACCS = 1;
}
void main()
{
 	uchar B;
	uint d,v;
	Initialize_LCD();
	InitTimer();
	Delayms(10);
	v = 0x0100;
	StartTimer(0);
	B = 0;
	while(1)
	{
	 	d = Get_AD_Result(vset);
		d &=0x00FF;	 
		Set_DAC(d*4);
		d = Get_AD_Result(vout);
		d &=0x00FF;	
		d = d*1000.0/255;
		#ifdef vmode
		if(d/1000)
		Display_Buffer[0]=d/1000+'0';
		else
		Display_Buffer[0]=' ';
		Display_Buffer[1]=d/100%10+'0';
		Display_Buffer[3]=d/10%10+'0';
		Display_Buffer[4]=d%10+'0';	 
		#else
		if(speed/1000)
		Display_Buffer[0]=speed/1000+'0';
		else
		Display_Buffer[0]=' ';
		Display_Buffer[1]=speed/100%10+'0';
		Display_Buffer[2]=speed/10%10+'0';
		Display_Buffer[3]=speed%10+'0';
		#endif
		ShowString(0,0,Line1);
		ShowString(0,1,Display_Buffer);	 
	}
}



猜你喜欢

转载自blog.csdn.net/qq_22592979/article/details/128108668