← 返回DIY实践首页

🔌 第二章:电子基础

Electronics Fundamentals

传感器、电机驱动与控制电路

💡 核心思想:机器人的电子系统是其"神经系统"。传感器是感官,控制器是大脑,驱动器是肌肉。理解这三者的协作,才能让机器人真正"活"起来。

2.1 传感器原理与选型

传感器的作用

机器人需要感知自身状态和外部环境,才能做出正确的动作。传感器是机器人与物理世界的接口。

感知类型传感器输出信号典型精度价格参考
关节角度编码器(磁/光)数字脉冲0.01°~0.1°5~500元
姿态/加速度IMU(MPU6050/ICM42688)I²C/SPI0.1°5~50元
距离/障碍超声波(HC-SR04)PWM脉宽±3mm3~10元
距离/精密激光测距(VL53L1X)I²C±1mm30~80元
视觉摄像头(OV2640/CSI)MIPI/USB像素级20~200元
力/扭矩应变片/力传感器模拟/I²C0.1%FS50~500元
足底压力FSR压力传感器模拟电阻±5%10~30元
温度NTC热敏电阻/DS18B20模拟/单总线±0.5°C1~10元

IMU(惯性测量单元)详解

IMU是机器人最重要的传感器之一,用于测量姿态、加速度和角速度。

MPU6050 — 入门首选

ICM-42688-P — 进阶推荐

🎯 IMU使用要点

  • 安装位置:尽量靠近机器人重心,远离电机和振动源
  • 校准:每次上电前做零偏校准(静止1-2秒)
  • 滤波:原始数据噪声大,必须用互补滤波或卡尔曼滤波
  • 采样率:控制频率越高,IMU采样率要求越高(至少控制频率的5倍)

编码器详解

编码器用于测量电机转速和关节角度,是闭环控制的基础。

类型原理分辨率优点缺点
增量式光电编码器光栅遮断计数100~10000线/圈精度高、成本中等断电丢失位置
绝对式编码器格雷码/磁场12~24位断电不丢位置成本高
磁编码器(AS5600)霍尔效应12位(4096步/圈)无接触、耐污染、便宜受磁场干扰
舵机内置电位器电阻分压8~10位集成方便精度低、寿命有限

💡 AS5600磁编码器推荐

AS5600是DIY机器人的绝佳选择:12位分辨率(0.088°/步)、I²C接口、只需一块小磁铁、价格约10元。配合无刷电机使用,可以实现高精度位置控制。

2.2 电机与驱动

电机类型对比

电机类型控制方式扭矩精度成本适用场景
舵机(标准)PWM(50Hz)小(1~20kg·cm)中(±1°)低(10~100元)小型机器人、教育
舵机(数字)PWM(高频)中(5~50kg·cm)高(±0.1°)中(50~500元)中型机器人
步进电机脉冲序列高(开环)低(20~100元)机械臂、精密定位
无刷直流(BLDC)FOC/方波高(闭环)中(50~500元)高性能关节
伺服电机EtherCAT/CAN很大极高高(500~5000元)工业/高端人形

舵机控制原理

标准舵机通过PWM信号控制角度:

舵机PWM时序: 周期 20ms |←————————————————————————————→| | | ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ |←→| |←→| 500μs~2500μs 下一周期 脉宽 → 角度映射: 500μs = 0° 1000μs = 45° 1500μs = 90°(中位) 2000μs = 135° 2500μs = 180°

Arduino控制舵机代码

#include <Servo.h>

Servo myServo;

void setup() {
    myServo.attach(9);  // 舵机信号线接D9
}

void loop() {
    // 扫描 0° → 180°
    for (int angle = 0; angle <= 180; angle++) {
        myServo.write(angle);
        delay(15);  // 等待舵机到位
    }
    // 扫描 180° → 0°
    for (int angle = 180; angle >= 0; angle--) {
        myServo.write(angle);
        delay(15);
    }
}

无刷电机(BLDC)与FOC控制

