在学习了STM32相关知识以后,我萌生了做一个平衡车的想法,所以我看了网上的教程跟着做了一个,在淘宝买了各种配件,尽量控制好成本。
首先需要主控芯片(STM32F103C8T6)+电机驱动芯片(TB6612FNG),利用嘉立创EDEA进行打板,在淘宝买了小车框架:平衡车底盘、电机、轮子等小配件,用到的陀螺仪:MPU6050,检测倾斜角度,另外还有蓝牙模块,超声波模块,OLED显示屏。
该平衡车各个模块原理图如图所示:
(1)主控芯片(STM32F103C8T6)及周围电路结构如下:
1.STM32F103C8T6(48脚芯片)
2.8M晶振(STM32内部倍频至72MHz,产生供系统正常工作的稳定的脉冲信号),
3.复位电路(RST)
4.启动模式选择电路(BOOT0和BOOT1)
5.去耦电容(3.3V与GND之间加几个104电容)
6.烧写电路(SW)
(2)电源电路
电源采用5V锂电池供电,这里就不需要降压模块获取5V电压,直接通过AMS1117降至3.3V。
(3)电机驱动芯片TB6612FNG
作用:驱动电机正常运行
PWM1——PA8
PWM2——PA11
电机1——PB12/PB13
电机2——PB14/PB15
(4)陀螺仪MPU6050
作用:检测倾斜角
MPU6050中断引脚——PB5
MPU6050所用I2C——PB3/PB4
部分代码:
int velocity(int encoder_left,int encoder_right)
{
Static float Velocity,Encoder_Least,Encoder,Movement;
static float Encoder_Integral,Target_Velocity;
Encoder_Least =(encoder_left+encoder_right)-0; Encoder *= 0.7;
Encoder += Encoder_Least*0.3; Encoder_Integral +=Encoder; //Encoder_Integral=Encoder_Integral-Movement; if(Encoder_Integral>10000) Encoder_Integral=10000; if(Encoder_Integral<-10000) Encoder_Integral=-10000; Velocity=Encoder*Velocity_Kp+Encoder_Integral*Velocity_Ki;
return Velocity;
}
实物图展示: