步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
步进电机图片:
步进电机参数:
步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。 四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC- CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)
四相步进电机有两种运行方式,一、四相四拍;二、四相八拍。
1、拍数:完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB,四相八拍运行方式即A-AB-B-BC-C-CD-D-DA-A.
2 、步距角:对应一个脉冲信号,电机转子转过的角位移用θ表示。θ=360度(转子齿数J*运行拍数),以常规二、四相,转子齿为50齿电机为例。四拍运行时步距角为θ=360度/(50*4)=1.8度(俗称整步),八拍运行时步距角为θ=360度/(50*8)=0.9度(俗称半步)。
步进电机IO配置:
#define Init_BJDJ_A Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 8)
#define Set_BJDJ_A Chip_GPIO_SetPinState(LPC_GPIO,0, 8,true)
#define Clr_BJDJ_A Chip_GPIO_SetPinState(LPC_GPIO,0, 8,false)
#define Init_BJDJ_B Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 7)
#define Set_BJDJ_B Chip_GPIO_SetPinState(LPC_GPIO,0, 7,true)
#define Clr_BJDJ_B Chip_GPIO_SetPinState(LPC_GPIO,0, 7,false)
#define Init_BJDJ_C Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 6)
#define Set_BJDJ_C Chip_GPIO_SetPinState(LPC_GPIO,0,6,true)
#define Clr_BJDJ_C Chip_GPIO_SetPinState(LPC_GPIO,0, 6,false)
#define Init_BJDJ_D Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 5)
#define Set_BJDJ_D Chip_GPIO_SetPinState(LPC_GPIO,0, 5,true)
#define Clr_BJDJ_D Chip_GPIO_SetPinState(LPC_GPIO,0, 5,false)
void io_initial(void)
{
Init_BJDJ_A;
Init_BJDJ_B;
Init_BJDJ_C;
Init_BJDJ_D;
}
void F_Rotation(void)
{
//0x01
Clr_BJDJ_A;
Clr_BJDJ_B;
Clr_BJDJ_C;
Set_BJDJ_D;
Delay(delay_time);
//0x02
Clr_BJDJ_A;
Clr_BJDJ_B;
Set_BJDJ_C;
Clr_BJDJ_D;
Delay(delay_time);
//0x04
Clr_BJDJ_A;
Set_BJDJ_B;
Clr_BJDJ_C;
Clr_BJDJ_D;
Delay(delay_time);
//0x08
Set_BJDJ_A;
Clr_BJDJ_B;
Clr_BJDJ_C;
Clr_BJDJ_D;
Delay(delay_time);
}
void B_Rotation(void)
{
//0x08
Set_BJDJ_A;
Clr_BJDJ_B;
Clr_BJDJ_C;
Clr_BJDJ_D;
Delay(delay_time);
//0x04
Clr_BJDJ_A;
Set_BJDJ_B;
Clr_BJDJ_C;
Clr_BJDJ_D;
Delay(delay_time);
//0x02
Clr_BJDJ_A;
Clr_BJDJ_B;
Set_BJDJ_C;
Clr_BJDJ_D;
Delay(delay_time);
//0x01
Clr_BJDJ_A;
Clr_BJDJ_B;
Clr_BJDJ_C;
Set_BJDJ_D;
Delay(delay_time);
}
void test_bjdj(void)
{
int j;
{
for(j=0;j<200;j++)
F_Rotation();
for(j=0;j<200;j++)
B_Rotation();
}
}
////////////////////////
if( key==0x30)
{
Board_LED_Toggle(0);
}
else if( key==0x31)
{
Board_LED_Toggle(1);
}
else if( key==0x32)
{
Board_LED_Toggle(2);
}
else if( key==0x33)
{
if(i==0)
{
Chip_UART_SendBlocking(LPC_USART, inst4, sizeof(inst4) - 1);
i=1;
j=0;
k=0;
l=0;
m=0;
}
test_bjdj();
Chip_UART_ReadRB(LPC_USART, &rxring, &key, 1) ;
}
else if( key==0x34)
{
if(j==0)
{
Chip_UART_SendBlocking(LPC_USART, inst5, sizeof(inst5) - 1);
i=0;
j=1;
k=0;
l=0;
m=0;
}
F_Rotation();
}
else if( key==0x35)
{
if(k==0)
{
Chip_UART_SendBlocking(LPC_USART, inst6, sizeof(inst6) - 1);
i=0;
j=0;
k=1;
l=0;
m=0;
}
B_Rotation();
}
我的其它帖子:
LPC1500体验+开发环境的构建
LPC1500体验+驱动步进电机设计
LPC1500体验+led闪烁
LPC1500体验+之四_串口调试接收数据成功
LPC1500体验+之五_LCD1602驱动电路设计
本帖最后由 youzizhile 于 2014-7-28 22:49 编辑