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

arduino通过控制器,精准控制24V电动轮毂转动

要通过Arduino精准控制24V电动轮毂的转动,需结合电机驱动、反馈信号(如编码器或霍尔传感器)和控制算法。以下是完整的硬件连接、软件实现和调试步骤:


1. 系统组成

模块推荐型号/方案作用
主控Arduino Uno/Nano/ESP32生成PWM信号,处理反馈数据。
电机驱动BTS7960/DRV8871/VNH5019提供大电流驱动(支持24V,峰值电流>10A)。
电动轮毂24V无刷轮毂电机执行转动
转速反馈霍尔传感器(内置)或增量式编码器测量实际转速,构成闭环控制。
电源管理24V锂电池 + 5V降压模块为Arduino和驱动模块供电。

2. 硬件连接

无刷轮毂电机控制

无刷电机需通过电调(ESC)控制,接线如下:

Arduino              无刷电调 (BLDC ESC)          24V无刷轮毂
──────             ───────────────             ───────
PWM Pin 9 ──────>  PWM信号输入                   UVW三相线
GND      ──────>  GND                          + ──────── 24V正极- ──────── 24V负极

配置电调

  1. 电调需校准油门行程(参考电调说明书)。

  2. 控制信号为50Hz PWM(1ms~2ms脉宽对应停转~全速)。

转速反馈连接
  • 霍尔传感器(无刷电机内置):
    将霍尔信号线(H1/H2/H3)接Arduino外部中断引脚(如D2/D3)。

  • 增量式编码器
    A/B相接Arduino中断引脚(如D2/D3),Z相接普通IO(可选)。


3. 控制算法(PID闭环控制)

(1) 测速代码(编码器/霍尔脉冲计数)
volatile long encoderCount = 0;
void countPulse() { encoderCount++; }void setup() {attachInterrupt(digitalPinToInterrupt(2), countPulse, RISING); // 编码器A相接D2Serial.begin(115200);
}
(2) PID速度控制
float Kp = 1.0, Ki = 0.1, Kd = 0.05;  // PID参数需调试
float targetRPM = 100.0;               // 目标转速(RPM)
float currentRPM = 0.0;void loop() {// 1. 计算当前RPM(每100ms采样一次)static unsigned long lastTime = 0;unsigned long currentTime = millis();if (currentTime - lastTime >= 100) {currentRPM = (encoderCount * 600.0) / (ppr * 0.1); // ppr=每转脉冲数encoderCount = 0;lastTime = currentTime;// 2. PID计算float error = targetRPM - currentRPM;static float integral = 0, lastError = 0;integral += error * 0.1;  // 0.1s为采样时间float derivative = (error - lastError) / 0.1;float output = Kp * error + Ki * integral + Kd * derivative;lastError = error;// 3. 输出PWM(限制范围0~255)output = constrain(output, 0, 255);analogWrite(9, output);  // 驱动模块PWM输入}
}

4. 关键调试步骤

(1) 开环测试
  • 固定PWM值(如analogWrite(9, 150)),观察电机是否转动,确认硬件连接正确。

(2) PID调参
  1. Ki=0, Kd=0,逐渐增大Kp直到电机转速出现小幅震荡。

  2. Kp的50%作为初始值,加入Ki消除静差(如目标转速与实际转速的稳态误差)。

  3. 最后加入Kd抑制超调。

(3) 校准测速
  • 轮周长测量:标记轮胎,滚动一周测量地面距离(如30cm直径轮子周长≈94cm)。

  • 每转脉冲数(PPR)

    • 霍尔传感器:PPR = 电机极对数(如10极对电机PPR=10)。

    • 编码器:PPR = 编码器线数 × 4(四倍频计数)。


5. 注意事项

  • 电源隔离:电机电源与Arduino电源需分开,避免干扰。

  • 死区保护:H桥驱动时,正反转PWM之间插入死区时间(如1ms)。

  • 过流保护:驱动模块加装保险丝或电流检测(如ACS712)。

  • 紧急停止:预留硬件急停开关,直接切断电机电源。


6. 扩展功能

  • 无线控制:通过ESP32的WiFi/蓝牙接收速度指令。

  • 数据监控:通过串口打印实时转速和PWM输出(用于PID调试)。

  • 多电机同步:使用CAN总线协调多个轮子(如ROS + CAN库)。


总结

  • 硬件:选择匹配的驱动模块(电流>电机额定值),确保反馈信号稳定。

  • 软件:PID闭环控制 + 脉冲计数测速,需动态调整参数。

  • 安全:加强电源和信号隔离,避免烧毁Arduino。

完成上述步骤后,可实现±5%以内的转速控制精度(具体取决于编码器分辨率和PID调参)。

http://www.xdnf.cn/news/13743.html

相关文章:

  • 解锁Scrapy爬虫:从入门到实战的Python秘籍
  • 图像分割技术:像素级的精准识别(superior哥深度学习系列第12期)
  • 关于MySql深分页的问题及优化方案
  • 软件测试的艺术与科学:构建商业级产品的优雅草卓伊凡
  • 微信小程序渗透测试指北(附案例)
  • ATM 模拟器 Golang 程序--示例
  • 【二分答案1-----切木棒】
  • 基于YOLOv11与单目测距的实战教程:从目标检测到距离估算
  • 嵌入式通信模块实战新范式:基于虚拟仿真平台的NB-IoT核心技能训练——零硬件损耗的全栈式实验方案,重构物联网通信教学逻辑
  • 基于多面体模型的编译优化技术
  • Ubuntu 绑定Conda
  • 在 Vue 3 中修改 el-select 组件接收的 prop 值
  • Parasoft C++Test软件集成测试(部件测试)_操作指南
  • 【3D插件推荐】PolyCloth v2.07 超强布料模拟工具(附图文安装教程与下载)
  • 力扣面试150题--单词接龙
  • stm32cubeide中编译非flash起始地址开始的程序
  • 解决vscode中使用debuger运行app.py但是报错No module named app的方法
  • kali2024 由于没有公钥,无法验证下列签名---解决方案
  • docker compose搭建elk 8.6.2
  • AS610x奇力科技电池管理系统(BMS)模拟前端(AFE)
  • Linux 与 Windows 系统挖矿程序清理
  • nt!CcGetDirtyPages函数分析
  • 如何将 iPhone 中的短信导出为 PDF
  • [vela os_5] 中断系统 | 任务调度 | 日志系统
  • C++代码随想录刷题知识分享-----替换数字字符 —— 字符串空间扩展与逆向填充技巧
  • AI大模型从0到1记录学习 大模型技术之机器学习 day27-day60
  • 大数据学习(137)-大数据组件运行时角色
  • 【数据传输常用命令】:docker常用命令
  • AbMole推荐:Z-VAD-FMK,让凋亡/焦亡/坏死性凋亡机制研究更上一层楼
  • 一[3]、ubuntu18.04环境 利用 yolov8 训练开源列车数据集,并实现列车轨道检测