欢迎光临京西古道研究网站,对京西古道详细分类介绍,内容不断充实:http://www.jxgd.info/
一、两相和四相步进电机
步进电机有多种,主要分为两相和四相,有四线,有五线,还有六线的,容易把人搞迷糊
两相和四相步进电机的区别:http://www.chinabaike.com/z/keji/jixie/2012/0605/1125308.html
两相步进电机在定子上只有两个绕组,有四根出线,整步为1.8°,半步为0.9°。在驱动器中,只要对两相绕组电流通断和电流方向进行控制就可以了。而四相步进电机在定子上有四个绕组,有八根出线,整步为0.9°,半步为0.45°,不过驱动器中需要对四个绕组进行控制,电路相对复杂了。
所以两相电机配两相步进驱动器,四相八线电机有并联、串联、单极型三种接法。并联接法:四相绕组两两相并,绕组的电阻与电感成倍减小,电机运行时加速性能好,高速带载力矩大,但是电机需要输入两倍于额定电流的电流,发热较大,对驱动器输出能力要求相应提高。而在串联使用时,绕组的电阻与电感成倍的增大,电机低速运行时稳定,噪音和发热较小,对驱动器要求不高,但高速力矩损耗大。所以用户可根据要求来选择四相八线的步进电机接线方法。
四相步进电机可以用arduino IDE
自带的实例里的程序和库驱动,在文件-》示例-》stepper中。但是两相的驱动不了。
二、两相步进电机实验器件
这里只谈两相步进电机,特征是有四或五根出线,五跟线中有一根是外壳接地线,跟其他四线不通。其他四线导通的是一个绕组,共两个绕组四根线,绕组之间不通。
我用于实验的是下图电机,这是个推杆电机,它的轴正转会伸出,反转会缩进,所以我后面的子程序名叫up()/down()。
图中A和B是两个绕组,四根线的顺序不能错。
arduino板可以任意板,我用的是老掉牙的Duemilanove;
驱动板用的是L298N,非常常见;
接线:务必不要错了,不然查错非常头大!
L298输入1-4 对应 arduino数字端口 8,9,10,11
L298输出out1--A+白,OUT2--A-蓝,out3--B+黄,out4--B-绿
三、程序
我把程序贴在这,其实很简单,我把驱动的8拍的时序直接用switch case
写明白,不用什么数组和逻辑,程序长但是好懂,好查错。
端口4是用来控制方向的,接高电平就正转(up),接低电平就发转(down)。
int Pin0 = 8;
int Pin1 = 9;
int Pin2 = 10;
int Pin3 = 11;
int _step =0 ;
boolean dir; //= -1;正反转
int stepperSpeed = 20;//电机转速,1ms一步
void setup()
{
pinMode(Pin0, OUTPUT);
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
pinMode(4,INPUT);
}
void loop()
{
if(digitalRead(4))
{
up();
}else{
down();
}
}
void down()
{
switch(_step){
case 0:
//stepperSpeed++;
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);//32A
break;
case 1:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);//10B
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;
case 2:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
case 3:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;
case 4:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;
case 5:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;
case
6:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
case 7:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;
default:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
}
_step++;
if(_step>7){
_step=0; }
delay(stepperSpeed);
}
void up()
{
switch(_step){
case 0:
//stepperSpeed++;
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);//32A
break;
case 1:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);//10B
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;
case 2:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;
case 3:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;
case 4:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
case 5:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;
case
6:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;
case 7:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;
default:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
}
_step++;
if(_step>7){
_step=0; }
delay(stepperSpeed);
}
加载中,请稍候......