5-基于51单片机步进电机的控制研究(原理图工程+仿真工程+答辩论文+答辩PPT)

文章目录

  • 5-基于51单片机步进电机的控制研究(原理图工程+仿真工程+答辩论文+答辩PPT)
    • 资料
    • 设计说明书
      • 摘要
      • 设计框架架构
      • 设计说明书及设计文件
      • 源码展示

资料

包含此题目设计全套资料:
原理图工程
PCB工程
仿真工程文件
源代码工程
论文低重复率,字数:23541
答辩PPT
资料链接

设计说明书

摘要

步进电机现在已经广泛的应用在各种工业控制和机械控制场合中,随着单片机的发展,也使得步进电机的控制技术成熟和应用,控制精度和控制难度也得到了大幅度的提高,现在已经常用于打印机,绘图仪和机器人控制系统中,对其研究具有重大意义。
在系统设计之前对系统的功能分析,然后对系统元器件选型确定使用使用STC89C52为主控制,LCD1602作为系统的显示器,独立按键作为系统的人机交互设备,步进电机选择型号为28BYJ-48,驱动芯片为ULN2003。将系统硬件电路设计完成后,购买元器件焊接电路,然后对电路进行检测,测试电路电压是否满足要求。然后编写系统程序,将程序烧录到单片机中再对系统进行软件与硬件联合调试,最后测试实现了单片机的正传、反转、加速、减速、步进度数为5°的功能测试,完成了设计。

设计框架架构

目 录 III
第1章 引言 5
1.1 研究目的和意义 5
1.2 国内外的研究概况 6
1.3 本文的主要研究内容 6
第2章 基于51单片机步进电机的控制系统方案分析 7
2.1 系统设计功能分析 7
2.2 系统元器件方案选择 7
2.2.1 人机交互方案选择 7
2.2.2 步进电机驱动方案选择 8
2.2.3 显示器方案选择 8
2.2.4 主控芯片选择 9
2.3 步进电机工作原理 9
2.3.1 步进电机的工作原理 10
2.3.2 步进电机的特点 12
2.3.3 步进电机速度控制原理 12
2.4 系统结构总框图 13
第3章 基于51单片机步进电机的控制系统硬件电路设计 15
3.1 单片机最小系统电路设计 15
3.1.1 单片机介绍 15
3.1.2 晶振电路设计 17
3.1.3 复位电路设计 18
3.2 电源电路设计 20
3.3 按键电路设计 20
3.4 步进电机及驱动电路设计 21
3.5 LCD液晶显示电路设计 22
3.6 系统总电路图 25
第4章 基于51单片机步进电机的控制系统的软件设计 26
4.1 软件开发环境 26
4.2 软件总设计流程 27
4.3 步进电机控制模块程序设计 29
4.4 显示程序 29
4.5 按键扫描程序 31
第5章 基于51单片机步进电机的控制实现 33
5.1 实物焊接与调试 33
5.2 实物功能测试 35
5.2.1 系统正向转动测试 35
5.2.2 系统反向转动测试 36
总结 39
参考文献 41
致谢 43
附录 44
附录一:工程图纸 44
附录二:程序源码 44
外文资料原文 53
译文 59

设计说明书及设计文件


字数:23541

源码展示

