“Microduino 自平衡小车/zh”的版本间的差异
(→调试) |
(→材料清单) |
||
第44行: | 第44行: | ||
|- | |- | ||
|橡皮筋||若干||固定Microduino,L298N | |橡皮筋||若干||固定Microduino,L298N | ||
− | + | |- | |
|} | |} | ||
− | |||
==文档== | ==文档== |
2014年5月4日 (日) 06:06的版本
概述
材料清单
文档L298N说明: 测试程序: Kalman滤波函数库:https://github.com/TKJElectronics/KalmanFilter 调试
组装好后看起来像这样:
L298N电机驱动板的引脚功能图如下: 按着图中的指示把线连后看起来像这样:
首先先把L298N固定在横梁上,用两个橡皮筋,看起来像这样 在本例中,我们采用9V干电池来给L298N和Microduino供电,因为此电池使用和购买很方便:
堆叠在一起,在这里要注意10dof的x轴的方向,因为这个例子是以x轴作为基准获取角度来控制小车平衡的,如果方向不正确,自平衡车会无法平衡的。 用来确定x轴的方向你可以在代码里获取角度的位置进行串口输出,在串口中观察x轴的角度变化,确定方向后,平移到小车的横梁上,并用橡皮筋固定好。 固定好后看起来像这样: 好了,以上是硬件部分,下面是软件部分了。
平衡车之所以可以自己掌握平衡,首先使用了10dof里的加速度和陀螺仪测出的数据通过kalman滤波算法算出一个实时的角度。 平衡的角度是180度,如果测出的角度偏离的180通过PID进行调整输出相应的PWM值给电机,从而保持小车平衡。 PID原理有点像锅炉房里烧锅炉,首先定下来锅炉的恒定温度,比如26摄氏度,锅炉房里的墙上有一个温度计,实时测得锅炉的当时温度。 锅炉房里通常有个老大爷时不时(每十分钟看一次)的看着墙上的温度计,如果温度高了就给锅炉降温,低了就给锅炉升温。 如果让一个没有经验的年轻小伙子来管理锅炉的温度,可以想象温度表的值会上下浮动的,有经验的老大爷会把这个浮动降到最低。 其实PID就是这个烧锅炉的例子,在代码中就有这个故事的影子:
在测试程序中看找找这些影子,体会一下PID控制吧。
Pid()//PID算法 Dof()//通过Kalman滤波计算当前角度 Motors()//控制电机转速 stop()//当角度达到180度时,电机停止
下载Kalman滤波函数到你的IDE的libraries中,重启你的IDE,下载测试代码到Microduino中。
网上广泛流传的PID参数调整的口诀: 参数整定找最佳,从小到大顺序查 先是比例后积分,最后再把微分加 曲线振荡很频繁,比例度盘要放大 曲线漂浮绕大湾,比例度盘往小扳 曲线偏离回复慢,积分时间往下降 曲线波动周期长,积分时间再加长 曲线振荡频率快,先把微分降下来 动差大来波动慢。微分时间应加长 理想曲线两个波,前高后低4比1 一看二调多分析,调节质量不会低。 结果平衡车已经有了自己掌握平衡的趋势了,看的出来它很努力的保持平衡,像孩子学走路一样。 注意问题
视频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
|