0到入门环境搭建
【[稚晖君同款]使用Clion优雅开发STM32[瀚文]】 www.bilibili.com/video/BV1ft...
笔者已将代码上传github仓库
考核题目

踩坑





过程记录

js
#b站up主源代码
# choose st-link/j-link/dap-link etc.
#adapter driver cmsis-dap
#transport select swd
source [find interface/stlink.cfg]
transport select hla_swd
source [find target/stm32f4x.cfg]
# download speed = 10MHz
adapter speed 10000
js
#笔者自己的代码
source [find interface/stlink.cfg]
transport select hla_swd
# 使用检测到的实际芯片ID
set CPUTAPID 0x1ba01477
source [find target/stm32f1x.cfg]
# 降低适配器速度提高稳定性
adapter speed 1000
# 复位配置
reset_config none separate
# 注意:移除了 init/targets/halt 命令
# 这些命令应该由 OpenOCD 在运行时执行,而不是在配置文件中
STM32项目文件详细解释

📊 完整文件修改频率总结
文件类型 | 文件名 | 修改频率 | 主要用途 | 典型修改内容 |
---|---|---|---|---|
头文件 | main.h |
🟡 中等 | 程序声明 | 添加函数声明、宏定义 |
头文件 | stm32f1xx_hal_conf.h |
🟢 经常 | 功能配置 | 启用/禁用HAL模块 |
头文件 | stm32f1xx_it.h |
🟡 中等 | 中断声明 | 添加中断处理函数声明 |
源文件 | main.c |
🔴 最频繁 | 主程序实现 | 初始化、主循环逻辑 |
源文件 | stm32f1xx_it.c |
🟡 中等 | 中断实现 | 中断服务程序实现 |
源文件 | 自定义.c文件 |
🔴 最频繁 | 功能实现 | 具体功能模块代码 |
TB6612双路驱动模块连接指南
🔌 硬件连接图
STM32F103C8T6 ↔ TB6612连接
STM32电机控制系统引脚分配
scss
**从电机控制接线**
STM32引脚 → TB6612引脚 → 功能说明
------------------------------------------------
PA8(TIM1_CH1) → PWMA → 从电机PWM速度控制
PA9 → AIN1 → 从电机方向控制1
PA10 → AIN2 → 从电机方向控制2
PB0 → STBY → TB6612使能控制(高电平工作)
**编码器反馈接线**
STM32引脚 → 编码器 → 功能说明
------------------------------------------------
PA0(TIM2_CH1) → 从电机编码器A相 → 从电机位置反馈
PA1(TIM2_CH2) → 从电机编码器B相 → 从电机位置反馈
PB6(TIM4_CH1) → 主电机编码器A相 → 主电机位置反馈
PB7(TIM4_CH2) → 主电机编码器B相 → 主电机位置反馈
**用户控制接口**
STM32引脚 → 外设 → 功能说明
------------------------------------------------
PC13 → 模式按键(下拉) → 控制模式切换
PC14 → 正转按键(下拉) → 正转方向设置
PC15 → 反转按键(下拉) → 反转方向设置
**串口通信接线**
STM32引脚 → USB转串口模块 → 功能说明
------------------------------------------------
PA2(USART2_TX) → USB转串口RX → 发送数据到VOFA+
PA3(USART2_RX) → USB转串口TX → 接收VOFA+命令
**TB6612电源接线**
电源 → TB6612引脚 → 说明
------------------------------------------------
+5V(STM32) → VCC → 逻辑控制电源
+7.4V(锂电池) → VM → 电机驱动电源
GND(公共地) → GND → 系统地线
**编码器电源接线**
电源 → 编码器 → 说明
------------------------------------------------
+5V → 编码器VCC → 编码器工作电源
GND → 编码器GND → 编码器地线
**从电机接线(A通道)**
TB6612引脚 → 从电机 → 说明
------------------------------------------------
AO1 → 电机正极 → 电机输出A+
AO2 → 电机负极 → 电机输出A-


