四相八拍电机 --- linux驱动

四相八拍电机工作原理

四相八拍,也叫半步:AB—B—BC—C—CD—D—DA—A,再次从头循环。
四相:指步进电机中有四组线圈。
八拍:指的是四组线圈的通电时序。

步进电机:就是将电脉冲信号转变为角
位移或者线位移的开环控制电机(即无反馈)。

四线双极性步进电机
在这里插入图片描述
通常直接使用高低电平的方式直接驱动,常见的控制方式是四拍(整步)、八拍(半步)。
为了减弱或消除步进电机的低频振动开发了细分驱动技术细分后电机运行时的实际步距角是基本步距角的几分之一,微步即1/4-step、1/8-step、1/16-step等
比如,两相步进电机的基本步距角是1.8°,即一个脉冲走1.8°,如果没有细分,则是200个脉冲走一圈360°。细分是通过驱动器靠精确控制电机的相电流所产生的,如果是10细分,则发一个脉冲电机走0.18°,即2000个脉冲走一圈360°,电机的精度能否达到或接近0.18°,还取决于细分驱动器的细分电流控制精度等其它因素。

在这里插入图片描述
四拍、八拍可使用ULN2003进行简易驱动控制,上电时序如下。
如果要使用更多级的微步控制就需要使用专门的驱动芯片,如TI的DRV8889A-Q1 。

我们这里是八拍,所以直接使用GPIO控制

8拍(半步)方式驱动时序

8拍线圈上电时序表如下:

电极 1 2 3 4 5 6 7 8

A+ 1 1 0 0 0 0 0 1

A- 0 0 0 1 1 1 0 0

B+ 0 1 1 1 0 0 0 0

B- 0 0 0 0 0 1 1 1
电机转动方向如下所示,再次从头循环
A—AB—B–BC—C—CD—D—DA
在这里插入图片描述

反转时,控制时序倒过来控制就可实现反向转动。

实用简单的C代码,描述一个四相八拍电机的驱动:

//一个电机需要4个GPIO控制,下面是4组宏,控制其

#define STEP_1_H P11 = 1 //⾼电平

#define STEP_1_L P11 = 0 //低电平

#define STEP_2_H P12 = 1

#define STEP_2_L P12 = 0

#define STEP_3_H P13 = 1

#define STEP_3_L P13 = 0

#define STEP_4_H P14 = 1

#define STEP_4_L P14 = 0

uint8 motor_state = 0; //步进电机的状态

uint8 rotate_speed = 0;

uint16 motor_cnt = 0; //计数

void Step_Motor_Driver(void)
{
	if (++ motor_cnt >= rotate_speed)
	{
	
	motor_cnt = 0;
	
	switch (motor_state)
	
	{

		case 0:
		
		STEP_1_L;
		
		STEP_2_L;
		
		STEP_3_L;
		
		STEP_4_L;
	
		break;
		
		case 1: //对应 A STEP_1_H;
		
		STEP_2_L;
		
		STEP_3_L;
		
		STEP_4_L;
		
		motor_state = 2;
		
		break;
		
		case 2: //对应 AB STEP_1_H;
		
		STEP_2_H;
		
		motor_state = 3;
		
		break;
		
		case 3: //对应 B STEP_1_L;
		
		STEP_2_H;
		
		STEP_3_L;
		
		STEP_4_L;
		
		motor_state = 4;
		
		break;
		
		case 4: //对应 BC STEP_1_L;
		
		STEP_2_H;
		
		STEP_3_H;
		
		STEP_4_L;
		
		motor_state = 5;
		
		break;
		
		case 5: //对应 C STEP_1_L;
		
		STEP_2_L;
		
		STEP_3_H;
		
		STEP_4_L;
		
		motor_state = 6;
		
		break;
		
		case 6: //对应 CD STEP_1_L;
		
		STEP_2_L;
		
		STEP_3_H;
		
		STEP_4_H;
		
		motor_state = 7;
		
		break;
		
		case 7: //对应 D STEP_1_L;
		
		STEP_4_H;
		
		motor_state = 8;
		
		break;
		
		case 8: //对应 DA STEP_1_H;
		
		STEP_2_L;
		
		STEP_3_L;
		
		STEP_4_H;
		
		motor_state = 1;
		
		break;
		
		default:
		
		break;
		
		}

	}

}

Step_Motor_Driver函数调用频率,应该小于电气规格书上的牵入频率,否则可能会导致电机失步。实际使用中,如果是简单的MCU环境,可以用延时函数替代,如果还是linux环境,则使用硬件定时器比较好。

linux驱动–步进电机–设计方案

TODO:

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值