当前位置: 首页 > news >正文

基于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配置步骤

  1. 启用TIM1_CH1(PA8)和TIM1_CH2(PA9)
  2. 设置PWM模式1,预分频值72-1(1MHz时基)
  3. 配置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 硬件防护措施

  1. 在VM端串接5A自恢复保险丝
  2. 电机两端并联1N5819续流二极管
  3. 逻辑地与功率地单点连接

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]);}
}

六、调试技巧大全

  1. 示波器观测法:验证PWM波形占空比与频率
  2. 电流检测法:通过0.1Ω采样电阻监测工作电流
  3. 温度监控:使用红外测温仪确保芯片表面<85℃

常见故障排查

  • 电机抖动 → 检查PWM频率是否低于5kHz
  • 驱动芯片发烫 → 确认是否频繁切换正反转
  • 无法启动 → 测量VCC电压是否>4.5V

结语

通过本方案可实现:

  • 单个电机0-100%无级调速
  • 正反转快速切换(<200ns响应)
  • 四轴飞行器基础姿态控制

项目进阶方向

  1. 结合MPU6050实现闭环控制
  2. 开发CAN总线多节点控制系统
  3. 移植FreeRTOS实现多任务调度

相关文章:

基于STM32与BD623x的电机控制实战——从零搭建无人机/机器人驱动系统

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 一、为什么选择这两个芯片&#xff1f;1.1 STM32微控制器1.2 ROHM BD623x电机驱动 二、核心控制原理详解2.1 H桥驱动奥…...

基于ffmpeg+openGL ES实现的视频编辑工具-字幕添加(六)

在视频编辑领域,字幕的添加是一项极为重要的功能,它能够极大地丰富视频内容,提升观众的观看体验。当我们深入探究如何实现这一功能时,FreeType 开源库成为了强大助力。本文将详细阐述借助 FreeType 库生成字幕数据的过程,以及如何实现字幕的缩放、移动、旋转、颜色修改、对…...

C++中const T为什么少见?它有什么用途?

在C中&#xff0c;右值引用&#xff08;T&&&#xff09;是移动语义和完美转发的核心特性之一&#xff0c;但你是否注意到&#xff0c;const T&&&#xff08;const右值引用&#xff09;却很少被使用&#xff1f;它到底有什么用途&#xff1f; 今天我们就来深入…...

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 连接上进行全双工通信的协议&#xff0c;它允许在浏览器和服务器之间进行实时的、双向的通信。相对于传统的基于请求和响应的 HTTP 协议&#xff…...

猿大师办公助手对比其他WebOffice在线编辑Office插件有什么优势

1. 原生Office功能完整嵌入&#xff0c;排版一致性保障 猿大师办公助手直接调用本地安装的微软Office、金山WPS或永中Office&#xff0c;支持所有原生功能&#xff08;如复杂公式、VBA宏等&#xff09;&#xff0c;确保网页编辑与本地打开的文档排版完全一致。 提供OLE嵌入和完…...

STM32创建静态库lib

创建静态库lib 1. 新建工程1.1 创建工程文件夹1.2 编写用户相关代码1.2.1 stm32f4xx_it.h1.2.2 stm32f4xx_it.c1.2.3 标准库配置&#xff1a;stm32f4xx_conf.h1.2.4 HAL库的配置&#xff1a;stm32f4xx_hal_conf.h1.2.5 LL库配置&#xff1a;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 是一个开源的大型语言模型&#xff08;LLM&#xff09;本地运行框架&#xff0c;旨在简化大模型的部署和管理流程&#xff0c;使开发者、研究人员及爱好者能够高效地在本地环境中实验和…...

javaEE-13.spring MVC

目录 什么是spring web mvc: 什么是MVC: 一.创建一个spring项目 二.实现功能: 创建helloController.java项目: 建立连接&#xff1a; RequestMapping注解: 1.RequestMapping注解的使用&#xff1a; 2. RequestMapping 是GET还是POST请求 3.指定请求方法 RestControll…...

C/C++ | 每日一练 (2)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 C/C | 每日一练 (2)题目参考答案封装继承多态虚函数底…...

Nginx 常用命令和部署详解及案例示范

一、Nginx常用命令 1.1 启动 Nginx 要启动 Nginx 服务&#xff0c;可以使用以下命令&#xff1a; sudo systemctl start nginx1.2 停止 Nginx 如果需要停止 Nginx 服务&#xff0c;可以使用以下命令&#xff1a; sudo systemctl stop nginx1.3 重启 Nginx 在修改了 Nginx…...

GO大模型应用开发框架-

Eino 旨在提供基于 Golang 语言的终极大模型应用开发框架。 它从开源社区中的诸多优秀 LLM 应用开发框架&#xff0c;如 LangChain 和 LlamaIndex 等获取灵感&#xff0c;同时借鉴前沿研究成果与实际应用&#xff0c;提供了一个强调简洁性、可扩展性、可靠性与有效性&#xff0…...

保姆级!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 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 解题思路&#xff1a; 借助行和列有序特性&#xff0c;不断按行或者列缩小范围&#xff1b;途中数字表示每…...

娱乐使用,可以生成转账、图片、聊天等对话内容

软件介绍 今天要给大家介绍一款由吾爱大佬 lifeixue 开发的趣味软件。它的玩法超丰富&#xff0c;能够生成各式各样的角色&#xff0c;支持文字聊天、发红包、转账、发语音以及分享图片等多种互动形式&#xff0c;不过在分享前得着重提醒&#xff0c;此软件仅供娱乐&#xff0…...

【PyQt5】python可视化开发:PyQt5介绍,开发环境搭建快速入门

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

使用 FFmpeg 剪辑视频指南

FFmpeg 是一个功能强大的多媒体处理工具&#xff0c;可以进行视频和音频的剪辑、合并、转码等操作。本文将详细介绍如何使用 FFmpeg 进行视频剪辑&#xff0c;并通过实例帮助你快速掌握剪辑技巧。我们会从最基础的剪切功能讲起&#xff0c;再延伸到一些高级操作&#xff0c;如指…...

AWS云从业者认证题库 AWS Cloud Practitioner

题库持续更新&#xff0c;上方二维码查看完整题库&#xff01; 在分担责任模型下&#xff0c;客户对以下哪项负责? A&#xff1a;确保在使用后擦除磁盘驱动器 B&#xff1a;确保在硬件设备上更新固件 C&#xff1a;确保静态数据已加密 D&#xff1a;确保网线为六类或更高类…...

高性能内存对象缓存Memcached详细实验操作

目录 前提准备&#xff1a; cache1&#xff0c;2&#xff1a; 客户端cache-api&#xff08;一定得是LAMP环境&#xff09; memcache实现主主复制以及高可用(基于以上完成) cache1,2: memcachekeepalived(基于以上完成) cache1,2: 前提准备&#xff1a; 1. 准备三台cent…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...