8.18/0/06
完整的VOFA+命令控制表(含位置跟随功能)
按钮名称 | VOFA+命令格式 | 参数值 | 具体功能说明 |
---|---|---|---|
基础速度PID参数 | |||
Kp | pid:kp,%f\n |
任意浮点值 | 设置速度环PID比例增益参数 |
Ki | pid:ki,%f\n |
任意浮点值 | 设置速度环PID积分增益参数 |
Kd | pid:kd,%f\n |
任意浮点值 | 设置速度环PID微分增益参数 |
位置PID参数 | |||
pos_Kp | pos_pid:kp,%f\n |
任意浮点值 | 设置位置环PID比例增益参数 |
pos_Ki | pos_pid:ki,%f\n |
任意浮点值 | 设置位置环PID积分增益参数 |
pos_Kd | pos_pid:kd,%f\n |
任意浮点值 | 设置位置环PID微分增益参数 |
🆕跟随PID参数 | |||
follow_Kp | follow_pid:kp,%f\n |
任意浮点值 | 设置跟随环PID比例增益参数 |
follow_Ki | follow_pid:ki,%f\n |
任意浮点值 | 设置跟随环PID积分增益参数 |
follow_Kd | follow_pid:kd,%f\n |
任意浮点值 | 设置跟随环PID微分增益参数 |
控制模式设置 | |||
control_mode | control_mode:%f\n |
0.0=按键控制 1.0=VOFA+控制 | 切换控制模式 |
control_type | control_type:%f\n |
0.0=速度控制 1.0=位置控制 2.0=串级控制 🆕3.0=位置跟随控制 | 切换控制类型(新增跟随模式) |
运动控制 | |||
TARGET_SPEED | speed:%f\n |
任意浮点值 | 直接设置目标速度值(转/秒),自动切换到速度控制模式 |
POSITION_CONTROL | position:%f\n |
任意浮点值 | 直接设置目标位置值(圈数),自动切换到位置控制模式 |
CASCADE_CONTROL | cascade:%f,%f\n |
位置值,速度值 | 设置串级控制目标(位置,速度),自动切换到串级控制模式 |
🆕跟随控制 | |||
FOLLOW_CONTROL | follow\n |
无参数 | 启动位置跟随控制模式,从电机跟随主电机位置 |
档位控制 | |||
speed_mode | speed_mode:%f\n |
0.0=0.5转/秒 1.0=1.0转/秒 2.0=2.0转/秒 | 设置速度档位,自动切换到速度控制模式 |
position_mode | position_mode:%f\n |
0.0=1圈 1.0=10圈 2.0=50圈 | 设置位置档位,自动切换到位置控制模式 |
cascade_mode | cascade_mode:%f\n |
0.0=1圈@0.5转/秒 1.0=10圈@1.0转/秒 2.0=50圈@2.0转/秒 | 设置串级控制档位,自动切换到串级控制模式 |
基础控制 | |||
DIR | dir:%f\n |
0.0=正转 1.0=反转 | 设置电机旋转方向 |
ENABLE | enable:%f\n |
0.0=禁用 1.0=启用 | 电机使能控制,启用或禁用电机 |
系统功能 | |||
RESET | reset\n |
无参数 | 复位所有PID积分项和位置累计值 |
INFO | info\n |
无参数 | 查询系统当前状态和参数信息 |
📊 数据输出格式(CH0-CH15:数据监控通道)
通道 | 通道名称 | 数据类型 | 单位 | 说明 |
---|---|---|---|---|
CH0 | Slave_Target_Speed | 浮点值 | rps | 从电机目标速度 |
CH1 | Slave_Current_Speed | 浮点值 | rps | 从电机当前速度 |
CH2 | Slave_Target_Pos | 浮点值 | turns | 从电机目标位置 |
CH3 | Slave_Current_Pos | 浮点值 | turns | 从电机当前位置 |
CH4 | PWM_Output | 浮点值 | 0-1000 | PWM输出值 |
CH5 | Speed_PID_Error | 浮点值 | rps | 速度PID误差 |
CH6 | Position_PID_Error | 浮点值 | turns | 位置PID误差 |
CH7 | Speed_Kp_Current | 浮点值 | - | 当前速度Kp参数 |
CH8 | Speed_Ki_Current | 浮点值 | - | 当前速度Ki参数 |
CH9 | Speed_Kd_Current | 浮点值 | - | 当前速度Kd参数 |
CH10 | Position_Kp_Current | 浮点值 | - | 当前位置Kp参数 |
CH11 | Position_Ki_Current | 浮点值 | - | 当前位置Ki参数 |
CH12 | Position_Kd_Current | 浮点值 | - | 当前位置Kd参数 |
CH13 | Control_Type_Status | 整数值 | - | 控制类型(0=速度,1=位置,2=串级,3=跟随) |
CH14 | Direction_Status | 整数值 | - | 方向状态(0=正转,1=反转) |
CH15 | 🆕Master_Position | 浮点值 | turns | 主电机位置(跟随监控) |
提示词
js
我使用的是TB6612双路驱动模块带稳压版,STM32C8T6单片机,vofa+ 1.3.10进行串口传输仿真,使用STM32CubeMX和Clion联合来进行编译
💬 结语
这个电机控制项目不仅完成了RoboCon的考核要求,更重要的是通过实践掌握了现代嵌入式开发的完整流程。从环境搭建到硬件连接,从算法实现到调试优化,每一步都是宝贵的学习经历。
特别是位置跟随控制功能的创新实现,展现了对控制系统的深入理解。希望这个项目能为后续的机器人开发奠定坚实基础,也希望这份经验分享能帮助到其他同学。
项目亮点:
- ✨ 完整的现代化开发工具链
- 🎯 四种控制模式无缝切换
- 🚀 创新的位置跟随功能
- 📊 专业的数据可视化调试
- 🔧 工程化的代码设计
如果你对项目有任何问题或建议,欢迎在GitHub仓库中提出Issue或PR,让我们一起学习进步!
作者 :scilwb
项目时间 :2024年8月
GitHub :RoboCon_lwb
技术栈:STM32 + CLion + VOFA+ + PID控制