1.固有步距角:这个参数和步进电机本身有关。步进电机一般情况下只能以固有步距角的整数倍来运动。
这一个固有步距角的移动就叫一个节拍。
2.电机还有个可以比固有步距角更小的运动方法,这种方法叫细分,由电机驱动器来支持。
3.步进电机的相数
相数就是绕组的的个数,相数越多,步距角越小,步进电机控制起来越精确。
相数越多,引出来的线就越多,一般两相4根线,三相6根线。
4.步进电机的极性
5.拍数
(1)单相四拍
时序:正传 A/ B A B/ 同时只有一个线圈在工作
四根线上电平
A A/ B B/
0 1 0 0 第一拍
0 0 1 0 第二拍
1 0 0 0 第三拍
0 0 0 1 第四拍
4个节拍加起来就是一个完整的周期,按照这个周期给步进电机供电,则步进电机就会转动一个步距角。
时序:反转 B/ A B A/ 节拍反过来就是反转
A A/ B B/
0 0 0 1 第一拍
1 0 0 0 第二拍
0 0 1 0 第三拍
0 1 0 0 第四拍
(2)双相四拍
时序:A/B AB AB/ A/B/ 正传 同时两个线圈都在工作,带载能力加强,但是耗电量大,看需求选择哪种方式
A A/ B B/
0 1 1 0 第一拍
1 0 1 0 第二拍
1 0 0 1 第三拍
0 1 0 1 第四拍
时序:A/B/ AB/ AB A/B 反传 同时两个线圈都在工作,带载能力加强,但是耗电量大
A A/ B B/
0 1 0 1 第一拍
1 0 0 1 第二拍
1 0 1 0 第三拍
0 1 1 0 第四拍
(3)半步八拍(其实就是单相四拍与双向四拍合在一起的,一种折中,失去了速度的优势,但是劲更大了)
时序:A/ A/B B AB A AB/ B/ A/B/ 正传
时序:A/B/ B/ AB/ A AB B A/B A/ 反传
6.步进电机的系统
一套步进电机的系统需要三部分:控制器+驱动器+步进电机
7. 程序
#define TIME 3
sbit APositive = P0^0;
sbit ANegative = P0^1;
sbit BPositive = P0^2;
sbit BNegative = P0^3;//four logic control pins
void delay(unsigned char i)
{
unsigned char a, b;
for(a=i;a>0;a--)
for(b=240;b>0;b--);
}
void main(void)
{
while(1)
{
//步进电机是一个周期走一步
//一个周期其实就是各个节拍依次排列构成的,注意节拍之间要有延时,延时时间是为了控制速度的
//比如单相四拍和双相四拍就是一个周期里面有四个节拍,半步八拍就是一个周期里面有八拍
//单相4拍 A/ B A B/ 第一拍
APositive = 0;
ANegative = 1;
BPositive = 1;
BNegative = 0;
delay(TIME); //延迟多长看情况调整
//单相4拍 A/ B A B/ 第二拍
APositive = 1;
ANegative = 0;//对于APositive和ANegative同时为0或1都可以,只要电平一样即可
BPositive = 1;
BNegative = 0;
delay(TIME); //延迟多长看情况调整
//单相4拍 A/ B A B/ 第三拍
APositive = 1;
ANegative = 0;
BPositive = 0;
BNegative = 0;//对于BPositive和BNegative同时为0或1都可以,只要电平一样即可
delay(TIME); //延迟多长看情况调整
//单相4拍 A/ B A B/ 第四拍
APositive = 0;
ANegative = 0;//对于APositive和ANegative同时为0或1都可以,只要电平一样即可
BPositive = 0;
BNegative = 1;
delay(TIME); //延迟多长看情况调整
}
}
转速控制:转速是由脉冲信号的频率来控制的,对应到程序就delay函数。
void main(void)
{
while(1)
{
//步进电机是一个周期走一步
//一个周期其实就是各个节拍依次排列构成的,注意节拍之间要有延时,延时时间是为了控制速度的
//比如单相四拍和双相四拍就是一个周期里面有四个节拍,半步八拍就是一个周期里面有八拍
//双相4拍 A/B AB AB/ A/B/ 正传 第一拍
APositive = 0;
ANegative = 1;
BPositive = 0;
BNegative = 0;
delay(TIME); //延迟多长看情况调整
//双相4拍 A/B AB AB/ A/B/ 第二拍
APositive = 0;
ANegative = 0;
BPositive = 1;
BNegative = 0;
delay(TIME); //延迟多长看情况调整
//双相4拍 A/B AB AB/ A/B/ 第三拍
APositive = 1;
ANegative = 0;
BPositive = 0;
BNegative = 1;
delay(TIME); //延迟多长看情况调整
//双相4拍 A/B AB AB/ A/B/ 第四拍
APositive = 0;
ANegative = 1;
BPositive = 0;
BNegative = 1;
delay(TIME); //延迟多长看情况调整
}
}
void main(void)
{
while(1)
{
//步进电机是一个周期走一步
//一个周期其实就是各个节拍依次排列构成的,注意节拍之间要有延时,延时时间是为了控制速度的
//比如单相四拍和双相四拍就是一个周期里面有四个节拍,半步八拍就是一个周期里面有八拍
//半步8拍 A/ A/B B AB A AB/ B/ A/B/ 正传 第一拍
APositive = 0;
ANegative = 1;
BPositive = 0;
BNegative = 0;
delay(TIME); //延迟多长看情况调整
//半步8拍 A/ A/B B AB A AB/ B/ A/B/ 第二拍
APositive = 0;
ANegative = 1;
BPositive = 1;
BNegative = 0;
delay(TIME); //延迟多长看情况调整
//半步8拍 A/ A/B B AB A AB/ B/ A/B/ 第三拍
APositive = 0;
ANegative = 0;
BPositive = 1;
BNegative = 0;
delay(TIME); //延迟多长看情况调整
//半步8拍 A/ A/B B AB A AB/ B/ A/B/ 第四拍
APositive = 1;
ANegative = 0;
BPositive = 1;
BNegative = 0;
delay(TIME); //延迟多长看情况调整
//半步8拍 A/ A/B B AB A AB/ B/ A/B/ 第五拍
APositive = 1;
ANegative = 0;
BPositive = 0;
BNegative = 0;
delay(TIME); //延迟多长看情况调整
//半步8拍 A/ A/B B AB A AB/ B/ A/B/ 第六拍
APositive = 1;
ANegative = 0;
BPositive = 0;
BNegative = 1;
delay(TIME); //延迟多长看情况调整
//半步8拍 A/ A/B B AB A AB/ B/ A/B/ 第七拍
APositive = 0;
ANegative = 0;
BPositive = 0;
BNegative = 1;
delay(TIME); //延迟多长看情况调整
//半步8拍 A/ A/B B AB A AB/ B/ A/B/ 第八拍
APositive = 0;
ANegative = 1;
BPositive = 0;
BNegative = 1;
delay(TIME); //延迟多长看情况调整
}
}