创享日记-大学学习资料课设毕设竞赛考证实习信息
创享日记-大学学习资料课设毕设竞赛考证实习信息

基于单片机的步进电机调速控制系统设计

基于单片机的步进电机调速控制系统设计-创享日记
基于单片机的步进电机调速控制系统设计
此内容为付费资源,请付费后查看
32
立即购买
您当前未登录!建议登录后购买,可保存购买订单
付费资源

资源概况

知识点关键词:步进电机调速、单片机、C51、C52
 
一、购买本资源包含以下内容
1、C语言源程序
2、仿真源文件
3、原理图源文件
4、元器件清单及制作教程
5、配套设计报告等
6、相关讲解视频等

基于单片机的步进电机调速控制系统设计-创享日记

基于单片机的步进电机调速控制系统设计-创享日记

基于单片机的步进电机调速控制系统设计-创享日记

基于单片机的步进电机调速控制系统设计-创享日记

基于单片机的步进电机调速控制系统设计-创享日记

 

二、资源内容简介
基于51单片机的步进电机控制系统
由STC89C52单片机+单体数码管+LED指示灯+ULN2003驱动芯片+DC-5V步进电机构成
具体功能:
(1)实现按键控制步进电机正转、反转、加速、减速、停止;
(2)2个发光二极管显示正反转,1位7段LED数码管显示当前转速档位(共9个档位);
(3)4个红色LED,指示电机的转速。
 
三、特别说明
1、电子资源,一经售出,概不退款;
2、不提供指导;
3、每年售卖数量有限,售完为止。
 

资源介绍(截取部分,完整请购买)

1 绪论

2 总体设计方案

2.1 系统需求及方案设计
为了实现基于51单片机的步进电机控制的设计,本文将实现以下设计需求:
(1)实现按键控制步进电机正转、反转、加速、减速、停止;
(2)2个发光二极管显示正反转,1位7段LED数码管显示当前转速档位(共9个档位);
(3)4个红色LED,指示电机的转速;
(4)操作简单、功能完善、精确度高。
基于以上列出的几点,具体的设计框图如图2.1所示。

基于单片机的步进电机调速控制系统设计-创享日记

 

2.2 硬件器件介绍

2.3 所用软件介绍(篇幅有限,详见下载)

3 硬件设计

 

基于单片机的步进电机调速控制系统设计-创享日记

3.1 硬件电路组成
硬件电路由以下模块构成:
(1)单片机最小系统。用于驱动和控制其他模块,以实现整体功能,其以STC89C52单片机为核心芯片,并辅以复位电路和晶振电路。
(2)按键模块。实现按键控制步进电机正转、反转、加速、减速、停止。
(3)显示模块。1位7段LED数码管显示当前转速档位(共9个档位)。
(4)步进电机模块。
(5)转数指示模块及正反转指示模块。

3.2 单片机最小系统电路
单片机最小系统是单片机扩展开发应用中最基础和最主要的部分,一般由以下的电路构成,是整个设计的核心其保证了基于单片机的其他功能的扩展与实现。如图3.2所示。
复位电路: 复位电路是单片机应用中的最基本和最重要的电路,用于处理单片机工作失灵等紧急问题。当单片机复位端口为高电平时,单片机中的代码将不会被执行。一开始上电时,电容还未充满电,复位端口为高电平,避免了直接上电就运行程序导致的程序错误等问题。当电容充满电后,复位端口变为低电平,程序开始运行。
晶振电路:晶振电路也是的单片机设计中必备的电路,为系统提供工作时序。本毕设晶振电路提供11.0592MHZ时钟频率,以此构成整个稳定的振荡电路,为单片机的正常工作提供保障。

3.3数码管显示电路
数码管显示电路由1位7段LED数码管显示当前转速档位(共9个档位),具体如图3.3所示。

基于单片机的步进电机调速控制系统设计-创享日记

3.4 按键电路
按键电路需要实现按键控制步进电机正转、反转、加速、减速、停止,总共有5个按键,具体如图3.4所示。

基于单片机的步进电机调速控制系统设计-创享日记

 

3.5 电机及驱动电路
电机及驱动电路由ULN2003驱动芯片、DC-5V步进电机、转数指示灯等构成,具体如图3.5所示。

基于单片机的步进电机调速控制系统设计-创享日记

 

4 软件设计

4.1 软件设计需求及设计思路
根据本文设计需求,在第三章硬件电路设计的基础上,需要通过软件编程实现的具体功能:
(1)驱动各个模块工作,实现数码管的清晰显示,实现电机驱动;
(2)实现按键控制步进电机正转、反转、加速、减速、停止;
(3)2个发光二极管显示正反转,1位7段LED数码管显示当前转速档位(共9个档位);
(4)4个红色LED,指示电机的转速;

