分享STM32两轮自平衡小车系统毕设分享 含源码与PCB文件
首先说一下硬件用的哪些:主控芯片用的是100脚的STM32F103VET6,陀螺仪用的是MPU6050,电机驱动用的是TB6612,蓝牙是汇承的HC05邮票孔封装的,WIFI用的是济南有人科技的USR-WIFI232-S,小车底盘用的是平衡小车之家的某一款带编码器的(不是我买的,同学的),电池用的是一节7.2的镍镉电池,液晶用的是中景园电子1.3寸IIC接口的OLED,开关用的是三脚纽子开关,电池接口用的是T插,电阻电容这些用的基本上是0603封装,编码器5V降压用的是ASM1117-5.0,3.3V降压用的是SP6203,拨码开关用的是4P贴片式2.54mm角距的,按键是两脚贴片,microusb接口用的是5针 7.2四脚插板牛角母座,超声波是某宝上几块钱烂大街的那种,蜂鸣器是有源的,编码器是小车底盘自带的,电池电压检测是电阻分压之后通过电压跟随器接入MCU内部AD测量的。
然后再说一下主控板上的资源:STM32F103VET6主控芯片;两个microusb口,第一个是MCU的串口1,可作为普通的串口收发数据,通过调节板上BOOT选项,也可将其作为ISP下载程序接口;第二个是SWD硬件仿真接口;蓝牙模块,与MCU的串口2连接;WIFI模块,与MCU的串口3相连;一块1.3寸IIC协议的液晶接口;超声波接口;双电机驱动;六轴陀螺仪;电池电压检测;4个用于调试的LED;4个独立式按键;一组4P的拨码开关;有源蜂鸣器;两个6P带AB相编码器的电机接口。
再说一下硬件配套的软件:这份配套的软件,也算是我一点一点黏贴拼凑实测出来的,模块分的很清楚。再来说一下个人的感觉吧,网上资料一大堆,但是大多都是只有程序,没有对应的较为完整电路原理图。很少见到软硬件全部开源并且能够对应的资料。所以就带来这样一个后果,我们用别人的程序,我们自己画的电路。举个例子,某宝上卖这个的程序我看过,个人觉得,如果不搭配他的硬件,想用自己的硬件而直接把他的软件工程拿过来修改的话,很烦很乱基本上是扯淡。因为里面东西牵涉太多,你第一次做并不知道哪些是无关紧要哪些是必不可少的,比如蓝牙的遥控部分,超声波部分啊等等这些在他完整版的工程里面都是写好的,再者我们肯定是先调直立环,然后在调试速度环和方向环,所以你把他完整版的工程拿过来用,你告诉我怎么删减或者怎么注释掉速度环、方向环和一些锦上添花的功能模块呢?还有很多地方都是寄存器直接配置,我完全看不懂不知道怎么修改,一头雾水。所以最好的办法就是,参照别人的程序,一点一点自己粘贴然后修改底层搭建自己的工程。或者你也可以把自己的电路画的跟别人的一样,避免修改别人的底层,这样你粘贴过来甚至都不用改就能用了。PS:我分享出来的是配套的硬件+软件,毫不夸张的说,直接把我这个PCB送去打样回来焊接好,程序烧写进去,调下参数就应该可以简单直立了。
最后简单展示一下分享的资源,至于源文件全部在附件可下载。最后希望可以帮助到真正需要的人。
这是电路原理图:
这是PCB图:
这是打样好的PCB:
这是程序框架图:
这是最后搭建好的实物图:
源程序:
- /* Includes ------------------------------------------------------------------*/
- #include "stm32f10x.h"
- #include "stdio.h"
- #include "systic.h"
- #include "OLED.h"
- #include "MPU6050.h"
- #include "LED.h"
- #include "Buzzer.h"
- #include "Switch.h"
- #include "Key.h"
- #include "Motor.h"
- #include "USART.h"
- #include "TIM.h"
- /* define---------------------------------------------------------------------*/
- uint32_t Main_Count = 0;
- uint8_t Key_num = 0;
- uint32_t Test;
- uint8_t Temp[20];
-
- int main(void)
- {
- USART_NVIC_Configuration(); // 配置串口中断
- USART_Config(); // 配置串口
- SysTick_Init(); //滴答定时器初始化
- OLED_Init(); //OLED引脚初始化
- OLED_Clear(); //OLED清屏
- OLED_First_Line(); //OLED第一行显示: 贺梓洹毕业设计
- LED_Init(); //LED引脚初始化
- Speak_Init(); //蜂鸣器引脚初始化
- Switch_Init(); //拨码开关引脚初始化
- Key_Init(); //按键引脚初始化
- MPU6050_Init();
- PWM_Init(7199,0);
- TIM_Config();
- // Speak=1;
- // Delay_s(1);
- // Speak=0;
- while(1)
- {
- // KeyScan();
-
- // if(Key1_Count==1)
- // {
- // Key1_Count=0;
- // kp=kp+3;
- // }
- // OLED_ShowNum(0,6,Key1_Count,6,16);//显示ASCII字符的码值
- // OLED_ShowNum(0,4,Key2_Count,6,16);//显示ASCII字符的码值
- // OLED_ShowNum(0,6,Key3_Count,3,16);//显示ASCII字符的码值
- // OLED_ShowNum(103,6,Key4_Count,3,16);//显示ASCII字符的码值
- // Delay_ms(5);
- // OLED_ShowNum(103,6,Key4_Count,3,16);//显示ASCII字符的码值
- // LED2=0;
- // LED3=0;
- // LED4=0;
- // Speak=0;
- // Delay_s(1);
- LED1=1;
- // LED2=1;
- // LED3=1;
- // LED4=1;
- // Speak=1;
- // Delay_s(1);
-
- // READ_MPU6050();
- // Kalman_Filter(Data_6050.Acc_X , Data_6050.Gryo_Y);
- //GyroX++;
- // OLED_ShowNum(103,2,Data_6050.Acc_X,3,16);//显示ASCII字符的码值
- //GyroY++;
- // OLED_ShowNum(103,4,Data_6050.Gryo_Y,3,16);//显示ASCII字符的码值
- //GyroZ++;
- // OLED_ShowNum(103,6,angle,3,16);//显示ASCII字符的码值
- // Delay_ms(100);
- }
- }
-
复制代码
以下是源文件:
电路原理图: U创论坛下载-平衡车原理图.zip
|