28BYJ-48爪极式永磁步进电机
1> 电机参数
28BYJ-48
28: 指电机外经28mm;
B: 步进电机“步”字汉语拼音首字母;
Y:永磁式, “Yong”;
J:减速型;
48: 4相, 8拍;
2> 内部结构
3> 工作原理
3.1> 电生磁-奥斯特实验
3.2> 定子线圈通电生磁-吸引转子
永磁转子上N极和S极各8个;
爪极式定子产生磁极8组ABCD,也就是32个磁极;
整步 = 360 ÷ 32 = 11.25度;
半步 = 360÷32÷2 = 5.625度;
3.3> 工作时序
单相4拍:
2相8拍:
3.4> 减速比
3.4.1> 齿轮机械原理
如图所示:
小齿轮转4圈,大齿轮才转1圈, 也就是 大齿轮的转速只有小齿轮的1/4,这就是减速比;
步进电机的减速比是1/64,也就是,转子齿轮转64圈,输出轴齿轮才转1圈;
那么转子的齿数如果是10个,输出轴的齿轮数就应该是640个;
实际是这样设计的:
可以看出,减速比有误差,控制精度要求不高,按1/64减速比计算就可以;
3.4.1> 为什么减速?
1> 增大了控制精度,转子转64圈,输出轴才转1圈,如果转子只转1圈呢,只转半圈呢,输出轴就会转的非常精细;
2> 增大扭矩,小齿轮,变大齿轮,带负载能力增大;
4> 驱动电路-ULN2003
4.1> 长啥样?
实物图:
框图:
4.2> 能干啥?
大功率开关,额定电流为 500mA。
4.3> 咋干的?
单路内部框图:
简化图:
OC: 集电极开路输出
4.4> 咋用他?
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();
}
}
}