极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 111370|回复: 62

自平衡小车的入门

  [复制链接]
发表于 2015-4-12 19:24:56 | 显示全部楼层 |阅读模式
本帖最后由 wujingyu 于 2015-4-15 10:09 编辑

自平衡小车的入门

一、引言(http://www.geek-workshop.com/for ... 14633&pid=91054

二、PID那点事(http://www.geek-workshop.com/for ... 14633&pid=91098

三、方案选择(http://www.geek-workshop.com/for ... 14633&pid=91122

四、硬件设计(http://www.geek-workshop.com/for ... 14633&pid=91166

4.1 超声波测距传感器(http://www.geek-workshop.com/for ... 14633&pid=91166

4.2 自平衡小车供电(http://www.geek-workshop.com/for ... 14633&pid=91207

4.3 电机驱动模块(http://www.geek-workshop.com/for ... 14633&pid=91218

4.4 蓝牙串口模块(http://www.geek-workshop.com/for ... 14633&pid=91224

4.5 采购清单(http://www.geek-workshop.com/for ... 14633&pid=91230

4.6 完整原理图和PCB图(http://www.geek-workshop.com/for ... 14633&pid=91231

五、结构装配(http://www.geek-workshop.com/for ... 14633&pid=91247

六、软件设计(http://www.geek-workshop.com/for ... 14633&pid=91283

七、调试(http://www.geek-workshop.com/for ... 14633&pid=91284

7.1 接地问题(http://www.geek-workshop.com/for ... 14633&pid=91369

八、总结(http://www.geek-workshop.com/for ... 14633&pid=91285


有问题也可到“零基础DIY自平衡小车”(435438082)群交流
回复

使用道具 举报

 楼主| 发表于 2015-4-14 18:57:07 | 显示全部楼层
本帖最后由 wujingyu 于 2015-4-14 19:02 编辑

七、调试

有些人急着等我帖子发完,现在把主要的内容都发上来了,但剩下的却是最为关键的调试,在调试之前你们一定要把前面的东西都消化吸收了,再进行调试。这一部分我先不急着写,希望跟大家互动着一起来写,这样内容才丰富,才有更针对性。

平衡调试完成的,请大家上照片和视频,做完的,我提供蓝牙超声自平衡小车的遥控版源代码,这个代码暂时不在这里给出了。

回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2015-4-12 19:27:29 | 显示全部楼层
本帖最后由 wujingyu 于 2015-4-14 08:19 编辑

一、引言

2014年10月18日开始接触到自平衡小车,于是就有了DIY自平衡小车的冲动了,于是在网上看到很多有关自平衡小车的帖子,在淘宝上也发现有很多现成的套件或相应的部件,这些丰富的资源极为凌乱,让新入行的人很难决策、不知如何下手。正如当下的社会一样,专家太多,而且各种专家的见解相同,甚至意见相左,弄得新入行的人更不知道怎么办了。

首先声明,我不是什么专家,只是一个过来人,走过的路多一些、时间长一些,遇到的挫折也多一些而已,所以有点自己的体会。特别是接触到现在的很多年轻人,再加上我自己也是刚刚接触自平衡小车,就有些想要说的话了,但确没有要说的具体对象,于是就在此瞎说一通,有不对的地方,请广大的“xx友”予以斧正!

做自平衡小车是要花钱、花精力的,很多新人还是学生,还没有收入,所以在花钱这方面就更犹豫了,特别是淘宝上介绍的什么价位的东西都有,好的东西贵,便宜的东西又怕不靠谱。其实,对于真正的发烧友来说,钱是次要的,他们的经验都是靠前期花费的银子积累起来的,别看他们有了经验之后,往往花点小钱就能解决大问题。关于花钱我也是一样,换个手机、吃顿饭很随便,钱花得多了去了,但是要买点这些东西就算计来算计去,一点小钱都要花费几个小时来回比较,哪怕运费贵两块钱都不愿意。我虽然做了一个这样不起眼的小东西,现在来看直接成本能控制在100元以内,但我前期来回折腾的钱统计了一下有1121.15元。所以这里介绍一些东西的目的,也是让还未有收入来源的学生们花点小钱积累更多一些的经验,从而提高“投入产出”比,我就当作你们前面的探路者之一吧。

想做自平衡小车的我接触的有下面几类人群:

1、好奇,看到这个很神奇,而且有那么多人都做成了,我也是学了这么多年了,也会不少东西了,所以我也要做一个;
2、想通过这个自平衡小车学单片机;
3、自己学的专业与此相关,所以想拿他开刀,来练练手;
4、还有就是我这样的人,没事干,又有点“经验”,拿它来消磨时间,填补自己的空虚。

无论是哪类人群,如果是第一次上手,请都不要轻敌,当然也不排除一次就蒙成功了的,东西是做出来了,但我想从中学到的东西是不会太多的。
还有很多新人都认为算法最复杂,也是最为困难的部分,其实我的看法是这部分恰恰是很简单的部分,如果前期障碍都解决了(譬如,买了一套现成的小车底盘,和一些参考资料),剩下的还真就是简单的编写(其实大部分也是抄来的)程序、调整一下参数,就成功了,其结果就是照葫芦画了个瓢!
如果,没解决前期问题,就像很多人一样,怎么调参数都调不好,因为他们只知道程序和算法,不知道的就不去分析和想办法知道,想办法去解决,就在没问题的部分瞎折腾。这是我想起一个寓言:就是灯下找钥匙,一个人看到另外一个人晚上在路灯下找东西,就问他,你找什么东西啊?那个人说,我找钥匙。你的钥匙是掉在这儿吗?他说不是掉在这儿。那你为什么要在这儿找呢,他说因为这儿有灯,看得见,别的地放没亮光,我看不见。

想做还没做的你们有些什么样的想法和看法呢?

下面给新人如何交流技术问题提个建议:

技术问题交流不能像日常生活中大妈们对话那样(这也是网络聊天的模式),简短的几个词就能表达的,就像我们单位的年轻人说话方式一样,问他某项工作的情况,他就会说一句,没问题或者说不行,话要是能这样简单说下就能很好交流的,要么是相当的高手,要么是在一起生活了几十年的两口子。

你们说行和不行,都要说清楚(注意这里的清楚二字,很多人话是说不清楚的),做了哪些工作,是怎么做的,现象是怎样的,最好是有图有数据,不要自己就给出一个结论来,因为之前的有些工作不到位,甚至有错误,这个结论是不靠谱的,结论是由听者自己来下的,而不是由说者告诉听者!!!

有些人,想问的问题也说不出来(的确有人知道,说不出来,还有些人能说出来,却写不出来),这时候你们最好上照片,上图吧,图文并茂的表达。
回复 支持 反对

使用道具 举报

发表于 2015-4-12 22:56:16 | 显示全部楼层
{:soso_e179:}期待下文
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-13 10:52:36 | 显示全部楼层
二、PID那点事

关于PID的算法,网络上资料很多,也有各种通俗易懂的解释,我这里想给大家一个只要具有初中数学、物理基础的人,就能明白的一种不甚严谨的,但容易理解的一种解释方法。
先给出一个典型的PID算法框图,如下图:


我这里先将此图简化为仅剩P控制部分的框图,至于其他的I和D部分,最后仅用两句话解释一下就行了,再也无需太多的解释了。


比例调节的公式是:u(t) = Kp * e(t),e(t) = r(t) – c(t)
其中:r(t) 是设定值,就是你想让被控系统某个参数所要保持的状态值; c(t)是系统的这个参数的实际状态值。

比例调节的过程就是即时成比例地反应控制系统的偏差信号e(t),偏差一旦产生,通过 Kp * e(t) 产生控制作用以减小偏差。理想的情况是有多大的误差,通过这个调节作用之后,就能将误差消除。但实际情况并非都是那么理想,Kp小了,修正不到位,Kp大了就会出现矫枉过正的现象。

对于自平衡小车来说,要控制的这个参数就是小车的倾斜角度,就是想办法让这个小车停在你所设定的角度上,这样小车就能稳定平衡了。

这样我们就知道了,控制的作用就是想让被控系统稳定在你所设定的某个值上。拿小车的平衡来说就是让小车的倾斜角度与其物理(就是小车不控制时,能够自然稳定)平衡角度一致,始终保持在这个倾斜状态。

对于有些结构比较好的小车,仅比例这一项,在没有大的扰动的情况下,的确就能稳定的控制小车平衡。但往往情况并非这么理想,所以还要用到积分项I或微分项D。那么实际会出现小车来回摆动,或者始终往某个方向倾斜,造成小车往一边跑,最后控制不住就倒地了。

先说说来回摆动的问题吧,来回摆动是不是就是小车有一定的倾斜转动角速度,角速度是什么呢?角速度是不是就是角度的微分(有点超出初中的知识范围了,还是改成初中能理解的语言吧,也就是说速度是不是在单位时间内的位置差)。好了,我要不想让他摆动,是不是控制这个角速度为0,是不是就不摆动了。那么,我们增加D项,就能达到这个目的,虽然不是绝对的解决,但还是明显的改善了很多的。

下面接着说始终往一边偏的问题,如果能不往一边偏,仅来回摆动,也就是这个角度一会大、一会小,一会正、一会负,经过积分(又超出范围了,长时间的角度求平均),这个角度平均值几乎是0,如果往一边偏的话,这个平均值就是某个不为0的值了,这是我们加上I项就能克服这个问题了。

啰里啰嗦的说多了,打字也打累了,赶紧总结一下结束吧。

PID控制:对于角度环来说:P是消除角度的误差,I是消除角度累积的误差,D是消除角度变化率(角速度)的误差;同理,对于速度环来说:P是消除速度的误差,I是消除速度累积(位置)的误差,D是消除速度变化率(加速度)的误差。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2015-4-13 11:16:21 | 显示全部楼层
佩服楼主的毅力。可以写一篇论文了,制成pdf供网上传阅吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-13 11:30:16 | 显示全部楼层
ofourme 发表于 2015-4-13 11:16
佩服楼主的毅力。可以写一篇论文了,制成pdf供网上传阅吧。

论文就不写了,都是瞎扯的,以前论文呀、书呀、什么成果奖啦,都是扯蛋,不愿意再干那些事了,只想跟你们聊聊实实在在的东西了,虚头巴脑的搞得人都不是人了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-13 14:39:46 | 显示全部楼层
本帖最后由 wujingyu 于 2015-4-13 15:07 编辑

三、方案选择

经历过项目开发的人员都知道,第一个首要任务就是要进行需求分析,这个需求是要认真分析的,因为需求不是一个单一不变的变量,更不是一个不变的常量。他是在一定的范围和一段时间内都要符合你的需求,满足你的需要。在做这个小车时,个人的需求也符合马斯洛的需求层次理论的。在需求分析中最重要的是要列出那些相互矛盾的方面,并且要根据自己的核心需求进行合理和有效的舍取。

那么我这里提出的自平衡小车入门,也是要满足一组特定的需求,现将其罗列如下:
1、投入的经费要低;
2、小车要能很好的实现平衡,而且是要在一定的控制下实现的自平衡,而不是那种不倒翁式的平衡(结构本身就具有的能力);
3、尽量像那些大神们一样,也能控制它前后运动和左右转动;
4、门槛要低,就是容易成功,而不是折腾得“要死的心都有了”(有些网友在调试过程中发出的感慨);
5、从中能提高自己的动手能力、提高分析和解决问题的能力;
6、能对大家觉得神奇的PID有深刻的体会。

自平衡小车无论什么方案都有以下几个部分:一是检测平衡状态所用的传感器;二是控制核心的处理器;三是执行控制动作的电机。

传感器有加速度、陀螺组合的,有用超声波测距的,还有用红外测距的;

处理器流行的有用STM32系列的,有用Arduino开源的,也还有人用最传统的51系列的;

电机有用带AB相测速输出的强动力的电机,也有用步进电机,还有用舵机的,也有用低廉的TT马达(俗称香蕉电机)。

根据上述的入门需求,我这里提供的入门方案配置如下:超声波测距传感器 + Arduino Nano控制模块 + TT马达(L298N电机驱动模块) + 7.4V/2200mAh锂电池 + 蓝牙串口无线模块。

这个方案的核心优点(除了成本低之外)是超声波测距模块,抗干扰强,不像MPU6050极容易受干扰(电磁干扰和安装位置敏感性的机械干扰),关于MPU6050的问题,大家可以在网络上看看一些新手们的烦恼(死机、数据不稳定等等)。

这个方案遭人诟病的是,“超声波测距的自平衡小车不能爬坡、不能在斜坡上平衡”,首先这里所说的不能爬坡和不能在斜坡上平衡说法本身就极为不准确,这是网络上说话不靠谱的通病,其实他们想要表达的是在坡度变化的地方,超声波测距方式的自平衡小车不是实现平衡控制。这种说法的人只是凭自己想当然的一种臆断,没有任何实际的根据,根据我的实践,这个问题通过速度环的控制是完全能够解决的。其实爬坡的关键点,是看你的电机性能如何,而不是别的什么。

在这里补充说明一点,有很多人想用这个作为学习单片机的平台,这个想法我个人觉得有点反了,要学单片机,这个平台太局限了,选择别的可能要更合适一些。

前面这三节都是务虚的,从下面开始逐渐深入到实处,有些东西因为涉及到入门,可能写得也啰嗦一些了,因为有些网友真的是一点基础(概念)也没有、从未动过手,但还是很执着的想做这个,为了照顾他们,会的人一是忍忍,另一方面也帮助帮助那些需要帮助的人吧!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2015-4-13 15:16:36 | 显示全部楼层
谢谢分享学习一下
回复 支持 反对

使用道具 举报

发表于 2015-4-13 17:59:00 | 显示全部楼层

请教一个困扰我很久的问题:单纯的比例调节,为什么不能消除静差?能用数学公式推到出来就更好了!谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-13 19:26:25 | 显示全部楼层
本帖最后由 wujingyu 于 2015-4-13 19:28 编辑

四、硬件设计

根据方案的框图,首先分别介绍各模块,由于这里主要是讨论自平衡小车,而不是学习单片机,所以与自平衡小车关系不大的单片机使用以及程序部分就不拟讨论了。按照框图顺序和硬件调试步骤,首先介绍的是超声波测距模块。

1、超声波测距模块
我们选择的超声波测距模块型号是:新款HC-SR04超声波测距模块。

这个模块的淘宝链接是:
http://item.taobao.com/item.htm? ... &_u=d79shmu6f6b


推荐用这种


不推荐用这种,就是图中红色区域有个4MHz的晶体

它的特点,我从卖家那里摘抄部分信息如下:

新款提升了IC性能,因晶振受低温环境影响,频率容易发生漂移。所以去掉了晶振。比带晶振的稳定很多,此型号为原厂原装型号,市场上大部分4块多钱的HC-SR04带晶振的那种,都是仿品性能不稳定!(通过我买的几种对比,情况的确如此,有些精度更高的,近距离运用时,效果更差)

(1)主要技术参数
工作电压:DC5V
静态电流:小于2mA
电平输出:高电平5V、低电平0V
感应角度:不大于15度
探测距离:2cm ~ 450cm
精度:可达0.3cm

(2)接线方式
VCC(电源正端)可用杜邦线接Arduino Nano模块的5V端;
GND(地)接Arduino Nano模块的GND;
Trig(控制端)接Arduino Nano模块的D4;
Echo(接收端)接Arduino Nano模块的D5。

(3)工作原理:
采用IO触发测距,给Trip控制端至少10us的高电平信号;模块自动发送8个40khz的方波,并自动检测是否有信号返回;如有信号返回,通过Echo输出一高电平,高电平持续的时间就是超声波从发射到返回的时间。

测试距离 =(高电平时间 * 声速)/ 2。


测试原理图


测试接线照片

//超声波测距模块测试程序
char val='z'; //调节与控制命令字
unsigned int TrigPin = 4, EchoPin = 5, Len_Echo = 0; //HC-SR04触发信号,回波检测,回波时间
unsigned long systime0; //上次系统时间,当前时间

//初始化
void setup() {
  Serial.begin(115200);
  pinMode(EchoPin, INPUT); //超声波测距
  pinMode(TrigPin, OUTPUT);
  digitalWrite(TrigPin, LOW);
  systime0 = millis(); //读取系统时间
}
//主循环程序
void loop() {
  if(millis() - systime0 >= 5){ //系统循环周期为5ms
    systime0 = millis();
    digitalWrite(TrigPin, HIGH); //发送超声波测量触发脉冲
    delayMicroseconds(10);
    digitalWrite(TrigPin, LOW);
    Len_Echo = pulseIn(EchoPin, HIGH); //回波时间测量
    if (Serial.available() > 0) {
      val = Serial.read();
      if(val == 'A') {
        Serial.println(Len_Echo); //超声波测距输出
      }
    }
  }
}

使用串口调试助手(sscom42.exe)发送字符“A”命令读取超声波的测距值。


程序中超声波的测量周期是5ms,一般超声波测距的测量周期远远大于这个值,但在小车平衡中,这个值不能太大,否则是不能稳定控制住小车平衡的。

串口测试界面如下图所示:


注意:串口号选择要正确,比特率要与程序中的一致(此处为115200),这里为了方便,串口输出的是字符串,发送的命令是“A”,图中用了100ms间隔的定时发送。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2015-4-13 20:11:46 | 显示全部楼层
有个问题想请教一下楼主,偏差量e(t)在经过PID叠加后会得到u(t),那么这里的u(t)又要经过怎样的变换才能得到c(t)呢?
回复 支持 反对

使用道具 举报

发表于 2015-4-13 20:12:47 | 显示全部楼层
期待下文!{:soso_e179:}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-13 20:23:24 | 显示全部楼层
四叔第一 发表于 2015-4-13 20:11
有个问题想请教一下楼主,偏差量e(t)在经过PID叠加后会得到u(t),那么这里的u(t)又要经过怎样的变换才能得到 ...

譬如,在自平衡小车控制中,u(t)就是计算出来的PID输出值,这个值转变为对电机的控制量,在直流电机中,就是控制电机的PWM值,这个输出PWM就使得电机转动,从而小车也就相应的运动,就会改变小车的倾角状态,这个新的倾角值就是c(t)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-13 20:30:27 | 显示全部楼层
z586 发表于 2015-4-13 17:59
请教一个困扰我很久的问题:单纯的比例调节,为什么不能消除静差?能用数学公式推到出来就更好了!谢谢!

数学公式表达比较麻烦,要么就是太抽象(快到哲学层次了),要么就是什么也说不明白(指导不了实际操作),你这个问题,现答复如下:由于设备的感受器的误差、效应器的误差,使得控制器并没有对系统实际存在的误差做出反应,导致最后单纯比例调节失败。
回复 支持 反对

使用道具 举报

发表于 2015-4-13 22:04:33 | 显示全部楼层
{:soso_e179:}{:soso_e179:}{:soso_e179:}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 00:25 , Processed in 0.044725 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表