“Microduino 自平衡小车/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
材料清单
Pkj讨论 | 贡献
文档
第52行: 第52行:
 
L298N说明:
 
L298N说明:
  
测试程序:
+
测试程序:https://github.com/Microduino/Microduino_Tutorials/tree/master/Microduino%20Car
  
 
Kalman滤波函数库:https://github.com/TKJElectronics/KalmanFilter
 
Kalman滤波函数库:https://github.com/TKJElectronics/KalmanFilter

2014年5月4日 (日) 09:32的版本

概述

  • 项目名称:Microduino自平衡车
  • 目的:是两轮小车自动保持平衡
  • 难度:中高
  • 耗时:4小时
  • 制作者:Microduino Studio-ray

材料清单

  • Microduino设备
模块 数量 功能
Microduino-Core 1 核心板
Microduino-FT232R 1 下载程序
Microduino-10dof 1 获取角度
  • 其他设备
公母头杜邦线 6 连接电机和Microduino
跳线 若干 连接电路
L298N电机驱动板 1 驱动电机
9V干电池 1 给电机和Microduino供电
9V干电池的电源线 1 连接电池和电机驱动板
减速电机 2 驱动电机
轮子 2 平衡车的轮子
木板 1 用于固定轮子,做为横梁
螺丝,螺母 若干 固定电机,轮子
橡皮筋 若干 固定Microduino,L298N

文档

L298N说明:

测试程序:https://github.com/Microduino/Microduino_Tutorials/tree/master/Microduino%20Car

Kalman滤波函数库:https://github.com/TKJElectronics/KalmanFilter

调试

  • 步骤一:组装固定电机,轮子于横梁,然后找四根电线连接电机。

组装好后看起来像这样:


  • 步骤二:连接L298N电机驱动板,Microduino,电机,电池。

L298N电机驱动板的引脚功能图如下:

按着图中的指示把线连后看起来像这样:


  • 步骤三:把连接好的电路和设备固定到平衡车的横梁上

首先先把L298N固定在横梁上,用两个橡皮筋,看起来像这样

在本例中,我们采用9V干电池来给L298N和Microduino供电,因为此电池使用和购买很方便:


接下来要固定Microduino了,一共有三个Microduino的模块,分别是:

    • Microduino-Core
    • Microduino-FT232R
    • Microduino-10dof

堆叠在一起,在这里要注意10dof的x轴的方向,因为这个例子是以x轴作为基准获取角度来控制小车平衡的,如果方向不正确,自平衡车会无法平衡的。

用来确定x轴的方向你可以在代码里获取角度的位置进行串口输出,在串口中观察x轴的角度变化,确定方向后,平移到小车的横梁上,并用橡皮筋固定好。

固定好后看起来像这样:

好了,以上是硬件部分,下面是软件部分了。

  • 步骤四:介绍一下平衡车的基本原理:

平衡车之所以可以自己掌握平衡,首先使用了10dof里的加速度和陀螺仪测出的数据通过kalman滤波算法算出一个实时的角度。

平衡的角度是180度,如果测出的角度偏离的180通过PID进行调整输出相应的PWM值给电机,从而保持小车平衡。

PID原理有点像锅炉房里烧锅炉,首先定下来锅炉的恒定温度,比如26摄氏度,锅炉房里的墙上有一个温度计,实时测得锅炉的当时温度。

锅炉房里通常有个老大爷时不时(每十分钟看一次)的看着墙上的温度计,如果温度高了就给锅炉降温,低了就给锅炉升温。

如果让一个没有经验的年轻小伙子来管理锅炉的温度,可以想象温度表的值会上下浮动的,有经验的老大爷会把这个浮动降到最低。

其实PID就是这个烧锅炉的例子,在代码中就有这个故事的影子:

    • 规定的26度就是setpoint
    • 当前的温度就是CurrentAngle
    • 实际值与26度的偏差就是error
    • 没有经验的小伙子有点像PID中的P
    • 有经验的老大爷相当于PID了
    • 每十分钟看一次相当于PID计算的周期时间

在测试程序中看找找这些影子,体会一下PID控制吧。

  • 步骤五:代码中的函数说明:

Pid()//PID算法

Dof()//通过Kalman滤波计算当前角度

Motors()//控制电机转速

stop()//当角度达到180度时,电机停止

  • 步骤六:下载代码:

下载Kalman滤波函数到你的IDE的libraries中,重启你的IDE,下载测试代码到Microduino中。

  • 步骤六:观察电机旋转方向,用手倾斜小车,看看电机旋转方向是不是与倾斜方向相同,有可能是相反的,所以你需要调整电机的正负极,或者修改Motors()函数里的电机转动方向。
  • 步骤七:好了,看看你的小车运作的怎么样吧,有可能还不稳定吧,那就要调整P, I, D 三个参数的值了,下面是一些调整PID参数值得经验了:

网上广泛流传的PID参数调整的口诀:

参数整定找最佳,从小到大顺序查

先是比例后积分,最后再把微分加

曲线振荡很频繁,比例度盘要放大

曲线漂浮绕大湾,比例度盘往小扳

曲线偏离回复慢,积分时间往下降

曲线波动周期长,积分时间再加长

曲线振荡频率快,先把微分降下来

动差大来波动慢。微分时间应加长

理想曲线两个波,前高后低4比1

一看二调多分析,调节质量不会低。

结果

平衡车已经有了自己掌握平衡的趋势了,看的出来它很努力的保持平衡,像孩子学走路一样。

注意问题

  • 注意Microduino-10dof模块x轴的方向一定要摆放正确
  • 注意焊接电机的导线
  • 代码中I2C.ino不要删除
  • 在给Microduino考代码时最好把5v的跳线去掉,考好代码后再接上

视频

http://v.youku.com/v_show/id_XNzA2NzgxMjM2.html

http://v.youku.com/v_show/id_XNzA2Nzg3Nzgw.html

http://v.youku.com/v_show/id_XNzA2Nzk0MDI0.html

http://v.youku.com/v_show/id_XNzA2Nzk4ODQ4.html