步进电机控制实验

1.设计要求

利用单片机实现对步进电机的控制,编写程序,用四路 I/O 口实现环形脉冲的分配,控制步进电机按固定方向连续转动。同时,要求按下“Positive(正转)”按键时,控制步进电机正转;按下“Negitive(反转)” 按键时,控制步进电机反转;按下“加速”按键时,控制步进电机加速;按下“减速” 按键时,控制步进电机减速。4位数码管,左边两位显示正反转,正转显示“11”,反转显示“00”,右边两位显示转速档次,步进电机的转速1~30档在右边两位数码管上显示。

1.设计意义:(项目应用领域及意义)

步进电机是一种受脉冲信号控制,并且能将脉冲信号转化为相应的角位移或者线位移的数字电动机。由于电源每次输入电脉冲给该电机,该电机就会前进一小步,转动的方式是步进式的,所以步进电机,由于电源输入的是脉冲式的电压,因此也被称为脉冲电动机。

在步进电机驱动范围内,其输出的角位移或线位移与输入的脉冲个数成正比,不因电源电压、负载变化和环境条件等的变化而变化。所以其输出的角速度或线速度也与输入的脉冲频率成正比,通过改变输入脉冲频率的高低就可以调节步进电机的转速,并能控制步进电机的快速启动,暂停,正反转和加减速等。

由于步进电机具有步距误差不积累,运行可靠,结构简单,成本低等特点,因此被广泛运用于计算机外围电路,自动化控制装置以及其他数字控制装置中,如打印机、钟表、数模转换设备中。

2.工作原理

步进电机采用脉冲信号进行控制,每输入一次脉冲,就使步进电动机向前推进一步。

②步进电动机的转动步距角,是以电动机的结构为基准,按一定比例的比例来实现的。

在实践中,电动机的转动步距角会有细微的差异,这是因为电动机的结构固定有问题,并且不会累积到总极数越多,对加工精度的要求也就越高。一般情况下,工业用混合步进电动机的步距角为1.8°,即200个极点。(相当于同步)

3.已实现的功能说明

按下51单片机中的k2键,步进电机会进行对应的加速,数码管的后两位会显示对应的0~30的速度值;按下51单片机中的k3键,步进电机会进行对应的减速,数码管的后两位会显示对应的0-30的速度值;按下51单片机中的k3键,步进电机会进行对应的进行反转,此时数码管前两位会对应的显示“00”;按下51单片机中的k5键,步进电机会进行对应的正转,此时数码管前两位会对应的显示“11”。

