28BYJ48 步进电机驱动记

51单片机 - 步进电机28BYJ-48 步进驱动 阅读详情
AI摘要

本文讲述了作者如何在寻找低成本替代品的过程中,从选择舵机到尝试步进电机28BYJ48,通过实验评估和改进驱动电路,最终实现轮式驱动单元的转向功能。过程中学到的关键经验和教训对IT技术爱好者具有参考价值。

一、背景

        之前设计了一款轮式驱动单元,结构上是为了实现“可转向驱动轮”。

        当时凭直觉选择了标准舵机作为转向动力,但经过这些年的使用,发现合适价位的舵机性能无法满足需求,而满足需求的舵机成本又背离了轮式驱动单元的设计初衷(低成本编程学习素材);期望在30元以内选择一款合适舵机的愿望一直没有实现(曾经选到过一款30元左右的数字舵机,可后来没有了);这个价位范围内的舵机通常不是转向精度不够,就是小角度转动根本不响应,基于舵机做出的小车一直不是很满意。

       最近在逛“淘宝”时发现一款步进电机 — 28BYJ48,自带1/64减速,价格最低的只有3元左右,好的也不过8元(有一个厂家直销的15元),关键是好像是某种家电上用的,并非那种拆机品,卖一阵子就没了。这个价位配上驱动后也不会很贵,体积、价位十分合适,含1/64减速,力矩不应该太小。5mm输出轴,有现成的法兰盘联轴器可用:

        其安装孔尺寸正巧和我设计的轮式驱动单元转向圆盘相配,价格也合适(2.5元/只)。

         故动了替换舵机的心思,这就有了如下的“步进电机驱动记”。

二、需求

        能代替目前使用的标准舵机,可以驱动轮式驱动单元转向。

        因轮式驱动单元设计时就考虑到尽量减小转向阻力,结构上设计了等效平面轴承,并且轮子的着地点在转向轴心,轮胎截面为圆形,接地面很小,基本无转向阻力,所需要的力矩不应该太大;而且,作为转向作用,基本无需保持力

        标准舵机(如MG995、996)一般有10~20kg的力矩,此处应该用不上。

        因没有测量过实际转向时所需的力矩,故无法确定需要多大力矩,只能试试。

        转向范围:略大于 180度

        转向速度:能达到标准舵机的指标即可,约为60度/秒

三、实施

3.1 电机性能评估

        首先买了两个中等价位的电机(6元/只),为方便测试,买了一块驱动板,实际上就是三极管驱动电路(用的ULN2003)。

       用 STM32F103C8核心板,按店家的示例编写了驱动程序,上电测试,两个电机一个转,偶尔启动不了,一个不转;而且,转的那个稍一受力,就停了。失望!

        不太死心,感觉电机不至于这么差。

        仔细研究资料后,觉得驱动示例程序有点太粗糙,用的是四拍驱动,此为四相电机,似乎应该是八拍方式驱动。

       按电机资料,自己编写了四相八拍驱动程序,上电测试,两个电机均能可靠转动,且用手捏输出轴也不影响。尝试了几个不同的速度(驱动脉冲时间)后,发现电机性能还不错,在八拍驱动模式下,来回运转多次,无失步现象。唯一不足是速度略慢,初步测试最快只能达到45度/秒;不过,小车本身就是学习素材,问题不大,可以接受。因此重燃希望!

        测试所用驱动模块是ULN2003,这种双极型电路有较大饱和压降: 

       按电机线包电阻50欧计算,驱动电流大约100mA,压降达1V左右,使用USB口供电,电压只有5V,实际供给电机的电压只有4V左右,如果能保证5V供电,力矩应该更大。

       决定自己设计驱动电路,选用我最常用的MOS管CJ3400,最大4A驱动电流,压降极低:

       MOS管标注的是导通电阻,按上表参数,即便是52毫欧,在100mA电流下只有0.0052V压降,可以忽略。

       由于用八拍驱动,程序略微复杂,且要占用4个IO口,故考虑用一个简单的MCU完成电机驱动控制逻辑,封装成一个驱动模块,通过UART实现对电机的控制。这样小车的控制器编程就比较简单,和使用舵机类似,甚至比舵机更为方便。自己编程的驱动模块可以根据需要灵活增减相应功能,使之更符合轮式驱动单元的转向需求,免受标准产品的功能制约;还增加了学习素材。

       根据前面做的STM32F103测试程序,用STC12LE5208(51系列MCU)或STM32的M0系列MCU即可。但用STC需要使用Keil(MDK),用STM32可以使用 Arduino IDE,是开源平台,更符合学习场景。权衡之后,选择了STM32G030F6P6;首先是价格合适,只有2元左右;其次是封装合适,SSOP20封装,体积小,IO口足够,且无需外部晶振,PCB排版方便。

