外观
Loading search…
外观
Loading search…
MCU: STM32F407(STM32CubeMX + HAL)
来源: 应用层逻辑自 DlaCart(STM32F103,vision-follow-car MCU 部分)迁移而来。与 Jetson 的 22 字节帧协议及 VGUS 串口屏交互与 DlaCart 保持一致(除非本文另有说明)。
DlaBoard_A 实现与 DlaCart 同级的高层行为:
| 能力 | 说明 |
|---|---|
| 工作模式 | 手动、遥控、训练(向主机周期上报)、跟随(接收主机指令)。 |
| 模式来源 | 仅串口屏(VGUS) — 变量地址 0x05A1 及 screen.h 中 SCREEN_KEY_MODE_* 键值。没有单独的「模式」GPIO 组。 |
| 档位 PRND | 四路数字量输入(按下接地为低)。屏上 0x05E1 亦可选档;物理开关与屏可并存,GPIO 消抖后更新档位并可 Screen_SetGear() 回写屏。 |
| Jetson 链路 | USART1,115200 8N1,22 字节二进制帧,CRC16-MODBUS(与 DlaCart 相同)。 |
| 串口屏 | USART2,9600 8N1,VGUS 风格 0x82 / 0x83(screen.c)。波特率与 VGUS 屏出厂值一致,CubeMX .ioc 已固化为 9600。 |
DlaCart 上的 OLED(SSD1306)在本板 未 纳入工程。
以外设实例为准,与 DlaBoard_A.ioc 及 stm32f4xx_hal_msp.c 一致。下表为迁移固件 设计目标 接线说明。
完整 IO 与外设参数表(逐引脚、波特率、定时器分频、NVIC、Cube 预留脚):见同目录
DlaBoard_A_MCU_IO_CN.md。
| 功能 | 外设 / 引脚 | 说明 |
|---|---|---|
| Jetson | USART1(常见 PA9 TX / PA10 RX) | RX 中断中调用 TrainUART_ReceiveISR()。 |
| VGUS 屏 | USART2(常见 PD5 TX / PD6 RX) | Screen_ReceiveISR() + HAL_UART_IRQHandler。 |
| CAN(转向伺服) | CAN1(PB9 TX / PB8 RX) | MX_CAN1_Init USER 区:滤波器 + HAL_CAN_Start();servo_can.c 使用 hcan1。 |
| 电机 PWM | TIM1 CH1 / CH2 | 如 PA8、PE11 等以 Cube 为准;motor_control.c 驱动 htim1。 |
| 遥控 PWM 输入(转向 / 油门摇杆) | TIM3 CH3 / CH4 | 转向=CH3(PC8)、油门摇杆=CH4(PC9);rc_input.c(RC_STEER_CHANNEL=TIM_CHANNEL_3/RC_DRIVE_CHANNEL=TIM_CHANNEL_4)使用 htim3。捕获分发见 tim_capture.c。 |
| 轮速 FG | TIM2 CH3 / CH4 | PA2 / PA3,板上 100Ω 串接 + 10kΩ 下拉到 GND。wheel_speed.c 在 htim2 上以上升沿计数;Board_TuneTimersForCart() 把 ICFilter 设为 8 抑制毛刺。 |
| 加速踏板 | ADC1 IN9(PB1) | 初始化末段设为连续转换、踏板通道;Battery_GetLevel() 会短暂切通道后恢复。 |
| 电池电压 | ADC1 IN11(PC1) | 见 §6.2。 |
| 档位 P/R/N/D | GPIOD 输入 | PD0=P,PD1=R,PD3=N,PD4=D — 宏见 board_inputs.h;低有效,Cube 中配置上拉。 |
| 刹车开关 | GPIOE PE2、PE3 | 上拉输入,低=按下;用于训练帧刹车位等逻辑。 |
| 原车继电器(停转 / 倒车 / 刹车缸等) | 固件中未接具体引脚 | board_relays.c 为占位,硬件确定后在此实现。 |
DlaCart_AppInit() 内 Board_TuneTimersForCart()(dla_cart_app.c)在 Cube 初始化之后写入:
若修改系统时钟或 APB 分频,需重新核算上述 PSC/ARR。
main.c:Cube MX_* 初始化后调用 DlaCart_AppInit(),主循环中调用 DlaCart_AppLoopIteration()。dla_cart_app.c:与 DlaCart 等价的状态机(g_steering_mode、g_servo、档位、跟随指令、转向/电机/训练发送等)。dla_cart_loop.inc:主循环体(#include 便于维护);PRND 读脚使用 board_inputs.h 宏。| 模块 | 文件 | 作用 |
|---|---|---|
| 训练/跟随串口 | train_uart.c/h | 组帧发送、RX 环形缓冲、TrainUART_PollFollowCmd()。 |
| 串口屏 | screen.c/h | VGUS 收发、心跳、键值/地址解析。 |
| 转向 CAN | servo_can.c/h | 伺服指令集(0x64+id);hcan1。 |
| FOC 驱动 CAN | foc_can.c/h | 0x210 下发驱动请求 / 0x211 收状态 / 0x212 收母线遥测;含 UART 台架测试 CLI(FOC/BRAKE/RC?)。 |
| 刹车 CAN | brake_can.c/h | 0x220 下发刹车命令给刹车板 DlaCart_v2.1(脉冲式电动刹车)。 |
| 遥控 PWM | rc_input.c/h | TIM3 输入捕获,CH1 转向、CH2 油门摇杆。 |
| 电机 PWM | motor_control.c/h | TIM1 双通道占空比(行走已改 FOC CAN,本地 PWM 保持停机)。 |
| 轮速 | wheel_speed.c/h | TIM2 双通道脉冲,500 ms 窗口 → 0.1 km/h(FOC rpm 不新鲜时的回退)。 |
| 捕获分发 | tim_capture.c | HAL_TIM_IC_CaptureCallback → RC 或轮速。 |
| 电量 | board_battery.c/h | IN11 采样并恢复 IN9;返回 0–4 供屏显示。 |
| 板级输入说明 | board_inputs.h | PRND 引脚宏;注释说明模式仅来自屏。 |
| 继电器占位 | board_relays.c/h | 原车停转/倒车继电器,待接 GPIO。刹车不在此(见 brake_can)。 |
| 模式枚举 | steering.h | MODE_MANUAL / REMOTE / TRAINING / FOLLOW。 |
stm32f4xx_it.c) | 中断 | 行为 |
|---|---|
| USART1 | 仅 TrainUART_ReceiveISR()(与 DlaCart 一致,不经 HAL_UART_IRQHandler 收字节)。 |
| USART2 | Screen_ReceiveISR() 后 HAL_UART_IRQHandler(&huart2)。 |
| TIM2 | HAL_TIM_IRQHandler(&htim2) — 轮速。 |
| TIM3 | HAL_TIM_IRQHandler(&htim3) — 遥控捕获。 |
NVIC:TrainUART_Init、Screen_Init、WheelSpeed_Init、RC_Input_Init 内使能。
CAN 总线(伺服 / FOC / 刹车)的字节级权威定义见同目录
01_CAN接口规范_CN.md,本节只列要点。 全总线 1 Mbps 经典帧;控制板hcan1滤波器全收进 FIFO0,主循环while排空逐帧分发。
| ID | 方向 | 名称 | 模块 |
|---|---|---|---|
0x210 | 控制板→FOC | 驱动请求(油门‰/转向‰/flags/档位/seq/timeout) | foc_can.c |
0x211 | FOC→控制板 | 行走状态(health/双轮rpm/echo/valid+gear) | foc_can.c |
0x212 | FOC→控制板 | 母线遥测(VBUS mV + 母线电流 cA),供屏显 | foc_can.c |
0x220 | 控制板→刹车板 | 刹车命令(apply/seq/timeout/0x42) | brake_can.c |
0x64+id | 控制板↔伺服 | 转向伺服指令/反馈 | servo_can.c |
刹车意图 foc_brake(FOC 与刹车板同源):跟随取上位机 brake;否则 刹车开关(PE2/PE3) 或 P 档 或 撤防 任一成立。UART BRAKE 1/0/OFF 为测试旁路。
与 DlaCart 完全一致:
0xAA 0x55,CRC16-MODBUS 覆盖字节 [2..19]。0x01 训练状态、0x02 跟随就绪、0x05/0x06 手动/遥控通知、 0x07 采集(SLAM)上报(基础行驶数据;与训练 0x01 分流,便于 Jetson 区分用途)。0x10 跟随控制(转角、油门参考、刹车)。采集 vs 训练:两者均为 22 字节帧、字段相同,仅 TYPE 不同(训练
0x01供自动驾驶 训练,采集0x07供 SLAM)。IMU 字段为后续帧扩展——当前 22 字节帧仅[18:19]2 字节预留,容不下 IMU,待板载 IMU 驱动 + Jetson 帧格式约定后加长。
完整字段表、CRC 说明、Python 示例见同级目录 DlaCart 文档:
../DlaCart/docs/DOCUMENTATION.md(第 5 节)../DlaCart/docs/TRAINING_PROTOCOL.md0xA5 0x5A + 长度 + 0x82 + 地址 + 数据(screen.c)。0x83 在 Screen_RxByte() 中解析。SCREEN_ADDR_MODE(0x05A1)、SCREEN_ADDR_GEAR(0x05E1)、SCREEN_ADDR_SPEED(0x05C1)等 — 见 screen.h。SCREEN_ADDR_VBUS_VOLT=0x05EC(0.1V/字)、 母线电流 SCREEN_ADDR_VBUS_CURR=0x05F0(0.1A/字,含符号)。数据来自 FOC 0x212 遥测。0x0010、遥控 0x0008、训练 0x0004、跟随 0x0002、自动 0x0001、 采集 0x0020(同在 0x05A1,仅键值不同)。| 概念 | 来源 |
|---|---|
| 工作模式(手动/遥控/训练/采集/跟随) | 仅串口屏(SCREEN_ADDR_MODE + SCREEN_KEY_MODE_*)。无模式专用 GPIO。 |
| 档位 PRND | 四路 GPIO(board_inputs.h 中 GPIOD 引脚)+ 可选屏上 SCREEN_ADDR_GEAR 键值。 |
采集模式(
SCREEN_KEY_MODE_COLLECT=0x0020):行为与训练一致(伺服不使能、读转向角、 可驾驶),但 20ms 上报TYPE_COLLECT(0x07) 帧给 Jetson 做 SLAM,与训练TYPE_CTRL(0x01) 分流,避免两功能混用。IMU 字段待扩展(见 §4.1 注与 §8)。
MX_ADC1_Init USER 区在首次配置后设为 连续转换、通道 ADC_CHANNEL_9。主循环用 HAL_ADC_GetValue(&hadc1) 做踏板映射(与 DlaCart 相同粗阈值:原始值约 1100–3100 对应 0–1000 需求)。
board_battery.c 中 Battery_GetLevel():
BAT_VDIV_RATIO 将原始值换为母线电压 mV(默认与 DlaCart 文档中分压思路一致;必须按你板电阻修改:((R_{\mathrm{上}}+R_{\mathrm{下}})/R_{\mathrm{下}}))。SCREEN_ADDR_BATTERY。HAL_ADC_Start。请按实际电池串数与分压修改 BAT_VDIV_RATIO 与 BAT_*_MV 阈值。
Debug/ 下 GNU ARM Makefile 编译 DlaBoard_A。MX_CAN1_Init USER 区是否仍包含 滤波器 + HAL_CAN_Start;MX_ADC1_Init USER 区是否仍为 连续模式 + IN9 踏板;MX_GPIO_Init USER 区是否仍将 PE2/PE3 配为 上拉输入(若原理图为开关接地);Core/Src 源文件(dla_cart_app.c、train_uart.c 等)— Cube 可能覆盖 subdir.mk,需人工合并。uart_protocol,现统一为 DlaCart 二进制训练/跟随协议。现状(2026-06:核对代码):main.c 已包含 MX_SPI1_Init()(主模式)与 IMU 片选 PA4 (GPIO 初始化末段拉高空闲)。即 SPI 总线与片选硬件路径就绪,但应用层 (Core/Src 的 .c/.inc)尚无 IMU 驱动/寄存器读取代码 —— 没有任何 HAL_SPI_TransmitReceive 业务调用。
这直接影响「采集」功能(需求第 7 条:采集 IMU+速度+方向上报 Jetson 做 SLAM): 采集帧的 IMU 字段当前无数据源。待确认 IMU 型号后补驱动(建议新增 imu_spi.c/h,在主循环定周期读取,填入采集上报帧)。详见 00_集成Review与计划_CN.md §3-6 / §5-Q2。
../DlaCart/docs/DOCUMENTATION.md、../DlaCart/docs/TRAINING_PROTOCOL.mdREADME.md默认英文说明见同目录 DlaBoard_A_Documentation.md。