步进电机_步进电机控制 - CSDN
步进电机 订阅
步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。因此,步进电动机又称脉冲电动机。 [1] 展开全文
步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。因此,步进电动机又称脉冲电动机。 [1]
信息
外文名
stepping motor
别    称
脉冲电动机 [1]
工作原理
按电磁学原理,将电能转为机械能
中文名
步进电机
属    性
感应电机的一种
步进电机简介
步进电机又称为脉冲电机,基于最基本的电磁铁原理,它是一种可以自由回转的电磁铁,其动作原理是依靠气隙磁导的变化来产生电磁转矩。其原始模型是起源于1830年至1860年间。1870年前后开始以控制为目的的尝试,应用于氢弧灯的电极输送机构中。这被认为是最初的步进电机。二十世纪初,在电话自动交换机中广泛使用了步进电机。由于西方资本主义列强争夺殖民地,步进电机在缺乏交流电源的船舶和飞机等独立系统中得到了广泛的使用。二十世纪五十年代后期晶体管的发明也逐渐应用在步进电机上,对于数字化的控制变得更为容易。到了八十年代后,由于廉价的微型计算机以多功能的姿态出现,步进电机的控制方式更加灵活多样。 [2]  步进电机相对于其它控制用途电机的最大区别是,它接收数字控制信号(电脉冲信号)并转化成与之相对应的角位移或直线位移,它本身就是一个完成数字模式转化的执行元件。而且它可开环位置控制,输入一个脉冲信号就得到一个规定的位置增量,这样的所谓增量位置控制系统与传统的直流控制系统相比,其成本明显减低,几乎不必进行系统调整。步进电机的角位移量与输入的脉冲个数严格成正比,而且在时间上与脉冲同步。因而只要控制脉冲的数量、频率和电机绕组的相序,即可获得所需的转角、速度和方向。 [2]  我国的步进电机在二十世纪七十年代初开始起步,七十年代中期至八十年代中期为成品发展阶段,新品种和高性能电机不断开发,目前,随着科学技术的发展,特别是永磁材料、半导体技术、计算机技术的发展,使步进电机在众多领域得到了广泛应用。 [2]  作为一种控制用的特种电机,步进电机无法直接接到直流或交流电源上工作,必须使用专用的驱动电源(步进电机驱动器)。在微电子技术,特别计算机技术发展以前,控制器(脉冲信号发生器)完全由硬件实现,控制系统采用单独的元件或者集成电路组成控制回路,不仅调试安装复杂,要消耗大量元器件,而且一旦定型之后,要改变控制方案就一定要重新设计电路。这就使得需要针对不同的电机开发不同的驱动器,开发难度和开发成本都很高,控制难度较大,限制了步进电机的推广。 [2]  由于步进电机是一个把电脉冲转换成离散的机械运动的装置,具有很好的数据控制特性,因此,计算机成为步进电机的理想驱动源,随着微电子和计算机技术的发展,软硬件结合的控制方式成为了主流,即通过程序产生控制脉冲,驱动硬件电路。单片机通过软件来控制步进电机,更好地挖掘出了电机的潜力。因此,用单片机控制步进电机已经成为了一种必然的趋势,也符合数字化的时代趋。 [2] 
收起全文
精华内容
参与话题
  • 步进电机

    千次阅读 2018-04-17 21:24:35
    1.步进电机使用的几个概念:电机转动一圈的脉冲数=(步进电机)一圈的脉冲数 =细分数*每转脉冲数*减速比。 =(无刷伺服电机)一圈的脉冲数 = 编码器线数 *4 / 电子齿轮*减速比。:电机转动一圈的脉冲数即是转动360...

    1.步进电机使用的几个概念:

    电机转动一圈的脉冲数=(步进电机)一圈的脉冲数 =细分数*每转脉冲数*减速比。

                                     =(无刷伺服电机)一圈的脉冲数 = 编码器线数 *4 / 电子齿轮*减速比。

    :电机转动一圈的脉冲数即是转动360度所需脉冲,一般步进电机会与步进电机驱动器配合使用,这就需要明确细分数、步距角、减数比这三个概念。

    (1)细分数:步进电机的细分技术实质上是一种电子阻尼技术,其主要目的是减弱或消除步进电机的低频振动,提高电机的运转精度只是细分技术的一个附带功能。比如对于步进角为1.8°的两相混合式步进电机,如果细分驱动器的细分数设置为4,那么电机的运转分辨率为每个脉冲0.45°,电机的精度能否达到或接近0.45°,还取决于细分驱动器的细分电流控制精度等其它因素。不同厂家的细分驱动器精度可能差别很大;细分数越大精度越难控制。

    (2)步距角:也就是每转脉冲数,一般步距角在步进电机厂家虎

    (3)减数比:即减速装置的传动比,是传动比的一种,是指减速机构中瞬时输入速度与输出速度的比值,用符号“i”表示减速比的意思:比如减速比1/64,:如果步进电机输出1N.m的转矩的话,通过减速箱转换后的输出力矩64N.m,当然转速降低为原转速的1/64。

    展开全文
  • stm32简说步进电机(有代码)!!!

    万次阅读 多人点赞 2016-07-25 12:57:01
    步进电机(也称脉冲电机)是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速,停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载的变化,即给电机一个脉冲信号,电机则转过一个...


    步进电机(也称脉冲电机)(将电脉冲转换为相应的角位移或线位移的电磁机械装置,具有快速启动,停能力,在电机的负荷不超过它能提供的动态转矩时,可以通过输入脉冲来控制它在一瞬间的启动或者停止。在非超载的情况下,步距角和转速只和输入的脉冲频率有关,和环境温度,气压,振动无关,也不受电网电压的波动和负载变化的影响,因此,控制较为精准)即给电机一个脉冲信号,电机则转过一个步距角


    步进电机是一种感应电机,它的工作原理:利用电子电路,将直流电变成分时供电的,多相时序控制电流,用这种电流为步进电机供电,步进电机才能正常工作,驱动器就是为步进电机分时供电的,多相时序控制器,就是说:必须用由双环形脉冲信号功率驱动电路等组成的控制系统方可使用。


    步距角:控制系统每发一个步进脉冲信号,电机所转动的角度。电机出厂时给了一个步距角的值,如:86BYG250A型      电机的值为0.9、1.8(表示半步工作时为0.9,整步为1.8),被称之为“电机的固有步距角”,但是不一定是      电机实际工作时的真正步距角,真正的步距角和驱动器有关


    相数:电机内部的线圈组数,目前常用的有二相,三相,四相,五相步进电机。电机相数不同,其步距角也就不同了,          一般二相电机的步距角为0.9/1,8,三相为0.36/0.72,五相为0.36/0.72。在没有细分驱动器的情况下,用户主要            靠选择不同相数的步进电机来满足自己步距角的要求。如果使用细分驱动器,那么相数好像也就没有了意义

    拍数:完成一个磁场周期性变化所需脉冲数或导电状态,或指电机转过一个步距角所需脉冲数。以如下的四相电机为            例,有四相四拍运行方式,AB-BC-CD-DA-AB;四相八拍:A-AB-B-BC-C-CD-D-DA-A

               


    失步:电机运转时运转的步数不等于理论上的步数,称之为失步


    开环控制与闭环控制:(主要看系统中有没有反馈环节)(反馈指的是动作所引起的效果)

    (反馈简单的理解就是:“你打了别人一巴掌,我们看到了它的脸是红的,嗯嗯,这就是眼睛所得到的反馈”)

    闭环控制:存在反馈环节的控制,就是当前的系统能够实时的检测控制的输出结果,并将检测到的信息通过反馈环节反映到输入端,调整输入量,达到修正控制误差,提高控制精度的目的,(对外部扰动和系统参数变化不敏感)如:

    (闭环)

    全自动洗衣机,给洗衣机加水时,里边有一个红外传感器,扫描到水位高低,当水位合适时,洗衣机自动停止加水


    家用空调根据传感器采集到当前的温度,然后比较设定温度,通过设定指令,控制室内外机的工作情况,改变频率,压缩机的转速等进行简单的调节,然后不断地进行控制


    寻迹小车时,两边的红外传感器不断的检测黑线,将返回的结果输入到相应i/o口上,我们对这些i/o口进行中断检测就可以知道,当前时刻的位置,然后可以执行相应的操作(左转,右转);


    调节平衡天平的时候,其中一种方法就是利用mpu6050获取当前所处位置的角度,调用PID算法,对当前的位置或者角度进行处理,然后对调整后的角度再次进行反馈处理

    (家用空调调节温度)

    家用空调调节指定的温度,靠的是电子传感器,(电子传感器就是一个热敏电阻,不同的温度会有不同的阻值),利用也可以理解为电子膨胀,不同的温度会有不同的阻值。利用对入风口的空气进行取样,把数据传输到控制板上,然后,在与设定的温度进行比较,产生一个指令来实现控制。(制冷的话,比较之后:输出室内风机和室外机的开机指令,内外机开始工作(室外机包括压缩机,室外风机,四通阀等部件),工作一定温度的话,室内温度将会:1,(定频空调)达到设定值,室外机停止工作,室内机保持工作,保证空气循环,当室内温度逐渐上升,大于设定值2-3度时,室外机重新启动制冷,室内温度将又开始下降,重复这个过程,室内温度就能保持在设定温度值上下1度左右范围内波动; 2,(变频空调)接近设定值,室外机的变频板输出的频率下降,压缩机转速下降,制冷量也相应降低,室内温度保持在与设定值相同的数值下。随着室内热源的变化,室内机温度传感器实时检测温度的变化,主控板输出的控制信号使变频器跟随变化调节压缩机工作频率,从而改变瞬时制冷量,确保室内温度稳定)



    开环控制:不存在反馈环节的控制,也就是控制器与被控制对象间只有顺序作业而无反方向联系且控制单方向进行,

                      ,无自动纠偏能力,不用取输出量变化信号控制输入量。

                      

                       如:在开车的过程中,我们来控制方向盘

                       人工转换电扇的档位实现转速的控制,不用反馈回来实际的转速

                       给洗衣机加水时:我们通过来观察水位来确定什么时候关掉水龙头

    (所以,简单的说:就是看有没有反馈:开环没有,闭环有,对于用到机器上来说,每一件事都是有反馈的,只是情况不同而已,当反馈是人自己来判断的话,那么这个系统就是开环的,如果反馈是机器自己来判断的话,那么这个系统就是闭环的)                   



    从整体的角度来看:

    主控程序+按键+步进电机


    主控程序(test.c)

    #include "sys.h"
    #include "usart.h"		
    #include "delay.h"	
    #include "led.h" 
    #include "key.h"
    #include "motor.h"
    
    int main(void)
    {		 
    	u8 t;	  
    	Stm32_Clock_Init(9); 	//系统时钟设置
    	delay_init(72);	     	//延时初始化 
    	LED_Init();		  	 	//初始化与LED连接的硬件接口
    	KEY_Init();          	//初始化与按键连接的硬件接口
    	LED0=0;					//点亮LED
    	MOTOR_Init();
    	while(1)
    	{
    		MOTOR();
    	}		 
    }


    整体截图:

     


    然后接下来就是:led.c

    #include "sys.h"   
    #include "led.h"
    //	 	    
    //LED IO初始化
    void LED_Init(void)
    {
    	RCC->APB2ENR|=1<<2;    //使能PORTA时钟	   	 
    	RCC->APB2ENR|=1<<5;    //使能PORTD时钟	   	 
    	GPIOA->CRH&=0XFFFFFFF0; 
    	GPIOA->CRH|=0X00000003;//PA8 推挽输出   	 
        GPIOA->ODR|=1<<8;      //PA8 输出高
    											  
    	GPIOD->CRL&=0XFFFFF0FF;
    	GPIOD->CRL|=0X00000300;//PD.2推挽输出
    	GPIOD->ODR|=1<<2;      //PD.2输出高 
    }
    
    led.h

    #ifndef __LED_H
    #define __LED_H	 
    #include "sys.h"
    						  
    // 	   
    
    //LED端口定义
    #define LED0 PAout(8)	// PA8
    #define LED1 PDout(2)	// PD2	
    
    void LED_Init(void);	//初始化		 				    
    #endif
    

    然后就是:key.c

    #include "key.h"
    #include "delay.h"
    //	 
    //本程序只供学习使用,未经作者许可,不得用于其它任何用途
    //ALIENTEK Mini STM32开发板
    //按键输入 驱动代码		   
    //正点原子@ALIENTEK
    //技术论坛:www.openedv.com
    //修改日期:2014/3/06
    //版本:V1.0
    //版权所有,盗版必究。
    //Copyright(C) 广州市星翼电子科技有限公司 2009-2019
    //All rights reserved									   
    //	 
     	    
    //按键初始化函数 
    //PA0.15和PC5 设置成输入
    void KEY_Init(void)
    {
    	RCC->APB2ENR|=1<<2;     //使能PORTA时钟
    	RCC->APB2ENR|=1<<4;     //使能PORTC时钟
    	JTAG_Set(SWD_ENABLE);	//关闭JTAG,开启SWD
    	GPIOA->CRL&=0XFFFFFFF0;	//PA0设置成输入	  
    	GPIOA->CRL|=0X00000008;   
    	GPIOA->CRH&=0X0FFFFFFF;	//PA15设置成输入	  
    	GPIOA->CRH|=0X80000000; 			 
    	GPIOA->ODR|=1<<15;	   	//PA15上拉,PA0默认下拉
    	GPIOC->CRL&=0XFF0FFFFF;	//PC5设置成输入	  
    	GPIOC->CRL|=0X00800000;   
    	GPIOC->ODR|=1<<5;	   	//PC5上拉 
    } 
    //按键处理函数
    //返回按键值
    //mode:0,不支持连续按;1,支持连续按;
    //返回值:
    //0,没有任何按键按下
    //KEY0_PRES,KEY0按下
    //KEY1_PRES,KEY1按下
    //WKUP_PRES,WK_UP按下 
    //注意此函数有响应优先级,KEY0>KEY1>WK_UP!!
    u8 KEY_Scan(u8 mode)
    {	 
    	static u8 key_up=1;//按键按松开标志
    	if(mode)key_up=1;  //支持连按		  
    	if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
    	{
    		delay_ms(10);//去抖动 
    		key_up=0;
    		if(KEY0==0)return KEY0_PRES;
    		else if(KEY1==0)return KEY1_PRES;
    		else if(WK_UP==1)return WKUP_PRES; 
    	}else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1; 	     
    	return 0;// 无按键按下
    }
    

    key.h

    #ifndef __KEY_H
    #define __KEY_H	 
    #include "sys.h"
    //	 
    //本程序只供学习使用,未经作者许可,不得用于其它任何用途
    //ALIENTEK Mini STM32开发板
    //按键输入 驱动代码		   
    //正点原子@ALIENTEK
    //技术论坛:www.openedv.com
    //修改日期:2014/3/06
    //版本:V1.0
    //版权所有,盗版必究。
    //Copyright(C) 广州市星翼电子科技有限公司 2009-2019
    //All rights reserved									   
    //	 
    
    #define KEY0_PRES	1		//KEY0按下
    #define KEY1_PRES	2		//KEY1按下
    #define WKUP_PRES	3		//WK_UP按下
    
    #define KEY0  PCin(5)   	//PC5
    #define KEY1  PAin(15)	 	//PA15 
    #define WK_UP PAin(0)	 	//PA0  WK_UP
    	 
    void KEY_Init(void);		//IO初始化
    u8 KEY_Scan(u8 mode);		//按键扫描函数
    #endif
    

    接下来就是:motor.c

    #include "motor.h"
    #include "delay.h"
    //	 
    //电机初始化函数
    //PA0.15和PC5 设置成输入
    void MOTOR_Init(void)
    {
    	RCC->APB2ENR|=1<<2;     //使能PORTA时钟
    	
    	GPIOA->CRL&=0XFFFF0000;	//PA0设置成输出	  
    	GPIOA->CRL|=0X00003333;
    	//小车左轮
    	
    	
    	GPIOA->ODR|=0<<0;	   	//PA0上拉
    	GPIOA->ODR|=0<<1;	   	//PA1上拉
    	GPIOA->ODR|=0<<2;	   	//PA2上拉
    	GPIOA->ODR|=0<<3;	   	//PA3上拉 
    	
    	
    	RCC->APB2ENR|=1<<4;     //使能PORTC时钟
        //小车右轮
    	GPIOC->CRL&=0X00FFFFFF; //PC6,7
    	GPIOC->CRL|=0X33000000;
    	GPIOC->CRH&=0XFFFFFF00; //PC8,9
    	GPIOC->CRH|=0X00000033;
    	
    	GPIOC->ODR|=0<<6;	   	//PC6上拉
    	GPIOC->ODR|=0<<7;	   	//PC7上拉
    	GPIOC->ODR|=0<<8;	   	//PC7上拉
    	GPIOC->ODR|=0<<9;	   	//PC5上拉 
    } 
    
    
    
    void MOTOR(void)		//IO初始化
    {
    	while(1)
    	{
    //		L_A1 = 1; L_A2 = 0; L_A3 = 0; L_A4 = 0;
    //		delay_ms(10);
    //		L_A1 = 1; L_A2 = 1; L_A3 = 0; L_A4 = 0;
    //		delay_ms(10);
    //        L_A1 = 0; L_A2 = 1; L_A3 = 0; L_A4 = 0; 
    //		delay_ms(10);
    //		L_A1 = 0; L_A2 = 1; L_A3 = 1; L_A4 = 0; 
    //		delay_ms(10);
    //		
    //		
    //		L_A1 = 0; L_A2 = 0; L_A3 = 1; L_A4 = 0; 
    //		delay_ms(10);
    //		L_A1 = 0; L_A2 = 0; L_A3 = 1; L_A4 = 1; 
    //		delay_ms(10);
    //		L_A1 = 0; L_A2 = 0; L_A3 = 0; L_A4 = 1; 
    //		delay_ms(10);
    //		L_A1 = 1; L_A2 = 0; L_A3 = 0; L_A4 = 1; 
    //		delay_ms(10);
    		
    		
    		L_A1 = 1; L_A3 = 0; L_A2 = 0; L_A4 = 0;
    		delay_ms(10);
    		
                    L_A1 = 0; L_A3 = 1; L_A2 = 0; L_A4 = 0; 
    		delay_ms(10);
    		
    		
    		L_A1 = 0; L_A3 = 0; L_A2 = 1; L_A4 = 0; 
    		delay_ms(10);
    		L_A1 = 0; L_A3 = 0; L_A2 = 0; L_A4 = 1; 
    		delay_ms(10);
    		
    	}
    }
    

    motor.h

    #ifndef __MOTOR_H
    #define __MOTOR_H	 
    #include "sys.h"
    #include "delay.h"
    //	 
    //All rights reserved									   
    //	 
    
    #define L_A1  PAout(0)   	//PA0               
    #define L_A2  PAout(1)	 	//PA1               
    #define L_A3  PAout(2)   	//PA2                
    #define L_A4  PAout(3)	 	//PA3
    
    #define R_A1  PCout(6)   	//PC6 
    #define R_A2  PCout(7)	 	//PC7 
    #define R_A3  PCout(8)   	//PC8
    #define R_A4  PCout(9)	 	//PC9
    
    void MOTOR_Init(void);
    void MOTOR(void);
    	 
    #endif
    


    好了,以上就是我们的程序了,,,,,


    截图:

    如上,是我们要加载的程序



    本文大部分实例借鉴与:原子stm32

    展开全文
  • 步进电机原理

    万次阅读 2018-05-25 15:42:48
    步进电机也叫步进器,它利用电磁学原理,将电能转换为机械能,人们早在20世纪20年代就开始使用这种电机。随着嵌入式系统(例如打印机、磁盘驱动器、玩具、雨刷、震动寻呼机、机械手臂和录像机等)的日益流行,步进电机...

    步进电机也叫步进器,它利用电磁学原理,将电能转换为机械能,人们早在20世纪20年代就开始使用这
    种电机。随着嵌入式系统(例如打印机、磁盘驱动器、玩具、雨刷、震动寻呼机、机械手臂和录像机等)
    的日益流行,步进电机的使用也开始暴增。不论在工业、军事、医疗、汽车还是娱乐业中,只要需要把
    某件物体从一个位置移动到另一个位置,步进电机就一定能派上用场。步进电机有许多种形状和尺寸,
    但不论形状和尺寸如何,它们都可以归为两类:可变磁阻步进电机和永磁步进电机。本文重点讨论更为
    简单也更常用的永磁步进电机。
    步进电机的构造



    (图一,具有双齿槽和单绕组的定子)
    如图 1 所示,步进电机是由一组缠绕在电机固定部件--定子齿槽上的线圈驱动的。通常情况下,一根绕
    成圈状的金属丝叫做螺线管,而在电机中,绕在齿上的金属丝则叫做绕组、线圈、或相。如果线圈中电
    流的流向如图 1 所示,并且我们从电机顶部向下看齿槽的顶部,那么电流在绕两个齿槽按逆时针流向流
    动。根据安培定律和右手准则,这样的电流会产生一个北极向上的磁场。
    现在假设我们构造一个定子上缠绕有两个绕组的电机,内置一个能够绕中心任意转动的永久磁铁,
    这个可旋转部分叫做转子。图 2 给出了一种简单的电机,叫做双相双极电机,因为其定子上有两个绕组,
    而且其转子有两个磁极。如果我们按图 2a 所示方向给绕组 1 输送电流,而绕组 2 中没有电流流过,那
    么电机转子的南极就会自然地
    按图中所示,指向定子磁场的
    北极



    (图 2:双相双极电机)
    然后我们切断绕组 1 中的电流,按照图 2b 所示方向给绕组 2 输送电流,于是定子磁场会指向左侧,
    赛微电子网
    山东大学(威海)机电与信息工程学院——李斌  2
    从而使得转子旋转,其南极也指向左侧。
    接着,我们再将绕组 2 的电流切断,按照图 2c 的方向给绕组 1 输送电流,注意:这时绕组 1 中的电
    流流向与图 2a 所示方向相反。于是定子的磁场北极就会指向下,从而导致转子旋转,其南极也指向下
    方。
    然后我们又切断绕组 1 中的电流,按照图 2d 所示方向给绕组 2 输送电流,于是定子磁场又会指向右
    侧,从而使得转子旋转,其南极也指向右侧。。
    最后,我们再一次切断绕组 2 中的电流,并给绕组 1 输送如图 2a 所示的电流,这样,转子又会回到
    原来的位置。
    至此,我们对电机绕组完成了一个周期的电激励,电机转子旋转了一整圈。也就是说,电机的电频
    率等于它转动的机械频率。
    如果我们用 1 秒钟顺序完成了图 2 所示的这 4 个步骤,那么电机的电频率就是 1Hz。其转子旋转了
    一周,因而其机械频率也是 1Hz。总之,一个双相步进电机的电频率和机械频率之间的关系可以用下式
    表示:fe=fm*P/2 (1)
    其中,fe代表电机的电频率,fm代表其机械频率,而P则代表电机转子的等距磁极数。
    从图2中我们还可以看出,每一步操作都会使转子旋转90°,也就是说,一个双相步进电机每一步操作造
    成的旋转度数可由下式表示:1 step= 180°/P (2)
    由等式(2)可知,一个双极电机每动作一次可以旋转 180°/2=90°,这与我们在图 2 中看到的情形正好
    相符。此外,该等式还表明,电机的磁极数越多,步进精度就越高。常见的是磁极数在 12 和 200 个之
    间的双相步进电机,这些电机的步进精度在 15°和 0.9°之间。



    (图 3:双相六极电机)
    图 3 给出的例子是一个双相、6 极步进电机,其中包含 3 个永久磁铁,因而有 6 个磁极。第一步,
    如图 3a 所示,我们给绕组 1 施加电压,在定子中产生一个北极指向其顶部的磁场,于是,转子的南极(图
    3a 中红色的“S”一端)转向了该图的上方。接着,在图 3b 中,我们给绕组 2 施加电压,定子中产生一个
    北极指向其左侧的磁场。于是,转子的一个距离最近的南极转向了图的左方,即转子顺时针转动了 30°。
    第三步,在图 3c 中,我们又向绕组 1 施加一个电压,在定子中产生一个北极指向图下方的磁场,从而
    又使转子顺时针旋转 30°到达图 3c 所示的位置。而在图 3d 中,我们给绕组 2 施加电压,在定子中产生
    一个北极指向定子右侧的磁场,再一次使转子顺时针旋转 30°,到达图 3d 所示的位置。最后,我们再向
    绕组 1 施加电压,产生一个如图 3a 所示的北极指向定子上方的磁场,使得转子顺时针旋转 30°,结束一
    个电周期。如此可以看出,4 步电激励造成了 120°的机械旋转。也就是说,该电机的电频率是机械频率
    的 3 倍,这一结果符合等式 (1)。此外,我们从图 3 和等式(2)也能看出,该电机的转子每一步旋转 30°。


    如果同时向两个绕组输送电流,还能增大电机的扭矩,如图 4 所示。这时,电机定子的磁场是两个
    绕组各自产生的磁场的矢量和,虽然这一磁场每一次动作仍然只使电机旋转 90°,就象图 2 和图 3 中一
    样,但因为我们同时激励两个电机绕组,所以此时的磁场比单独激励一个绕组时更强。由于该磁场是两
    个垂直场的矢量和,因此它等于单独每个场的 2×1.414 倍,从而电机对其负载施加的扭矩也成正比增大。
    电机的激励顺序
    既然我们知道了一系列激励会使步进电机旋转,接下来就要设计硬件来实现所需的步进序列。一块能让
    电机动起来的硬件(或结合了硬件和软件的一套设备)就叫做电机驱动器。
    从图4中可以看出我们怎样激励双相电机的绕组才能使电机转子旋转,图中,电机内的绕组抽头分别被
    标为1A、1B、2A和2B。其中,1A和1B是绕组1的两个抽头,2A和2B则是绕组2的两个抽头。
    首先,要给脚 1B 和 2B 施加一个正电压,并将 1A 和 2A 接地。然后,给脚 1B 和 2A 施加一个正电
    压,而将 1A 和 2B 接地,这一过程其实取决于导线绕齿槽缠绕的方向,假设导线缠绕的方向与上一节所
    述相符。依次进行下去,我们就得到了表 1 中总结的激励顺序,其中,“1”表示正电压,“0”表示接地。


    (表 1:双相电机动作过程中的绕组抽头极性)
    电流在电机绕组中有两种可能的流向,这样的电机就叫做双极电机和双极驱动序列。双极电机通常
    由一种叫做 H 桥的电路驱动,图 5 给出了连接 H 桥和步进电机两根抽头的电路。H 桥通过一个电阻连
    接到一个电压固定的直流电源(其幅度可根据电机的要求选取),然后,该电路再经过 4 个开关(分别标为
    S1、S2、S3 和 S4)连接到绕组的两根抽头。这一电路的分布看起来有点象一个大写字母 H,因此叫做 H
    桥。


    (图 5:可用于驱动电机每个绕组的 H 桥电路)
    从表 1 中可以看出,要激励该电机,第一步应将抽头 2A 设为逻辑 0,2B 设为逻辑 1,于是,我们可
    以闭合开关 S1 和 S4,并断开开关 S2 和 S3。接着,需要将抽头 2A 设为逻辑 1,2B 设为逻辑 0,于是,
    我们可以闭合 S2、S3,并断开 S1 和 S4。与此类似,第三步我们可以闭合 S2、S3 并断开 S1 和 S4,第
    四步则可以闭合 S1、S4 并断开 S2、S3。
    对绕组 1 的激励方法也不外乎如此,使用一对 H 桥就能产生需要的激励信号序列。表 2 所示就是激
    励过程中每一步开关所在的位置。



    (表 2:双相电机动作过程中开关的位置)
    注意,如果 R=0,而开关 S1 和 S3 又不小心同时闭合,那么流经开关的电流将达到无穷大。这时,
    不但开关会被烧坏,电源也可能损坏,因此电路中使用了一个非零阻值的电阻。尽管这个电阻会带来一
    定的功耗,也会降低电机驱动器的效率,但它可以提供短路保护。
    单极电机及其驱动器
    前面我们已经讨论了双极步进电机和驱动器。单极电机与双极电机类似,不同的是在单极电机中外
    部能够接触到的只有每个绕组的中心抽头,如图 6 所示。我们将从绕组顶部抽出的抽头标为抽头 B,底
    部抽出的标为抽头 A,中间的为抽头 C。



    (图 6)
    有时我们会遇到一些抽头没有标注的电机,如果我们清楚步进电机的构造,就很容易通过测量抽头
    之间的阻值,识别出哪些抽头属于哪根绕组。不同绕组的抽头之间阻抗通常为无穷大。如果经测量,抽
    头 A 和 C 之间的阻抗为 100 欧姆,那么抽头 B 和 C 之间的阻抗也应是 100 欧姆,而 A 和 B 之间的阻抗
    为 200 欧姆。200 欧姆这一阻抗值就叫做绕组阻抗。
    图 7 给出一个单极电机的单相驱动电路。从中可以看出,当 S1 闭合而 S2 断开时,电流将由右至左
    流经电机绕组;而当 S1 断开,S2 闭合时,电流流向变为由左至右。因此,我们仅用两个开关就能改变
    电流的流向(而在双极电机中需要 4 个开关才能做到)。表 3 所示为单极电机驱动电路中,每一步激励时
    开关所处的位置。



    (图 7:单极电机的控制电路)
    虽然单极电机的驱动器控制起来相对简单,但由于在电机中使用了中心抽头,因此它比双极电机更
    复杂,而且其价格通常比双极电机贵。此外,由于电流只流经一半的电机绕组,所以单极电机只能产生
    一半的磁场。
    在知道了单极电机和双极电机的构造原理之后,当我们遇到一个没有标示抽头也没有数据手册的电
    机时,我们就能自己推导出抽头和绕组的关系。带 4 个抽头的电机就是一个双相双极电机,我们可以通
    过测量导线之间的阻抗来分辨哪两个抽头属于同一个绕组。带6个抽头的电机可能是一个双相单极电机,
    也可能是一个三相双极电机,具体情况可以通过测量导线之间的阻抗来确定。
    电机控制
    本文前面讨论的电机控制理论可以采用全硬件方案实现,也可以用微控制器或 DSP 实现。图 8 说明
    了如何用晶体管作为开关来控制双相单极电机。每个晶体管的基极都要通过一个电阻连接到微控制器的
    一个数字输出上,阻值可以从 1 到 10M 欧姆,用于限制流入晶体管基极的电流。每个晶体管的发射极均
    接地,集电极连到电机绕组的 4 个抽头。电机的中心抽头均连接到电源电压的正端。



    (图 8:步进电机的控制电路图)
    每个晶体管的集电极均通过一个二极管连接到电压源,以保护晶体管不被旋转时电机绕组上的感应
    电流烧坏。转子旋转时,电机绕组上会出现一个感应电压,如果晶体管集电极没有通过二极管连接到电
    压源,感应电压造成的电流就会涌入晶体管的集电极。
    举个例子,假设数字输出 do1 为高而 do2 为低,于是 do1 会使晶体管 T1 导通,电流从+V 流经中心
    抽头和 T1 的基极,然后由 T1 的发射极输出。但此时 do2 处于断开状态,因此电流无法流经 T2。这样
    推理下去,我们就能将表 3 改为驱动电机所需的微控制器数字输出的改变顺序。
    一旦清楚了驱动电机所需的硬件和数字输出的顺序,我们就可以对最顺手的微控制器或 DSP 编写软
    件,实现这些序列。
    固件控制
    我本人在一块 Microchip PIC16F877 上,利用 1N4003 二极管和 2SD1276A 达灵顿晶体管实现了以上
    谈到的电机控制器。PIC 的 PortA 第 0 位到第 3 位用来做数字输出。电机采用在 Jameco 购买的 5V 双相
    单极电机(Airpax [Thomson]生产,型号为 M82101-P1),并且用同一个 5V 电源为 PIC 和电机供电。但在
    真正应用时,为避免给微控制器的电源信号引入噪声,建议大家还是分别用不同的电源为电机和微控制


    转载----百度文库点击打开链接

    展开全文
  • 51单片机之步进电机实验

    万次阅读 2019-05-19 19:30:38
    1.步进电机图片 2.步进电机介绍 步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个...

    1.步进电机图片

     

    2.步进电机介绍

    步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使得步进电机在速度、位置等控制领域的控制操作非常简单。虽然步进电机应用广泛,但它并不像普通的直流和交流电机那样在常规状态下使用,它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用.因此.用好步进电机也非易事,它涉及机械、电机、电子及计算机等许多专业知识。

    3.步进电机分类

    (1)永磁式(PM)。一般为二相,转矩和体积较小,步距角一般为7.5°或15°。

    (2)反应式(VR)。一般为三相,可实现大转矩输出.步距角一般为1.5°,但噪声和振动都很大。在欧美等发达国家20世纪80年代已经淘汰。

    (3)混合式(HB)。指混合了永磁式和反应式的优点。它又分为二相和五相,二相步距角一般为180°,而五相步距角一般为0.72°。这种步进电机的应用最为广泛。

    4.技术指标

        (1)步进电机的静态指标

        ①相数—电机内部的线圈组数。目前常用的有二相、三相、四相、五相步进电机。电机相数不同,其步距角也不同。一般二相电机的步距角为0.9°/1.8°,三相为0.75°/1.5°、五相为0.36°/0.72°。在没有细分驱动器时,用户主要靠选择不同相数的步进电机来满足自己步距角的要求.如果使用细分驱动器,则“相数”将变得没有意义,用户只需在驱动器上改变细分数,就可以改变步距角。

        ②步距角—表示控制系统每发一个步进脉冲信号,电机所转动的角度。电机出厂时给出了一个步距角的值,如86BYG250A型电机的值为0.9°/1.8°(表示半步工作时为0.9°、整步工作时为1.8°),这个步距角可称为“电机固有步距角”,它不一定是电机实际工作时的真正步距角,真正的步距角和驱动器有关。

        ③拍数—完成一个磁场周期性变化所需脉冲数或导电状态.或指电机转过一个步距角所需脉冲数。以四相电机为例,有四相四拍运行方式,即AB-BC-CD-DA-AB:四相八拍运行方式,即A-AB-B-BC-C-CD-D-DA-A

        ④定位转矩—电机在不通电状态下,转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成).

    ⑥保持转矩—步进电机通电但没有转动时,定子锁住转子的力矩。它是步进电机最重要的参数之一,通常步进电机在低速时的力矩接近保持转矩。由于步进电机的输出力矩随速度的增大而不断衰减,输出功率也随速度的增大而变化,所以保持转矩就成了衡量步进电机最重要参数之一。比如,当人们说2N·m的步进电机时,在没有特殊说明的情况下,是指保持转矩为2N·m的步进电机。

    (2)步进电机的动态指标

    ①步距角精度—步进电机每转过一个步距角的实际值与理论值的误差,用百分比表示:误差/步距角X100%。不同运行拍数其值不同,四拍运行时应在5%之内,八拍运行时应在15%以内。

    ②失步—电机运转时运转的步数不等于理论上的步数,称为失步。

    ③失调角—转子齿轴线偏移定子齿轴线的角度.电机运转必存在失调角,由失调角产生的误差,采用细分驱动是不能解决的。

    最大空载起动频率—电机在某种驱动形式、电压及额定电流下,在不加负载的情况下,能够直接起动的最大频率。

    最大空载运行频率—电机在某种驱动形式、电压及额定电流下,电机不带负载的最高转速频率。

    运行矩频特性—电机在某种测试条件下,测得运行中输出力矩与频率关系的曲线称为运行矩频特性。它是电机诸多动态曲线中最重要的,也是电机选择的根本依据,如图所示。

    电机一但选定,电机的静力矩确定,而动态力矩却不然.电机的动态力矩取决于电机运行时的平均电流(而非静态电流),平均电流越大,电机输出力矩越大.即电机的频率特性越硬。

      

     

    其中.曲线3电流最大或电压最高;曲线I电流最小或电压最低,曲线与负载的交点为负载的最大速度点。要使平均电流大,尽可能提高驱动电压,或采用小电感大电流的电机。      

    ④电机的共振点—步进电机均有固定的共振区域,其共振区一般在50r/min-80r/min或在180r/min左右。电机驱动电压越高,电机电流越大,负载越轻,电机体积越小。则共振区向上偏移,反之亦然。为使电机输出电矩大、不失步且整个系统的噪声降低,一般工作点均应偏移共振区较多。因此,在使用步进电机时应避开此共振区。     

    5.步进电机工作原理

    步进电机是一种将电脉冲转换成相应角位移或线位移的电磁机械装置。它具有快速启、停能力,在电机的负荷不超过它能提供的动态转矩时,可以通过输入脉冲来控制它在一瞬间的启动或停止。步进电机的步距角和转速只和输入的脉冲频率有关,和环境温度、气压、振动无关,也不受电网电压的波动和负载变化的影响。因此,步进电机多应用在需要精确定位的场合。  

    (1)工作原理

    步进电机有三线式、五线式和六线式,但其控制方式均相同,都要以脉冲信号电流来驱动.假设每旋转一圈需要200个脉冲信号来励磁,可以计算出每个励磁信号能使步进电机前进1.8°。其旋转角度与脉冲的个数成正比。步进电动机的正、反转由励磁脉冲产生的顺序来控制。六线式四相步进电机是比较常见的,它的控制等效电路如下图所示。它有4条励磁信号引线A,/A,B,/B 通过控制这4条引线上励磁脉冲产生的时刻,即可控制步进电机的转动.每出现一个脉冲信号,步进电机只走一步。因此,只要依序不断送出脉冲信号,步进电机就能实现连续转动。   

     

    (2)励磁方式

    步进电机的励磁方式分为全步励磁和半步励磁两种。其中全步励磁又有一相励磁和二相励磁之分;半步励磁又称一二相励磁。假设每旋转一圈需要200个脉冲信号来励磁,可以计算出每个励磁信号能使步进电动机前进1.8°。简要介绍如下。

    ①一相励磁—在每一瞬间,步进电机只有一个线圈导通.每送一个励磁信号,步进电机旋转1.8,这是三种励磁方式中最简单的一种。

    其特点是:精确度好、消耗电力小,但输出转矩最小,振动较大。如果以该方式控制步进电机正转,对应的励磁顺序如下表所示。若励磁信号反向传送,则步进电机反转。表中的1和0表示送给电机的高电平和低电平。

     

    ②二相励磁—在每一瞬间,步进电动机有两个线圈同时导通。每送一个励磁信号,步进电机旋转1.8。

    其特点是:输出转矩大,振动小,因而成为目前使用最多的励磁方式。如果以该方式控制步进电机正转,对应的励磁顺序见下表。若励磁信号反向传送,则步进电机反转。

     

      ③一二相励磁—为一相励磁与二相励磁交替导通的方式。每送一个励磁信号,步进电机旋转0.9。

    其特点是:分辨率高,运转平滑,故应用也很广泛。如果以该方式控制步进电机正转,对应的励磁顺序见下表。若励磁信号反向传送,则步进电机反转。

     

    6.步进电机的驱动

    步进电机的驱动可以选用专用的电机驱动模块,如L298, FF5754等,这类驱动模块接口简单,操作方便,它们既可驱动步进电机,也可驱动直流电机。除此之外,还可利用三极管自己搭建驭动电路。不过这样会非常麻烦,可靠性也会降低。另外,还有一种方法就是使用达林顿驱动器ULN2003,该芯片单片最多可一次驱动八线步进电机,当然如果只有四线或六线制的也是没有问题的。

    首先我们看一下电路原理图

     本实验采用四线双极性步进电机,该电机与TC1117连接如上图所示,M_IN为单片机控制口,M_OUT为电机接入口,其中M_IN分别控制步进电机的相序A,B.

    TC1117芯片工作逻辑真值表:

    开发板上使用的 4线双极性步进电机,其有两相A,B,每个绕组有两根线,A+和A-B+和 B-,运行方式可以是A+ —A-—B+—B-,如果想换个方向运行,可以是 A- —A+—B—B+。

    步进电机的四个引脚A+、A-、B+、B-分别连接到OUA、OUTB、OUTC、OUTD四个引脚

     

    实际物理连接图如下:

     

     

    示例程序为:

     

       #include "reg52.h"
       
       typedef unsigned char u8;
       typedef unsigned int u16;
    
       sbit MOTOA = P1^0; //A+引脚
       sbit MOTOB = P1^1; //A-引脚
       sbit MOTOC = P1^2; //B+引脚
       sbit MOTOD = P1^3; //B-引脚
    
       #define SPEED 60000
    
       void delay(u16 i) //延时函数
       {
       while(i --);
       }
    
       void main()
       {
    
       P1 = 0x00; //电机处于待机状态
       while(1)
       {
       MOTOA = 1; //A+状态
       MOTOB = 0;
       MOTOC = 1;
       MOTOD = 1;
       delay(SPEED); //延时
    
       MOTOA = 0; //A-状态
       MOTOB = 1;
       MOTOC = 1;
       MOTOD = 1;
       delay(SPEED); //延时
    
       MOTOA = 1; //B+状态
       MOTOB = 1;
       MOTOC = 1;
       MOTOD = 0;
       delay(SPEED); //延时
    
       MOTOA = 1; //B-状态
       MOTOB = 1;
       MOTOC = 0;
       MOTOD = 1;
       delay(SPEED); //延时
    
       }
       }
    
    
    
    
    

     

    上例程序驱动步进电机的方向为: A+ —A-—B+—B-,

    如果想换个方向运行,也就是 A- —A+—B—B+,可以使用以下程序:

       #include "reg52.h"
       
       typedef unsigned char u8;
       typedef unsigned int u16;
    
       sbit MOTOA = P1^0; //A+引脚
       sbit MOTOB = P1^1; //A-引脚
       sbit MOTOC = P1^2; //B+引脚
       sbit MOTOD = P1^3; //B-引脚
    
       #define SPEED 60000
    
       void delay(u16 i) //延时函数
       {
       while(i --);
       }
    
       void main()
       {
    
       P1 = 0x00; //电机处于待机状态
       while(1)
       {
       MOTOA = 0; //A-状态
       MOTOB = 1;
       MOTOC = 1;
       MOTOD = 1;
       delay(SPEED); //延时
    
       MOTOA = 1; //A+状态
       MOTOB = 0;
       MOTOC = 1;
       MOTOD = 1;
       delay(SPEED); //延时
    
       MOTOA = 1; //B-状态
       MOTOB = 1;
       MOTOC = 0;
       MOTOD = 1;
       delay(SPEED); //延时
    
       MOTOA = 1; //B+状态
       MOTOB = 1;
       MOTOC = 1;
       MOTOD = 0;
       delay(SPEED); //延时
    
       }
       }
    
    
    
    
    

    如果想两个方向轮流运行,可以将上面两个程序结合在一块使用。

    展开全文
  • 步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这...
  • Arduino基础入门篇26—步进电机

    万次阅读 多人点赞 2019-11-04 15:04:25
    本篇使用ULN2003驱动五线四相减速步进电机
  • 步进电机的细分控制原理

    万次阅读 多人点赞 2017-10-21 11:24:07
    看完第一篇文章应该对步进电机的结构有所了解了,下面将详细介绍一下步进电机的细分控制。  无论什么样的电机,控制方法和其结构是息息相关的。通过上一篇文章之后,我们知道按一定的顺序给步进电机的各相轮流通电...
  • 最近一个项目用到步进电机,老板叫我选一下用什么样的。。以前没有接触过,开始上某宝淘,一头雾水,不知该选啥样的。他们有一个重要的指标就是扭矩的大小,单位是N·m,物理知识基本忘了,这是个什么鬼?然后只能...
  • 基于STM32F4单片机对步进电机的控制(有代码)

    万次阅读 多人点赞 2019-01-05 11:13:08
    步进电机是将电脉冲控制信号转变为角位移或线位移的一种常用的数字控制执行元件,又称为脉冲电机。在驱动电源的作用下,步进电机受到脉冲的控制,其转子的角位移量和速度严格地与输入脉冲的数量和脉冲频率成正比。...
  • 步进电机失步(丢步)的原因和对策步进电机可以根据脉冲数和脉冲频率来对电机实现开环控制位置和速度,是一种便宜、简单好用的控制类电机,在自动化控制领域得到越来越广泛的应用。但由于步进电机不是闭环控制,选型...
  • 很多用户误以为步进电机驱动器的细分越高,步进电机的精度就越高,其实这是一种错误的观念,比如步进电机驱动器细分较高的可以达到60000个脉冲一转,而步进电机实际是无法分辨这个精度的,当驱动器设置为60000个脉冲...
  • PWM脉冲数控制步进电机

    万次阅读 多人点赞 2017-08-07 10:19:42
    说起步进电机,我们就聊一聊步进电机的那些事,我想起在这之前 还用了L298N来驱动电机,那真是一个悲惨的故事,过程就不说出了让大家开心开心了。故事结果就是步进电机理都不理我,就是不转。 可见驱动的适合很重要...
  • 步进电机控制系统的Simulink仿真模型

    千次阅读 热门讨论 2019-01-17 18:22:40
    电机模型如下: 双击示波器:
  • 步进电机基础及工作原理

    万次阅读 2017-10-18 21:14:48
    步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于控制脉冲信号的频率和脉冲数。 脉冲数越多,电机转动的角度越大。 脉冲的频率越高,电机转速越快,...
  • 如果没有细分,那么步进电机每接受一个脉冲,就会转动一个步距角。加入驱动器的细分后,则每发出一个脉冲,电机旋转的角度=步距角/细分数。
  • 步进电机步距角的计算

    千次阅读 2018-08-24 18:22:19
    步进电机定子相数:单相/两相/三相/四相/五相结构工作原理文章目录决定步距角的因素单相步进电机两相步进电机三相步进电机四相步进电机五相步进电机相数与特性:分辨率、振动、转速当步进电机切换一次定子绕组的...
  • 步进电机转速与脉冲频率的关系

    万次阅读 2017-08-08 00:09:37
    摘要: 1、何为步进电机和步进驱动器? 步进电机是一种与专门用于速度和位置精确控制的特种电机,它旋转是以固定的角度(称为“步距角”  )一步一步运行的,故称步进电机。其特点是没有累积误差,接收到控制器发来的...
  • Arduino使用步进电机

    万次阅读 2017-11-12 19:55:55
    步进电机与Arduino的连线参考的http://www.arduino.cn/thread-19050-1-1.html中给出的连线。连线示意图如下: 实际连线图如下: 使用Stepper类库中自带的...// 初始化步进电机要使用的Arduino的引脚编号Stepper mySte
  • 步进电机的三种驱动方式:转自http://www.ing10bbs.com/forum.php?mod=viewthread&tid=1002&extra=page%3D2
  • 单片机控制步进电机-电路连接

    千次阅读 多人点赞 2019-02-22 21:26:14
    单片机控制步进电机-线路连接 说明:如何利用单片机去控制步进电机?本案例讲解的内容是硬件连接部分,采用常用的电子器件去实现单片机控制步进电机的功能。后续会分别讲解单片机程序,S曲线生成方法,上位机等...
1 2 3 4 5 ... 20
收藏数 7,714
精华内容 3,085
关键字:

步进电机