3.2 实施过程

3.2.1 第一版设计

        根据使用需求,设计主要实现以下几点:

        A)将电机和驱动电路组合为一体,并按轮式驱动单元的使用方式设计,构成一个模组,可以直接用于轮式驱动单元,与舵机等效。

        B)内置MCU,对外接口为UART,使用命令操作电机,实现转向。

        C)增加左、右转向限位,在功能上和舵机等效,并方便矫正。

        D)使用MOS管驱动,改善性能。

        E)因为驱动控制内置,故需要考虑上电过程,避免四个线包同时通电。

        以下为初次设计的电路,选择霍尔电路3144作为限位:

        首次设计,只做了5片PCB样板,自购器件焊接:

       编程基于Arduino(STM32Duino),基于Arduino IDE编程比较方便,不用详细阅读芯片手册。本想继续使用我原来基于 STM32F103编写的FreeRTOS程序框架,无奈内存不够,只得作罢;在原来的程序模板上消除RTOS,采用简单轮询方式调度实现,但保留了模板原有的功能,如内存读、写,调试信息输出,任务看护。

       编程完成后,测试效果如愿,实现了自动加速转动、指定速度转动、绝对角度自动初始化,加上法兰联轴器后,手捏感觉力矩挺大,信心大增。

       不足的是:上电复位过程中还是出现了4个线包同时供电的情况,交付加工前添加的电源开关设计不严谨,未起作用。

       由于带负载测试有点麻烦,且过于自信,在没有全面测试的情况下就启动了第二版设计,导致后续出现问题,后面详述。

