一、步进电机分类
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
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)
①看图,5根线,一个循环(不是转一圈)需要8个脉冲。
则脉冲代码如下:
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.疑问:如何精确确定步进电机脉冲频率?