# COD战队2026校赛基准车(STM32F103C8T6) **Repository Path**: Xalve/minicar ## Basic Information - **Project Name**: COD战队2026校赛基准车(STM32F103C8T6) - **Description**: COD战队2026校赛基准车(STM32F103C8T6) - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-16 - **Last Updated**: 2026-10-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Mini-car_c8t6 v2 基于 **STM32F103C8T6** 的蓝牙遥控麦克纳姆轮小车,带两自由度机械臂和舵机夹爪。手机 App 通过 HC-05 蓝牙发 7 字节数据帧,控制四轮底盘的前后、平移、原地转,以及大臂、小臂、夹爪的角度。 ## 功能 - **麦轮底盘**:4 × DRV8870 驱动直流电机;前进、后退、左右平移、左右原地转;起步带加速斜坡,失联自动停车。 - **机械臂**:大臂、小臂、夹爪(两只镜像安装的舵机),共 4 路 180° 位置舵机。 - App 滑条线性映射到实测的限位范围,滑条拉到头也不会撞结构; - 舵机按每周期步进限速,避免电流冲击拉低 5V 导致蓝牙掉线; - 上电不出脉冲,滑条第一次动了才开始输出,上电时舵机不会乱转; - **复位按钮**:一键让底盘停车、机械臂和夹爪回到初始位置。 - **调试**:Keil Watch 里只看一个 `dbg` 变量,可以直接写入数值手动控制,不用手机;舵机标定表在 RAM 中,可在线修改。 - **分层结构**:App / Module / Driver / Bsp 四层,只有 Bsp 层接触 HAL,换板子只改 Bsp。 ## 硬件 | 部件 | 说明 | |---|---| | 主控 | STM32F103C8T6,72 MHz | | 电机驱动 | 4 × DRV8870,12V;M1~M4 = 左前、左后、右前、右后 | | 舵机 | D1 大臂(PB6)、D2 小臂(PB7)、D3/D4 夹爪(PB8/PB9),TIM4 50 Hz | | 蓝牙 | HC-05,USART3(PB10 TX / PB11 RX),115200 8N1 | | 指示灯 | PA4 心跳、PA5 链路正常(低电平点亮) | 完整引脚见 [`doc/引脚对应表.md`](doc/引脚对应表.md)。 > 舵机和蓝牙模块共用板载 +5V,舵机负载大时可能拉低电压导致蓝牙掉线,建议给舵机单独供电(与主板共地)。 ## 目录 ``` . ├── Application/ 用户代码(分层说明见 Application/README.md) │ ├── App/ 应用层:把遥控命令分发给各模块 │ ├── Module/ 蓝牙收帧、协议解析、底盘、机械臂、指示灯 │ ├── Driver/ DRV8870、舵机驱动 │ ├── Bsp/ PWM、串口、LED、时基 │ ├── Config/ 所有可调参数:速度、电机方向、舵机标定、滑条限位 │ └── Common/ 通用工具 ├── Core/ CubeMX 生成的初始化代码 ├── Drivers/ STM32 HAL 与 CMSIS(ST / Arm 提供) ├── MDK-ARM/ Keil 工程 ├── doc/ App 配置与调试说明、引脚表 └── Minicar_c8t6_v2.ioc CubeMX 工程 ``` ## 编译与下载 1. 用 **Keil MDK 5**(ARM Compiler 6)打开 `MDK-ARM/Minicar_c8t6_v2.uvprojx`;需要安装 `Keil.STM32F1xx_DFP` 器件包。 2. 编译、通过 ST-Link 或 J-Link(SWD)下载。 3. 上电后两颗 LED 快闪 3 次,之后 PA4 每秒闪两下表示程序在运行。 用 CubeMX 重新生成代码后,检查 `Application/*` 分组和 include 路径是否还在,详见 [`Application/README.md`](Application/README.md)。 ## 蓝牙协议 每帧 7 字节: ``` A5 命令 大臂 小臂 夹爪 校验 5A ``` - **命令**(ASCII):`'0'` 停车、`'1'` 前进、`'2'` 后退、`'3'` 左移、`'4'` 右移、`'5'` 左转、`'6'` 右转、`'7'` 复位(十进制 48~55)。 - **大臂、小臂、夹爪**:App 滑条值,有符号字节 −128~+127。 - **校验**:命令 + 三个舵机字节,取低 8 位。 - App 需要持续发帧;超过 500 ms 没有有效帧,底盘停车,机械臂停在当前位置。 | 按钮 | HEX | 十进制 | |---|---|---| | 停车 | `A5 30 80 00 00 B0 5A` | `165 48 128 0 0 176 90` | | 前进 | `A5 31 80 00 00 B1 5A` | `165 49 128 0 0 177 90` | | 复位 | `A5 37 80 00 00 B7 5A` | `165 55 128 0 0 183 90` | 完整按钮表、App 设置、Keil 调试方法见 [`doc/APP蓝牙调试配置说明.md`](doc/APP蓝牙调试配置说明.md)。 ## 常用调整 | 想改什么 | 改哪里 | |---|---| | 某个轮子转反了 | `Application/Config/app_config.c` → `chassis_motors` 的 `dir` | | 行驶、平移速度和加速快慢 | `Application/Config/app_config.h` → `CHASSIS_*` | | 舵机两端脉宽、转动速度、复位位置 | `Application/Config/app_config.c` → `arm_joint_config`、`arm_gripper_config` | | 滑条限位、滑条方向 | `Application/Config/app_config.h` → `ARM_*_SLIDER_*` | | 失联判定时间 | `Application/Config/app_config.h` → `REMOTE_TIMEOUT_MS` | 舵机标定值和限位都是按作者的实物测出来的,换了舵机或结构需要重新标定(方法见 `app_config.c` 注释)。 ## 许可证 `Application/`、`Core/` 中的用户代码以 [MIT](LICENSE) 许可证发布。`Drivers/` 下的 STM32 HAL 与 CMSIS 分别遵循 ST 和 Arm 的原始许可证,见各目录中的 LICENSE 文件。