介绍
参数含义
28——步进电机的有效最大外径是28毫米
B——表示是步进电机
Y——表示是永磁式
J——表示是减速型
48——表示四相八拍
原理图
步进电机控制威廉希尔官方网站
工作原理
通过对不同的相依次导通一定时间,使得定子转到指定角度。
最佳工作模式为八拍模式(八拍转过一个定子角度)
需要注意减速比
节拍刷新大于1.8ms即可
单片机控制
首先查询得步进电机节拍对应的IO控制代码
然后每隔一定的时间进行代码的刷新(这个刷新时间主要依据步进电机的启动频率)
我看到好多此类的控制代码所需要的积分都是很多的,所以我就自己写了一份代码,包含控制正反转,还有旋转的角度,可以修改参数就可以达到自己想要的方案。
附上代码
#include "delay.h"
#include "sys.h"
#include "stdio.h"
//ALIENTEK miniSTM32开发板实验1
//跑马灯实验
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
//IN4: PB9 d
//IN3: PB8 c
//IN2: PB7 b
//IN1: PB6 a
//四相八拍
unsigned short phasecw[4] ={0x0200,0x0100,0x0080,0x0040};// D-C-B-A 反转
unsigned short phaseccw[4]={0x0040,0x0080,0x0100,0x0200};// A-B-C-D 正转
//引脚初始化
void Moto_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 ;//引脚按着INT1顺序接就行了
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_6 | GPIO_Pin_7 |GPIO_Pin_8 |GPIO_Pin_9 );
}
void MotoRcw(void) //反转
{
int i;
for(i=0;i<4;i++)
{
GPIO_Write(GPIOB,phasecw
);
delay_ms(3);
}
}
void MotoRccw(void) //正转
{
int i;
for(i=0;i<4;i++)
{
GPIO_Write(GPIOB,phaseccw);
delay_ms(3);
}
}
void MotorStop(void) //停止
{
GPIO_Write(GPIOB,0x0000);
}
//控制电机正转还是反转某个角度
//direction方向,1为正转,0为反转
//angle角度,可为0-360具有实际意义
void Motor_Ctrl_Direction_Angle(int direction, int angle)
{
u16 j;
if(direction == 1)
{
for(j=0;j<64*angle/45;j++)
{
MotoRccw();//正转
}
MotorStop();//停止
}
else
{
for(j=0;j<64*angle/45;j++)
{
MotoRcw();//反转
}
MotorStop();//停止
}
}
int main(void)
{
Moto_Init(); //电机
delay_init(); //延时函数初始化
Motor_Ctrl_Direction_Angle(1,180);//正转180度
delay_ms(500);
Motor_Ctrl_Direction_Angle(0,90);//反转90度
while(1)
{
}
}
介绍
参数含义
28——步进电机的有效最大外径是28毫米
B——表示是步进电机
Y——表示是永磁式
J——表示是减速型
48——表示四相八拍
原理图
步进电机控制威廉希尔官方网站
工作原理
通过对不同的相依次导通一定时间,使得定子转到指定角度。
最佳工作模式为八拍模式(八拍转过一个定子角度)
需要注意减速比
节拍刷新大于1.8ms即可
单片机控制
首先查询得步进电机节拍对应的IO控制代码
然后每隔一定的时间进行代码的刷新(这个刷新时间主要依据步进电机的启动频率)
我看到好多此类的控制代码所需要的积分都是很多的,所以我就自己写了一份代码,包含控制正反转,还有旋转的角度,可以修改参数就可以达到自己想要的方案。
附上代码
#include "delay.h"
#include "sys.h"
#include "stdio.h"
//ALIENTEK miniSTM32开发板实验1
//跑马灯实验
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
//IN4: PB9 d
//IN3: PB8 c
//IN2: PB7 b
//IN1: PB6 a
//四相八拍
unsigned short phasecw[4] ={0x0200,0x0100,0x0080,0x0040};// D-C-B-A 反转
unsigned short phaseccw[4]={0x0040,0x0080,0x0100,0x0200};// A-B-C-D 正转
//引脚初始化
void Moto_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 ;//引脚按着INT1顺序接就行了
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_6 | GPIO_Pin_7 |GPIO_Pin_8 |GPIO_Pin_9 );
}
void MotoRcw(void) //反转
{
int i;
for(i=0;i<4;i++)
{
GPIO_Write(GPIOB,phasecw
);
delay_ms(3);
}
}
void MotoRccw(void) //正转
{
int i;
for(i=0;i<4;i++)
{
GPIO_Write(GPIOB,phaseccw);
delay_ms(3);
}
}
void MotorStop(void) //停止
{
GPIO_Write(GPIOB,0x0000);
}
//控制电机正转还是反转某个角度
//direction方向,1为正转,0为反转
//angle角度,可为0-360具有实际意义
void Motor_Ctrl_Direction_Angle(int direction, int angle)
{
u16 j;
if(direction == 1)
{
for(j=0;j<64*angle/45;j++)
{
MotoRccw();//正转
}
MotorStop();//停止
}
else
{
for(j=0;j<64*angle/45;j++)
{
MotoRcw();//反转
}
MotorStop();//停止
}
}
int main(void)
{
Moto_Init(); //电机
delay_init(); //延时函数初始化
Motor_Ctrl_Direction_Angle(1,180);//正转180度
delay_ms(500);
Motor_Ctrl_Direction_Angle(0,90);//反转90度
while(1)
{
}
}
举报