0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是步进电机?简单的步进电机驱动调试

冬至子 来源:小小李sunny 作者:小小李sunny 2023-11-27 18:19 次阅读

1.背景

收拾东西发现一个步进电机(应该是之前从摄像头拆下来的,42步进电机),驱动一下试试。简单记录一下,内容比较简单,欢迎大家指正。

2.硬件

都是用手边有的材料:
控制板用ART-Pi
驱动板L298N模块;
电源DC12V;

3.原理

3.1 什么是步进电机

步进电机是将电脉冲信号,转变为角位移或线位移的开环控制电机,又称为脉冲电机。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响。当步进驱动器接收到一个脉冲信号时,它就可以驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”。

步进电机的旋转是以固定的角度一步一步运行的,可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的,同时可以通过控制脉冲频率,来控制电机转动的速度和加速度,从而达到调速的目的。(网上摘录)

3.2 步进电机驱动方式

1)4拍,整步控制,就是依据电机固有结构设计固定的步距角工作,一个电脉冲,步进电机前进一个步距角;

2)8拍,半步控制,是以电机固有的结构决定的步距角的一半角度进行步进旋转;

3)微步,细分控制,步距角更小,就是1/4步、1/8步、1/16步、1/32步,可以到很高的细分(最高应该是1/256步),对应的步进角度就是在整步步距角乘以微步系数。微步控制就要用到驱动芯片了,比如TI的DRV8889A。

3.3 L298N模块

L298N常用的双H桥电机驱动模块,都应该比较熟悉了不再过多介绍。

4.硬件连接

1)步进电机2相4线,直接接L298N模块的OUT1~OUT4,ENA、ENB跳线帽,电源DC12V;

OUT1—->A+
OUT2—->A-
OUT3—->B+
OUT4—->B-

2)L298N接ART-Pi

IN1—->PH7
IN2—->PH8
IN3—->PH9
IN4—->PH10

1.jpg

5.程序代码

这里采用8拍控制方式,简单驱动电机转动,实现任意角度的正反转控制。

5.1 正转控制(顺时针)

void turn_angle_forward(float_t angle)
{
rt_uint16_t half_beat_num = 0;//角度转换半拍总数
rt_uint16_t half_beat_count = 0;//半拍计数
rt_uint8_t beat_now = 0;//当前节拍
//半拍步进值360°/50/8 = 0.9°
half_beat_num = (angle * 10) / 9;
while(1)
{
switch (beat_now)
{
case 0://1000
rt_pin_write(IN1_PIN, PIN_HIGH);
rt_pin_write(IN2_PIN, PIN_LOW);
rt_pin_write(IN3_PIN, PIN_LOW);
rt_pin_write(IN4_PIN, PIN_LOW);
beat_now = 1;
break;
case 1: //1010
rt_pin_write(IN1_PIN, PIN_HIGH);
rt_pin_write(IN2_PIN, PIN_LOW);
rt_pin_write(IN3_PIN, PIN_HIGH);
rt_pin_write(IN4_PIN, PIN_LOW);
beat_now = 2;
break;
case 2://0010
rt_pin_write(IN1_PIN, PIN_LOW);
rt_pin_write(IN2_PIN, PIN_LOW);
rt_pin_write(IN3_PIN, PIN_HIGH);
rt_pin_write(IN4_PIN, PIN_LOW);
beat_now = 3;
break;
case 3://0110
rt_pin_write(IN1_PIN, PIN_LOW);
rt_pin_write(IN2_PIN, PIN_HIGH);
rt_pin_write(IN3_PIN, PIN_HIGH);
rt_pin_write(IN4_PIN, PIN_LOW);
beat_now = 4;
break;
case 4://0100
rt_pin_write(IN1_PIN, PIN_LOW);
rt_pin_write(IN2_PIN, PIN_HIGH);
rt_pin_write(IN3_PIN, PIN_LOW);
rt_pin_write(IN4_PIN, PIN_LOW);
beat_now = 5;
break;
case 5://0101
rt_pin_write(IN1_PIN, PIN_LOW);
rt_pin_write(IN2_PIN, PIN_HIGH);
rt_pin_write(IN3_PIN, PIN_LOW);
rt_pin_write(IN4_PIN, PIN_HIGH);
beat_now = 6;
break;
case 6://0001
rt_pin_write(IN1_PIN, PIN_LOW);
rt_pin_write(IN2_PIN, PIN_LOW);
rt_pin_write(IN3_PIN, PIN_LOW);
rt_pin_write(IN4_PIN, PIN_HIGH);
beat_now = 7;
break;
case 7://1001
rt_pin_write(IN1_PIN, PIN_HIGH);
rt_pin_write(IN2_PIN, PIN_LOW);
rt_pin_write(IN3_PIN, PIN_LOW);
rt_pin_write(IN4_PIN, PIN_HIGH);
beat_now = 0;
break;
default:
beat_now = 0;
break;
}
DELAY;
half_beat_count++;
if(angle > 0)
{
if(half_beat_count > half_beat_num)
break;
}
}
turn_stop();
}