无刷电机是高性能机器人关节的首选,配合FOC(磁场定向控制)可以实现精确的力矩控制。

推荐方案:ODrive / SimpleFOC

方案特点价格适用Level
ODrive v3.6双轴FOC,CAN/UART,成熟稳定~500元Level 3-4
SimpleFOC Shield开源,Arduino兼容,单轴~100元Level 2-3
小米CyberGear集成电机+驱动+编码器,CAN接口~800元/轴Level 4
宇树科技电机高扭矩密度,专为机器人设计~1500元/轴Level 4

🎯 电机选型建议

入门(Level 1):MG996R舵机(约15元/个),扭矩13kg·cm,适合小型双足机器人
进阶(Level 2):DS3218舵机(约50元/个),扭矩20kg·cm,数字舵机精度更高
高级(Level 3):无刷电机+SimpleFOC,扭矩大、效率高、寿命长
专业(Level 4):小米CyberGear或宇树电机,接近商用水平

2.3 主控板选型

常用主控板对比

主控板处理器主频RAM特点价格适用Level
Arduino UnoATmega328P16MHz2KB入门经典,生态丰富~30元Level 1
Arduino MegaATmega256016MHz8KB多IO,适合多舵机~50元Level 1-2
STM32F103Cortex-M372MHz20KB性价比高,工业级~20元Level 2
STM32F407Cortex-M4168MHz192KB浮点运算,适合控制算法~40元Level 2-3
ESP32Xtensa LX6240MHz520KBWiFi/BT内置,双核~20元Level 2-3
树莓派4BCortex-A721.8GHz4/8GBLinux,ROS,视觉处理~400元Level 3
Jetson NanoCortex-A57+GPU1.43GHz4GBAI推理,深度学习~800元Level 3-4
Jetson Orin NXCortex-A78+GPU2GHz16GB高性能AI,具身智能~3000元Level 4

💡 手机作为机器人大脑

现代智能手机(骁龙8 Gen3、麒麟9000等)的算力远超树莓派,且集成了摄像头、IMU、WiFi、蓝牙。通过USB OTG或蓝牙,手机可以作为机器人的高级控制器,运行视觉识别、语音交互等AI任务,而底层运动控制交给STM32等实时控制器。这是一种非常有潜力的架构。

分层控制架构

复杂机器人通常采用分层控制架构:

分层控制架构: ┌─────────────────────────────────────────┐ │ 高层控制器(树莓派/Jetson/手机) │ │ - 任务规划、路径规划 │ │ - 视觉识别、语音交互 │ │ - ROS节点、AI推理 │ │ 运行频率:10~100Hz │ └──────────────┬──────────────────────────┘ │ UART/CAN/USB ┌──────────────▼──────────────────────────┐ │ 中层控制器(STM32/ESP32) │ │ - 步态生成、逆运动学 │ │ - 关节轨迹插值 │ │ - 传感器数据融合 │ │ 运行频率:100~1000Hz │ └──────────────┬──────────────────────────┘ │ PWM/CAN/RS485 ┌──────────────▼──────────────────────────┐ │ 底层驱动器(电机驱动板) │ │ - FOC电流控制 │ │ - 编码器读取 │ │ - 过流/过温保护 │ │ 运行频率:10kHz~100kHz │ └─────────────────────────────────────────┘

2.4 电路设计基础

机器人电路的基本组成

  1. 电源系统:电池、BMS、稳压模块
  2. 主控电路:MCU/SBC及其外围电路
  3. 驱动电路:电机驱动、舵机驱动
  4. 传感器电路:信号调理、ADC、通信接口
  5. 通信电路:WiFi/BT/CAN/RS485
  6. 保护电路:过流、过压、反接保护

常用通信接口

