diff --git a/README.md b/README.md new file mode 100644 index 0000000..4965ba5 --- /dev/null +++ b/README.md @@ -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 开发板。