Files

126 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 开发板。