接口速率距离设备数典型用途
UART/串口115200bps~4Mbps短距点对点调试、模块通信
I²C100k~3.4Mbps短距127个传感器(IMU、编码器)
SPI1~50Mbps短距多个(CS选择)高速传感器、显示屏
CAN1Mbps40m110个电机驱动、工业总线
RS48510Mbps1200m32个舵机总线(Dynamixel)
PWM50Hz~400Hz短距1:1舵机控制
USB480Mbps5m127个调试、摄像头、高速数据

基本保护电路

⚠️ 必须加的保护电路

  • 反接保护:电源正负极接反会立即烧毁电路,用P-MOS或肖特基二极管保护
  • 过流保护:电机堵转时电流可达额定值5~10倍,用保险丝或自恢复保险
  • 滤波电容:电机启停产生的电压尖峰会干扰MCU,在电源端加100μF+0.1μF电容
  • 光耦隔离:高压驱动电路与MCU之间加光耦,防止高压串入损坏MCU

电源设计

锂电池选型

电池类型标称电压能量密度安全性适用场景
18650锂电(3S)11.1VLevel 1-2,成本低
锂聚合物(LiPo)3S11.1V低(需注意)Level 2-3,轻量化
锂聚合物(LiPo)4S14.8VLevel 3,高功率
磷酸铁锂(LFP)12.8VLevel 4,安全优先

稳压模块

典型电源分配方案: 电池(3S LiPo,11.1V) │ ├── 主开关(带LED指示) │ ├── 保险丝(10A) │ ├──→ 电机驱动板(11.1V直接供电) │ │ │ └──→ 电机1, 电机2, ... │ ├──→ 降压模块1(11.1V→6V/5A) │ │ │ └──→ 舵机1, 舵机2, ... (独立供电) │ └──→ 降压模块2(11.1V→5V/3A) │ ├──→ 树莓派/主控板 ├──→ 传感器 └──→ 通信模块

2.5 实战:多舵机控制板

基于Arduino Mega的16路舵机控制

Arduino Mega有15个硬件PWM引脚,可以直接控制15个舵机,加上软件PWM可扩展到更多。

硬件连接

Arduino Mega 舵机接线: Arduino Mega 舵机 D2 ──────────────→ 舵机1 信号线(黄/白) D3 ──────────────→ 舵机2 信号线 D4 ──────────────→ 舵机3 信号线 ... D13 ──────────────→ 舵机12 信号线 5V电源(独立)──────→ 所有舵机 VCC(红线) GND ──────────────→ 所有舵机 GND(黑/棕线) ↑ 注意:GND必须共地!

PCA9685 — 16路PWM扩展芯片

当舵机数量超过Arduino PWM引脚时,使用PCA9685扩展:

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

#define SERVOMIN  150  // 最小脉宽(0°)
#define SERVOMAX  600  // 最大脉宽(180°)

void setup() {
    pwm.begin();
    pwm.setPWMFreq(50);  // 50Hz,标准舵机频率
}

// 设置舵机角度(0~180°)
void setServoAngle(uint8_t channel, float angle) {
    uint16_t pulse = map(angle, 0, 180, SERVOMIN, SERVOMAX);
    pwm.setPWM(channel, 0, pulse);
}

void loop() {
    setServoAngle(0, 90);   // 舵机0 → 90°
    setServoAngle(1, 45);   // 舵机1 → 45°
    delay(1000);
    setServoAngle(0, 0);
    setServoAngle(1, 180);
    delay(1000);
}

2.6 调试技巧

常见问题与解决方案

问题现象可能原因解决方法
舵机抖动电源不稳、PWM干扰独立供电、加滤波电容
MCU复位电源电流不足加大电源容量、加滤波
IMU数据漂移温度变化、振动温度补偿、低通滤波
电机发热电流过大、堵转限制电流、加散热片
通信丢包波特率不匹配、接线问题检查波特率、加上拉电阻
编码器计数错误信号干扰、速度过快屏蔽线、降低采样间隔

调试工具推荐

2.7 本章小结

📚 下一步

进入第三章:软件基础,学习运动学、PID控制、步态规划和ROS入门。