【毕业设计】29-交流电机/步进电机的转速测量与控制系统设计(原理图、仿真、源代码、答辩论文、答辩PPT)

【毕业设计】29-交流电机/步进电机的转速测量与控制系统设计(原理图、仿真、源代码、答辩论文、答辩PPT)

资料要求

资料包含:毕业设计全套资料(精品)
原理图工程文件
原理图截图
仿真模型工程文件
仿真截图
搭建视频
答辩论文低重复率文档,22874字
答辩PPT
英文文献及翻译
详情请私信!

任务书

设计内容:交流电机的转速测量与控制系统设计

设计要求: 1.在确定论文方向的基础上收集、整理资料,并在对所收集资料有所理解的基础上科学拟定题目,写出开题报告。 2.论文要紧扣主题,思路清晰,主题明确。根据主题的具体要求,完成交流电机的转速检测方案设计、硬件选型、安装方法、检测后数值的处理等。 3.利用单片机或者PLC完成转速测量后的显示与闭环控制。 4.完成上位机的设计和组态画面的设计,要求能够使用上位机实时修改交流电机的转速值。论文中采用的解决办法和思路,设计的控制过程,说明原理。并用电脑软件仿真结果(如果不能仿真也需要有详细计算过程)。 5.论文计算过程要说明,插图部分、仿真过程要做说明。 论文方案设计部分,控制系统设计部分要附电路图,方案图。

设计说明书

摘要

本系统通过对交流步进电机研究。在系统的设计上首先根据系统设计要求规划系统功能,对系统的硬件电路设计软件程序编写,在硬件和软件上均采用模块化的方式实现系统的设计,保证在软件硬件上设计的稳定性强,可靠性高,抗干扰能力强。在系统设计上充分考虑了系统的性价比,系统选择使用51单片机作为主控芯片,L297为电机驱动芯片,L298N为交流步进电机控制芯片,LCD1602作为显示器,按键控制电机,设计了一个交流电机的转速测量与控制系统。

系统可以通过按键对系统控制,可以使交流步进电机实现正反转,加减速度的控制,并将速度实时显示到LCD1602上。系统使用AD软件对系统的原理图绘制、Visio绘制系统结构框图以及程序流程图、Keil软件C语言编写程序、Proteus仿真系统。经过测试最后实现了系统的功能。

设计框架架构

前 言… 1

第一章 绪论… 3

第一节 交流步进电机介绍… 3

第二节 交流步进电机驱动介绍… 4

第三节 交流步进电机研究的国内外现状… 4

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

本章小结… 5

第二章 系统方案分析… 6

第一节 系统实现的功能分析… 6

第二节 元器件方案选择… 6

一、显示方案选择… 6

二、电机驱动方案选择… 7

三、主控芯片方案选择… 7

第三节 系统框架确定… 8

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

一、51单片机介绍… 9

二、L297驱动介绍… 10

三、L298驱动介绍… 12

四、LCD1602液晶显示器介绍… 13

第五节 系统的测速原理介绍… 13

本章小结… 14

第三章 系统的硬件电路设计… 15

第一节 单片机最小系统电路设计… 15

第二节 交流步进电机驱动电路设计… 16

第三节 LCD1602显示电路设计… 17

第四节 按键电路设计… 17

第五节 电源电路设计… 18

第六节 系统总电路设计… 19

本章小结… 19

第四章 系统的软件设计… 21

第一节 主程序设计流程… 21

第二节 速度计算程序设计流程… 22

第三节 显示程序设计流程… 22

第四节 按键扫描程序设计流程… 23

本章小结… 24

第五章 系统的仿真测试… 25

第一节 Proteus软件介绍… 25

第二节 仿真硬件电路搭建与调试… 25

一、仿真硬件电路搭建… 25

二、系统调试… 26

第三节 仿真功能测试… 26

本章小结… 31

总 结… 32

致 谢… 33

参考文献… 34

附 录… 35

一、英文原文… 35

二、英文翻译… 39

三、工程图纸… 43

四、源代码… 44

设计说明书及设计文件

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

源码展示

