步进电机stepmotor

硬件部分

通过给安装在定子的轮毂上的四个电磁铁依次通电
通过齿轮结构的传动
来带动中间的永磁体转子来转动
在这里插入图片描述

在这里插入图片描述
低精度,小功率,低功转化率的驱动方法
在这里插入图片描述
较高精度,较大功率,高功转化率的驱动方法

电机的几线几相这里及其分类就不做赘述了

说一下电机使用的注意事项
在这里插入图片描述

  1. 电压控制 与 单相不可长时间通电
  2. 专业的驱动型片和驱动程序,可以让步进电机做到十分精准的地步,(当然步进电机本身也要有足够精准的工艺),可以确定向360/256°的256个方向指定转动并朝向(换个思路,三相或六相电机就可完成360/360°的个方向转向)
  3. 步进电机的
扭矩 l = f r
与电流直接相关(电流控制力的大小)
速度 v = w r t = w r (1/Fs)
与电机的通电频率有关 

软件部分

void STEP_MOTOR_Init(void){ 
	//step_motor initialize
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//the clock that's specially prepared for the multiplexed GPIO_Pin (the original is for JTAG)
		GPIO_InitTypeDef	GPIO_InitStructure;//3 enum variables respectively control the pin, mode and crystal speed
		GPIO_InitStructure.GPIO_Pin = STEP_MOTOR_A | STEP_MOTOR_B | STEP_MOTOR_C | STEP_MOTOR_D;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
		GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHz;
	//there's some prepared_presentation for motor(not in variable, but some funtions are prepared)
	GPIO_Init (STEP_MOTOR_PORT, &GPIO_InitStructure);
	//firstly disable JTAG to change the flection of the pins ,     remap means re-define(configuration)
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
	//turn off the power to preven the motor to constantly consume the power and being to hot
	STEP_MOTOR_OFF();
}

void STEP_MOTOR_OFF (void){//turn the motor off
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B | STEP_MOTOR_C | STEP_MOTOR_D);//reset all the pins
}

对角双电机间歇往返程序

void STEP_MOTOR_4S (u8 speed){//µç»ú¹Ì¶¨Î»ÖÃ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A| STEP_MOTOR_C);	//¸÷½Ó¿ÚÖÃ0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_D); //¸÷½Ó¿ÚÖÃ1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B | STEP_MOTOR_C | STEP_MOTOR_D);
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_D);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_C); //1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B | STEP_MOTOR_C | STEP_MOTOR_D);
	delay_ms(speed); //ÑÓʱ
	STEP_MOTOR_OFF(); //½øÈë¶Ïµç״̬£¬·Àµç»ú¹ýÈÈ
}

相邻双电机间歇驱动

void STEP_MOTOR_4R (u8 speed){//µç»ú˳ʱÕ룬4ÅÄ£¬Ëٶȿ죬Á¦Ð¡
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_C | STEP_MOTOR_D);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A| STEP_MOTOR_D);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_C | STEP_MOTOR_D);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_D);//1
	delay_ms(speed); //ÑÓʱ
	STEP_MOTOR_OFF(); //½øÈë¶Ïµç״̬£¬·Àµç»ú¹ýÈÈ
}

void STEP_MOTOR_4L (u8 speed){//µç»úÄæÊ±Õ룬4ÅÄ£¬Ëٶȿ죬Á¦Ð¡
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_C | STEP_MOTOR_D);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_D);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_C | STEP_MOTOR_D);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_D);//1
	delay_ms(speed); //ÑÓʱ
	STEP_MOTOR_OFF(); //½øÈë¶Ïµç״̬£¬·Àµç»ú¹ýÈÈ
}

双-单电机间歇驱动

void STEP_MOTOR_8R (u8 speed){//µç»ú˳ʱÕ룬8ÅÄ£¬½Ç¶ÈС£¬ËÙ¶ÈÂý£¬Á¦´ó
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C | STEP_MOTOR_D);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_A);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_C | STEP_MOTOR_D);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_C | STEP_MOTOR_D);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_B);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_D);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B | STEP_MOTOR_D);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_C);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_C | STEP_MOTOR_D);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B | STEP_MOTOR_C);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_D);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_D);//1
	delay_ms(speed); //ÑÓʱ
	STEP_MOTOR_OFF(); //½øÈë¶Ïµç״̬£¬·Àµç»ú¹ýÈÈ
}

void STEP_MOTOR_8L (u8 speed){//µç»úÄæÊ±Õ룬8ÅÄ£¬½Ç¶ÈС£¬ËÙ¶ÈÂý£¬Á¦´ó
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B | STEP_MOTOR_C);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_D);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_C | STEP_MOTOR_D);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B | STEP_MOTOR_D);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_C);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_D);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_C | STEP_MOTOR_D);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_B);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_C | STEP_MOTOR_D);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_B);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C | STEP_MOTOR_D);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_A);//1
	delay_ms(speed); //ÑÓʱ
	GPIO_ResetBits(STEP_MOTOR_PORT,STEP_MOTOR_B | STEP_MOTOR_C);//0
	GPIO_SetBits(STEP_MOTOR_PORT,STEP_MOTOR_A | STEP_MOTOR_D);//1
	delay_ms(speed); //ÑÓʱ
	STEP_MOTOR_OFF(); //½øÈë¶Ïµç״̬£¬·Àµç»ú¹ýÈÈ
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值