5.2 反转控制(逆时针)

反正控制时序,形象点从硬件上来说,把A相和B相调换,对应程序的话就是调整一下控制时序。

void turn_angle_reverse(float_t angle)
{
rt_uint16_t half_beat_num = 0;//角度转换半拍总数
rt_uint16_t half_beat_count = 0;//半拍计数
rt_uint8_t beat_now = 0;//当前节拍
//半拍步进值360°/50/8 = 0.9°
half_beat_num = (angle * 10) / 9;
while(1)
{
switch (beat_now)
{
case 0://0010
rt_pin_write(IN1_PIN, PIN_LOW);
rt_pin_write(IN2_PIN, PIN_LOW);
rt_pin_write(IN3_PIN, PIN_HIGH);
rt_pin_write(IN4_PIN, PIN_LOW);
beat_now = 1;
break;
case 1://1010
rt_pin_write(IN1_PIN, PIN_HIGH);
rt_pin_write(IN2_PIN, PIN_LOW);
rt_pin_write(IN3_PIN, PIN_HIGH);
rt_pin_write(IN4_PIN, PIN_LOW);
beat_now = 2;
break;
case 2://1000
rt_pin_write(IN1_PIN, PIN_HIGH);
rt_pin_write(IN2_PIN, PIN_LOW);
rt_pin_write(IN3_PIN, PIN_LOW);
rt_pin_write(IN4_PIN, PIN_LOW);
beat_now = 3;
break;
case 3://1001
rt_pin_write(IN1_PIN, PIN_HIGH);
rt_pin_write(IN2_PIN, PIN_LOW);
rt_pin_write(IN3_PIN, PIN_LOW);
rt_pin_write(IN4_PIN, PIN_HIGH);
beat_now = 4;
break;
case 4://0001
rt_pin_write(IN1_PIN, PIN_LOW);
rt_pin_write(IN2_PIN, PIN_LOW);
rt_pin_write(IN3_PIN, PIN_LOW);
rt_pin_write(IN4_PIN, PIN_HIGH);
beat_now = 5;
break;
case 5://0101
rt_pin_write(IN1_PIN, PIN_LOW);
rt_pin_write(IN2_PIN, PIN_HIGH);
rt_pin_write(IN3_PIN, PIN_LOW);
rt_pin_write(IN4_PIN, PIN_HIGH);
beat_now = 6;
break;
case 6://0100
rt_pin_write(IN1_PIN, PIN_LOW);
rt_pin_write(IN2_PIN, PIN_HIGH);
rt_pin_write(IN3_PIN, PIN_LOW);
rt_pin_write(IN4_PIN, PIN_LOW);
beat_now = 7;
break;
case 7://0110
rt_pin_write(IN1_PIN, PIN_LOW);
rt_pin_write(IN2_PIN, PIN_HIGH);
rt_pin_write(IN3_PIN, PIN_HIGH);
rt_pin_write(IN4_PIN, PIN_LOW);
beat_now = 0;
break;
default:
beat_now = 0;
break;
}
DELAY;
half_beat_count++;
if(angle > 0)
{
if(half_beat_count > half_beat_num)
break;
}
}
turn_stop();
}
5.3 停止
void turn_stop(void)
{
rt_pin_write(IN1_PIN, PIN_LOW);
rt_pin_write(IN2_PIN, PIN_LOW);
rt_pin_write(IN3_PIN, PIN_LOW);
rt_pin_write(IN4_PIN, PIN_LOW);

5.4 转动效果

正转360°,反转360°

6.总结

简单写了段程序驱动一下步进电机,实现了步进电机的8拍控制,可以任意角度正反转。调速可以通过修改脉冲频率,也就是代码中的DELAY,但是由于步进电机特性限制,速度不能太快,否则会驱动不起来;太慢长时间运转会发热严重。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电机驱动
    +关注

    关注

    59

    文章

    1066

    浏览量

    85863
  • 步进电机
    +关注

    关注

    149

    文章

    2929

    浏览量

    146066
  • 正反转控制
    +关注

    关注

    3

    文章

    32

    浏览量

    10988
  • 脉冲信号
    +关注

    关注

    6

    文章

    333

    浏览量

    36434
  • L298N
    +关注

    关注

    19

    文章

    224

    浏览量

    78151
收藏 人收藏

    评论

    相关推荐

    步进电机简单驱动方法

    步进电机简单驱动方法,了解四轴步进电机驱动器原理
    发表于 07-12 08:18

    步进电机驱动技术

    阐述了步进电机驱动原理,介绍了恒流斩波、脉宽调制及细分驱动步进电机
    发表于 01-09 13:41 101次下载

    步进电机驱动芯片有哪些_六款步进电机驱动芯片

    本文首先介绍了步进电机基本原理及用途,其次介绍了步进电机分类,最后介绍了六款步进电机
    的头像 发表于 05-23 16:20 10.8w次阅读

    七特步进电机驱动器型号

       七特步进电机驱动器是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动
    发表于 11-21 15:32 1517次阅读

    步进电机步进电机驱动器选型的九条准则

    为了让更多的用户了解步进电机步进电机驱动器,挑选到最适宜自个运用恳求的步进
    的头像 发表于 03-29 16:05 6244次阅读

    只要简单接线配置,轻松将单级步进电机作为双级步进电机进行驱动

    只要简单接线配置,轻松将单级步进电机作为双级步进电机进行驱动
    发表于 10-28 12:00 0次下载
    只要<b class='flag-5'>简单</b>接线配置,轻松将单级<b class='flag-5'>步进</b><b class='flag-5'>电机</b>作为双级<b class='flag-5'>步进</b><b class='flag-5'>电机</b>进行<b class='flag-5'>驱动</b>

    两相双极步进电机驱动 其2

    在上一篇文章“两相双极步进电机驱动 其1”中,给出了两相双极步进电机的基本驱动电路示例和
    的头像 发表于 02-24 09:51 1512次阅读
    两相双极<b class='flag-5'>步进</b><b class='flag-5'>电机</b>的<b class='flag-5'>驱动</b> 其2

    步进电机简单驱动方法_步进电机控制方法

    简单步进电机驱动方法是单相双极驱动方式,也称为双相步进
    发表于 03-08 14:21 1.3w次阅读

    步进电机驱动器原理_步进电机驱动器接线

    步进电机驱动器是一种电子设备,用于控制步进电机的转动和运动,其主要原理是将控制信号转换为电机
    发表于 03-08 14:30 2767次阅读
    <b class='flag-5'>步进</b><b class='flag-5'>电机</b><b class='flag-5'>驱动</b>器原理_<b class='flag-5'>步进</b><b class='flag-5'>电机</b><b class='flag-5'>驱动</b>器接线

    步进电机驱动教程_步进电机功率计算

    步进电机是一种特殊的电机,可以通过输入脉冲信号来控制它的位置和运动。步进电机通常由电机本体和
    发表于 03-08 14:33 3111次阅读

    步进电机驱动详解

    步进电机相比普通直流电机来说模型结构方面更加复杂,比如步进电机没有设计直流电机用于切换电流方向的
    发表于 03-16 09:28 7次下载
    <b class='flag-5'>步进</b><b class='flag-5'>电机</b><b class='flag-5'>驱动</b>详解

    步进电机驱动基础

    步进电机每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角度输入的脉冲数成正比,转速与脉冲频率成正比。它的驱动方式也比普通的有刷直流电机复杂。 本节我们就来讲讲
    发表于 03-16 09:28 7次下载
    <b class='flag-5'>步进</b><b class='flag-5'>电机</b><b class='flag-5'>驱动</b>基础

    五线四相步进电机驱动测试程序(2个步进电机)

    五线四相步进电机驱动测试程序(2个步进电机)
    发表于 03-22 14:18 6次下载
    五线四相<b class='flag-5'>步进</b><b class='flag-5'>电机</b><b class='flag-5'>驱动</b>测试程序(2个<b class='flag-5'>步进</b><b class='flag-5'>电机</b>)

    步进电机驱动器拨码开关怎么调

    步进电机驱动器是一种常见的电机驱动装置,可用于控制步进电机
    的头像 发表于 01-15 13:56 1305次阅读

    步进电机驱动电路原理 步进电机驱动器可以通用吗

    步进电机驱动电路原理是指通过特定的电信号驱动步进电机工作的原理。而
    的头像 发表于 01-24 10:46 911次阅读