docs: 新增 README.md,完善底盘模块文档
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
# 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 开发板。
|
||||
Reference in New Issue
Block a user