3.2.2 第二版设计

        在第一版基础上,改进驱动设计,放弃电源开关,增加一级三极管驱动,使得MCU在复位期间 IO 口高阻状态下不会使驱动导通,消除了四个线包同时供电的情况。

       由于增加了一级三极管,可以不使用MCU的OD输出模式,便于Arduino编程,因为其pinMode函数设置中没有这个选项。同时,由于增加了一级驱动,使得MOS管驱动电压可以提升到12V;28BYJ48电机有5V和12V两种规格,增加了驱动板的灵活性。正好所选的霍尔传感器3144支持电源为5~24V,1117-3.3V的输入电压允许最大12V。因此,第二版设计的供电可以在 5 ~12V 范围内,具体电路如下:

        由于第一版比较顺利,所以有点急于求成,第二版直接下单做了SMD(因为SSOP20手工焊接太累),且做了点批量:

       同时加工了相应的结构件。

       先拿到PCB(嘉立创真是快,交上PCB图,4天即提供SMD好的板子),上传修改后的程序,一次通过,电机如愿转动。

       遇到点小情况:MCU首次下载程序(在Arduino  IDE下)后,程序能正常运行,但按键复位后MCU不运行了;下载了两片都是如此。但断电重启,一切恢复正常,之后也再无此现象,不知道是什么原因?还没有仔细阅读 STM32G030的手册。

      结构件到了后,即刻组装:

       装好小车后,通电一试,转不动,当时就懵了!

       用手转动很轻松,电机却带不动,看来力矩的“矩”作用很大!

       直接捏转轴,只有不到3mm的阻力臂,而转向轮的平面轴承(实际上是一堆钢珠)产生的阻力臂大约是13mm,等于力矩增加了4倍多。

       拆装了几次,排除了装配问题,纯粹是力矩不够所致。

       首先想到的是:在网上再找找,有无同规格电机力矩大点的。找到一家28BYJ48电机的厂家店,发现他家的28BYJ48电机不只是有5V和12V两种规格,5V的还有21欧和50欧两种线包电阻,以及1/16、1/32、1/64三种减速比可选,比较正规,但价格有点高,要15元/只。

       看介绍似乎 21 欧的力矩大些,咨询店家,回复:力矩是会大一些,但发热也大。

        受此启发:适当增加电机供电电流(提高供电电压),应该可以增加力矩。

        目前所用电机是 50 欧的,额定电压 5V,电流 100mA。如将电压提升到 10V,电流约为 200mA,此时,保持状态仍然持续供电,电机估计承受不了。

       考虑到使用场景,基本无需保持力矩,减速机构所产生的阻力应该就可以对付,故修改程序,在电机停止时关掉所有线包供电。

       按此修改程序,并将电压提升到10V(二版设计支持 5 ~ 12V 供电正好发挥作用),通电测试,转了!很流畅!开心!

       由于关掉的保持电流,电机反而不发热了。作为轮式驱动单元的转向功能,不会连续运转,所以应该可以应用此方式。

       在此基础上,进一步改进,以 PWM方式提供保持电流,根据实测发热情况确定周期和占空比,从而完善保持功能。

       实施后发现,如想要有明显效果,电机发热明显,且电池消耗电流增加,对于小车而言,没有意义,徒增电池消耗,故暂时取消,但逻辑保持,后续根据需求酌情处理。

       考虑到程序支持指定转动速度,如设置速度过低,也许会导致线包供电时间过长,故增加了最低转速限制。

       至此,用28BYJ48步进电机替代标准舵机、实现轮式驱动单元转向算是初步完成,虽不太完美,但基本达到了预期。为方便测试,基于Processing (processing.org)编写了PC上的测试程序:

      实际转向效果如下:

28BYJ48 步进电机转向测试

https://v.youku.com/v_show/id_XNjIxOTM1ODM1Ng==.html

 

四、结语

        有惊无险,但教训还是有的:每次想偷懒,都会出状况,看来工程上真是容不得半点马虎。

        通过上述实施过程,收获两点经验:

        1)要准确定位需求,并清晰知道需求背后所蕴含的道理。此处如不能清晰的知道:轮式驱动单元的转向运动只需克服阻力即可,而阻力是由运动产生的,不运动就无需力!才可以用忽略步进电机保持力的处理方式,达到增加转动力矩的目的。同时,在小车运行中不会不停的转向,才可以用过流驱动方式增加力矩。

        2)不能教条的接受一些默认的规则,要从原理上理解这些规则产生的缘由,从而根据具体需要取舍。如果此处墨守陈规,一定要实现步进电机的保持力,则只能放弃此方案。其实,这种驱动方式是可以用于无需保持力的场景、产生超出电机额定力矩的输出的。

        也算是因祸得福,如果真的在第一版就严格测试,估计我也不会去如此费心,提高电压的想法就不会产生。

       本以为是举手之劳之事,却搞了个“山重水复疑无路,柳暗花明又一村”。好在最后皆大欢喜。

       因为电路支持5 ~12V供电,且驱动用的MOS管最大电流为4A,保守估计1A肯定可以,我查了一下,网上这类四相的步进电机应该都可以驱动,除了28BYJ48外,还有24BYJ、35BYJ等等种类,开始没有仔细搜,这也算是失误,如果开始就看到35BYJ412,估计就不会用28BYJ48了,不过28BYJ的价格确实诱人。

