51单片机 - 步进电机28BYJ-48


1> 电机参数

1

1

28BYJ-48
28: 指电机外经28mm;
B: 步进电机“步”字汉语拼音首字母;
Y:永磁式, “Yong”;
J:减速型;
48: 4相, 8拍;


2> 内部结构

2


3> 工作原理


3.1> 电生磁-奥斯特实验

3.1


3.2> 定子线圈通电生磁-吸引转子

32

永磁转子上N极和S极各8个;
爪极式定子产生磁极8组ABCD,也就是32个磁极;

整步 = 360 ÷ 32 = 11.25度;
半步 = 360÷32÷2 = 5.625度;

3.3> 工作时序

单相4拍:
31


2相8拍:
28


3.4> 减速比

3.4.1> 齿轮机械原理

134
如图所示:

小齿轮转4圈,大齿轮才转1圈, 也就是 大齿轮的转速只有小齿轮的1/4,这就是减速比;

步进电机的减速比是1/64,也就是,转子齿轮转64圈,输出轴齿轮才转1圈;
那么转子的齿数如果是10个,输出轴的齿轮数就应该是640个;

实际是这样设计的:
34

可以看出,减速比有误差,控制精度要求不高,按1/64减速比计算就可以;


3.4.1> 为什么减速?

1> 增大了控制精度,转子转64圈,输出轴才转1圈,如果转子只转1圈呢,只转半圈呢,输出轴就会转的非常精细;
2> 增大扭矩,小齿轮,变大齿轮,带负载能力增大;


4> 驱动电路-ULN2003


4.1> 长啥样?

实物图:
41

框图:
422


4.2> 能干啥?

大功率开关,额定电流为 500mA。


4.3> 咋干的?

单路内部框图:
43

简化图:
433

OC: 集电极开路输出


4.4> 咋用他?

43


5> 程序设计


5.1> 单相4拍(没有减速齿轮)

// 4拍
void Motor_4Step(void)
{
	// Step 1
	MOTOR_A = 1;
	MOTOR_B = 0;
	MOTOR_C = 0;
	MOTOR_D = 0;
	Delay50ms();			

	// Step 2
	MOTOR_A = 0;
	MOTOR_B = 1;
	MOTOR_C = 0;
	MOTOR_D = 0;
	Delay50ms();

	// Step 3
	MOTOR_A = 0;
	MOTOR_B = 0;
	MOTOR_C = 1;
	MOTOR_D = 0;
	Delay50ms();
	
	// Step 4
	MOTOR_A = 0;
	MOTOR_B = 0;
	MOTOR_C = 0;
	MOTOR_D = 1;
	Delay50ms();		
}

// 转子转1圈
void Motor_1Cycle(void)
{
	uchar8_t i = 0;
	
	for (i = 0; i < 8; i++) {
		Motor_4Step();
	}
}


5.2> 2相8拍(没有减速齿轮)

// 8拍
void Motor_8Step(void)
{
	// Step 1
	MOTOR_A = 1;
	MOTOR_B = 0;
	MOTOR_C = 0;
	MOTOR_D = 0;
	Delay1ms();			

	// Step 2
	MOTOR_A = 1;
	MOTOR_B = 1;
	MOTOR_C = 0;
	MOTOR_D = 0;
	Delay1ms();

	// Step 3
	MOTOR_A = 0;
	MOTOR_B = 1;
	MOTOR_C = 0;
	MOTOR_D = 0;
	Delay1ms();
	
	// Step 4
	MOTOR_A = 0;
	MOTOR_B = 1;
	MOTOR_C = 1;
	MOTOR_D = 0;
	Delay1ms();	

	// Step 5
	MOTOR_A = 0;
	MOTOR_B = 0;
	MOTOR_C = 1;
	MOTOR_D = 0;
	Delay1ms();

	// Step 6
	MOTOR_A = 0;
	MOTOR_B = 0;
	MOTOR_C = 1;
	MOTOR_D = 1;
	Delay1ms();

	// Step 7
	MOTOR_A = 0;
	MOTOR_B = 0;
	MOTOR_C = 0;
	MOTOR_D = 1;
	Delay1ms();

	// Step 8
	MOTOR_A = 1;
	MOTOR_B = 0;
	MOTOR_C = 0;
	MOTOR_D = 1;
	Delay1ms();
}


// 转子转1圈
void Motor_1Cycle(void)
{
	uchar8_t i = 0;
	
	for (i = 0; i < 8; i++) {
		Motor_8Step();
	}
}


5.3> 2相8拍-反转

// 2相8拍反转
void Motor_8Step_rev(void)
{
	// Step 8
	MOTOR_A = 1;
	MOTOR_B = 0;
	MOTOR_C = 0;
	MOTOR_D = 1;
	Delay1ms();
	
	// Step 7
	MOTOR_A = 0;
	MOTOR_B = 0;
	MOTOR_C = 0;
	MOTOR_D = 1;
	Delay1ms();
	
	// Step 6
	MOTOR_A = 0;
	MOTOR_B = 0;
	MOTOR_C = 1;
	MOTOR_D = 1;
	Delay1ms();
	
	// Step 5
	MOTOR_A = 0;
	MOTOR_B = 0;
	MOTOR_C = 1;
	MOTOR_D = 0;
	Delay1ms();
	
	// Step 4
	MOTOR_A = 0;
	MOTOR_B = 1;
	MOTOR_C = 1;
	MOTOR_D = 0;
	Delay1ms();
	
	// Step 3
	MOTOR_A = 0;
	MOTOR_B = 1;
	MOTOR_C = 0;
	MOTOR_D = 0;
	Delay1ms();
	
	// Step 2
	MOTOR_A = 1;
	MOTOR_B = 1;
	MOTOR_C = 0;
	MOTOR_D = 0;
	Delay1ms();
	
	// Step 1
	MOTOR_A = 1;
	MOTOR_B = 0;
	MOTOR_C = 0;
	MOTOR_D = 0;
	Delay1ms();	
}

5.4> 2相8拍-正反转各1圈(减速齿轮1/64)

// 输出轴转一圈
void Motor_1Cycle(void)
{
	uchar8_t i = 0;
	uchar8_t j = 0;
	
	// 正转
	for (i = 0; i < 64; i++) {	// 转子转64圈,输出轴才转1圈
		for (j = 0; j < 8; j++) {
			Motor_8Step();
		}
	}
	
	// 反转
	for (i = 0; i < 64; i++) {
		for (j = 0; j < 8; j++) {
			Motor_8Step_rev();
		}
	}

}


6> 视频链接

🔗 B站-视频教程-(共3集)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值