4.2 部分主程序

//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{	
	T0_Init();					//定时器0初始化
	T1_Init();					//定时器1初始化
	FWD_LED = 0;				//正转指示灯亮,默认初始化是正转
	
	delay_ms(500);			//延时500ms,待各个模块上电稳定
	EA = 1;							//开启中断
	while(1)
	{	
		KeyService();		//按键服务程序
	}
}	

//-----------------------------------------------------------------
// Timer0 初始化,模式1,允许中断,1ms定时
// Timer0 用于按键扫描
//-----------------------------------------------------------------
void T0_Init()
{
	TMOD &= 0xF0;
	TMOD |= 0x01;										//T0工作于模式1,16位定时器
	TH0 = (65536 - 1000) >> 8;			//1ms定时
	TL0 = (65536 - 1000) & 0xFF;
	ET0 = 1;												//允许T0中断
	TR0 = 1;												//启动T0
}

//-----------------------------------------------------------------
// Timer1 初始化,模式1,允许中断
// Timer1 用于改变步进电机转速
//-----------------------------------------------------------------
void T1_Init()
{
	TMOD &= 0x0F;
	TMOD |= 0x10;							//定时器1工作于模式1,16位定时器
	TH1 = Timer[speed][0];
	TL1 = Timer[speed][1];		//定时器1,定时用于步进电机转速控制
	ET1 = 1;									//允许T1中断
	PT1 = 1;									//定时器1优先级高
	TR1 = 0;									//关闭定时器1
}

//-----------------------------------------------------------------
// Timer0 中断服务程序
//-----------------------------------------------------------------
void InterruptTime0() interrupt 1
{
	TH0 = (65536 - 1000) >> 8;		//1ms
	TL0 = (65536 - 1000) & 0xFF;
	KeyScan();										//按键扫描
}


//-----------------------------------------------------------------
// Timer1 中断服务程序
//-----------------------------------------------------------------
void InterruptTime1() interrupt 3
{
	static step1 = 0;							
	static step2 = 0;
	TH1 = Timer[speed - 1][0];			//根据不同的转速档位,给定时器1赋定时器值
	TL1 = Timer[speed - 1][1];			
	
	//按照定时器1的频率循环发送正转励磁序列的脉冲给步进电机,使其不停地转动
	if(flag1 == FwdRun)//正转
	{
		MotorDriver = FFW[step1++];		
		if(step1 == 8) step1 = 0; 
	}
	
	 //按照定时器1的频率循环发送反转励磁序列的脉冲给步进电机,使其不停地转动
	else if(flag1 == RevRun)       
	{
		MotorDriver = REV[step2++];
		if(step2 == 8) step2 = 0; 
	}
}

//-----------------------------------------------------------------
// 按键服务程序
//-----------------------------------------------------------------
void KeyService()
{
	switch (KeyCode)
	{
		case 1:	flag1 = FwdRun;										//正转
						FWD_LED = 0;	REV_LED = 1;				//正转指示灯亮
						KeyCode = 0;
						break;							
		case 2:	flag1 = RevRun;										//反转
						FWD_LED = 1;	REV_LED = 0;				//反转指示灯亮
						KeyCode = 0;
						break;
		case 3:	speed++;													//速度加
						if(speed == 10) speed = 1;				
						SpeedShow = SEG_CODE[speed];
						if(TR1 == 0) TR1 = 1;
						KeyCode = 0;
						break;
		case 4:	speed--;													//速度减
						if(speed == 0 || speed == -1 ) speed = 9;
						SpeedShow = SEG_CODE[speed];	
						if(TR1 == 0) TR1 = 1;	
						KeyCode = 0;
						break;
		case 5:	TR1 = 0;													//停止
						SpeedShow = 0xFF;
						MotorDriver = 0x00;
						KeyCode = 0;
						break;	
		default: ;
	}
}

5 仿真演示

5.1 仿真实现
5.1.1 仿真电路图

基于单片机的步进电机调速控制系统设计-创享日记

根据第四章软件设计的思路,结合仿真需求,我们将仿真设计的C代码利用KEIL5编写好,并进行详细地注释。接着,我们点击“create HEX file”,并再次编译程序,这样就会生成HEX烧录文件,具体如图5.2所示。

基于单片机的步进电机调速控制系统设计-创享日记

接着,我们打开仿真原理图,并将生产的“HEX”文件烧录到单片机芯片中,点击开始仿真,就可以实现相关仿真了,我们将在下一节中具体展示仿真的结果。

5.1.2 仿真结果
仿真主要实现:转数显示、正转与反转指示、转数指示,具体如图5.3所示。

基于单片机的步进电机调速控制系统设计-创享日记

 

© 版权声明
THE END
喜欢就支持一下吧
点赞4 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容