步进电机驱动程序_步进电机精确控制

一、步进电机分类

1.按构造分类

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

2.按定子上相数来分

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

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

二、步进电机相关参数

1.步距角

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

8dcde55d4095401b0d927902c0505850.png

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

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

2.分辨率

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

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

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

8dcde55d4095401b0d927902c0505850.png

#include unsigned char code Zhenzhuan[4]={0x02,0x04,0x08,0x10}; //由表格可得转一圈的状态  正转0000 0010,0000 0100,0000 1000,0001 0000unsigned 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)

da7129c85881c787937d2e440ff4a784.png①看图,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.疑问:如何精确确定步进电机脉冲频率?

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值