#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS = P2^4;//1602数据/命令选择端(H:数据寄存器L:指令寄存器)
sbit RW = P2^5;//1602读/写选择端
sbit E  = P2^6;//1602使能信号端
sbit key1=P3^0;//用户按键
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
sbit key5=P3^4;
uchar code B_Rotation[8]={0x7f,0x3f,0xbf,0x9f,0xdf,0xcf,0xef,0x6f}; //反转表格
uchar code F_Rotation[8]={0xef,0xcf,0xdf,0x9f,0xbf,0x3f,0x7f,0x6f}; //正转表格
uchar table1[]="dir: +  spe:005";
uchar table2[]="cir:000 ang:000";
uchar num;
uint key,flag,speed=5,zflag,znum,fflag,fnum,select,pp,qq;
//1键值2键值标志3速度4正转标志5正转圈数6反转标志7反转圈数8正转角度9反转角度10选择
float zang,fang;
/******************************************************************/
/*                    延时函数 Xms                                   */
/******************************************************************/
void delay(uint z)
{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);
}
/******************************************************************/
/*                   LCD1602写命令操作                            */
/******************************************************************/
void WriteCommand(uchar com)
{delay(5);//操作前短暂延时,保证信号稳定E=0;RS=0;RW=0;P0=com;E=1;delay(5);E=0;
}
/******************************************************************/
/*                   LCD1602写数据操作                            *//******************************************************************/
void WriteData(uchar dat)
{delay(5);  //操作前短暂延时,保证信号稳定E=0;RS=1;RW=0;P0=dat;E=1;delay(5);E=0;
}
/******************************************************************/
/*                           1602初始化程序                       */
/******************************************************************/
void InitLcd()//1602初始化程序
{delay(15);WriteCommand(0x38); //display modeWriteCommand(0x38); //display modeWriteCommand(0x38); //display modeWriteCommand(0x06); //当读或写一个字符后地址指针加一,且光标加一WriteCommand(0x0c); //显示开及光标不显示WriteCommand(0x01); //清屏WriteCommand(0x80);for(num=0;num<15;num++)//第一行的显示{WriteData(table1[num]);delay(15);}WriteCommand(0x80+0x40);//第二行的显示for(num=0;num<15;num++){WriteData(table2[num]);delay(15);}}
/******************************************************************/
/*              独立键盘扫描函数                                  */
/******************************************************************/
void keyscan()
{   P3=0xff;//拉高P3口,以读取P3口的值if(key1==0)//键1被按下{delay(5);//延时消抖if(key1==0){flag=1;}while(!key1);delay(5);//延时消抖while(!key1);//松手检测}if(key2==0){delay(5);if(key2==0){flag=2;}while(!key2);delay(5);while(!key2);}if(key3==0)//键1被按下{delay(5);//延时消抖if(key3==0){flag=3;}while(!key3);delay(5);//延时消抖while(!key3);//松手检测}if(key4==0){delay(5);if(key4==0){flag=4;}while(!key4);delay(5);while(!key4);}if(key5==0){delay(5);if(key5==0){flag=5;}while(!key5);delay(5);while(!key5);}
}
/******************************************************************/
/*                           1602显示3位数                       */
/******************************************************************/
void write_sfm(uchar add,uint date)//1602显示
{uchar bai,shi,ge;bai=date/100;shi=date%100/10;ge=date%10;WriteCommand(0x80+add);//设置数据地址指针WriteData(0x30+bai);WriteData(0x30+shi);WriteData(0x30+ge);WriteData(0x20);
}
/******************************************************************/
/*                           键值处理                             */
/******************************************************************/
void handle_flag()
{   uchar select1;if(TR0==0&&TR1==0){   if(flag==1) //正转{WriteCommand(0x80+0x05);WriteData('+');delay(20);select=0;}if(flag==2) //反转{WriteCommand(0x80+0x05);WriteData('-');delay(20);select=1;}if(flag==3)//转速加{speed++;if(speed>=12)speed=12;write_sfm(0x0c,speed);//显示速度delay(20);}if(flag==4)   //转速减{speed--;if(speed<=1)speed=1;write_sfm(0x0c,speed);//显示速度delay(20);}
}if(flag==5)关闭中断,停止电机{select1++;select1%=2;if( select1==0){TR0=0;TR1=0;if(select==0)//显示转动的角度write_sfm(0x40+0x0c,zang);elsewrite_sfm(0x40+0x0c,fang);}else{if(select==0){TR0=1;//开定时器0,产生正转相序TR1=0;//关定时器1}else{ TR1=1;//开定时器1,产生反转相序TR0=0;//关定时器0  }}          }flag=0;
}
void main()
{pp=0;qq=0;InitLcd();TMOD=0x11;EA=1;ET0=1;ET1=1;TH0=(65536-(14648/speed))/256;TL0=(65536-(14648/speed))%256;TH1=(65536-(14648/speed))/256;TL1=(65536-(14648/speed))%256;TR0=0;TR1=0;    while(1){   keyscan();handle_flag();    }
}

5-基于51单片机步进电机的控制研究(原理图工程+仿真工程+答辩论文+答辩PPT)相关推荐

  1. 基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频)

    基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频) 仿真图proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0031 ...

  2. 基于51单片机步进电机控速正反转proteus仿真

    本设计是基于51单片机步进电机控速正反转(原理图+源码+仿真) 仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 编号C0005 [文档]C0005 网盘链接 资 ...

  3. 基于51单片机实现继电器控制照明设备(Proteus仿真)

    wechat:[嵌入式工程师成长日记] ​​​​​​​ 具体功能实现: 当按下开关时,继电器闭合点亮照明设备(灯泡) 使用器件: 照明设备(LAMP).按键.AT89C51.若干电阻.PNP晶体管.二 ...

  4. protues里报警c语言程序,基于51单片机的智能火灾报警系统-(Proteus仿真图+源程序+论文)...

    摘要 近些年来,因火灾造成的人民生命和财产损失的事件时有发生,对于火灾的防控情况不容乐观.除了对于火灾隐患的排查和人们防灾减灾意识提升之外,利用科技手段对火灾进行实时监控报警十分必要而且非常有效.国内 ...

  5. 基于51单片机的公交车安全智能检测系统、基于51单片机的金属探测仪控制设计、基于单片机的智能电子密码锁系统设计、基于51单片机酒精浓度检测仪设计【资料转发分享】

    630基于51单片机的公交车安全智能检测系统-设计资料 本资料是基于单片机的公交车安全监测系统 具有如下功能: 1.监测环境的温度,超标报警.可以设置上下限 2.监测是否有火灾以及有毒气体,超标报警, ...

  6. 基于51单片机智能家居电路控制仿真

    [毕设课设]基于51单片机智能家居电路控制仿真 ​效果图 Proteus仿真: 功能简介: 文件内容: 程序框架: 网盘链接: ​效果图 更多内容请关注@WENJIE电子科技 ​ 基于51单片机pro ...

  7. 基于51单片机甲醛浓度检测系统仿真设计(仿真+程序+原理图+报告+讲解)

    文章目录 资料下载(可点击) 功能说明 仿真图 复位电路 晶振电路 程序 原理图: 设计报告: 器件清单: 基于51单片机甲醛浓度检测系统仿真设计(仿真+程序+原理图+报告+讲解) 原理图:Altiu ...

  8. 基于51单片机自动数字电压表PCF8591 TLC2543 TL548 proteus仿真汇编程序设计

    硬件设计1 基于51单片机+PCF8591 ADC的仿真电路图: A. 基于51单片机和PCF8591的电压表,具有仿真图/源程序: B. 由数码管作为显示器: C.测试电压范围为0~5V,精度约为0 ...

  9. 基于51单片机的智能加湿器设计。 有仿真,程序,原理图,原文

    基于51单片机的智能加湿器设计. 有仿真,程序,原理图,原文. 可做实物. 通过DHT11实时监测环境温湿度,按键设定温湿度阈值,超限加湿器工作. 有水位检测电路,水位不足时候,报警提醒,防止干烧. ...

最新文章

  1. bezier曲线_Bezier算法
  2. 活动报名 | 6位技术女神关于智能技术的实践分享
  3. Centos7入侵分析:分析SSH登录日志
  4. MySQL 之视图、 触发器、事务、存储过程、内置函数、流程控制、索引(一)
  5. 3011-基于二叉树的表达式求值(C++,附详细思路)
  6. OPPO宣布与哈苏达成影像战略合作
  7. 【毕业设计】JSP网络在线考试系统设计(源代码+论文)
  8. 决策树(十二)--XGBoost
  9. 成都女学霸高考 692 分想当“程序媛”,网友:快劝劝孩子
  10. 上班一个月,后悔当初着急入职的选择了
  11. 微信小程序开发(一):小程序代码构成
  12. 485串口测试工具软件_【实例】如何用串口软件调试变频器?
  13. extjs引入html,ExtJs教程第一集 搭建ext环境后的第一个hello World
  14. 二进制修改linux文件,linux下的二进制文件操作
  15. 毕业论文 - 写作问题总结 和 tips
  16. 转载-一种基于陀螺仪传感器的准确计步器算法
  17. kotlin使用遇到的坑。。。
  18. 计算机技术对股市的影响,cpi上涨对股市影响有哪些?CPI如何影响股市涨跌
  19. c语言gets和puts的区别,C 语言 gets()和puts()
  20. 桌面扫码点餐系统(小程序+Java后台)

热门文章

  1. linux中perl的环境变量,在Perl脚本中使用Bash环境变量?
  2. 照片怎么无损放大?这样做只需三个步骤
  3. arcgis几何修复有作用吗_ArcGIS修复几何错误
  4. 华为OpenEuler体验系列(16)-显卡驱动安装以及CUDA
  5. Maltab在数学建模中的应用(第二版)——读书笔记上
  6. js如何实现重定当前向页面并刷新?
  7. 【深度学习】李宏毅:1 天搞懂深度学习,我总结了 300 页 PPT(附思维导图)...
  8. InstallShield Limited Edtion for VS2015
  9. Java基础——高级
  10. Springboot实现识别pdf信息