# chassis **Repository Path**: anniconda-li/chassis ## Basic Information - **Project Name**: chassis - **Description**: 电赛小车底盘 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-26 - **Last Updated**: 2026-07-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # chassis MSPM0G3507 八路灰度循迹底盘工程。它从桌面的 `PWM` 参考工程整理而来,保留 原来的四种路线控制逻辑,但把硬件驱动、通用控制算法和题目流程拆开管理。 ## 这块底盘现在驱动什么 - 两路直流电机:左PA12/CCP0、右PA13/CCP1,共用TIMG0 + 四个方向引脚 + 驱动使能引脚; - 两路正交编码器:GPIO 双边沿计数,50 ms 采样一次; - 感为 Rev V2.3 无 MCU 八路模拟灰度:74HC4051 选通 + ADC0 采样,8 路均启用; - JY61P 姿态传感器:UART2,9600 bit/s; - 双 HC-05 透明串口链路:UART0 接主从一体模块,UART3 接从模块; - 两个按键、一个状态灯; - 0.96 英寸 OLED:软件时序 SCL/SDA。 原工程中配置但没有业务代码使用的 MPU6050 I²C 已删除;UART0 现用于 HC-05。 ## 目录怎么分 ```text chassis/ ├─ firmware/ │ ├─ main.c 固件入口 │ ├─ board/ SysConfig、板级参数、时钟保护和中断入口 │ ├─ drivers/ 电机、编码器、灰度、JY61P、按键和状态灯 │ ├─ control/ PWM 前馈、航向直行、定角转向和底盘控制 │ ├─ services/ 与硬件无关的黑线标记等可复用服务 │ ├─ diagnostics/ 二进制运行日志和故障现场保留 │ ├─ mission/ 赛题任务接口及 2024 年路线规则 │ ├─ ui/ OLED 页面 │ └─ app/ 主循环、运行状态机和模块装配 ├─ third_party/ 第三方 OLED 库(业务代码不直接依赖其实现) ├─ project/ccs/ CCS 调试器目标配置和日志 NOINIT 链接脚本 ├─ tests/ 可在电脑上运行的纯算法测试 ├─ tools/ 构建与测试脚本 └─ docs/ 移植说明和原逻辑对应关系 ``` `tests` 不会烧进单片机。它用电脑上的编译器检查循迹表、航向控制和白区消抖,改算法 时可以很快发现行为是否被意外改坏。 ## 在 CCS 中打开 1. 打开 CCS,选择任意 CCS workspace(它不是源码目录)。 2. 选择 **File → Import Projects from File System**。 3. 选择本目录,导入 `chassis`。 4. 确认产品版本为 MSPM0 SDK 2.11.00.07、SysConfig 1.26.2、TI Arm Clang 4.0.2.LTS。 5. Build 后通过 J-Link 下载。目标配置位于 `project/ccs/targetConfigs/MSPM0G3507.ccxml`。 也可以在 PowerShell 中运行: ```powershell .\tools\build_firmware.ps1 .\tools\test_control.ps1 .\tools\flash_firmware.ps1 .\tools\export_run_log.ps1 .\tools\test_hc05_link.ps1 .\tools\test_line_sensor.ps1 .\tools\start_line_sensor_calibration.ps1 ``` `flash_firmware.ps1` 会先构建,再使用 J-Link 以 100 kHz SWD 烧录、校验、复位并运行。 使用前要结束 CCS 中残留的调试会话,并关闭 J-Link Commander。当前老款 J-Link OB 在 CCS 内可能出现块校验错误,因此日常烧录优先使用这个已经验证过的脚本。 小车停车后保持供电并运行 `export_run_log.ps1`,脚本会通过 J-Link 将 RAM 日志导出到 `logs/` 下的 CSV。详细步骤和字段含义见 [`docs/run_log_guide.md`](docs/run_log_guide.md)。 `test_hc05_link.ps1` 会构建并烧录临时诊断固件,轮流从两个 UART 发起带序号和 CRC16 的探测,通过两个 HC-05 无线往返后读取 SRAM 报告。测试期间电机保持制动, 结果和原始报告保存在 `logs/`;成功后再烧回普通固件即可。 `test_line_sensor.ps1` 会烧录电机禁用的灰度诊断固件,连续扫描 8 路模拟量,再通过 J-Link 读取固定布局的 SRAM 报告。它检查 ADC 超时、4051 地址锁存和各通道信号, 并在 `logs/` 保存 TXT、CSV 与原始 BIN。黑白判定还必须用实际赛道完成白/黑标定。 `start_line_sensor_calibration.ps1` 与 `capture_line_sensor_calibration.ps1` 用于 重新采集逐路白底/黑底的固定窗口统计。 构建产物统一进入 `build/`,不会混到源码目录。原始 `PWM` 目录保持不变,便于核对。 ## 换成自己的板子时改哪里 1. 先在 `firmware/board/syscfg/chassis.syscfg` 中改引脚和外设实例; 2. 再检查 `firmware/board/board_config.h` 的周期与电气常量; 3. 若电机驱动芯片或传感器型号变化,只替换 `drivers/` 中相应模块; 4. `control/` 不应引用 DriverLib,也不应出现具体引脚或赛题模式; 5. 新赛题主要替换 `mission/`,不要把路线规则塞进驱动或中断函数。 ## 文档索引 建议按以下顺序阅读: 1. [`docs/architecture.md`](docs/architecture.md):目录、分层、依赖和运行时序; 2. [`docs/hardware_mapping.md`](docs/hardware_mapping.md):当前板卡的完整引脚与外设映射; 3. [`docs/development_guide.md`](docs/development_guide.md):日常开发、换板和新题目流程; 4. [`docs/coding_standard.md`](docs/coding_standard.md):代码、注释和模块边界规范; 5. [`docs/run_log_guide.md`](docs/run_log_guide.md):脱机记录、复位保留和 J-Link 导出; 6. [`docs/migration_notes.md`](docs/migration_notes.md):原 PWM 逻辑与重构模块的对应关系。 7. [`docs/reusable_motion_guide.md`](docs/reusable_motion_guide.md):航向直行、定角转向和黑线端点检测接口。 8. [`docs/line_sensor_guide.md`](docs/line_sensor_guide.md):模拟灰度接线、标定、通用接口和硬件诊断。 参数含义也可以直接查看 `board_config.h` 和 `control_config.h` 中的中文注释。