【毕业设计】2-基于单片机控制的直流电机调速系统设计(原理图+仿真+答辩论文+答辩PPT)

【毕业设计】2-基于单片机控制的直流电机调速系统设计(原理图+仿真+答辩论文+答辩PPT)

文章目录

  • 【毕业设计】2-基于单片机控制的直流电机调速系统设计(原理图+仿真+答辩论文+答辩PPT)
    • 资料下载链接
    • 任务书
    • 设计说明书
      • 摘要
      • 设计框架架构
      • 设计说明书及设计文件
      • 源码展示

资料下载链接

资料链接
包含此题目毕业设计全套资料:
原理图工程
仿真工程
源代码工程
答辩论文,配套设计参考设计说明书,字数:18077
答辩PPT

任务书

主要研究内容:
1.单片机;2.直流电机,液晶显示器LCD。
设计思路:
查阅相关文献资料学习单片机、直流电机,液晶显示器LCD,编程实现单片机控制的直流电机调速系统设计功能,LCD显示速度,模式等。
方法和要求:
1.查阅相关文献资料学习单片机、直流电机,液晶显示器LCD;
2.学习Keil软件,用汇编语言或者C语言编程实现单片机控制的直流电机调速系统设计功能;
3.学习Proteus软件,进行仿真或实物实现单片机控制的直流电机调速系统设计功能。
4.撰写毕业论文。

设计说明书

摘要

基于单片机控制直流电机调速系统设计的研究意义在于可以通过按键对直流电机进行有效的控制。通过单片机定时器实现PWM。通过按键来调节PWM占空比实现对直流电机调速。在工业的使用环境中,在许多复杂噪音多的环境中可以对直流电机无干扰的进行控制。所以对单片机控制直流电机调速系统研究意义深远。
基于单片机的直流电机调速系统,主要由直流电机及驱动模块;按键模块;LCD1602显示模块;单片机最小系统这几部分组成。通过按键来控制直流电机的转速。在本次设计中,一共分为10个挡位。通过按键来控制PWM占空比以实现对直流电机的调速。LCD1602则显示当前速度挡位信息。本论文从一开始构思系统实现的功能,然后设计硬件电路对元器件选型,设计电路、对单片机编写程序,程序需要不停的调试,在调试过程中寻找最佳的控制点,最后利用PROTEUS软件仿真实现直流电机调速的功能,通过软件自带的模拟示波器显示占空比波形。
在最后也对整个系统做了详细的测试记录,在不同的工作环境中的工作情况,通过观察模拟示波器的占空比方波观察是否已达到此系统的设计要求。最后根据参数来对系统进行改进。最后达到自己想要的设计成果。

设计框架架构

前 言 1
第一章 绪论 2
第一节 研究背景 2
第二节 研究意义 2
第三节 研究现状 3
第四节 本文的主要研究内容 4
第二章 基于单片机的直流调速系统方案 5
第一节 元器件的选择 5
一、单片机的选择 5
二、显示器选择 5
三、电机调速方式选择 6
第二节 系统结构总框图 6
第三节 本章小结 7
第三章 系统硬件电路设计 8
第一节 LCD1602显示电路设计 8
第二节 单片机最小系统模块电路 9
一、89C52单片机介绍 9
二、复位电路设计 9
四、晶振电路设计 10
三、单片机最小系统设计 11
第三节 按键电路设计 11
第四节 直流电机驱动电路设计 12
第五节 电源电路设计 13
第六节 直流电机调速系统总电路设计 13
第七节 本章小结 14
第四章 基于单片机的直流调速系统的软件设计 15
第一节 Keil软件介绍 15
第二节 基于单片机的直流调速系统软件总设计 15
第三节 PWM软件设计 16
第四节 LCD1602显示模块软件设计 18
第五节 按键模块软件设计 19
第六节 本章小结 21
第五章 基于单片机的直流调速系统的测试结果分析 22
第一节 Proteus软件介绍 22
第二节 仿真与验证 23
一、仿真总电路设计 23
二、仿真结果 24
三、系统仿真测试及总结 27
第三节 本章小结 28
总 结 30
致 谢 31
参考文献 32
附 录 34
一、英文原文 34
二、英文翻译 36
三、源代码 38

设计说明书及设计文件

【毕业设计】2-基于单片机控制的直流电机调速系统设计(原理图+仿真+答辩论文+答辩PPT)_第1张图片
【毕业设计】2-基于单片机控制的直流电机调速系统设计(原理图+仿真+答辩论文+答辩PPT)_第2张图片【毕业设计】2-基于单片机控制的直流电机调速系统设计(原理图+仿真+答辩论文+答辩PPT)_第3张图片

