博主学习的步进电机是:28BYJ-48步进电动机
28BYJ-48步进电动机的步距角是5.625度,也就是说每个脉冲转5.625度,而360/5.625=64,所以64个脉冲转一圈,但这是指电机的转子,而转子到输出轴有齿轮减速器连接,减速比为64,那么转子转64圈,输出轴转一圈,所以结论是64*64=4096个脉冲才能使输出轴转一圈,该步进电机为四相五线,如下图所示:
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数(PWM通过占空比来改变高低电变换,改变了输出的频率从而改变转速),而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
下图为连接实物图的电路图,中间需要一个ULN2003的放大器,需要放大器的原因是板子提供的电流不足以驱动步进电机,需要对其进行放大
步进电机驱动方式:
1、1 相励磁法:每一瞬间只有一个线圈导通,其他线圈休息。其特点是励磁方法简单,耗电低,精确度良好。但是力矩小、震动大,每次励磁信号走的角度是标称角度。
2、2 相励磁法:每一瞬间有两个线圈同时导通,特点是力矩大、震动较小,每次励磁转动角度是标称角度。
3、1-2 相励磁法:1 相和 2 相轮流交替导通,精度较高,且运转平滑。每送一个励磁信转动二分之一标称角度。有称为半步驱动。4 相电机中,1、2 种方式称 4 相 4 拍,3 种称4 相8 拍。
下图分别为1相励磁,2相励磁和1-2相励磁:
arduino中关于步进电机(四相)的部分代码:
Stepper::Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2,
int motor_pin_3, int motor_pin_4)
{
this->step_number = 0; // which step the motor is on
this->direction = 0; // motor direction
this->last_step_time = 0; // time stamp in us of the last step taken
this->number_of_steps = number_of_steps; // total number of steps for this motor总步数
// Arduino pins for the motor control connection:
this->motor_pin_1 = motor_pin_1;
this->motor_pin_2 = motor_pin_2;
this->motor_pin_3 = motor_pin_3;
this->motor_pin_4 = motor_pin_4;
// setup the pins on the microcontroller:
pinMode(this->motor_pin_1, OUTPUT);
pinMode(this->motor_pin_2, OUTPUT);
pinMode(this->motor_pin_3, OUTPUT);
pinMode(this->motor_pin_4, OUTPUT);
// When there are 4 pins, set the others to 0:
this->motor_pin_5 = 0;
// pin_count is used by the stepMotor() method:
this->pin_count = 4;
}
if (this->pin_count == 4) {
switch (thisStep) {
case 0: // 1010
digitalWrite(motor_pin_1, HIGH);
digitalWrite(motor_pin_2, LOW);
digitalWrite(motor_pin_3, HIGH);
digitalWrite(motor_pin_4, LOW);
break;
case 1: // 0110
digitalWrite(motor_pin_1, LOW);
digitalWrite(motor_pin_2, HIGH);
digitalWrite(motor_pin_3, HIGH);
digitalWrite(motor_pin_4, LOW);
break;
case 2: //0101
digitalWrite(motor_pin_1, LOW);
digitalWrite(motor_pin_2, HIGH);
digitalWrite(motor_pin_3, LOW);
digitalWrite(motor_pin_4, HIGH);
break;
case 3: //1001
digitalWrite(motor_pin_1, HIGH);
digitalWrite(motor_pin_2, LOW);
digitalWrite(motor_pin_3, LOW);
digitalWrite(motor_pin_4, HIGH);
break;
}
}
通过给不同的引脚输出不同的高低电平,且按顺序输出,加一段延迟驱动步进电机。
51单片机中代码(最简单的):
#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}
#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}
#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}
#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}
unsigned char Speed;
main(){
speed=5;//调整速度
while(1){
Coil_A1
DelayMs(Spped);//Speed数字越小,转速越大,力矩越小
Coil_B1
DelayMs(Spped);
Coil_C1
DelayMs(Spped);
Coil_D1
DelayMs(Spped);
}
}
博主最近在和小伙伴们戳弄TI板子,好不容易做的看起来能做到一相励磁了,但步进电机只发生抖动,却不旋转,于是去百度了一下,发现这个的原因有如下:
1.看一下是否接线错误
2.看一下电压,是不是电压带不动(5v-12v)
3.看速度,是不是太快,速度太高发出高频声音,太低会产生一种沉闷的声音导致其抖动不转,要根据不同的现象做出调整