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 |
提示音 |
目录结构
控制架构
任务调度
| 任务 |
周期 |
频率 |
优先级 |
执行内容 |
| 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 开发板。