字数:18077【毕业设计】2-基于单片机控制的直流电机调速系统设计(原理图+仿真+答辩论文+答辩PPT)_第4张图片

源码展示

#include
#include			 //包含头文件
#define LCD1602 P0
#define uchar unsigned char
#define uint unsigned int		 //宏定义

sbit dj=P1^0;//电机控制端接口
sbit SN=P1^1;//使能继电器动作
//按键接口/
sbit key1=P3^5;//设置温度
sbit key2=P3^6;//温度加
sbit key3=P3^7;//温度减
//
sbit RS = P2^7;
sbit EN = P2^6;
signed int period = 0;//PEM period
uchar dang;//档位显示
uchar Mode=0;
uchar SMODE=0;//调节占空比
uchar time=0;//定时器加数
uchar d1,d2,d3;//显示数据暂存变量
uchar code tab1[]={"  Speed Control"};
uchar code tab2[]={"SPEED:"};
void delay(uint ms)		//延时函数,大约延时
{
	uchar x;
	for(ms;ms>0;ms--)
		for(x=50;x>0;x--);
}
///********液晶写入指令函数与写入数据函数,以后可调用**************/
void write_1602com(uchar com)//****液晶写入指令函数****
{
	RS=0;//数据/指令选择置为指令
//	rw=0; //读写选择置为写
	LCD1602=com;//送入数据
//	delay(10);
	EN=1;//拉高使能端,为制造有效的下降沿做准备
	delay(10);
	EN=0;//en由高变低,产生下降沿,液晶执行命令
}
void write_1602dat(uchar dat)//***液晶写入数据函数****
{
	RS=1;//数据/指令选择置为数据
//	rw=0; //读写选择置为写
	LCD1602=dat;//送入数据
//	delay(10);
	EN=1; //en置高电平,为制造下降沿做准备
	delay(10);
	EN=0; //en由高变低,产生下降沿,液晶执行命令
}
void lcd_init()//***液晶初始化函数****
{
	uchar a,b;
	write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据
	write_1602com(0x0c);//开显示不显示光标
	write_1602com(0x06);//整屏不移动,光标自动右移
	write_1602com(0x01);//清显示
	write_1602com(0x80);//时间显示固定符号写入位置,从第1个位置后开始显示
	for(a=0;a<15;a++)
	{
		write_1602dat(tab1[a]);//写显示时间固定符号,两个冒号
	delay(3);
	}	
	write_1602com(0x80+0x40);//时间显示固定符号写入位置,从第1个位置后开始显示
	for(b=0;b<6;b++)
	{
		write_1602dat(tab2[b]);//写显示时间固定符号,两个冒号
	delay(3);
	}
}
void display()
{

if(period == 100)
{
	write_1602com(0x80+0x40+10);
  write_1602dat((period /100)+0x30);
	write_1602com(0x80+0x40+11);
	 write_1602dat(0x30);
}
else
{
write_1602com(0x80+0x40+10);
write_1602dat((period /10)+0x30);
}							  
}
void KEY()
{//加
if(key1==0)
	{
		delay(10);
		if(key1==0)	
		{
       period +=10;
			if(period >90)
				period = 100;
		}				
		while(key1==0);		
	}
	//减少
	if(key2==0)
	{
		delay(10);
		if(key2==0)
		{
      period =period - 10;
			if(period <=0)
				period=0;
		}
		while(key2==0);
	}
	
}
void init()
{

TMOD=0x01;//???0????1
TH0=0xff;//(65536-10)/256;//?????
TL0=0xf7;//(65536-10)%256;//0.01ms
EA=1;//????
ET0=1;//????0??
TR0=1;//?????0
}
void main()		  //主函数
{
	uchar dj;
	dj=0;		  //电机
  TR0=0;
	delay(500);

	lcd_init();
	init();
	while(1)			  //进入while循环
	{	
		KEY();//按键扫描函数
		display();	 //调用显示函数
	//	zi_dong();
	}
}
void T0_time() interrupt 1
{ 
TR0=0;
TH0=0xff;//(65536-10)/256;//
TL0=0xf7;//(65536-10)%256;//0.01ms
TR0=1;
time++;
if(time>=100) //1khz
time=0;
if(time < period) //
dj=1;
else dj=0;
}

你可能感兴趣的:(单片机,stm32,嵌入式硬件)