做一辆超mini平衡自行车,全开源!
大家好,我是张巧龙,今天给大家带来一个平衡自行车,我实验室一个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平衡自行车,全开源!相关推荐
- 手把手教你做一辆mini平衡自行车!
今天给大家带来的是一个博主老倪制作的迷你的平衡自行车项目,虽然是4年前的老项目了,不过相信我们仍然能从中学到一些新东西. ▼ 演示效果 自行车平衡DIY分为3部分介绍: 第一部分介绍自行车平衡基本 ...
- Github推荐:超好用的全开源协同OA项目
今天给大家介绍的,确确实实是一款鲜为人知,但是好用的全开源协同OA项目,它的名字叫做:O2OA企业应用开发平台(简称O2OA平台). O2OA平台是什么? O2OA开源企业应用开发平台基于J2EE分布 ...
- 【原理分析】Google炫炸天的平衡自行车仅仅是概念吗?来看看惯性轮自行车吧...
1.聊一聊 今天分享一曲经典的bgm,至少90%的人听过,应该只有10%的人知道它的名字,听完以后精神倍佳,听的时候记得闭上眼睛想象一下这个浩大的乐队,也许这才是音乐的魅力! 好了,今天为大家带来一些 ...
- 【动量轮自平衡自行车】STM32_PID(开源-含硬件资料)
动量轮自平衡自行车STM32 如何DIY一辆自平衡自行车?下面将制作内容分享给大家,欢迎讨论交流~. 目 录 一.硬件篇(附淘宝链接,店铺不定,也可自行搜索购买) 1. STM32F103C8T ...
- 微信小程序黑客马拉松即将开始,来做最酷的 Mini Program Creators!
微信小程序黑客马拉松正式启动 近日,小程序斩获一项世界级殊荣--作为一项全新的技术和应用创新,小程序首次获选世界互联网领先科技成果.目前小程序应用数量已超过 100 万,覆盖了 200 多个细分行业, ...
- 微信小程序黑客马拉松即将开始,来做最酷的 Mini Program Creators! 1
微信小程序黑客马拉松正式启动 近日,小程序斩获一项世界级殊荣--作为一项全新的技术和应用创新,小程序首次获选世界互联网领先科技成果.目前小程序应用数量已超过 100 万,覆盖了 200 多个细分行业, ...
- 单点自平衡立方体相当于有几个自由度?自平衡自行车有几个自由度?独轮车有几个自由度?
单点自平衡立方体相当于有几个自由度?自平衡自行车有几个自由度?独轮车有几个自由度? .
- 自平衡自行车本质就是一个惯性飞轮,本质就是一样的!!!
自平衡自行车本质就是一个惯性飞轮,本质就是一样的!!! 什么向前跑,转弯,这都是最基础的电机转动,都不不需要控制什么.不管直行车怎么走,它永远都是一个只能左右摆动的东西,惯性飞轮只需要控制这个左右摆动 ...
- 540 万元!全球第一辆会飞的“自行车”:能飞 40 分钟,却不能上路?
整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 你听说了吗?现在天空中能载人的除了飞机.火箭,可能还要有"自行车"了! 上周,美国底特律车展上亮相了全球第一款飞行自 ...
最新文章
- 愤怒的小鸟素材包_点映预售开启|愤怒的小鸟2搞笑升级,萌贱无敌!
- KVM — Overview
- Java:自定义异常处理类
- wxWidgets:wxDataObjectComposite类用法
- linux运维决心书!
- jpa的查询api_为JPA的本机查询API键入安全查询
- qdu-凑数题(01背包)
- 服务端解决跨域问题的方案(二)
- 两列自适应布局方案整理
- oracle into 循环,oracle游标中使用select into查询结果为NULL导致异常提前退出循环——菜鸟解决办法(^_^)...
- Android Studio 每次运行都会再下载一遍,修改
- Talkfree7手机电视,IPTV,VOIP-GPS-3G手机,WAP是未来
- FPGA入门必备学习网站和工具
- win11 windows 服务打开word 另存为pdf
- android连iphone热点超时,苹果手机开热点安卓手机连不了为什么
- 怎么注销百度云服务器账号,百度网盘如何注销账号?百度网盘注销账号的方法步骤...
- 测试开发(社招)面经:度小满
- netsh interface portproxy本地ip与端口映射及本地虚拟ip(windows)
- html5 声控游戏,用声音来放大招吧!10款独具创意的声控游戏
- 培训机构到底好不好?学历重要吗?java
热门文章
- 用JavaScript实现的设计模式之commandline(命令行)模式
- SAP C4C一个典型的客户Organization和employee的同步需求
- 微信的一个隐藏功能,我身边绝大多数人都不知道,其实很实用
- SAP Fiori : Response from creating in local store
- how does local sandbox parse navigation target from hash
- resolve fire在SAP UI5中的使用场景
- Jerry开发的SAP note工具
- 使用nodejs对Marketing Cloud的contact主数据进行修改操作
- Cloud for Customer的前端如何判断自己是运行在PC浏览器还是移动设备里
- Font support in Adobe form