锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

这辆迷你摩托车,很酷!

时间:2022-11-10 14:00:00 5l智能开关三极管

摘要:你应该见过很多平衡车,比如最有名的车野生钢铁侠稚晖君自行车平衡车。那东西太高级了,普通人做不到。作为学生或学生DIY爱好者做小的mini平衡车还是可以实现的。928d966cd16b8a6bc1176933c0cba5e2.png

全国16届恩智浦杯大学生智能汽车大赛新增单车拉力组,平衡车的实现正成为电子爱好者最受欢迎的项目。如果你是电子专业的嵌入式开发爱好,你必须做一辆平衡车。今天,我们将为您带来一个由博主老倪制作的迷你平衡自行车项目。虽然时间有点长,但我相信我们仍然可以从中学到一些新东西。

下面两张图是龙邱科技为16届智能车竞赛生产的电单车K车模高配版摩托车图片

下图是本项目的简单描述mini版平衡小车

自行车平衡DIY介绍分为三部分:

  • 第一部分介绍了自行车平衡的基本物理原理;

  • 第二部分理论分析了平衡自行车的算法,包括模型分析、姿态检测方法PID算法,控制算法;

  • 第三部分实践介绍了平衡自行车使用的部件、动力、转向、电路和代码分析。

一、自行车平衡原理

如何平衡自行车,外国人做了一个很好的视频,很好地证明了常见的角动量守恒是错误的,正确地表明自行车平衡原理与转向有关,但没有具体指出平衡与转向的关系。

我们先来讨论一下。角动量守恒为什么最常见的猜测是错误的,大致讨论转向是如何平衡自行车的。

角动量守恒说

角动量守恒意味着车轮在运行时旋转,此时车轮类似陀螺,角动量守恒使自行车保持不下降。

当我还是个孩子的时候,我也有这样一个问题,如果自行车轮从下坡固定,自行车可以继续前进吗?

到底能不能呢?老外的视频做了这个试验:

固定后,它会倒下。可以看出,车轮的陀螺仪效应不是保持自行车不倒下的原因。此外,外国人还制造了一辆没有陀螺仪效应的自行车,它也可以稳定平衡:

这足以说明陀螺仪效应不是维持自行车平衡的根本原因。

2.离心力是自行车平衡的根本原因

那么保持自行车平衡的原因是什么呢?

自行车可视为倒置摆(左右方向不稳定)。这种倒置摆在重力作用下是一个不稳定的系统,需要额外的回复来保持平衡,而提供回复的是自行车转向时的离心力。

离心力是速度和手柄转向角的函数,在固定速度下,控制手柄转向角是控制回复力。

让我们先记住这一点:为了保持自行车的平衡,需要通过适当的算法来控制手柄角度来稳定自行车的平衡。

机械自平衡

有些人可能会想,有些自行车只要推起来就能平衡自己,比如下面的视频:

我自己也买了一辆遥控摩托车,想研究一下:

拆卸后发现里面没有准确的转向控制结构,好像开车时根本没有转向控制,就像上面的自行车一样。

这到底是怎么回事?事实上,这就是结构设计师的力量。设计的机械结构具有自己的回复功能。机械结构使转向根据车身倾斜而变化。这种变化的范围可以稳定和平衡自行车。

如果我们改变车身结构,我们可能会破坏原始参数,使自行车无法稳定平衡。例如,将重物绑在前轮上:

在外国人的视频中,分析了车身倾斜对转向的三个影响因素:

  • 前轮轴向后倾斜,导致前轮向后倾斜。

  • 将把手安装在前面,导致前轮倾斜。

  • 陀螺仪效应、车身倾斜、陀螺仪效应使前轮转向。

01:36

以上是所谓的机械自平衡。平衡的根本原因是转向,但巧妙的机械设计使前轮转向特性很容易保持平衡。

手动自平衡

手动自平衡意味着我们手动控制平衡它。

既然我们分析了平衡原理,我们就应该做一辆平衡自行车。我们应该仔细研究这一部分,并将重点讨论控制方法。

二、平衡自行车-理论文章

一、模型分析

1、倒立摆

显然,我们知道自行车在左右方向不稳定,这是一种非常常见的物理模型——倒立摆。

顾名思义,倒立摆就是倒立摆,比如倒立杆,

倒立摆的特点:不稳定,只要偏离平衡位置,就会有力(重力分离)使系统更偏离平衡位置,使偏差越来越大。

一般来说,倒立杆可能在前后左右方向倒下,在二维平面上不稳定;自行车只能在左右方向倒下,这是一个一维的倒置摆,这更简单。

以下是生活中几个常见的倒立摆例子:

2.自行车的平衡控制

自行车属于倒立摆模型,倒立摆不稳定,那么如何控制倒立摆才能平衡呢?

让我们分解问题:

  • 平衡是什么状态?

  • 我们能控制什么?

  • 如何控制稳定平衡?

2.1 平衡是什么状态?

