步进电动机速度调节和方向控制实验

一﹑实验目的
1﹑掌握步进电动机控制系统的硬件设计方法。2﹑掌握步进电动机速度调节﹑方向控制技术。
3·进一步学习编制步进电动机驱动程序的软件设计方法。二﹑教学要求
1﹑编制程序,控制步进电动机的运转速度。2﹑编制程序,控制步进电动机的旋转方向。三﹑主要仪器设备
机电实验平台﹑步进电机,万用表﹑示波器,电脑四﹑实验内容
单片机电路如图所示:

 

从上图中可以看出,该电路是集成的,芯片的输入通过单片机 P1.O~P1.3分别连接到INA,INB,INC,IND,芯片的输出由J80端子引出。

 将步进电机的A,A- ,B,B-分别接到J81端子上的OUTA,OUTB,OUTC,OUTD,将JP1的K1-K4连接到P1.4-P1.7编写一程序,将PO口接到J8脚的a,b,c,d,e,f,g,dp上,单片机P2分别连接到JP1的KEY1到KEY8·步进电机的初始速度根据实验自行确定。

 编写程序完成以下内容:

1)按下K1,步进电机正转动

2)按下K2,电机停止。
3)按下K3,步进电机反转动。
4)按下K4,步进电机转速增加一个档位(每个档位是初始速度50%增加)。5)按下K5,步进电机转速降低一个档位(每个档位是初始速度50%减少) 。6)电机工作时,分别在显示器上显示步进电机的速度档位。

#include "reg52.h"

typedef unsigned int u16;	
typedef unsigned char u8;

sbit IN1_A=P1^0;
sbit IN2_B=P1^1;
sbit IN3_C=P1^2;
sbit IN4_D=P1^3;


sbit KEY1=P2^1;
sbit KEY2=P2^0;
sbit KEY3=P2^2;
sbit KEY4=P2^3;


#define KEY1_PRESS	1
#define KEY2_PRESS	2
#define KEY3_PRESS	3
#define KEY4_PRESS	4
#define KEY_UNPRESS	0


// ×îС²»ÄÜСÓÚ1
#define STEPMOTOR_MAXSPEED        1  
#define STEPMOTOR_MINSPEED        5  	

#define smg P3

void delay_10us(u16 ten_us)
{
	while(ten_us--);	
}
void delay_ms(u16 ms)
{
	u16 i,j;
	for(i=ms;i>0;i--)
		for(j=110;j>0;j--);
}
void step_motor_28BYJ48_send_pulse(u8 step,u8 dir)
{
	u8 temp=step;
	
	if(dir==0)	
		temp=7-step;
	switch(temp)//8¸ö½ÚÅÄ¿ØÖÆ£ºA->AB->B->BC->C->CD->D->DA
	{
		case 0: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=0;break;
		case 1: IN1_A=1;IN2_B=1;IN3_C=0;IN4_D=0;break;
		case 2: IN1_A=0;IN2_B=1;IN3_C=0;IN4_D=0;break;
		case 3: IN1_A=0;IN2_B=1;IN3_C=1;IN4_D=0;break;
		case 4: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=0;break;
		case 5: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=1;break;
		case 6: IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=1;break;
		case 7: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=1;break;
		default: IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=0;break;//Í£Ö¹ÏàÐò	
	}			
}
u8 key_scan(u8 mode)
{
	static u8 key=1;

	if(mode)key=1;
	if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))//ÈÎÒâ°´¼ü°´ÏÂ
	{
		delay_10us(1000);//Ïû¶¶
		key=0;
		if(KEY1==0)
			return KEY1_PRESS;
		else if(KEY2==0)
			return KEY2_PRESS;
		else if(KEY3==0)
			return KEY3_PRESS;
		else if(KEY4==0)
			return KEY4_PRESS;	
	}
	else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)	
	{
		key=1;			
	}
	return KEY_UNPRESS;		
}


void main()
{	
	u8 key=0;
	u8 dir=0;
	u8 speed=STEPMOTOR_MINSPEED;
	u8 step=0;
  u8 code_smg[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
	int i=0;
	while(1)
	{			
		key=key_scan(0);
		if(key==KEY1_PRESS)
		{
			dir=!dir; 
    i=speed;
    smg=~code_smg[i];				
		}
		else if(key==KEY2_PRESS)
		{
			if(speed>STEPMOTOR_MAXSPEED)
				speed-=1;	
    i=speed;
    smg=~code_smg[i];				
		}
		else if(key==KEY3_PRESS)/
		{
			if(speed<STEPMOTOR_MINSPEED)
				speed+=1;		
    i=speed;
    smg=~code_smg[i];				
		}
		step_motor_28BYJ48_send_pulse(step++,dir);
		if(step==8)step=0;		
		delay_ms(speed);	
		i=speed;
    smg=~code_smg[i];		
	}		
}

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值