各位同学,大家中午好!从明天起本号更新时间由中午12:00,调整为傍晚18点,贴合大家课后学习调试,持续更新STM32、51单片机,嵌入式实操教程与完整源码。
做电机PID、平衡小车、FOC闭环控制,电脑接线调参极其麻烦;
本次实战HC05蓝牙串口透传,手机APP无线修改Kp/Ki/Kd、目标转速,不用拔线、不用接USB,边走边调PID,嵌入式新手进阶必学实操。
蓝牙本质=无线串口线,透传不解析数据,STM3只处理普通串口,零改动兼容你之前所有PID工程。
二、硬件清单(STM32F103C8T6通用)
1. STM32F103主控板
2. HC05蓝牙从机模块(SPP串口透传)
3. 直流电机+驱动/PID闭环系统
4. 手机蓝牙串口调试APP
5. 12V直流电源
三、硬件接线(一一对应,不易出错)
- STM32 USART2_TX → HC05 RX
- STM32 USART2_RX → HC05 TX
- STM32 GND → HC05 GND
- 3.3V接蓝牙VCC(严禁5V烧模块)
⚠️ 必须共地,否则蓝牙乱码、PID参数错乱。
四、蓝牙透传原理
HC05经典蓝牙SPP透传协议;
手机APP ↔ 蓝牙无线 ↔ STM32串口收发;
单片机完全当成普通串口通信,不用改PID底层算法;
手机滑动条实时下发PID参数,STM32立刻更新闭环参数,同步看电机响应波形。
五、CubeMX配置
1. 开启USART2,异步模式,波特率9600
2. 开启串口接收空闲中断
3. 开启定时器,PID闭环周期不变
4. 生成HAL库工程
六、完整原创源码
1. 串口蓝牙接收中断回调
c
uint8_t BT_RxBuf[32];
uint8_t BT_RxCnt = 0;
//串口接收空闲中断
void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart)
{
if(huart == &huart2)
{
HAL_UART_AbortReceive_IT(&huart2);
BT_PID_Analysis(BT_RxBuf,BT_RxCnt);
BT_RxCnt = 0;
HAL_UART_Receive_IT(&huart2,BT_RxBuf,32);
}
}
2. 蓝牙PID参数解析更新
c
void BT_PID_Analysis(uint8_t *buf,uint8_t len)
{
float Kp,Ki,Kd,Target;
//格式:KPxx;KIxx;KDxx;SPxx;
sscanf((char*)buf,"KP%f;KI%f;KD%f;SP%f;",&Kp,&Ki,&Kd,&Target);
//参数限幅保护,防止震荡烧电机
if(Kp>0&&Kp<10&&Ki>0&&Ki<2&&Kd>0&&Kd<3)
{
Speed_PID.Kp = Kp;
Speed_PID.Ki = Ki;
Speed_PID.Kd = Kd;
Speed_PID.integral = 0;
}
Target_Speed = Target;
}
3. 蓝牙初始化
c
void HC05_BT_Init(void)
{
HAL_UART_Receive_IT(&huart2,BT_RxBuf,32);
}
七、手机APP操作步骤
1. 应用商店下载:蓝牙串口调试助手
2. 手机打开蓝牙,配对HC05,密码1234
3. 波特率设置9600,无校验
4. 发送格式:KP2.5;KI0.1;KD0.8;SP500;
5. 实时滑动修改PID,电机立刻响应变化
八、PID无线调参技巧
1. 先固定Kp,让电机能动不抖动
2. 微调Ki消除转速静差
3. 最后调Kd抑制超调震荡
4. 蓝牙无线不接线,反复调试效率翻倍
5. 配合OLED实时显示当前PID与转速
九、实战优势
1. 告别电脑USB接线,宿舍无线调试
2. 兼容所有你之前写好的速度环、位置环PID
3. 串口透传稳定,无丢包、无乱码
4. 毕设、电赛必备加分项目
5. 零基础半小时上手
感谢耐心阅读本文干货,喜欢嵌入式教程麻烦点赞关注,后续持续更新PID、串口、电机FOC进阶实操,源码不迷路~
原创声明&免责声明
本文STM32蓝牙透传调PID全套源码、接线原理图均为原创实操内容,仅供嵌入式学习交流,禁止商用搬运;实操请注意电机与电源安全,不当操作造成设备损坏自负责任。
谢谢你观看我写的文章,我会继续努力的。
夜雨聆风