我们需要数学地描述平衡。所谓平衡,其实就是倒立的倾角稳定在我们想要的值上。

我们通常想要平衡θ = 0处。

2.2 我们能控制什么?

对于倒置摆模型,我们通常可以控制底部的力、速度或位置,不同的控制量对应不同的控制方法。

对于自行车来说,它的控制模式不像通常的倒立摆那样直接控制底部,而是间接地通过转向控制。当自行车以固定速度前进时,自行车把手从一定角度转向(设置为α),自行车会做相应半径的圆周运动,产生相应大小的离心力。

在自行车的习惯性系统中,只要把手转向一定角度(α),会产生相应大小的横向力:

这就是我们平衡控制时的实际控制量——把手转角α,控制它可以控制回复力。

2.3 如何控制平衡?

以上我们已经能够通过转向产生回复力了,这种回复力能把倒立摆掰回平衡位置,有回复能稳定平衡吗?

不是这样。让我们回顾一下中学物理:

过阻尼的摆动会以较慢的速度回到平衡位置;欠阻尼的摆动会很快回到平衡位置,但会在平衡位置来回摆动;临界阻尼的摆动会以最快的速度稳定在平衡位置。

结合实际的自行车平衡是:

如果恢复不够大,无法纠正,或者纠正速度慢,会导致系统不稳定;如果回复过大,会导致过度纠正,也会导致系统不稳定;我们最希望的状态是回复正确,只是使倒置快速回到平衡位置,而不是过度纠正。

这是一个复杂的数学计算过程,系统运行时会不断计算回复力大小(本平衡自行车为20辆)ms计算一次),用的是PID以后会详细介绍算法。

3.自行车平衡需要解决的基本问题

  • 左右倾角θ

  • 转角用适当的算法控制α使系统稳定平衡

这将在下面详细讨论。

二、姿势检测

什么是检测?

检测自行车左右倾斜角度。

2、怎么检测

用一个叫gy521模块,里面用的是mpu带陀螺仪和加速度传感器的6050芯片

gy521的具体使用将在第三篇实践文章中介绍。在这里,我们知道通过这个模块,我们可以从自行车的各个方向获得加速度和角度速度。请注意,我们不能直接获得倾斜角度。我们得到的是各个方向的加速度和角度速度。为了获得正确的倾斜角度,我们需要进行一些复杂的计算。

常用的算法包括互补平衡滤波和卡尔曼滤波。

三、PID算法

根据之前的分析,我们需要实时计算适当的回复力来稳定和平衡系统。

光滑球面上有一个小球。小球的位置是x,光滑球面顶部在L处,我们可以控制小球的水平方向力F,现在需要稳定和平衡球x0处。

先看简单情况x0=L,此时偏差为L-x

给出一个比例项(P) F = kp*(L-x),这样就会有回复力,当偏差存在时,就会有力把球拉回L。

问题是小球接近L时会有一定的速度,小球越来越接近L,这时,球的力仍然拉到L,这将导致球到达L(我们想要的位置),球不能立即停止,但会冲过去。

这样,球就会在L附近来回摆动,这是一种不稳定的状态,属于欠阻尼状态。

为解决上述问题要加一个微分项(D) F = kd*dx/dt = kd*v,所谓”微分”指的是位置x对时间的微分,说白了就是速度。

意思就是当速度越大,就产生一个反向的力使速度减小,这样就可以防止出现上面小球冲过去的。

可以认为这一项具有”预测”功能,预测小球下一时刻的状态从而提前做出反应(预测小球将要到达L处,提前减速),

也可以认为这一项具有阻尼作用,相当于系统中有一个和速度成比例的阻尼力。

这个”阻尼力”调得过小会导致欠阻尼状态,调得过大会导致过阻尼状态。

积分项此时可以不用,积分项是当平衡位置x0不等于L时使用的,

当平衡位置不是L处,那么当小球静止在平衡位置x0时,由于在坡道上会有一个恒定的横向偏移力,此时比例调节作用为0(Δx=0),微分调节作用也是0(v=0),所以小球在该处无法平衡,会在更远离平衡位置处达到平衡,那么就会有一个长时间存在的偏差。

积分作用就是检测偏差进行累积,对于上面这个长时间存在的偏差进行积分(累积叠加),使系统在长时间范围可以稳定在要求的平衡位置。

三、平衡自行车-实践篇

在本文将会介绍平衡自行车的具体制作过程,包括机械、电路和代码。

平衡自行车完整的代码托管在https://github.com/nicekwell/balance_bike

上GitHub网站卡的同学也可以在文末下载打包好的文档。

一、材料

机械

名称 数量 备注
铜柱、铁丝、胶枪等基础材料和工具 若干
辅助用具,果果小师弟
自行车架 1 自己做车架是很麻烦的,我是直接买的车架,淘宝上搜”自行车 拼装 DIY”能搜到很多
舵机 1 转向用的,对于我用的1:6车架,普通舵机有点大,我用的是9g舵机
N20电机 1 选扭力大一点,这样转速会比较稳定
皮带轮和皮带 1 如上面的图片,我是用皮带来传输动力的

