基于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…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
