4相5线步进电机驱动原理

您所在的位置:网站首页 简述步进电机的原理 4相5线步进电机驱动原理

4相5线步进电机驱动原理

2024-07-14 23:23| 来源: 网络整理| 查看: 265

1 步进电机驱动原理

4相5线步进电机 步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。 步进电机的主要特性: 1、 步进电机必须加驱动才可以运转, 驱动信号必须为脉冲信号,没有脉冲的时候,步进电机静止, 如果加入适当的脉冲信号, 就会以一定的角度(称为步角)转动。转动的速度和脉冲的频率成正比。 2、 黑金刚配套的是 28BYJ48 5V 驱动的 4 相 5 线的步进电机,而且是减速步进电机,减速比为 1:64,步进角为 5.625/64 度。如果需要转动 1 圈,那么需要360/5.625*64=4096 个脉冲信号。 3、 步进电机具有瞬间启动和急速停止的优越特性。 4、 改变脉冲的顺序, 可以方便的改变转动的方向。 在这里插入图片描述 步进电机公共端为高电平,各个相位给低电平则有电流通过产生磁场驱动电机转动。 注意 使用ULN2003作为驱动时,其具有电平反向功能

2 程序编写 #define STEP_MOTOR_A_PIN P12 /*橙色*/ #define STEP_MOTOR_B_PIN P13 /*黄色*/ #define STEP_MOTOR_C_PIN P14 /*粉色*/ #define STEP_MOTOR_D_PIN P15 /*蓝色*/ #define STEP_MOTOR_SPEED 2 #define STEP_MOTOR_DIRE_FOREWARD 1 /*步进电机正向转:顺时针*/ #define STEP_MOTOR_DIRE_ROLLBACK 2 /*步进电机正向转:逆时针*/ static uint8 MotorStepCount = 0; /*函数声明*/ static void step_motor_a_output(void); static void step_motor_ab_output(void); static void step_motor_b_output(void); static void step_motor_bc_output(void); static void step_motor_c_output(void); static void step_motor_cd_output(void); static void step_motor_d_output(void); static void step_motor_da_output(void); static void step_motor_foreward_output(uint8 step); static void step_motor_rollback_output(uint8 step); static void step_motor_foreward(uint8 speed); static void step_motor_rollback(uint8 speed); //======================================================================== // 简述: 步进电机驱动 // 参数: dire:步进电机方向 speed:步进电机转速 // 返回: 无 // 详述: //======================================================================== void step_motor_drive(uint8 dire,uint8 speed) { switch(dire) { case STEP_MOTOR_DIRE_FOREWARD: { step_motor_foreward(speed); break; } case STEP_MOTOR_DIRE_ROLLBACK: { step_motor_rollback(speed); break; } default: break; } } //======================================================================== // 简述: 步进电机停止 // 参数: 无 // 返回: 无 // 详述: (ULN2003有反向功能) //======================================================================== void step_motor_stop(void) { STEP_MOTOR_A_PIN = 0; STEP_MOTOR_B_PIN = 0; STEP_MOTOR_C_PIN = 0; STEP_MOTOR_D_PIN = 0; } //======================================================================== // 简述: 步进电机正转 // 参数: 无 // 返回: 无 // 详述: 顺时针转 //======================================================================== static void step_motor_foreward(uint8 speed) { if((MotorStepCount++) > 7) MotorStepCount = 0; step_motor_foreward_output(MotorStepCount); delay_ms(speed); } //======================================================================== // 简述: 步进电机反转 // 参数: 无 // 返回: 无 // 详述: 逆时针转 //======================================================================== static void step_motor_rollback(uint8 speed) { if((MotorStepCount++) > 7) MotorStepCount = 0; step_motor_rollback_output(MotorStepCount); delay_ms(speed); } //======================================================================== // 简述: 步进电机正向输出 // 参数: 无 // 返回: 无 // 详述: //======================================================================== static void step_motor_foreward_output(uint8 step) { switch(step) { case 0: { step_motor_a_output(); break; } case 1: { step_motor_ab_output(); break; } case 2: { step_motor_b_output(); break; } case 3: { step_motor_bc_output(); break; } case 4: { step_motor_c_output(); break; } case 5: { step_motor_cd_output(); break; } case 6: { step_motor_d_output(); break; } case 7: { step_motor_da_output(); break; } default: break; } } //======================================================================== // 简述: 步进电机反向输出 // 参数: 无 // 返回: 无 // 详述: //======================================================================== static void step_motor_rollback_output(uint8 step) { switch(step) { case 0: { step_motor_a_output(); break; } case 1: { step_motor_da_output(); break; } case 2: { step_motor_d_output(); break; } case 3: { step_motor_cd_output(); break; } case 4: { step_motor_c_output(); break; } case 5: { step_motor_bc_output(); break; } case 6: { step_motor_b_output(); break; } case 7: { step_motor_ab_output(); break; } default: break; } } //======================================================================== // 简述: 步进电机引脚控制 // 参数: 无 // 返回: 无 // 详述: 步进电机A相输出(ULN2003有反向功能) //======================================================================== static void step_motor_a_output(void) { STEP_MOTOR_A_PIN = 1; STEP_MOTOR_B_PIN = 0; STEP_MOTOR_C_PIN = 0; STEP_MOTOR_D_PIN = 0; } //======================================================================== // 简述: 步进电机引脚控制 // 参数: 无 // 返回: 无 // 详述: 步进电机AB相输出(ULN2003有反向功能) //======================================================================== static void step_motor_ab_output(void) { STEP_MOTOR_A_PIN = 1; STEP_MOTOR_B_PIN = 1; STEP_MOTOR_C_PIN = 0; STEP_MOTOR_D_PIN = 0; } //======================================================================== // 简述: 步进电机引脚控制 // 参数: 无 // 返回: 无 // 详述: 步进电机B相输出(ULN2003有反向功能) //======================================================================== static void step_motor_b_output(void) { STEP_MOTOR_A_PIN = 0; STEP_MOTOR_B_PIN = 1; STEP_MOTOR_C_PIN = 0; STEP_MOTOR_D_PIN = 0; } //======================================================================== // 简述: 步进电机引脚控制 // 参数: 无 // 返回: 无 // 详述: 步进电机BC相输出(ULN2003有反向功能) //======================================================================== static void step_motor_bc_output(void) { STEP_MOTOR_A_PIN = 0; STEP_MOTOR_B_PIN = 1; STEP_MOTOR_C_PIN = 1; STEP_MOTOR_D_PIN = 0; } //======================================================================== // 简述: 步进电机引脚控制 // 参数: 无 // 返回: 无 // 详述: 步进电机C相输出(ULN2003有反向功能) //======================================================================== static void step_motor_c_output(void) { STEP_MOTOR_A_PIN = 0; STEP_MOTOR_B_PIN = 0; STEP_MOTOR_C_PIN = 1; STEP_MOTOR_D_PIN = 0; } //======================================================================== // 简述: 步进电机引脚控制 // 参数: 无 // 返回: 无 // 详述: 步进电机CD相输出(ULN2003有反向功能) //======================================================================== static void step_motor_cd_output(void) { STEP_MOTOR_A_PIN = 0; STEP_MOTOR_B_PIN = 0; STEP_MOTOR_C_PIN = 1; STEP_MOTOR_D_PIN = 1; } //======================================================================== // 简述: 步进电机引脚控制 // 参数: 无 // 返回: 无 // 详述: 步进电机D相输出(ULN2003有反向功能) //======================================================================== static void step_motor_d_output(void) { STEP_MOTOR_A_PIN = 0; STEP_MOTOR_B_PIN = 0; STEP_MOTOR_C_PIN = 0; STEP_MOTOR_D_PIN = 1; } //======================================================================== // 简述: 步进电机引脚控制 // 参数: 无 // 返回: 无 // 详述: 步进电机DA相输出(ULN2003有反向功能) //======================================================================== static void step_motor_da_output(void) { STEP_MOTOR_A_PIN = 1; STEP_MOTOR_B_PIN = 0; STEP_MOTOR_C_PIN = 0; STEP_MOTOR_D_PIN = 1; } 3 注意事项 步进电机停止后需要使四个相位引脚都为高电平,否则步进电机会发热。因为不进电机公共端为高电平,所有引脚都为高电平就不会产生电流,就不会发热。 //======================================================================== // 简述: 步进电机停止 // 参数: 无 // 返回: 无 // 详述: (ULN2003有反向功能) //======================================================================== void step_motor_stop(void) { STEP_MOTOR_A_PIN = 0; STEP_MOTOR_B_PIN = 0; STEP_MOTOR_C_PIN = 0; STEP_MOTOR_D_PIN = 0; } 步进电机电源端电流较小时,其扭矩也会变小 4 接线方式

IN1 —> STEP_MOTOR_A_PIN IN2 —> STEP_MOTOR_B_PIN IN3 —> STEP_MOTOR_C_PIN IN4 —> STEP_MOTOR_D_PIN

5 检查四根引脚有没有正确输出 使用逻辑分析仪检测(注意这里直接连接MCU引脚,所以电平是高电平,经过ULN2003后,电平会反向) 在这里插入图片描述


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3