Files
Chassis/README.md
T

4.9 KiB
Raw Blame History

Chassis — 差速底盘控制系统

基于 TI MSPM0G3507 (Cortex-M0+, 80MHz) 的两轮差速移动底盘嵌入式固件。

硬件资源

资源 引脚 用途
左电机 PWM TIMG7_CH0, A26 17kHz PWM 驱动
左电机 DIR GPIO A27 方向控制
右电机 PWM TIMG0_CH0, B10 17kHz PWM 驱动
右电机 DIR GPIO B11 方向控制
右编码器 QEI 模块 硬件正交解码
左编码器 GPIO EXTI A9/A12 软件模拟正交解码
IMU SPI SPI1 (B23/B22/B21/B19) ICM-42688-P 6轴 IMU
灰度 ADC ADC1_CH5, B18 8 通道灰度传感器
灰度 MUX B8/B9/B14 3-8 模拟开关选通
串口 UART2 (B15/B16) 上位机通信 115200 8N1
蜂鸣器 GPIO A14 提示音

目录结构

chassis/
├── project/
│   ├── code/                  # 用户应用代码
│   │   ├── main.c             # 入口 + 主循环
│   │   ├── Task.c/h           # 任务调度 (10/20/50ms)
│   │   ├── Command.c/h        # UART 命令解析 + 模式切换
│   │   ├── Motor.c/h          # 电机 PWM 驱动
│   │   ├── MotorEncoder.c/h   # 编码器测速
│   │   ├── PID_Controller.c/h # 通用 PID (8 项改进)
│   │   ├── IMU.c/h            # Mahony AHRS 姿态解算
│   │   ├── ICM_42688.c/h      # IMU SPI 驱动
│   │   ├── GrayscaleSensor.c/h # 灰度巡线传感器
│   │   └── Beep.c/h           # 蜂鸣器
│   ├── user/
│   │   ├── src/main.c         # 入口
│   │   ├── src/isr.c          # 中断服务
│   │   └── inc/isr.h          # 中断声明
│   └── keil/                  # Keil MDK 工程
├── libraries/                 # SeekFree MSPM0 开源库 V3.2.0
└── docs/
    └── 底盘通信协议指南.md

控制架构

┌────────────────────────────────────────────┐
│  位置环 (50Hz)                              │
│  灰度传感器 → 位置 PID → angle_velocity     │
│  支持识别 90° 直角转弯                      │
├────────────────────────────────────────────┤
│  角度环 (50Hz)                              │
│  IMU Yaw → 角度 PID → speed_dif            │
│  左右轮速: base ± speed_dif                 │
├────────────────────────────────────────────┤
│  速度环 (100Hz)                             │
│  编码器 → 速度 PID → PWM 占空比             │
└────────────────────────────────────────────┘

任务调度

任务 周期 频率 优先级 执行内容
Task_10ms 10ms 100Hz 1 编码器更新、IMU 更新、速度控制
Task_20ms 20ms 50Hz 1 灰度扫描、位置控制、角度控制
Task_50ms 50ms 20Hz 7 按键扫描、蜂鸣器、命令处理

PID 参数

环路 Kp Ki Kd 输出限幅 改进位
速度环 300.0 150.0 0 3000 积分限幅+积分分离+输出滤波
角度环 1.0 0 0 25 Yaw 误差修正+微分先行
位置环 0.5 0 0 90 —

通信协议

上位机通过 UART2 (115200 8N1) 与底盘通信,协议详见 docs/底盘通信协议指南.md。

帧头 长度 方向 用途
0xA6 8B PC→MCU 手动控制
0xA7 3B PC→MCU 命令帧 (模式切换)
0xA8 38B PC→MCU PID 调试
0xA9 6B MCU→PC 角速度前馈

校验和: 全部字节累加取低 8 位。

工作模式

模式 控制环 说明
AUTO 位置+角度+速度 灰度巡线自主行驶
MANUAL 角度+速度 接收上位机速度/角速度指令
DEBUG 停止 电机失能,可在线调参

传感器参数

参数 值
IMU 型号 ICM-42688-P
加速度计量程 ±16G
陀螺仪量程 ±2000 deg/s
IMU ODR 200Hz
陀螺仪 LPF X:30Hz, Y:20Hz, Z:30Hz
加速度计 LPF 10Hz (三轴)
姿态算法 Mahony AHRS (6轴, fast inv sqrt)
灰度通道数 8 路
ADC 分辨率 12-bit, 15 次均值滤波
位置低通 α=0.5 一阶 IIR

依赖

  • SeekFree MSPM0G3507 开源库 V3.2.0 (zf_driver, zf_device, zf_common)
  • TI MSPM0 SDK (CMSIS-Core, DriverLib)
  • ARM Compiler V6.19 (ARMCLANG)
  • Keil MDK 5.37 (uvprojx 工程)

构建与烧录

使用 Keil MDK 打开 project/keil/SeekFree_MSPM0G3507_Device_Library.uvprojx,编译后通过 DAP-Link 烧录至 MSPM0G3507 开发板。