基于STM32与BD623x的电机控制实战——从零搭建无人机/机器人驱动系统
系列文章目录
1.元件基础
2.电路设计
3.PCB设计
4.元件焊接
5.板子调试
6.程序设计
7.算法学习
8.编写exe
9.检测标准
10.项目举例
11.职业规划
文章目录
- 一、为什么选择这两个芯片?
- 1.1 STM32微控制器
- 1.2 ROHM BD623x电机驱动
- 二、核心控制原理详解
- 2.1 H桥驱动奥秘
- 2.2 PWM调速原理
- 2.3 实战电路设计
- 三、STM32程序开发实战
- 3.1 CubeMX配置步骤
- 3.2 核心控制代码
- 四、安全设计规范
- 4.1 硬件防护措施
- 4.2 软件保护策略
- 五、多电机系统扩展
- 六、调试技巧大全
- 结语
一、为什么选择这两个芯片?
1.1 STM32微控制器
- 大脑角色:作为Cortex-M系列代表,STM32F103C8T6(蓝色pill开发板)具备72MHz主频,提供精准的PWM波形控制
- 关键资源:16路12位ADC、7通道DMA、37个GPIO,满足多电机同步控制需求
1.2 ROHM BD623x电机驱动
- 肌肉角色:BD6231FVM单通道H桥驱动器,支持4.5-18V/1.2A持续输出
- 三大保护:内置过热关断(TSD)、过流保护(ISD)、低压锁定(UVLO)
选型对比:相比L298N,BD623x效率提升40%,体积缩小60%
二、核心控制原理详解
2.1 H桥驱动奥秘
// 典型控制真值表
| IN1 | IN2 | 电机状态 |
|--|---------|
| 0 | 0 | 刹车 |
| 1 | 0 | 正转 |
| 0 | 1 | 反转 |
| 1 | 1 | 停止 |
2.2 PWM调速原理
- 占空比公式:转速 ∝ (Ton / (Ton + Toff)) × 100%
- 频率选择:推荐8-20kHz(超声波频段避免噪音)
2.3 实战电路设计
接线示意图:
STM32 GPIOA0 --> BD623x IN1 (PWM1)
STM32 GPIOA1 --> BD623x IN2 (PWM2)
STM32 GND --> BD623x GND
12V电池正极 --> BD623x VM
电机端子 --> OUT1 & OUT2
滤波关键:在VM端并联100μF电解电容+0.1μF陶瓷电容
三、STM32程序开发实战
3.1 CubeMX配置步骤
- 启用TIM1_CH1(PA8)和TIM1_CH2(PA9)
- 设置PWM模式1,预分频值72-1(1MHz时基)
- 配置ARR为999(1kHz频率)
3.2 核心控制代码
// PWM初始化
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);// 转速控制函数
void SetMotorSpeed(int16_t speed) {speed = constrain(speed, -1000, 1000); // 限幅if(speed >= 0) {__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, speed);__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 0);} else {__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, -speed);}
}// 急停函数
void MotorEmergencyStop() {HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // 启用刹车__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 1000);__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 1000);
}
四、安全设计规范
4.1 硬件防护措施
- 在VM端串接5A自恢复保险丝
- 电机两端并联1N5819续流二极管
- 逻辑地与功率地单点连接
4.2 软件保护策略
// 过流检测中断服务
void ADC_IRQHandler(void) {if(hadc.Instance->SR & ADC_FLAG_JEOC) {uint16_t current = HAL_ADCEx_InjectedGetValue(&hadc, ADC_INJECTED_RANK_1);if(current > 1200) { // 1.2A阈值MotorEmergencyStop();Error_Handler();}}
}
五、多电机系统扩展
四轴飞行器应用示例:
typedef struct {TIM_HandleTypeDef *htim;uint32_t ch1;uint32_t ch2;
} MotorControl;MotorControl motors[4] = {{&htim1, TIM_CHANNEL_1, TIM_CHANNEL_2},{&htim1, TIM_CHANNEL_3, TIM_CHANNEL_4},{&htim2, TIM_CHANNEL_1, TIM_CHANNEL_2},{&htim2, TIM_CHANNEL_3, TIM_CHANNEL_4}
};void SetAllMotors(int16_t *speeds) {for(uint8_t i=0; i<4; i++) {SetSingleMotor(motors[i], speeds[i]);}
}
六、调试技巧大全
- 示波器观测法:验证PWM波形占空比与频率
- 电流检测法:通过0.1Ω采样电阻监测工作电流
- 温度监控:使用红外测温仪确保芯片表面<85℃
常见故障排查:
- 电机抖动 → 检查PWM频率是否低于5kHz
- 驱动芯片发烫 → 确认是否频繁切换正反转
- 无法启动 → 测量VCC电压是否>4.5V
结语
通过本方案可实现:
- 单个电机0-100%无级调速
- 正反转快速切换(<200ns响应)
- 四轴飞行器基础姿态控制
项目进阶方向:
- 结合MPU6050实现闭环控制
- 开发CAN总线多节点控制系统
- 移植FreeRTOS实现多任务调度
相关文章:
基于STM32与BD623x的电机控制实战——从零搭建无人机/机器人驱动系统
系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 一、为什么选择这两个芯片?1.1 STM32微控制器1.2 ROHM BD623x电机驱动 二、核心控制原理详解2.1 H桥驱动奥…...
基于ffmpeg+openGL ES实现的视频编辑工具-字幕添加(六)
在视频编辑领域,字幕的添加是一项极为重要的功能,它能够极大地丰富视频内容,提升观众的观看体验。当我们深入探究如何实现这一功能时,FreeType 开源库成为了强大助力。本文将详细阐述借助 FreeType 库生成字幕数据的过程,以及如何实现字幕的缩放、移动、旋转、颜色修改、对…...
C++中const T为什么少见?它有什么用途?
在C中,右值引用(T&&)是移动语义和完美转发的核心特性之一,但你是否注意到,const T&&(const右值引用)却很少被使用?它到底有什么用途? 今天我们就来深入…...
Leetcode 位计算
3095. 或值至少 K 的最短子数组 I 3097. Shortest Subarray With OR at Least K II class Solution:def minimumSubarrayLength(self, nums: List[int], k: int) -> int:n len(nums)bits [0] * 30res infdef calc(bits):return sum(1 << i for i in range(30) if…...
SpringBoot3.x整合WebSocket
SpringBoot3.x整合WebSocket 本文主要介绍最新springboot3.x下如何整合WebSocket. WebSocket简述 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它允许在浏览器和服务器之间进行实时的、双向的通信。相对于传统的基于请求和响应的 HTTP 协议ÿ…...
猿大师办公助手对比其他WebOffice在线编辑Office插件有什么优势
1. 原生Office功能完整嵌入,排版一致性保障 猿大师办公助手直接调用本地安装的微软Office、金山WPS或永中Office,支持所有原生功能(如复杂公式、VBA宏等),确保网页编辑与本地打开的文档排版完全一致。 提供OLE嵌入和完…...
STM32创建静态库lib
创建静态库lib 1. 新建工程1.1 创建工程文件夹1.2 编写用户相关代码1.2.1 stm32f4xx_it.h1.2.2 stm32f4xx_it.c1.2.3 标准库配置:stm32f4xx_conf.h1.2.4 HAL库的配置:stm32f4xx_hal_conf.h1.2.5 LL库配置:stm32f4xx_ll_conf.h 1.3 移植通用文…...
Hive JOIN过滤条件位置玄学:ON vs WHERE的量子纠缠
Hive JOIN过滤条件位置玄学:ON vs WHERE的量子纠缠 作为数据工程师,Hive JOIN就像吃火锅选蘸料——放错位置味道全变!今天带你破解字节/阿里等大厂高频面试题:ON和WHERE后的过滤条件究竟有什么不同? 一、核心差异对比表 特性ON子句WHERE子句执行时机JOIN操作时JOIN完成后…...
MAC快速本地部署Deepseek (win也可以)
MAC快速本地部署Deepseek (win也可以) 下载安装ollama 地址: https://ollama.com/ Ollama 是一个开源的大型语言模型(LLM)本地运行框架,旨在简化大模型的部署和管理流程,使开发者、研究人员及爱好者能够高效地在本地环境中实验和…...
javaEE-13.spring MVC
目录 什么是spring web mvc: 什么是MVC: 一.创建一个spring项目 二.实现功能: 创建helloController.java项目: 建立连接: RequestMapping注解: 1.RequestMapping注解的使用: 2. RequestMapping 是GET还是POST请求 3.指定请求方法 RestControll…...
C/C++ | 每日一练 (2)
💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 C/C | 每日一练 (2)题目参考答案封装继承多态虚函数底…...
Nginx 常用命令和部署详解及案例示范
一、Nginx常用命令 1.1 启动 Nginx 要启动 Nginx 服务,可以使用以下命令: sudo systemctl start nginx1.2 停止 Nginx 如果需要停止 Nginx 服务,可以使用以下命令: sudo systemctl stop nginx1.3 重启 Nginx 在修改了 Nginx…...
GO大模型应用开发框架-
Eino 旨在提供基于 Golang 语言的终极大模型应用开发框架。 它从开源社区中的诸多优秀 LLM 应用开发框架,如 LangChain 和 LlamaIndex 等获取灵感,同时借鉴前沿研究成果与实际应用,提供了一个强调简洁性、可扩展性、可靠性与有效性࿰…...
保姆级!springboot访问Ollama API并调用DeepSeek模型 Api
要在springboot中访问Ollama API并调用DeepSeek模型,你需要遵循以下步骤。首先,确保你有一个有效的Ollama服务器实例运行中,并且DeepSeek模型已经被加载。 可以参考我的这篇博客 保姆级!使用Ollama本地部署DeepSeek-R1大模型 并java通过api 调用 使用Spring Boot + Sprin…...
力扣hot100 ——搜索二维矩阵 || m+n复杂度优化解法
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 解题思路: 借助行和列有序特性,不断按行或者列缩小范围;途中数字表示每…...
娱乐使用,可以生成转账、图片、聊天等对话内容
软件介绍 今天要给大家介绍一款由吾爱大佬 lifeixue 开发的趣味软件。它的玩法超丰富,能够生成各式各样的角色,支持文字聊天、发红包、转账、发语音以及分享图片等多种互动形式,不过在分享前得着重提醒,此软件仅供娱乐࿰…...
【PyQt5】python可视化开发:PyQt5介绍,开发环境搭建快速入门
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
使用 FFmpeg 剪辑视频指南
FFmpeg 是一个功能强大的多媒体处理工具,可以进行视频和音频的剪辑、合并、转码等操作。本文将详细介绍如何使用 FFmpeg 进行视频剪辑,并通过实例帮助你快速掌握剪辑技巧。我们会从最基础的剪切功能讲起,再延伸到一些高级操作,如指…...
AWS云从业者认证题库 AWS Cloud Practitioner
题库持续更新,上方二维码查看完整题库! 在分担责任模型下,客户对以下哪项负责? A:确保在使用后擦除磁盘驱动器 B:确保在硬件设备上更新固件 C:确保静态数据已加密 D:确保网线为六类或更高类…...
高性能内存对象缓存Memcached详细实验操作
目录 前提准备: cache1,2: 客户端cache-api(一定得是LAMP环境) memcache实现主主复制以及高可用(基于以上完成) cache1,2: memcachekeepalived(基于以上完成) cache1,2: 前提准备: 1. 准备三台cent…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