、设计方案 `

1.系统框图:

 2. 系统总电路

  1. 系统PCB图(可选):

首先绘制原理图完成原理图后,需要用 ERC工具查错,直到没有原则性错误。其次设计组件封装需要自己设计并建立新的组件封装库。最终设计 PCB 板先画好 PCB 板的轮廓,确定工艺要求,接着把原理图传到PCB里,接着在网络表中布局和布线

#include <reg52.h>

#define dula P0		
sbit wei1=P2^4;
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;	

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; 
unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe};

sbit A1=P1^0; 
sbit B1=P1^1;
sbit C1=P1^2;
sbit D1=P1^3;
sbit k1 = P3^4;
sbit k2 = P3^5;
sbit k3 = P3^6;
sbit k4 = P3^7;

#define Coil_CD1 {A1=1;B1=1;C1=0;D1=0;}
#define Coil_AD1 {A1=0;B1=1;C1=1;D1=0;}
#define Coil_AB1 {A1=0;B1=0;C1=1;D1=1;}
#define Coil_BC1 {A1=1;B1=0;C1=0;D1=1;}
#define Coil_A1 {A1=0;B1=1;C1=1;D1=1;}
#define Coil_B1 {A1=1;B1=0;C1=1;D1=1;}
#define Coil_C1 {A1=1;B1=1;C1=0;D1=1;}
#define Coil_D1 {A1=1;B1=1;C1=1;D1=0;}
#define Coil_OFF {A1=1;B1=1;C1=1;D1=1;}

float Speed=1;
bit StopFlag;
void Display(unsigned char num);
void Init_Timer0(void);

void delay(unsigned int xms)				
{
	unsigned int i,j;
	for(i=xms;i>0;i--)		      
		for(j=112;j>0;j--);
}

void  motor_ffw()
 { 
   unsigned char i;
   unsigned int  j;
  	for (j=0; j<64; j++)
    { 

      for (i=0; i<8; i++)
        {
					if(k3==0) P1 = FFW[i];  
		      if(k4==0) P1 = FFZ[i]; 
					Display(Speed); 
        }
     } 
 }

main()
{
 Init_Timer0();
 Coil_OFF;
 while(1)  
  { 
   if(k1 == 0)
	{
		delay(10);
		if(k1 == 0)
		{
			while(k1 == 0);
			if(Speed<30)
				Speed++;			
		}
	}
	else if(k2 == 0)
		{
			delay(10);
			if(k2 == 0)
			{
				while(k2 == 0);
				if(Speed>1)
	   				Speed--;
			}
		}
    else if(k3 == 0)
		{
			  delay(10);
			  Speed=0000;
	      motor_ffw();		
			}
	else if(k4 == 0)
	{
			delay(10);
			Speed=1100;
			motor_ffw();
	}
Display(Speed);
  }
}
void Display(unsigned int num)
{
		unsigned int qian,bai,shi,ge;
	   qian=num/1000;
       bai=num%1000/100;
		shi = num%1000%100/10;
		ge = num%1000%100%10;
	  
	   wei1=1;		
		wei2=0;
		wei3=0;
		wei4=0;
		P0=table[qian];
		delay(2);
	
	   wei1=0;	
		wei2=1;
		wei3=0;
		wei4=0;
		P0=table[bai];
		delay(2);

		wei1=0;		
		wei2=0;
		wei3=1;
		wei4=0;
		P0=table[shi];
		delay(2);
		
		wei1=0;	
		wei2=0;
		wei3=0;
		wei4=1;
		P0=table[ge];
		delay(2);
}
void Init_Timer0(void)
{
 TMOD |= 0x01;	 		     
 EA=1;          
 ET0=1;           
 TR0=1;           
}
void Timer0_isr(void) interrupt 1 		
{
 static unsigned char times,i;
 TH0=(65536-1000)/256;		
 TL0=(65536-1000)%256;
 
 if(!StopFlag)
   {
  if(times==(32-Speed))
   {
   times=0;
   switch(i)
       {
				case 0:Coil_A1;i++;break;
				case 1:Coil_B1;i++;break;
				case 2:Coil_C1;i++;break;
				case 3:Coil_D1;i++;break;
				case 4:i=0;break;
				default:break;
	   }
}
 times++;
}
}

硬件调试

 

 

 .仿真调试:

  反转

  • 16
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,而步进电机是一种特殊的电动机,可以将电脉冲信号转换为精确的机械运动。因此,FPGA步进电机控制程序是一种通过FPGA实现步进电机驱动和控制的程序。 FPGA步进电机控制程序首先需要通过FPGA的I/O口与步进电机的控制电路连接。控制电路中通常包括电流放大器、细分驱动器和功率输出模块。程序通过FPGA的输出引脚向电流放大器发送驱动信号,控制步进电机运动。 在编写FPGA步进电机控制程序时,需要考虑以下几个方面:步进电机类型、工作模式、步进角度和频率、加减速度以及方向控制。 首先,根据使用的步进电机类型选择适当的驱动方式,如全步进或半步进。然后,通过FPGA的输出引脚控制细分驱动器,以控制步进电机的运动精度。 其次,确定步进角度和频率,即每个步进电机的转动角度和速度。可以通过FPGA的时钟信号和计数器来实现。通过控制时钟频率和计数器的计数值,可以调整步进电机的转动速度。 此外,加减速度是指步进电机启动和停止时的速度变化。可以使用FPGA的计时器、状态机或PWM信号来实现加减速控制,以确保步进电机平稳运行。 最后,方向控制是决定步进电机转动方向的关键。可以使用FPGA的输出引脚来设置方向引脚,通过控制引脚状态来改变步进电机的转动方向。 综合以上几点,FPGA步进电机控制程序需要编写适当的逻辑代码,使FPGA能够正确地生成驱动信号,控制步进电机的运动角度、速度和方向。编写这样的程序需要具备FPGA编程技巧和步进电机控制知识的基础。 总的来说,FPGA步进电机控制程序是一种能够将FPGA的可编程性与步进电机的精确运动转换相结合的程序,具有广泛的应用领域,如机器人、自动化设备等。通过合理编写该程序,可以实现精确的步进电机控制和运动控制。 ### 回答2: FPGA步进电机控制程序是一种用于控制步进电机运动的程序,其基于FPGA(可编程逻辑门阵列)技术实现。 步进电机是一种电动机,可以将电信号转化为机械运动,其控制通常需要精确的脉冲时序和方向控制。FPGA步进电机控制程序通过FPGA的可编程逻辑单元实现对步进电机的准确控制。 首先,FPGA步进电机控制程序需要定义步进电机的控制参数,包括脉冲频率、方向等。然后,通过数据通路将控制参数传输给FPGA的逻辑门阵列。 接下来,FPGA步进电机控制程序需要根据指定的频率和方向生成相应的脉冲序列。这通常通过计数器模块实现,计数器模块根据定义的频率计数并产生不同的输出电平。脉冲序列的频率决定了步进电机的运动速度,方向则通过定义的方向控制信号控制。 最后,FPGA步进电机控制程序将生成的脉冲序列通过输出引脚发送给步进电机驱动器。步进电机驱动器根据接收到的脉冲信号驱动步进电机旋转。根据脉冲序列的频率和方向变化,步进电机可以实现不同速度和方向的运动。 总结来说,FPGA步进电机控制程序通过FPGA技术实现对步进电机的精确控制。通过定义控制参数、生成脉冲序列并通过输出引脚发送给步进电机驱动器,实现步进电机的运动控制。这种控制程序通常可以灵活应用于各种步进电机控制场景,如机械臂、自动化设备等。 ### 回答3: FPGA步进电机控制程序是一种用于控制步进电机的程序,通过FPGA芯片实现电机的运动控制。步进电机是一种将电脉冲转换为机械运动的设备,常用于精确位置控制的应用领域。通过FPGA步进电机控制程序,可以实现对步进电机的速度、方向以及位置等参数的控制。 首先,在FPGA步进电机控制程序中,需要定义步进电机的控制接口。这包括设置电机驱动器的输入引脚,以及与FPGA芯片通信的输出引脚。通过这些引脚,可以将控制信号发送给步进电机驱动器,从而控制电机的运动。 其次,需要编写逻辑代码来生成控制脉冲。通过控制脉冲的产生,可以控制步进电机的每一步运动。在FPGA步进电机控制程序中,可以采用计数器来计算控制脉冲的频率和数量。根据需要,还可以编写代码来控制脉冲的方向,实现正转或反转运动。 此外,还需要在FPGA步进电机控制程序中实现限位检测功能。通过检测限位开关的状态,可以停止步进电机的运动,避免超出设定的运动范围。限位检测的实现可以通过读取输入引脚状态,或者设置中断来实现。 通过以上步骤,FPGA步进电机控制程序可以实现对步进电机的控制。通过调整控制参数和代码逻辑,还可以实现不同的运动功能和应用要求。在实际应用中,可以根据具体需求进行优化和改进,提高步进电机的运动精度和控制性能。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

揉揉102

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

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

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

打赏作者

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

抵扣说明:

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

余额充值