news 2026/5/23 5:08:03

【stm32简单外设篇】- 28BYJ-48 步进电机(配 ULN2003 驱动板)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【stm32简单外设篇】- 28BYJ-48 步进电机(配 ULN2003 驱动板)

一、适用场景
适用场景:小车差速/定位、微型机械臂关节、门栓/阀门微调、以步进精度做角度控制的低速场合、嵌入式 PWM/GPIO/驱动练习与教学。

二、器材清单

28BYJ-48 步进电机(常见 5V 带减速箱)×1

ULN2003 驱动板(或等效达林顿阵列驱动)×1

stm32f103(或其它 STM32)开发板 ×1

稳定 5V 电源(电机供电)×1

若干杜邦线

三、工作原理(要点)

电机与减速比:28BYJ-48 通常为单极四相步进电机,电机本体步距角常为 5.625°,电机轴每转需 360 / 5.625 = 64 步;电机带一级减速箱(典型标称 64:1),因此输出轴每转步数约 64 × 64 = 4096 步(不同厂家有细微差异,实际以传动箱标注/测量为准)。

推导(数位检算):360 / 5.625 = 64;64 × 64 = 4096;输出角度 = 360 / 4096 ≈ 0.087890625°/步。

驱动方式:ULN2003 板是 NPN 达林顿阵列,按输入 IN1..IN4 对应线圈缠绕的通电次序做开闭即可驱动。ULN2003 为下拉(SINK)驱动:板子将线圈另一端接到电源正极,IN 引脚接高时导通到地流过线圈。板上通常带有反向二极管/保护。

常用驱动序列:常见有三种序列——单相激励(wave drive,4 步)、双相激励(full step,4 步但两相同时通电)、半步(half-step,8 步,兼顾扭矩和平滑)。半步常用于平衡分辨率与扭矩。

步进控制思想:通过改变步序索引(加/减)并在步与步之间等待适当延时来产生转速;在启动/停止时做加减速(ramp)可避免漏步。

四、接线示意

VCC → +5V

GND → GND

标准库

HAL库
IN1-4--PA4-7

五、示例代码

标准库

#include "stm32f10x.h" #include "oled.h" #include "bsp_SysTick.h" void emGPIO_Init(void); unsigned int z_step[8]={0x0070,0x0030,0x0050,0x0090,0x00d0,0x00c0,0x00e0,0x0060}; unsigned int f_step[8]={0x0060,0x00e0,0x00c0,0x00d0,0x0090,0x0050,0x0030,0x0070}; int main() { int step=0; SysTick_Init(); emGPIO_Init(); while(1) { if(step>=8) step=0; GPIO_Write(GPIOD,z_step[step]); Delay_us(1850); step++; } // return 0; } void emGPIO_Init(void) { GPIO_InitTypeDef PD; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); PD.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; PD.GPIO_Mode = GPIO_Mode_Out_PP; PD.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &PD); }

HAL库

/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * Copyright (c) 2025 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ unsigned int z_step[8]={0x0070,0x0030,0x0050,0x0090,0x00d0,0x00c0,0x00e0,0x0060}; unsigned int f_step[8]={0x0060,0x00e0,0x00c0,0x00d0,0x0090,0x0050,0x0030,0x0070}; int step=0; /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(step>=8) step=0; GPIOA->ODR = z_step[step]; HAL_Delay(2); step++; /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }

六、讲解视频

https://www.bilibili.com/video/BV1AkmcB8Ep9/?spm_id_from=333.1387.upload.video_card.click&vd_source=f7dfe1b14f260b9cc3a146d2dbfd0719

https://www.bilibili.com/video/BV1pwmcBoEJU/?spm_id_from=333.1387.upload.video_card.click&vd_source=f7dfe1b14f260b9cc3a146d2dbfd0719

https://www.bilibili.com/video/BV1pwmcBoE4m/?spm_id_from=333.1387.upload.video_card.click&vd_source=f7dfe1b14f260b9cc3a146d2dbfd0719

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 10:17:51

终极JWT安全测试指南:掌握JSON Web Token工具的完整教程

在当今Web应用安全领域,JWT安全测试已成为保护API和用户会话的关键环节。JWT Tool作为一款专业的JSON Web Token工具,为安全测试人员提供了全方位的测试能力。 【免费下载链接】jwt_tool :snake: A toolkit for testing, tweaking and cracking JSON Web…

作者头像 李华
网站建设 2026/5/22 10:19:55

PCL社区版:重新定义我的世界启动体验

PCL社区版:重新定义我的世界启动体验 【免费下载链接】PCL2-CE PCL2 社区版,可体验上游暂未合并的功能 项目地址: https://gitcode.com/gh_mirrors/pc/PCL2-CE 在传统Minecraft启动器功能单一、操作繁琐的背景下,PCL社区版以其强大的功…

作者头像 李华
网站建设 2026/5/21 21:00:06

AWR1843毫米波雷达Python实战:从零搭建实时感知系统

AWR1843毫米波雷达Python实战:从零搭建实时感知系统 【免费下载链接】AWR1843-Read-Data-Python-MMWAVE-SDK-3- Python program to read and plot the data in real time from the AWR1843 mmWave radar board (MMWAVE SDK 3) 项目地址: https://gitcode.com/gh_m…

作者头像 李华
网站建设 2026/5/22 10:17:47

如何用BiliLocal让本地视频拥有B站弹幕体验?终极使用指南

如何用BiliLocal让本地视频拥有B站弹幕体验?终极使用指南 【免费下载链接】BiliLocal add danmaku to local videos 项目地址: https://gitcode.com/gh_mirrors/bi/BiliLocal 还在羡慕B站视频的弹幕互动氛围吗?现在,通过BiliLocal这款…

作者头像 李华
网站建设 2026/5/22 10:19:47

TrollInstallerX终极指南:iOS 14-16.6.1越狱完整教程

TrollInstallerX作为iOS系统上部署TrollStore的专用工具,为14.0到16.6.1版本系统的用户提供了简单高效的越狱解决方案。无论是传统的iPhone还是最新设备,都能通过这款工具实现快速安装。 【免费下载链接】TrollInstallerX A TrollStore installer for iO…

作者头像 李华
网站建设 2026/5/21 5:12:35

思源黑体TTF:7个重量级的免费多语言字体解决方案

思源黑体TTF:7个重量级的免费多语言字体解决方案 【免费下载链接】source-han-sans-ttf A (hinted!) version of Source Han Sans 项目地址: https://gitcode.com/gh_mirrors/so/source-han-sans-ttf 在当今跨文化设计需求日益增长的背景下,寻找一…

作者头像 李华