大家好,我是张巧龙,今天给大家带来一个平衡自行车,我实验室一个19级的本科生做的,他今年也获得了全国电赛二等奖(F题)的成绩。

人嘛,非常帅的一个小伙子。B站ID:_旺仔小菠萝,欢迎大家围观!

好了,废话不多说,直接开整!先看展示视频,相关方案在后文。

文末开源所有文件(已经获得本人授权),程序、电路、3D打印文件。

01 

硬件篇

1.1  STM32F103C8T6最小系统(小蓝板)

1.2 MPU6050姿态传感器(3.3V供电)

1.3 0.96寸OLED显示屏(四针、IIC通信、3.3V供电)

1.4 HC-05蓝牙模块(串口通信、用于接收小车运动指令)

使用教程链接:https://blog.csdn.net/weixin_44325419/article/details/110727911

1.5  无刷电机动量轮

1.6 N20电机及驱动(电机选型:DC 12V A12型)

1.7 无刷电机动量轮模组

该电机自带驱动和光电编码器。

该自平衡自行车中我们使用万宝至无刷伺服电机,内置驱动,支持正反转,PWM调速,并且带有100线编码器AB相双通道信号输出。

该电机接线图如上图所示,实际小车中的线的颜色可能与上图有所不符,大家要按照位置来判断而不是线的颜色。

1.信号A相和信号B相为编码器脉冲输出端;

2.正反转切换的线我们直接用单片机的引脚3.3V电平控制,是完全没有问题的;

3.编码器供电接3.3V;

4.PWM接单片机的PWM输出,启动运行我们接单片机IO口,在电机初始化时置为高电平;

5.电源负极接GND,电源正极接12V。

1.8  舵机

项目中所使用,有点小贵,可以买便宜的。

1.9  3S航模电池(注意电池尺寸)

1.10 稳压模块及开关

将航模电池电压降至5V给单片机、舵机、蓝牙、超声波、电机编码器供电。

1.11  轮子及轴承

由于小车后轮是通过皮带传动,为减小摩擦,使后轮转动更加顺滑,需在后轮安装微型轴承。(轴承根据车轴尺寸购买)

1.12  车架及转向结构(3D打印)

13. 电路PCB

将上述功能模块集成在一块PCB电路板上(6.5x7.8cm),为方便焊接,电容电阻及三极管均为直插式元件。

02 

软件篇

2.1  main.c

