简单介绍:
1. 步进电机:就是将电脉冲信号转变为角位移或者线位移的 开环控制 电机
2. 开环控制:即开环控制系统,就是不降控制的结果反馈回来影响当前控制的系统。 所谓开环:就是没有反馈
3. 四相八拍:也叫做半步:A---AB---B---BC---C---CD---D---DA,再次从头循环。四相四拍:A---B---C---D,循环
4. 四相:指步进电机中有四组线圈,八拍:指的是四组线圈的通电时序。
附上简单正转驱动的代码:此代码是 正转的简单驱动 ,如果要反转:只需要将第二个函数中case 语句执行的顺序改为:
8--->7--->6--->5--->4--->3--->2--->1--->8.......
//I/O口 1
#define STEP_1_H P11 = 1 //高电平
#define STEP_1_L P11 = 0 //低电平
//I/O口 2
#define STEP_2_H P12 = 1
#define STEP_2_L P12 = 0
//I/O口 3
#define STEP_3_H P13 = 1
#define STEP_3_L P13 = 0
//I/O口 4
#define STEP_4_H P14 = 1
#define STEP_4_L P14 = 0
uint8 motor_state = 0; //步进电机的状态
uint8 rotate_speed = 0;
uint16 motor_cnt = 0; //计数
/***************************************************
*函数名称:Step_Motor_Driver
*输 入:void
*输 出:void
*说 明:步进电机的驱动
***************************************************/
void Step_Motor_Driver(void)
{
if (++ motor_cnt >= rotate_speed) //多少秒执行一次下面switch语句
{
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;
STEP_3_L;
STEP_4_L;
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_2_L;
STEP_3_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;
}
}
}
简单介绍:
1. 步进电机:就是将电脉冲信号转变为角位移或者线位移的 开环控制 电机
2. 开环控制:即开环控制系统,就是不降控制的结果反馈回来影响当前控制的系统。 所谓开环:就是没有反馈
3. 四相八拍:也叫做半步:A---AB---B---BC---C---CD---D---DA,再次从头循环。四相四拍:A---B---C---D,循环
4. 四相:指步进电机中有四组线圈,八拍:指的是四组线圈的通电时序。
附上简单正转驱动的代码:此代码是 正转的简单驱动 ,如果要反转:只需要将第二个函数中case 语句执行的顺序改为:
8--->7--->6--->5--->4--->3--->2--->1--->8.......
//I/O口 1
#define STEP_1_H P11 = 1 //高电平
#define STEP_1_L P11 = 0 //低电平
//I/O口 2
#define STEP_2_H P12 = 1
#define STEP_2_L P12 = 0
//I/O口 3
#define STEP_3_H P13 = 1
#define STEP_3_L P13 = 0
//I/O口 4
#define STEP_4_H P14 = 1
#define STEP_4_L P14 = 0
uint8 motor_state = 0; //步进电机的状态
uint8 rotate_speed = 0;
uint16 motor_cnt = 0; //计数
/***************************************************
*函数名称:Step_Motor_Driver
*输 入:void
*输 出:void
*说 明:步进电机的驱动
***************************************************/
void Step_Motor_Driver(void)
{
if (++ motor_cnt >= rotate_speed) //多少秒执行一次下面switch语句
{
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;
STEP_3_L;
STEP_4_L;
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_2_L;
STEP_3_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;
}
}
}
举报