【毕业设计】33-基于单片机的直流电机的转速检测与控制设计(原理图工程+PCB工程+源代码工程+仿真工程+答辩论文)

news2024/11/24 12:36:26

typora-root-url: ./

【毕业设计】33-基于单片机的直流电机的转速检测与控制设计(原理图工程+PCB工程+源代码工程+仿真工程+答辩论文)

文章目录

    • typora-root-url: ./
  • 【毕业设计】33-基于单片机的直流电机的转速检测与控制设计(原理图工程+PCB工程+源代码工程+仿真工程+答辩论文)
    • 任务书
    • 设计说明书
      • 摘要
      • 设计框架架构
      • 设计说明书及设计文件
      • 源码展示

任务书

设计内容:直流电机的转速检测与控制设计

设计要求:

1.在确定论文方向的基础上收集、整理资料,并在对所收集资料有所理解的基础上科学拟定题目,写出开题报告。

2.论文要紧扣主题,思路清晰,主题明确。根据主题的具体要求,完成直流电机的转速检测方案设计、硬件选型、安装方法、检测后数值的处理等。

3.利用单片机完成转速测量后的显示与闭环控制。

4.通过LCD显示直流电机的转速值及控制信息。论文中采用的解决办法和思路,设计的控制过程,说明原理。并用电脑软件Proteus仿真。

5.论文计算过程要说明,插图部分、仿真过程要做说明。

论文方案设计部分,控制系统设计部分要附电路图,方案图。

资料链接

原理图工程文件
原理图截图
仿真模型工程文件
仿真截图
答辩论文低重复率文档,22550字
英文文献及翻译
visio流程图工程

设计说明书

摘要

本次设计的设计步骤:首先是对控制系统的功能分析,然后开始选择设计中所涉及的元器件;使用AD绘制控制系统的电路图,使用Visio绘制系统程序框图,再使用keil软件对控制程序进行编写,最后再使用Proteus对整个控制系统实现仿真,并且还通过矩阵键盘来控制系统。该系统可以实现的功能有:控制系统的正转、反转;控制系统加速、减速;控制系统速度15RPM-150RPM。经过多次功能验证与测试,在保证功能完成的前提下具有较好的耐久性。

设计框架架构

前 言… 1

第一章 绪论… 2

第一节 研究背景… 2

第二节 研究意义及目的… 2

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

本章小结… 4

第二章 直流电机转速检测与控制系统分析… 5

第一节 系统设计的目的及要求… 5

第二节 系统设计的方案分析… 6

第三节 元器件的选择… 7

第四节 系统结构的总框图… 9

本章小结… 10

第三章 直流电机的转速检测与控制的硬件电路设计… 11

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

第二节 电源的设计… 13

第三节 矩阵按键的电路设计… 14

第四节 电机以及驱动电路的设计… 15

第五节 LCD120168液晶显示的电路设计… 15

第六节 系统的总电路图… 16

本章小结… 17

第四章 直流电机的转速检测与控制的软件设计… 18

第一节 Keil软件介绍… 18

第二节 软件的总设计流程… 18

第三节 矩阵按键模块的程序设计… 19

第四节 LCD120168液晶显示程序设计… 21

第五节 直流电机转速检测的程序设计… 22

第六节 直流电机转速控制的程序设计… 23

本章小结… 24

第五章 直流电机转速检测与控制的设计仿真… 25

第一节 Proteus软件介绍… 25

第二节 仿真结果… 26

本章小结… 33

总 结… 34

致 谢… 35

参考文献… 36

附 录… 38

一、英文原文… 38

二、英文翻译… 42

三、工程图纸… 45

四、源代码… 46

设计说明书及设计文件

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

源码展示