电路

名称 数量 备注
电池、电池盒

lm1117-3.3 1 降压芯片给控制系统供电
stm32f103c8t6核心板 1
gy521模块 1 加速度传感器 + 陀螺仪
升压模块 1 升到12v给电机供电,根据电机特性选择是否使用升压模块
8050三极管板 1 驱动电机,由于自行车不需要反转,所以不需要使用电机驱动芯片,用三极管就能方便地实现。我用了两个三极管并联提高功率。
开关 1 整个系统开关
led指示灯 1 配合1k限流电阻
蓝牙模块 1 可选,如果想要遥控的话就使用蓝牙

二、动力部分

传动方式

如图,我用的是皮带或者齿轮传送的方式,因为比较好实现。

电机选择

这个DIY是不考虑变速情况的,平衡的参数都是按照一个固定速度调的。

所以动力部分的作用就是提供一个恒定的速度,并且这个速度尽可能稳定,尽可能不受外部影响。

电机应选择扭力大一些、转速稳定的减速电机。

电机供电

电机是直接供电还是使用升压模块供电要根据电机特性,有些电机用升压模块可以提高功率,有些大电流电机用升压模块反而可能限制了电流。

我这里用升压模块升到12v给N20电机供电的。

另外,电机通过三极管受stm32控制,通过控制占空比也可以限制电机输出的功率。

三、转向部分

转向部分用一个舵机带动把手转动即可。

四、电路

在GitHub工程里有详细的引脚连接表

https://github.com/nicekwell/balance_bike

供电

  • 用3.3v稳压芯片给整个控制系统供电,包括单片机、GY521模块、蓝牙模块。

  • 用5v稳压芯片给舵机供电。

  • 用12v升压模块给电机供电。

下载

我是用串口给stm32下载程序的。

引脚 功能
PA9 下载TXD
PA10 下载RXD

GY521

这个模块通过i2c通信,只需要连接4根线。

  • 3.3v

  • GND

  • PB0    GY521 I2C SCL

  • PB1    GY521 I2C SDA (用的是IO模拟i2c)

电机

点击用12v升压模块供电,由于不需要反转,用三极管即可直接驱动,电路图如下:

加三极管的目的是为了可以通过调节PWM占空比来限制输出功率,但我的实际情况是100%输出时动力才勉强足够。所以如果你不需要限制电机输出功率,或者通过其他方式限制输出功率,也可以不要三极管,不通过单片机控制。

舵机

舵机是用5v供电的,而单片机是3.3v电平,对于pwm控制脚可以通过2个三极管实现同相的电平转换:

蓝牙模块

下图是我使用的蓝牙串口模块,可以实现串口透传,只需要4根线连接:vcc、gnd、txd、rxd。

蓝牙模块是用来调试和遥控的,没有它也能跑。建议还是加上这个模块,在调试PID擦数时会非常方便。

五、代码结构

代码提交在GitHub

https://github.com/nicekwell/balance_bike

主要分为3个部分:

1、基础的驱动程序,实现电机、舵机、gy521数据读取;

2、平衡控制系统,核心是一个20ms定时器,每20ms进行一次数据采集、计算和响应;

3、遥控和调试系统,实现log输出、接收遥控信息。

名称 文件 功能(智果芯)
i2c i2c/i2c.c, include/i2c.h IO 模拟i2c驱动,提供i2c基础操作
gy521 gy521/gy521.c, include/gy521.h gy521模块驱动,基于i2c驱动,提供加速度和角速度的读取接口
motor motor/motor.c, include/motor.h 电机驱动,提供占空比控制接口
angle angle/angle.c, include/angle.h 舵机驱动,提供角度控制接口

平衡控制

main函数会初始化一个定时器20ms中断一次,调用 main/balance.c 里的 balance_tick 函数,平衡算法在 main/balance.c 实现。

每20ms到来会执行一次:

  • 读取传感器加速度和角速度信息。

  • 互补平衡滤波计算当前姿态。

  • 用PID算法计算出前轮转角。

遥控和调试

两部分:状态输出和指令接收。

状态输出

在main函数的while循环里,利用串口中断构建一个简单的界面显示状态。

指令接收

串口接收到的数据会传给main/control.c,该文件分析串口数据,解释成相应的操作。主要是PID参数调节。

参考资料

[1]

动力老男孩: http://www.diy-robots.com/

[2]图中龙邱小车图片来自B站江小鉴、菜狗同学两位up

[3]

谈一谈单片机开发的几种调试方案: http://nicekwell.net/blog/20170411/tan-%5B%3F%5D-tan-dan-pian-ji-kai-fa-de-ji-chong-diao-shi-fang-an.html

[4] 代码github :https://github.com/nicekwell/balance_bike

原文链接:http://nicekwell.net/

项目作者: 老倪

转载请务必注明项目出处与原作者信息


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章