基于51单片机的步进电机驱动程序

一、步进电机分类

1.按构造分类

①反应式;
由定子和转子构成,定子上有绕组,转子由软磁材料制成。
②永磁式;
转子由永磁体制成,转子极数与定子极数相等。
③混合式
定子有多相绕组,转子由永磁体构成,转子与定子间齿轮接触,提高精度与稳定性,输出大力矩。

2.按定子上相数来分

单相、二相、三相、四相、五相。
两相四线需选择双极性驱动;两相六线可选择双极性驱动和单极性驱动。

单极性驱动▼
单极性驱动
双极性驱动▼双极性驱动
写驱动程序时,直接按照以上图片左侧表格,写相关状态码,前往第三大点。

二、步进电机相关参数

1.步距角

步进电机在一个脉冲下的角位移(转了多少角度)。
就四线单极性驱动来说

在这里插入图片描述

unsigned char code Zhenzhuan[4]={0x02,0x04,0x08,0x10}; //由表格可得转一圈的状态  正转0000 0010,0000 0100,0000 1000,0001 0000

数组中一个元素就是一个脉冲。

2.分辨率

含义步进电机转一圈需要的脉冲数。

市面上常见的步进电机,有28步(如28byj-48)、42步进电机(3D打印机、写字机器人常用)。
分辨率=360/步距角。

三、四相单极性驱动及例程

四相单极性

#include <reg51.h>
unsigned char code Zhenzhuan[4]={0x02,0x04,0x08,0x10}; //由表格可得转一圈的状态  正转0000 0010,0000 0100,0000 1000,0001 0000
unsigned char code Fanzhuan[4]={0x01,0x08,0x04,0x02}; //反转                         0001 0000,0000 1000,0000 0100,0000 0010
/******************************************************************/
/*                    延时函数                                    */
/******************************************************************/
void Delay(unsigned int i)//延时
{
 while(--i);
}
/******************************************************************/
/*                   主函数                                       */
/******************************************************************/
main()
{
	unsigned char i;
	while(1)
	 {
 		 for(i=0;i<4;i++)      //4相
    		 {
   				  P1=Zhenzhuan[i];  //
    			 Delay(500);        //该参数可以调整电机转速 ,数字越小,转速越大,输出脉冲的频率
 		    }
	  }
}

四、技巧及疑问

1.有类似下面图片的步进电机如何写驱动。(图片中是28byj-48)

28BYJ-48驱动方式
①看图,5根线,一个循环(不是转一圈)需要8个脉冲。
则脉冲代码如下:

扫描二维码关注公众号,回复: 11598587 查看本文章
uchar code zheng_zhuan[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};   //逆时钟旋转相序表
 uchar code fan_zhuan[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};    //顺时针旋转相序表

②28BYJ-48步进电机,分辨率28,则转一圈需要28个脉冲。
当要控制该步进电机转动一圈时,两种办法,一、在数组中按照顺序从前到后复制28个代码(最容易实现)。二、在循环中实现。

for(j=1;j<5;j++)
{
	for(i=0;i<8;i++)
	{
		P1= zheng_zhuan[i];
		delay(300);
		if(j==4&&i=3)i=7;
	}
}

2.确定脉冲发送频率

① 舵机基本算是 10ms;
② 查看步进电机参数;
③ 通过在延时函数中改变延时时间来试出来。

3.步进电机振动时说明脉冲频率过高或者电压过低;

4.疑问:如何精确确定步进电机脉冲频率?

猜你喜欢

转载自blog.csdn.net/jun8086/article/details/108411512