设计内容:交流电机的转速测量与控制系统设计
设计要求: 1.在确定论文方向的基础上收集、整理资料,并在对所收集资料有所理解的基础上科学拟定题目,写出开题报告。 2.论文要紧扣主题,思路清晰,主题明确。根据主题的具体要求,完成交流电机的转速检测方案设计、硬件选型、安装方法、检测后数值的处理等。 3.利用单片机或者PLC完成转速测量后的显示与闭环控制。 4.完成上位机的设计和组态画面的设计,要求能够使用上位机实时修改交流电机的转速值。论文中采用的解决办法和思路,设计的控制过程,说明原理。并用电脑软件仿真结果(如果不能仿真也需要有详细计算过程)。 5.论文计算过程要说明,插图部分、仿真过程要做说明。 论文方案设计部分,控制系统设计部分要附电路图,方案图。
原理图工程文件
原理图截图
仿真模型工程文件
仿真截图
搭建视频
答辩论文低重复率文档,22874字
答辩PPT
英文文献及翻译
本系统通过对交流步进电机研究。在系统的设计上首先根据系统设计要求规划系统功能,对系统的硬件电路设计软件程序编写,在硬件和软件上均采用模块化的方式实现系统的设计,保证在软件硬件上设计的稳定性强,可靠性高,抗干扰能力强。在系统设计上充分考虑了系统的性价比,系统选择使用51单片机作为主控芯片,L297为电机驱动芯片,L298N为交流步进电机控制芯片,LCD1602作为显示器,按键控制电机,设计了一个交流电机的转速测量与控制系统。
系统可以通过按键对系统控制,可以使交流步进电机实现正反转,加减速度的控制,并将速度实时显示到LCD1602上。系统使用AD软件对系统的原理图绘制、Visio绘制系统结构框图以及程序流程图、Keil软件C语言编写程序、Proteus仿真系统。经过测试最后实现了系统的功能。
#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;
}