#include <showfun.h>
#include <stdio.h>
extern char fnLCMInit(); // LCM 初始化
extern void at(unsigned char x,unsigned char y);/*设定文本x,y值*/
extern void cls();	 // 清屏
extern void charout(unsigned char *str); //ASCII(8*8) 显示函数
extern void fnSetPos(unsigned char urow, unsigned char  ucol);	// 设置当前地址
extern uchar dprintf(uchar x,uchar y,char *fmt);// ASCII(8*16) 及 汉字(16*16) 显示函数
extern uchar fnPR12(uchar uCmd); // 写无参数的指令
extern uchar fnPR13(uchar uData); // 写数据
extern unsigned int Adc0832(unsigned char channel);
extern void Line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode);
extern void Pixel(unsigned char PointX,unsigned char PointY, bit Mode);
uchar dsp[10]={0,0,0,0,0,0,0,0,0,0,};
char abc[3]={0,0,0,};
uchar key=0;
uint a=5;  //初始速度
uchar n=5;   //速度增加或减小一次
uchar count=1; 
uint k1=0;
uchar GeyKey();
void delay(uchar i);
void control();
main()
{       
 	fnLCMInit();   //液晶初始化
	fnSetPos(0,0);    //液晶 设置当前地址
	dprintf(8,0,"直流电机转速检测控制系统");
	dprintf(12,15,"键盘 + :速度加");
	dprintf(12,30,"键盘 - :速度减");
	dprintf(12,45,"0 - 9:15 - 150 rpm");	
	dprintf(12,60,"键盘 = :顺时针");
	dprintf(12,75,"键盘 on/c :逆时针");
  dprintf(12,90,"转向:");  
  dprintf(12,102,"SET:");  
  dprintf(12,117,"NOW:");      
/****设置初始状态****/
	 P1_1=0;
   TMOD=0x15;
	 TH1=0x3c;
	 TL1=0xb0;
   TH0=0x00;
	 TL0=0x00;
	 ET0=1;
	 ET1=1;
	 TR0=1;
	 TR1=1;  
/****键盘设置****/  
    while(1)
	{  key=GeyKey();
      switch(key)
       {   
           case '=': {P1_0=1;dprintf(48,90,"顺时针");control();break;}
           case 'c': {P1_0=0;dprintf(48,90,"逆时针");control();break;}      
	                       
		   default:  break;
        }
    }
}
/****键盘扫描****/
uchar GeyKey()
{
 	P1_4=0;
 	P1_5=1;
 	P1_6=1;
 	P1_7=1;
	P3_0=1;
	P3_1=1;
	P3_2=1;
    P3_3=1;
	_nop_();_nop_();
	if(!P3_0)return '7';
 	if(!P3_1)return '8';
 	if(!P3_2)return '9';
    if(!P3_3)return '/';
 	P1_4=1;
 	P1_5=0;
 	P1_6=1;
 	P1_7=1;
	_nop_();_nop_();
	if(!P3_0)return '4';
 	if(!P3_1)return '5';
 	if(!P3_2)return '6';
    if(!P3_3)return '*';
 	P1_4=1;
 	P1_5=1;
 	P1_6=0;
 	P1_7=1;
	_nop_();_nop_();
	if(!P3_0)return '1';
 	if(!P3_1)return '2';
 	if(!P3_2)return '3';
    if(!P3_3)return '-';
 	P1_4=1;
 	P1_5=1;
 	P1_6=1;
 	P1_7=0;
	_nop_();_nop_();
	if(!P3_0)return 'c';
 	if(!P3_1)return '0';
 	if(!P3_2)return '=';
    if(!P3_3)return '+';
	return 0;
}
/****延时程序****/
void delay(uchar i)
{  uchar j,k;
    for(;i>0;i--)
    for(j=15;j>0;j--)
    for(k=11;k>0;k--);
}	
void time()interrupt 3    //计时器T1—用于测速
{    
     TR1=0;
     count++;    //每定时中断一次就加一
     k1+=TL0;
	 if(count==51)
	 {     
	    sprintf(dsp,"%3d",k1);    //转化
		  dprintf(48,117,dsp);   
      dprintf(88,117,"r/min");  
		  count=1;
          k1=0;
      }
	  TH1=0x3c; //0011 1100  //50ms一次中断
	  TL1=0xb0; //1010 0000
	  TH0=0x00;
	  TL0=0x00;
	  TR1=1;
}
/****调速控制****/
void control()
{     
       EA=1;    //开启计数中断,测速用
	   while(1)
	   {    if(a>=150) 
               a=150;
			if(a<=10) 
			    a=10;
			 P1_1=0;      //关闭电动机,脉冲输出
			 delay(160-a);
			 P1_1=1;      //开启电动机
			 delay(a);
			 key=GeyKey();			
			if(key == '0')
			{
				a=15+5;	      
			sprintf(dsp,"%3d",a-5);
		  dprintf(48,102,dsp);   
      dprintf(88,102,"r/min");  
			}else
				if(key == '1')
			{
				a=30;	      
			sprintf(dsp,"%3d",a);
		  dprintf(48,102,dsp);   
      dprintf(88,102,"r/min"); 
			}else
				if(key == '2')
			{
				a=45;	      
			sprintf(dsp,"%3d",a);
		  dprintf(48,102,dsp);   
      dprintf(88,102,"r/min"); 
			}else
				if(key == '3')
			{
				a=60-5;	      
			sprintf(dsp,"%3d",a+5);
		  dprintf(48,102,dsp);   
      dprintf(88,102,"r/min"); 
			}else
				if(key == '4')
			{
				a=75-10;	      
			sprintf(dsp,"%3d",a+10);
		  dprintf(48,102,dsp);   
      dprintf(88,102,"r/min"); 
			}else
				if(key == '5')
			{
				a=90-10;	      
			sprintf(dsp,"%3d",a+10);
		  dprintf(48,102,dsp);   
      dprintf(88,102,"r/min"); 
			}else
				if(key == '6')
			{
				a=105-7;	      
			sprintf(dsp,"%3d",a+7);
		  dprintf(48,102,dsp);   
      dprintf(88,102,"r/min"); 
			}else
				if(key == '7')
			{
				a=120-8;	      
			sprintf(dsp,"%3d",a+8);
		  dprintf(48,102,dsp);   
      dprintf(88,102,"r/min"); 
			}else
				if(key == '8')
			{
				a=135-5;	      
			sprintf(dsp,"%3d",a+5);
		  dprintf(48,102,dsp);   
      dprintf(88,102,"r/min"); 
			}else
				if(key == '9')
			{
				a=150;	      
			sprintf(dsp,"%3d",a);
		  dprintf(48,102,dsp);   
      dprintf(88,102,"r/min"); 
			}else
			
			 if(key=='-') 
			 {
				 a-=n;
         dprintf(48,102,"              ");
			 }
			 else 
				 
			   if(key=='+') 
				 {
					 a+=n;
	         dprintf(48,102,"            ");
				 }
			 else
			 
			   if(key=='=')
			   {  P1_0=1;    //调整为顺时针
				   dprintf(48,90,"顺时针");//
			 }
			 else 	 
			 if(key=='c')      //调整为逆时针
			 {  P1_0=0;·
			   dprintf(48,90,"逆时针");
			 }
			 else 			 
			  if(key=='*')
			  {   P1_1=0;
			      break;
			  }
			  else
			 if(key!=0)     //此处跳出循环回到主程序
			   break;
			 }
		 EA=0;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/45794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

盘点国内主流数字孪生厂商!你了解几家?

在国内&#xff0c;主流的数字孪生解决方案厂商包括华龙迅达、精航伟泰、羚数智能、力控科技、华力创通、同元软控、优也科技、51world、卡奥斯、摩尔元数、易知微、木棉树软件等。由于中国数字孪生市场仍处于早期发展阶段&#xff0c;且受限于建模、仿真和基于数据融合的数字线…

基于单RGB相机的全新三维表示方法|NeurIPS 2022

随着深度学习的发展&#xff0c;基于单张RGB图像的人体三维重建取得了持续进展。 但基于现有的表示方法&#xff0c;如参数化模型、体素栅格、三角网格和隐式神经表示&#xff0c;难以构筑兼顾高质量结果和实时速度的系统。 针对上述问题&#xff0c;天津大学团队联合清华大学…

Linux用户管理

文章目录一. 引子二. 用户管理1. 用户切换2. 注销用户3. 添加用户4. 设置用户密码5. 删除用户6. 查询用户信息三. 用户组管理1. 新增用户组2. 新增用户时添加组3. 修改用户的组四. 用户和组相关文件1. /etc/passwd2. /etc/shadow3. /etc/group一. 引子 Linux是一个多用户、多任…

【JavaScript作用域】

JavaScript作用域1 本节目标2 作用域2.1 作用域概述2.2 全局作用域2.3 局部作用域3 变量的作用域3.1 变量作用域的分类3.2 全局变量3.3 局部变量3.4 从执行效率看全局变量与局部变量3.5 JS没有块级作用域4 作用域链1 本节目标 说出JavaScript的两种作用域区分全局变量和局部变…

TinyML:是否是FPGA在人工智能方面的最佳应用?

TinyML 也是机器学习的一种&#xff0c;他的特点就是缩小深度学习网络可以在微型硬件中使用&#xff0c;主要应用在智能设备上。超低功耗嵌入式设备正在“入侵”我们的世界&#xff0c;借助新的嵌入式机器学习框架&#xff0c;它们将进一步推动人工智能驱动的物联网设备的普及。…

机器学习:一文从入门到读懂PCA(主成分分析)

深度学习&#xff1a;PCA白化前置知识内积的几何意义基基变换不同基下的向量变换逆矩阵不同基下的空间变换方差协方差协方差矩阵协方差矩阵对角化特征值分解、空间变换主成分分析&#xff08;PCA&#xff09;两个原则公式推导求解流程代码实现PCA的优缺点优点缺点前置知识 维度…

【测试沉思录】18.如何测试微信小程序?

作者&#xff1a;雷远缘 编辑&#xff1a;毕小烦 一. 先知道小程序是什么 啥是小程序&#xff1f; “小程序是一种不需要下载安装即可使用的应用&#xff0c;它实现了应用 “触手可及” 的梦想&#xff0c;用户扫一扫或者搜一下即可打开应用。也体现了 “用完即走” 的理念&am…

[附源码]Python计算机毕业设计SSM基于Java的民宿运营管理网站(程序+LW)

环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 Maven管理等…

详解 Spring Boot 项目中的配置文件

目录 1. Spring Boot 项目中配日文件的作用是什么 2. Spring Boot 配置文件的两种格式 3. properties 配置文件 3.1 properties 配置文件的基本语法 3.2 properties 配置文件的分类 3.3 如何读取配置文件 3.4 properties 配置文件的优缺点分析 4. yml 配置文件 4.1 yml …

【JavaSE】初识泛型

大家好&#xff01;我是保护小周ღ&#xff0c;本期为大家带来的是 Java的泛型&#xff0c;会来大家初步了解什么是泛型&#xff0c;以及泛型的使用&#xff0c;感受一手泛型的思想&#xff0c;面向对象编程太爽了~ 目录 一、泛型是什么&#xff1f; 二、泛型的语法 三、包…

Java给图片增加水印,根据图片大小自适应,右下角/斜角/平铺

Hi&#xff0c;I’m Shendi 最近写自己的文件服务器&#xff0c;上传图片时需要自动增加水印&#xff0c;在这里记录一下 文章目录效果展示读取图片从 byte[] 读取图片获取画板绘制水印根据图片大小自适应水印大小右下角文字水印斜角水印平铺水印图片水印输出图片水印就是在图片…

《剑指 Offer 》—58 - I. 翻转单词顺序

《剑指 Offer 》—58 - I. 翻转单词顺序 注意&#xff1a;本题与151 题相同&#xff1a;https://leetcode-cn.com/problems/reverse-words-in-a-string/ 注意&#xff1a;此题对比原题有改动 文章目录《剑指 Offer 》—58 - I. 翻转单词顺序一、题目内容二、个人答案&#xf…

Git 打patch (打补丁)的使用

patch 的使用 一般是diff ,apply ,format-patch,am 1 生成patch git diff > test.patch 这个是打补丁(test.patch自己取的名字,这个命令可以看出没有指定修改的问题所以默认把所有修改的文件都打patch了,同时还需要注意,这里是本地修改的没有执行add缓存的) 如果想指定某…

FPGA实现图像对比度自动调整,提供2套工程源码和技术支持

目录1.算法原理介绍2.HLS算法实现3.工程1介绍&#xff1a;zynq7100实现4.工程2介绍&#xff1a;Kintex7实现5.上板调试验证6.福利&#xff1a;工程源码获取1.算法原理介绍 使用直方图均衡技术实现 使用直方图均衡技术将原始图像的灰度直方图从比较集中的某个灰度区间变成在全部…

学习axure都要经历哪个阶段,如何快速入门

作为初学Axure同学们&#xff0c;正在学习AxureRP在这个过程中&#xff0c;我们应该经历每个阶段&#xff0c;掌握每个阶段的特点&#xff0c;明确如何在不同阶段学习&#xff0c;这样我们才能快速做到axure快速掌握这个工具。还能根据自己的实际工作需要&#xff0c;掌握自己的…

关系抽取(二)远程监督方法总结

目录 前言 1. 远程监督关系抽取开山之作 1.1 介绍 1.2 训练过程 1.2.1 数据标注方法 1.2.2 训练方法 1.3 测试过程 1.4 思考 1.5 总结 2. PCNN 2.1 介绍 2.2 模型结构 2.2.1 文本特征表示 2.2.2 卷积 2.2.3 分段最大池化 2.2.4 softmax多分类 2.3 多实例学习的…

【elementUI样式】模态框中的el-select下拉框不跟随页面滚动问题

文章目录1.在el-select标签中设置:popper-append-to-body"false"2.样式穿透&#xff08;比较普遍的写法&#xff09;模态框中的el-select下拉框不跟随页面滚动问题在使用elementUI写界面的时候&#xff0c;偶然遇到了如下图所示bug当页面滚动的时候&#xff0c;el-se…

JVM之类加载子系统

JVM类加载子系统类的加载过程类加载器双亲委派机制类的加载过程 初始化阶段解读 初始化阶段就是执行构造类加载器<clinit>()的过程 该方法不需要定义&#xff0c;是javac编译器自动收集类中所有类变量的赋值动作和静态代码中的语句合并而来 构造方法中指令按照语句在源文…

学习Retrofit后,你还需要明白这些……

在学习Retrofit后&#xff0c;由于它本身就是OKHttp的封装&#xff0c;面试中也经常会被一起问到&#xff1b;单纯的解析它的源码学习难免会有点无从下手&#xff0c;往往让人抓不住重点&#xff0c;学习效率并不是很高&#xff0c;本文从提出几个问题出发&#xff0c;带着问题…

[附源码]SSM计算机毕业设计校园新闻管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…