码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【毕业设计】33-基于单片机的直流电机的转速检测与控制设计(原理图工程+PCB工程+源代码工程+仿真工程+答辩论文)



    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 
    #include 
    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;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
  • 相关阅读:
    Nginx安装、使用
    【C++】类
    Vue基础小练习--待办事项(考察v-model的理解程度)
    安全智能体的前沿技术研究与实践
    Anaconda Prompt输入jupyter lab无反应
    Redis实现短信登入功能(一)传统的Session登入
    基于51单片机的教室智能照明灯控制系统光控人数检测
    选择需求管理工具
    前端模糊搜索
    Java笔记六(面向对象:类与对象)
  • 原文地址:https://blog.csdn.net/qq_22592979/article/details/128074081
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号