#include "sys.h"
float AdcValue;                       //电池电压数字量
float Pitch,Roll,Yaw;                 //角度
short aacx,aacy,aacz;                 //加速度传感器原始数据
short gyrox,gyroy,gyroz;              //陀螺仪原始数据
int PWM1;
int PWM_MAX=6500,PWM_MIN=-6500;  //PWM限幅变量
int Encoder_Motor;  //编码器数据(速度)
int main(void)
{  NVIC_Config();delay_init();Led_Init();Beep_Init();Wave_SRD_Init();uart3_init(9600);OLED_Init();      //初始化OLED  OLED_Clear();adc_Init();MOTOR_1_Init();MOTOR_2_Init();PWM_Init_TIM3(7199,0);//定时器3初始化PWM 10KHZ,用于驱动动量轮电机 PWM_Init_TIM2(9999, 143);//定时器2初始化PWM 50HZ,用于驱动舵机TIM_SetCompare1(TIM2, 790);//舵机复位Init_TIM1(9998,7199);Encoder_Init_TIM4(65535,0);OLED_ShowString(25,4,"MPU6050...",16);MPU_Init();            //MPU6050初始化
while(mpu_dmp_init()){OLED_ShowString(25,4,"MPU6050 Error",16);}  OLED_ShowString(25,4,"MPU6050 OK!",16); Beep=1;delay_ms(400);Beep=0;MPU6050_EXTI_Init();OLED_Clear();OLED_ShowString(0,0,"Roll :         C",16);OLED_ShowString(0,3,"Speed:         R ",16);OLED_ShowString(0,6,"Power:        V ",16);    while(1){          Wave_SRD_Strat();        AdcValue=11.09*(3.3*Get_adc_Average(ADC_Channel_4,10)/0x0fff); //ADC值范围为从0-2^12=4095(111111111111)一般情况下对应电压为0-3.3VOLED_Showdecimal(55,0,Roll,9,16);  OLED_Showdecimal(55,3,Encoder_Motor*0.25,9,16);         OLED_Showdecimal(50,6,AdcValue,9,16);       }
}

2.2  PID控制算法

学习视频:

该小车实现直立平衡需要用到两个闭环控制,即直立环(PD控制、负反馈),速度环(PI控制、正反馈),代码原理及调试过程与两轮平衡小车调试过程基本一致。

关于PID控制算法的学习,内容较多,不好详细展开,网上资源丰富,大家可自行学习。

这里推荐一篇知乎文章:https://zhuanlan.zhihu.com/p/39573490

2.3 代码阅读注意点

所有头文件都包含在sys.h中,每个.h文件都包含sys.h,方便函数调用。

#ifndef __SYS_H
#define __SYS_H
#include "stm32f10x.h"
#include "adc.h"
#include "oled.h"
#include "led.h"
#include "beep.h"
#include "wave.h"
#include "control.h"
#include "exti.h"
#include "mpu6050.h"
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"
#include "motor.h"
#include "pwm.h"
#include "encoder.h"
#include "usart.h"
#include "delay.h"
#include <math.h>
#include <stdlib.h>

STM32F10x系列的MCU复位后,PA13/14/15 & PB3/4默认配置为JTAG功能。有时我们为了充分利用MCU I/O口的资源,会把这些端口设置为普通I/O口。

使用JLINK向STM32烧录程序时,需要使用6个芯片的引脚(以STM32F103C8T6为例),分别是PB4 / JNTRST,PB3 / JTDO,PA13 / JTMS,PA14 / JTCK,PA15 / JTDI,NRST。

当芯片IO口资源比较紧张时,可选择SW模式烧录程序。

SWD只需用到PA13 / JTMS,PA14 / JTCK两根线,NREST可以接可不接,剩下的PB4 / JNTRST,PB3 / JTDO和PA15 / JTDI就可以当然普通IO使用,但是这三个口当然普通IO使用时需要先进行如下配置。(这里MPU6050模块用到PB3和PB4引脚)

03

最后

3.1 作品照片

3.2 获取方式

加入星球的同学,可以直接到星球内下载。

未加入星球的的同学,可以添加微信:great_xiaolong,加好友记得备注:自行车。

对了,借此推荐下知识星球,星球现在已有120+人加入,有兴趣加入的朋友可以添加上方微信咨询,现在加入有一定优惠。

-END-

一个亿的融资在一家芯片初创公司可以烧多久?

STM32为何在诸多的单片机中脱颖而出?

搞硬件,别吹牛了,好好做个规划!

一名教电子的大学老师,欢迎关注!

做一辆超mini平衡自行车,全开源!相关推荐

  1. 手把手教你做一辆mini平衡自行车!

    今天给大家带来的是一个博主老倪制作的迷你的平衡自行车项目,虽然是4年前的老项目了,不过相信我们仍然能从中学到一些新东西. ▼   演示效果 自行车平衡DIY分为3部分介绍: 第一部分介绍自行车平衡基本 ...

  2. Github推荐:超好用的全开源协同OA项目

    今天给大家介绍的,确确实实是一款鲜为人知,但是好用的全开源协同OA项目,它的名字叫做:O2OA企业应用开发平台(简称O2OA平台). O2OA平台是什么? O2OA开源企业应用开发平台基于J2EE分布 ...

  3. 【原理分析】Google炫炸天的平衡自行车仅仅是概念吗?来看看惯性轮自行车吧...

    1.聊一聊 今天分享一曲经典的bgm,至少90%的人听过,应该只有10%的人知道它的名字,听完以后精神倍佳,听的时候记得闭上眼睛想象一下这个浩大的乐队,也许这才是音乐的魅力! 好了,今天为大家带来一些 ...

  4. 【动量轮自平衡自行车】STM32_PID(开源-含硬件资料)

    动量轮自平衡自行车STM32 如何DIY一辆自平衡自行车?下面将制作内容分享给大家,欢迎讨论交流~. 目    录 一.硬件篇(附淘宝链接,店铺不定,也可自行搜索购买) 1. STM32F103C8T ...

  5. 微信小程序黑客马拉松即将开始,来做最酷的 Mini Program Creators!

    微信小程序黑客马拉松正式启动 近日,小程序斩获一项世界级殊荣--作为一项全新的技术和应用创新,小程序首次获选世界互联网领先科技成果.目前小程序应用数量已超过 100 万,覆盖了 200 多个细分行业, ...

  6. 微信小程序黑客马拉松即将开始,来做最酷的 Mini Program Creators! 1

    微信小程序黑客马拉松正式启动 近日,小程序斩获一项世界级殊荣--作为一项全新的技术和应用创新,小程序首次获选世界互联网领先科技成果.目前小程序应用数量已超过 100 万,覆盖了 200 多个细分行业, ...

  7. 单点自平衡立方体相当于有几个自由度?自平衡自行车有几个自由度?独轮车有几个自由度?

    单点自平衡立方体相当于有几个自由度?自平衡自行车有几个自由度?独轮车有几个自由度? .

  8. 自平衡自行车本质就是一个惯性飞轮,本质就是一样的!!!

    自平衡自行车本质就是一个惯性飞轮,本质就是一样的!!! 什么向前跑,转弯,这都是最基础的电机转动,都不不需要控制什么.不管直行车怎么走,它永远都是一个只能左右摆动的东西,惯性飞轮只需要控制这个左右摆动 ...

  9. 540 万元!全球第一辆会飞的“自行车”:能飞 40 分钟,却不能上路?

    整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 你听说了吗?现在天空中能载人的除了飞机.火箭,可能还要有"自行车"了! 上周,美国底特律车展上亮相了全球第一款飞行自 ...

最新文章

  1. 愤怒的小鸟素材包_点映预售开启|愤怒的小鸟2搞笑升级,萌贱无敌!
  2. KVM — Overview
  3. Java:自定义异常处理类
  4. wxWidgets:wxDataObjectComposite类用法
  5. linux运维决心书!
  6. jpa的查询api_为JPA的本机查询API键入安全查询
  7. qdu-凑数题(01背包)
  8. 服务端解决跨域问题的方案(二)
  9. 两列自适应布局方案整理
  10. oracle into 循环,oracle游标中使用select into查询结果为NULL导致异常提前退出循环——菜鸟解决办法(^_^)...
  11. Android Studio 每次运行都会再下载一遍,修改
  12. Talkfree7手机电视,IPTV,VOIP-GPS-3G手机,WAP是未来
  13. FPGA入门必备学习网站和工具
  14. win11 windows 服务打开word 另存为pdf
  15. android连iphone热点超时,苹果手机开热点安卓手机连不了为什么
  16. 怎么注销百度云服务器账号,百度网盘如何注销账号?百度网盘注销账号的方法步骤...
  17. 测试开发(社招)面经:度小满
  18. netsh interface portproxy本地ip与端口映射及本地虚拟ip(windows)
  19. html5 声控游戏,用声音来放大招吧!10款独具创意的声控游戏
  20. 培训机构到底好不好?学历重要吗?java

热门文章

  1. 用JavaScript实现的设计模式之commandline(命令行)模式
  2. SAP C4C一个典型的客户Organization和employee的同步需求
  3. 微信的一个隐藏功能,我身边绝大多数人都不知道,其实很实用
  4. SAP Fiori : Response from creating in local store
  5. how does local sandbox parse navigation target from hash
  6. resolve fire在SAP UI5中的使用场景
  7. Jerry开发的SAP note工具
  8. 使用nodejs对Marketing Cloud的contact主数据进行修改操作
  9. Cloud for Customer的前端如何判断自己是运行在PC浏览器还是移动设备里
  10. Font support in Adobe form