
STM32两轮平衡车项目资料:原理图、PCB及程序
两轮平衡车这玩意儿看起来玄乎,其实玩明白了也就那么回事。今天咱们直接扒开这个STM32平衡
车的底裤,从硬件到代码全给它拆明白了。手头正好有完整的原理图、PCB和程序源码,这就开整!
硬件部分的核心是MPU6050和TB6612电机驱动。原理图里有个细节挺有意思——MPU6050的IIC接口直
接怼到了STM32F103的PB6/PB7,但实际焊板子的时候记得在传感器下面抹点焊锡膏当散热。PCB布局最关
键的是电机驱动部分要走大电流,我这版用了2oz铜厚,电源线直接30mil宽度起步,不然电机一启动电压
能被拉低到亲妈都不认识。
说到代码,先看这个结构体:
```c
typedef struct {
float Target; // 目标角度
float Kp,Ki,Kd; // PID参数
float Err,LastErr,PrevErr; // 当前/上次/上上次误差
float Output; // 输出值
} PID;
```
这可不是普通的PID,得做成位置式+微分先行。为啥?因为直立环需要快速响应,实测普通的增量式
PID反应慢半拍,车直接变跷跷板。调参的时候先把Ki设0,Kp从3.0开始往上加,直到车能勉强站稳但疯狂
抖动,这时候上Kd来镇压。
电机控制有个骚操作:
```c
void SetMotorPWM(int moto1,int moto2)
{
if(moto1>0){
MOTOR1_A=1;
MOTOR1_B=0;
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,moto1);
} else {
MOTOR1_A=0;
MOTOR1_B=1;