——————————————

注:如果你也有合适的应用场景,想选择 28BYJ48,可以找我,也可以去我的淘宝店 —— 单片机学习之家。

28BYJ-48步进电机 步进电机的控制通常通过一个驱动器(步进驱动器)来完成。驱动器接受来自控制器的脉冲信号,并将其转换为步进电机的相位信号,从而驱动电机按预定的步进角度转动。综上所述,28BYJ-48步进电机以其独特的性能和广泛的应用领域,在自动化控制领域中发挥着重要作用。 阅读详情

相关推荐

STM32物联网项目-单极性步进电机28BYJ-48

而八拍就类似这样的节拍:A-AB-B-BC-C-CD-D-DA,因为有两个绕组同时导电的情况,对转子的吸力一样,这样就又会产生一个新的转动角度,所以转子就会比原来4个节拍的多了4个转动的角度,这样再转一圈,就要(4+4)* 8 = 64个节拍了,所以360度/64 = 5.625度,这5.625度是步进电机转动的角度,也就是是下面讲到的输出轴的转动角度;因为八拍让转子转一圈的脉冲数是64,单四拍或双四拍让转子转一圈的脉冲数都是32,是八拍的一半,在减速比都是64的情况下,让步进电机转一圈,则。

weixin_46251230的博客 5366

28BYJ-48

在学习步进电机的驱动时,做的一个笔记

weixin_51341083的博客 1万+

使用 ULN2003 驱动 28BYJ-48 步进电机

使用 ULN2003 驱动 28BYJ-48 步进电机。

ittuann的博客 6094

步进电机28BYJ-48的驱动(arduino,STM32平台),最全的驱动详细原理,驱动电路分析,驱动代码解释

步进电机28BYJ-48的驱动(arduino平台),最全的驱动详细原理,驱动电路分析,驱动代码解释 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 在本网站查找了很多资料,收益匪浅,今来研究了步进电机28BYJ-48的驱动,查了很多资料,发现介绍不够详细,没有抓到关键点,特别是原理,只有原理清楚才能实现精确控制。因此写了本文,借用一...

anchoretor的专栏 5万+

步进电机28BYJ-48

步进电机驱动

qq_42263055的博客 6135

ULN2003驱动28BYJ-48步进电机详解(附:51 32代码讲解)

本文介绍了28BYJ-48步进电机的驱动原理以及注意事项,并展示了极简 32 51驱动代码

qq_41818650的博客 1万+

STM32控制ULN2003驱动步进电机28BYJ-48

步进电机 步进电动机又称脉冲电动机,是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。 传送门:一文搞懂步进电机特性、原理及驱动器设计 28BYJ-48步进电机 28BYJ-48永磁式减速单极性步进电机 28:步进电机的有效最大外径是28毫米 B:表示是步进电机 Y:表示是永磁式 J:表示是减速型(减速比1:64) 48:表示四相八拍 传送门:28BYJ-48单极性步进电机 28BYJ

gong_ming的博客 2万+

使用 ULN2003 驱动器和 Arduino 控制 28BYJ-48 步进电机

使用 ULN2003 驱动器和 Arduino 控制 28BYJ-48 步进电机

sxstj的博客 6436

Arduino程序设计(十五)步进电机驱动(28BYJ-48)

本文介绍28BYJ-48步进电机驱动原理及实验,主要内容有:1、介绍28BYJ-48步进电机;2、介绍ULN2003驱动板;3、自编程序控制步进电机正转;4、调用库函数控制电机正反转。上图是五线四相步进电机驱动模块也叫ULN20003驱动板,该模块使用ULN2003大功率达林顿芯片驱动步进电机。A、B、C、D发光二极管指示四相步进电机工作状态,配有步进电机的标准接口,使用时可直接插拔。

Alice的博客 7303

28BYJ-48步进电机的控制笔记

