2. STM32硬件平台搭建:主控选型、电机驱动与传感器设计

硬件平台是机器人运动学标定的地基。地基没打好,后面算法调得再好也白搭。我个人习惯是先确定控制周期和精度需求,再反推主控和驱动方案。这一章咱们就把STM32机器人控制器的硬件选型与接口设计讲透。

2.1 主控选型:H7还是F4?

选主控说白了就是算一笔账——你的控制周期要多快?算法有多重?

对比项STM32H743STM32F407
内核Cortex-M7 @ 480MHzCortex-M4 @ 168MHz
FPU双精度硬件浮点单精度硬件浮点
SRAM1MB (含DTCM 128KB)192KB
定时器分辨率16位/32位,最高240MHz16位/32位,最高84MHz
ADC3个12位,最高3.6Msps3个12位,最高2.4Msps
典型价格(批量)¥45-60¥18-25

我的建议:如果你做六轴机器人标定,需要同时处理6路编码器、6路电流采样、运动学正逆解和参数辨识——直接上H7。F4在168MHz下跑完一次完整标定迭代可能要2ms,而H7能压到500μs以内。

经验之谈:我在一个四轴协作臂项目里用过F407,控制周期1kHz勉强够用。后来升级到H743,把控制周期提到4kHz,轨迹跟踪误差直接降了40%。多花30块钱,省了三个月调参时间。

2.2 电机驱动接口设计

驱动接口设计有三个关键点:PWM分辨率、死区时间、电流采样同步。咱们一个一个说。

2.2.1 PWM与定时器配置

我习惯用高级定时器TIM1/TIM8来驱动三相逆变桥。H7的TIM1可以输出6路互补PWM,带硬件死区插入。

// H7定时器配置示例:20kHz PWM,中心对齐模式
TIM1->PSC = 0;                    // 不分频,240MHz计数
TIM1->ARR = 6000 - 1;             // 20kHz (240MHz/6000/2)
TIM1->CCR1 = 3000;                // 50%占空比
TIM1->BDTR = 72;                  // 死区时间 = 72/240MHz = 300ns
TIM1->CR1 |= TIM_CR1_CMS_1;       // 中心对齐模式2
避坑指南:我曾经在F4上把死区设成100ns,结果MOS管上下桥臂直通,板子直接冒烟。后来养成了习惯——死区时间至少留够开关周期的3倍。对常见的IRFS3006,我一般设300-500ns。

2.2.2 电流采样接口

电流采样有两种主流方案:

  • 低侧采样:成本低,但无法在PWM开关瞬间采样
  • 高侧/相电流采样:精度高,需要隔离运放

我做机器人标定项目时,要求电流精度在±1%以内,所以选了INA240高侧电流检测放大器,配合STM32的ADC注入组同步采样。

// ADC注入组配置:与PWM中心对齐触发同步
ADC1->JSQR = (1 << 20) |          // 1个转换
             (ADC_SAMPLETIME_8CYCLES << 0);
TIM1->CR2 |= TIM_CR2_CCDS;        // CC事件触发ADC
TIM1->CCR1 = 3000 - 100;          // 在PWM中心点前100个时钟采样

2.3 编码器与电流传感器选型

编码器是机器人的眼睛,电流传感器是肌肉力量计。选型不对,标定结果全是错的。

2.3.1 编码器选型对比

类型分辨率接口适用场景典型型号
增量式光电1000-5000线A/B/Z + 正交解码低成本关节HEDS-5540
绝对式磁性12-14位SSI/BiSS-C中精度关节AS5048A
绝对式光学17-23位BiSS-C/EnDat高精度标定Heidenhain ECI1319

我的选择:对于运动学标定,我强烈建议用绝对式编码器。为什么?因为增量式每次上电都要回零,而回零误差会直接污染标定数据。我在一个项目里吃过这个亏——增量式编码器回零重复性只有±5个脉冲,换算到关节角度就是0.02°,标定出来的DH参数偏差大到没法用。

2.3.2 电流传感器选型

电流传感器直接影响力矩估算精度。运动学标定需要知道关节力矩,而力矩 = 电流 × 转矩常数。

  • ACS712/ACS723:霍尔效应,带宽80kHz,适合通用场景
  • INA240:分流器+差分运放,带宽400kHz,适合高精度采样
  • TI DRV系列集成方案:内置电流检测,节省PCB面积
关键指标:电流采样带宽必须大于PWM频率的10倍。20kHz PWM下,至少需要200kHz带宽的传感器。否则采到的电流是“平均”值,不是真实瞬时值,力矩估算误差会超过5%。

2.4 硬件系统架构总览

下面这张图是我做机器人控制器时的标准架构,你可以直接拿来用。

STM32机器人控制器硬件架构 STM32H743 主控 电源管理 (5V/3.3V/12V) 通信接口 (CAN/USB/ETH) 电机驱动 (TIM1/8) 编码器接口 (SPI/正交) 电流采样 (ADC注入组) 温度/限位保护 关节电机 (BLDC/步进) 减速器 + 编码器 反馈回路 设计要点: 1. 主控与驱动之间使用差分信号传输PWM,抗干扰 2. 编码器接口必须加ESD保护,电机线缆长距离传输容易引入共模干扰 3. 电流采样与PWM中心对齐触发,避免开关噪声

2.5 实际项目中的接口设计清单

最后,我整理了一份硬件接口设计检查清单。每次画板子之前我都会过一遍,避免低级错误。

  1. 电源完整性:模拟3.3V和数字3.3V用磁珠隔离,ADC参考电压用高精度LDO
  2. 编码器接口:差分信号走等长线,终端电阻匹配(RS-422标准)
  3. 电流采样:采样电阻用4端子开尔文连接,避开大电流回路
  4. PWM输出:加RC滤波后再进驱动芯片,防止上电瞬间误动作
  5. 保护电路:每路电机驱动加硬件过流比较器,不依赖软件
血的教训:我曾经在F4项目里把编码器A/B线布在了PWM大电流回路旁边,结果电机一转,编码器读数跳变几百个脉冲。后来重新layout,把编码器线包地隔离,问题才解决。记住——高速信号和功率回路必须物理隔离。

硬件平台搭建到这里就差不多了。主控选H7还是F4,看你控制周期需求;编码器选绝对式还是增量式,看你标定精度要求;电流采样带宽必须够,否则力矩估算全是错的。把这些基础打牢,后面几章的运动学标定和参数优化才能跑出真效果。