#include "AT89X51.h"
int delay();
void inti_lcd();
void show_lcd(int);
void cmd_wr();
void ShowState();
void clock(unsigned int Delay) ;
void DoSpeed();       //计算速度
//正转值
#define RIGHT_RUN 1
//反转值
#define LEFT_RUN 0
sbit RS=0xA0;
sbit RW=0xA1;
sbit E=0xA2;
char SpeedChar[]="SPEED(n/min):";
char StateChar[]="RUN STATE:";
char STATE_CW[]="CW";
char STATE_CCW[]="CCW";
char SPEED[3]="050";
unsigned int RunSpeed=50;		//速度
unsigned char RunState=RIGHT_RUN;  //运行状态
main()
{	
	/*定时器设置*/
	TMOD=0x66;    	//定时器0,1都为计数方式;方式2;
	EA=1;			//开中断	
	TH0=0xff;		//定时器0初值FFH;
	TL0=0xff;
	ET0=1;
	TR0=1;	
	
	TH1=0xff;		//定时器1初值FFH;
	TL1=0xff;
	ET1=1;
	TR1=1;   	
	IT0=1;			//脉冲方式
	EX0=1;			//开外部中断0:加速
	IT1=1;			//脉冲方式
	EX1=1;			//开外部中断1:减速    
    inti_lcd();
    DoSpeed();       
    ShowState();
    while(1)
    { 
      clock(RunSpeed);
      P0_1=P0_1^0x01;
    }    
}

//定时器0中断程序:正转
void t_0(void) interrupt 1
{
	RunState=RIGHT_RUN;	
    P0_0=1;
    P1=0x01;
    cmd_wr();
    ShowState();
} 
//定时器1中断:反转
void t_1(void) interrupt 3
{
	RunState=LEFT_RUN;
    P0_0=0;
    P1=0x01;
    cmd_wr();
    ShowState();
   
} 
//中断0:加速程序
void SpeedUp() interrupt 0
{   
       if(RunSpeed>=12)
          RunSpeed=RunSpeed-2; 
       DoSpeed();
       P1=0x01;
       cmd_wr();
       ShowState();
              
}
//中断1:减速程序
void SpeedDowm() interrupt 2
{       
    if(RunSpeed<=100)
        RunSpeed=RunSpeed+2; 
    DoSpeed();
    P1=0x01;
    cmd_wr();
    ShowState(); 
}
int delay()         //判断LCD是否忙
{   
    int a;
start:    
    RS=0;
    RW=1;
    E=0;
    for(a=0;a<2;a++);
    E=1;
    P1=0xff;
    if(P1_7==0)
       return 0;
    else        
       goto start;
}
void inti_lcd()  //设置LCD方式
{
   P1=0x38;
   cmd_wr();
   delay();
   P1=0x01;     //清除
   cmd_wr();
   delay();
   P1=0x0f;
   cmd_wr();
   delay();
   P1=0x06;
   cmd_wr();
   delay(); 
   P1=0x0c;
   cmd_wr();
   delay();
}
void cmd_wr()           //写控制字
{
   RS=0;
   RW=0;
   E=0;
   E=1;
}
void show_lcd(int i)   //LCD显示子程序
{  
   P1=i;
   RS=1;
   RW=0;
   E=0;
   E=1;
}
void ShowState()    //显示状态与速度
{
    int i=0;
    while(SpeedChar[i]!='\0')
    {
       delay();
       show_lcd(SpeedChar[i]);
       i++;
    }
    
    delay();
    P1=0x80 | 0x0d;
    cmd_wr();
    i=0;
    while(SPEED[i]!='\0')
    {
       delay();
       show_lcd(SPEED[i]);
       i++;
    }
    delay();
    P1=0xC0;
    cmd_wr();
    i=0;
    while(StateChar[i]!='\0')
    {
       delay();
       show_lcd(StateChar[i]);
       i++;
    }
    delay();
    P1=0xC0 | 0x0A;
    cmd_wr();
    i=0;
    if(RunState==RIGHT_RUN)
        while(STATE_CW[i]!='\0')
        {
          delay();
          show_lcd(STATE_CW[i]);
          i++;
        }
    else
       while(STATE_CCW[i]!='\0')
        {
          delay();
          show_lcd(STATE_CCW[i]);
          i++;
        }
}
void clock(unsigned int Delay)   //1ms延时程序
{  unsigned int i; 
   for(;Delay>0;Delay--) 
    for(i=0;i<124;i++);      
}
void DoSpeed()
{
    SPEED[0]=(1000*6/RunSpeed/100)+48;
    SPEED[1]=1000*6/RunSpeed%100/10+48;
    SPEED[2]=1000*6/RunSpeed%10+48;
}


  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cqtianxingkeji

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值