目录 1. 概述 2. 硬件设计 3. 软件设计 1. 概述 步进电机的主要特性: 步进电机必须驱动才可以运转,驱动信号必须为脉冲信号,无脉冲电机静止,若加入适当的脉冲信号,则会以一定的角度(称为步角)转动。转动的速度与脉冲频次成正比。 以减速比1:64,步进角度为5.625/65度。若转一圈,则需要360/5.625*64=4096个脉冲信号。 步进电机具有瞬间启动和紧急停止...

Xanthium 1万+

NodeMCU驱动28BYJ-48型步进电机(Arduino)

NodeMCU驱动28BYJ-48型步进电机(Arduino)

qq_44955826的博客 2013

STM32驱动28BYJ-48步进电机

一、认识28BYJ-48步进电机 首先我们来了解一下28BYJ-48步进电机,那就先从名字开始吧! 28:步进电机的有效最大外径是28毫米 B:表示是步进电机 Y:表示是永磁式子 J:表示是减速型(减速比:1:64) 48:表示四相八拍 “长相”上看是这样子滴... 这个步进电机需要配合着一个驱动板来使用,图片上的是一个ul 203的驱动板和一个步进电机。这个在某宝上搜就有,价钱的话大概10刀左右就行,这也是我为什么选择它的一个原因,哈哈。 接着来看的是步进电机的内部结构:

m0_58671962的博客 6980

STM32驱动ULN2003控制步进电机28BYJ-48之定时器异步

上节代码问题 传送门:STM32控制ULN2003驱动步进电机28BYJ-48最基础方法 上节代码应该是能搜到的控制ULN2003驱动步进28BYJ-48最通用的方法了,但是上节代码的执行会导致整个系统进行阻塞。如果电机运转10圈可能导致41s的阻塞时间,这对于任何系统工程都是致命的。 在这41s中整个cpu都在改变IO口状态和delay_ms中循环,主要流程如下: A相 --> delay_ms(1) --> AB相 --> delay_ms(1) --> B相 --> d

gong_ming的博客 3814

28BYJ-48步进电机详解(五线四相 STM32)

步进电机(STEP MOTOR)把电脉冲信号变换成角位移以控制转子转动的执行机构。在自动控制装置中作为执行器。每输入一个脉冲信号,步进电动机前进一步,故又称脉冲电动机。步进电动机多用于数字式计算机的外部设备,以及打印机、绘图机和磁盘等装置。以下是28BYJ48步进电机的参数:型号28BYJ48工作电压5V直径28mm减速比1:64驱动方式ULN2003相电阻50±10%步进角度5.625°/64型号代表含义:28——最大外径是28毫米B——表示是步进电机。

qq_44016222的博客 1万+

从零构建高精度电子秤:HX711与STM32的时序通信陷阱与实战避坑指南

本文详细解析了使用STM32F103C8T6与HX711模块构建高精度电子秤的通信时序陷阱与实战解决方案。重点探讨了微秒级延迟实现、数据读取算法、校准方法和滤波优化,帮助开发者避开常见通信问题,提升电子秤的测量精度和稳定性。

data3的博客 782

brother的PT-9800PCN标签打印机二次开发

本来想通过esc/p指令打印标签,但是无奈能找到的资料太少,而且打电话给客服,也没有sample可以提供参考,后来客服说使用template功能的话,打印很方便。于是下载手册学习了一下, 先下载P-touch Editor软件,制作标签模板。 制作的模板就是普通的标签,不需要连接数据库之类的,模板里有3个object,分别是文本1,文本2,条形码3。这个很关键,后面的代码传送数据,就是按这...

3563

L298N驱动28BYJ-48步进电机 STM32在定时器中控制步进电机

