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,但是由于步进电机特性限制,速度不能太快,否则会驱动不起来;太慢长时间运转会发热严重。

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

    关注

    60

    文章

    1215

    浏览量

    86723
  • 步进电机
    +关注

    关注

    150

    文章

    3109

    浏览量

    147443
  • 正反转控制
    +关注

    关注

    3

    文章

    33

    浏览量

    11077
  • 脉冲信号
    +关注

    关注

    6

    文章

    398

    浏览量

    36956
  • L298N
    +关注

    关注

    21

    文章

    224

    浏览量

    78677
收藏 人收藏

    评论

    相关推荐

    步进电机驱动相关的知识

    之前小白白写过一篇步进电机驱动基础,讲了最基本的步进电机驱动方法。
    发表于 10-19 15:50 2148次阅读
    <b class='flag-5'>步进</b><b class='flag-5'>电机</b><b class='flag-5'>驱动</b>相关的知识

    步进电机简单驱动方法

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

    stm32 驱动步进电机

    驱动电路,关于步进电机部分,主要针对如何设置步进电机的参数。
    发表于 03-14 09:52 22次下载

    步进电机的硬件电路设计,步进电机驱动原理及方法

    步进电机是一种感应电机,它的工作原理是利用电子电路,将直流电变成分时供电的,多相时序控制电流,用这种电流为步进电机供电,
    发表于 06-11 11:34 3.3w次阅读

    简单实现51单片机步进电机驱动

    简单实现51单片机步进电机驱动说明:
    发表于 11-11 13:06 38次下载
    <b class='flag-5'>简单</b>实现51单片机<b class='flag-5'>步进</b><b class='flag-5'>电机</b>的<b class='flag-5'>驱动</b>

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

    只要简单接线配置,轻松将单级步进电机作为双级步进电机进行驱动
    发表于 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>

    步进电机驱动方式与特征

    到目前为止,我们已经介绍了步进电机的结构和步进电机驱动方法。本文在表格中简要汇总了步进
    的头像 发表于 02-24 09:51 1446次阅读
    <b class='flag-5'>步进</b><b class='flag-5'>电机</b>的<b class='flag-5'>驱动</b>方式与特征

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

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

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

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

    步进电机驱动详解

    步进电机相比普通直流电机来说模型结构方面更加复杂,比如步进电机没有设计直流电机用于切换电流方向的
    发表于 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>基础

    arduino如何驱动步进电机

    ,还能轻松驱动步进电机。本文将详细介绍Arduino驱动步进电机的原理、方法和应用。
    的头像 发表于 01-14 16:37 3629次阅读

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

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

    步进电机工作原理 步进电机简单驱动方法

    步进电机是一种将电脉冲信号转换为角位移的电动机。它具有准确性、控制性和可靠性强的特点,在许多领域得到广泛应用,例如机械、仪器设备、电子信息等。理解步进电机的工作原理以及最
    的头像 发表于 02-04 09:13 1573次阅读

    步进电机简单介绍

    步进电机的命名,参数,转速简单介绍
    的头像 发表于 04-17 21:40 1015次阅读