问题由来 在综合实例 利用ZigBee模块实现智能家居的远程语音控制 中,用到了步进电机,有的网友问我,应该买一个什么样的步进电机呢? 其实底板上的L298N电路是一个步进电机驱动的通用电路,不一定要买跟我一模一样的步进电机。 我们随便选择一个步进电机都是可以的,为了控制方便,我们这里选择一个常见的5V的步进电机:28BYJ-48。 内部拆解图: 正是因为内部有这么多齿轮,所以此步进电机为一个减速电机。 解决问题 28BYJ-48步进电机与L298N驱动芯片的接法 改进综合实例中步进电机的驱动

程序员小哈的专栏 6214

MicroCap声学仿真介绍(一)

5-频率上下限选择,需要注意的是,第一个数字是上限,第二个数字是下限,如果填反了,会有报错提示;下三角可以选择“Auto”、“linear”、“log”和“list”,设置的是频率点之间的距离和频率点的数量。Component是用来选择部件的模块,如上图所示,声学仿真常用到的是“Electroacoustic Macros AC”、“Electroacoustic Macros TR”、“NXP Transducers”以及“NXP HD components”。3是声学部件,是声学仿真中常用的部件。

山无忧的博客 5089

Arduino 与28BYJ-48步进电机握手

1. 步进电机是一种将电脉冲转化为角位移的执行机构。 当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个步进角。 2. 您可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的。 同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 3. 28BYJ-48步进电机多用于雕刻机、3D打印机等需要精确控制的设备。本篇使用ULN2003驱动五线四相减速步进电机。

vor234的博客 5975

【Android逆向工程】第18章:Ollvm 混淆与对抗

本章介绍了Ollvm混淆技术及其对抗方法。Ollvm是基于LLVM的开源代码混淆工具,主要实现控制流平坦化、虚假控制流和指令替换三种混淆技术。控制流平坦化通过状态变量和switch-case结构隐藏真实控制流,将原本清晰的逻辑拆分为多个状态块。混淆后的代码在静态分析中难以理解,但可通过动态追踪执行路径、符号执行等方法来还原原始逻辑。本章还提供了混淆代码示例和对抗策略,帮助理解Ollvm的工作原理及其防御方法。

w987333120的博客 213

全面解读 SAP Business Data Cloud

SAP 在 2025 年初正式推出(简称BDC),它把、以及全新的统一封装为一项完全托管的 SaaS 服务,配套交付“语义层 + 数据产品 + 智能应用”三层能力,为企业构建真正贴近业务语境的 “Business Data Fabric”。这一方案不仅解决了跨系统数据碎片化、治理难及 AI 训练数据可信度低的问题,还为现有 BW 客户、S/4HANA以及第三方工作负载提供云上现代化路径和零拷贝数据共享机制。本文将围绕技术架构、核心组件、业务场景、迁移路线及未来展望展开,以 Henkel 等真实案例佐证。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 904

STM32之28BYJ-48步进电机驱动

本文详细介绍了基于STM32F103C8T6控制28BYJ-48步进电机的完整方案。主要内容包括:1)28BYJ-48电机特性与ULN2003驱动板工作原理;2)硬件连接方法,重点强调电源配置;3)软件实现,涵盖GPIO初始化、步进序列定义、定时器配置及运动控制核心算法;4)功能实现如正反转、调速和加减速控制;5)典型应用示例和常见问题解决方案。该系统通过8步驱动序列可实现0.0879°步距角控制,转速范围1.46-15RPM,适用于小型自动化项目开发,具有成本低、控制简单等特点。

qq_50749196的博客 3131

CUDA编程 - Nsight system & Nsight compute 的安装和使用 - 学习记录

在 cuda 编程中,经常会用到 Nsight system 和 Nsight compute 进行性能分析等,下面做个学习总结。本篇包括安装和常用分析思路总结,具体实践操作总结会放在下一篇博客。

点云算法工程师 1万+
上一篇: 掌上单片机实验室 – 单片机课可以这样开(23)
下一篇: 掌上单片机实验室 – 低分辨率编码器测速方式完善(24)
embedream
博客等级 码龄21年 134粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入之梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值