一份完整的平衡车制作文档 [uC-OS II, Virtual COM,MFC C++, OpenGL]
本帖最后由 xymeng 于 2012-6-5 21:54 编辑我是学计算机的,闲暇之余也会做一些和电路有关的东西。去年暑假我对平衡车产生了兴趣,开始搜集各方面的资料,在这个论坛也学习了不少前辈的经验。下面我就分享一下我的成果吧。
对平衡车的制作,主要问题是车体状态的获取和PID参数的设置。在车体状态的获取方面,我使用的是基本的MMA7260加速度计和X3500W陀螺仪。X3500W我个人不推荐,因为没有官方的datasheet,不过由于其特性与ENC-03相似,我也就进行了些测试来估算其参数。事实证明效果还是比较理想的。PID的选取我参考了NXT-Way GS的模型。具体的应用请看源代码。
下面我简要介绍一下整个系统各部分的硬件和软件架构和实际的图片。
由于我非电子专业,身在国外受条件所限,有些零件的选择我不得不做出取舍。很多元件其实有更好的替代,大家不妨以批判性的眼光来看待。
首先是平衡车本身:
http://www.comp.nus.edu.sg/~xiangyun/segway3r/body.png
有经验的朋友通过这张图应该能够了解车是如何工作的。你可以对照源代码和原理图来验证。
有几点大家可能有兴趣:
(1) 我用了AD7899作为ADC。其实7899很贵,而且其精度和STM32自带的差不多(AD7899是5v 14bit版本)。为什么我要用这个呢?其实我用这个很大程度上是为了测试。在自带ADC下,我发现无线通信会影响ADC的读数大概十几个单位,所以我想外部ADC会受到较小干扰。鉴于我是免费得到的样片,所以焊接上后也无意再取下。
其实到现在我仍然很好奇是什么因素使得无线通信会影响ADC。由于手头无示波器,所以也很难找出原因。
(2) 我用了一个STM8S作软开关。其实用一些基本的零件也应能做到。但是考虑到手头零件不全,也就拿STM8S充数了。不过从另一方面,STM8S增加了扩展性。
(3) 我用了STM8S来作为马达控制器。这主要是参考了乐高NXT的设计,使得马达控制模块可以不加修改地用到其他地方。
(4) 我用了MMA7260和ADXL203分别作了测试,感觉实际效果差不太多。
(5) NRF905使用DMA模式与主控制器通信,是为了提高效率。
(6) 主控制器使用uC-OS II,以便于扩展。代码结构也更为清晰。
车体图片:
主控制器
http://www.comp.nus.edu.sg/~xiangyun/segway3r/pic/DSCN2969.jpg
马达控制器
http://www.comp.nus.edu.sg/~xiangyun/segway3r/pic/DSCN2966.jpg
电源
http://www.comp.nus.edu.sg/~xiangyun/segway3r/pic/DSCN2967.jpg
装配在一起测试
http://www.comp.nus.edu.sg/~xiangyun/segway3r/pic/DSCN2983.jpg
加装外壳
http://www.comp.nus.edu.sg/~xiangyun/segway3r/pic/DSCN3466.jpg
http://www.comp.nus.edu.sg/~xiangyun/segway3r/pic/DSCN3467.jpg
http://www.comp.nus.edu.sg/~xiangyun/segway3r/pic/DSCN3340.jpg
电池为Dual Sky 14.8v 1.7Ah 锂聚合物电池,装在车子的底座上。
http://www.comp.nus.edu.sg/~xiangyun/segway3r/pic/DSCN3465.jpg
下面是PC通信部分
http://www.comp.nus.edu.sg/~xiangyun/segway3r/receiver.png
通信部分我仍使用了一颗STM32F103ZE,通过DMA与NRF905相接,通过虚拟串口与PC相连。虚拟串口的好处是高的数据吞吐率和更强的稳定性,因为实际的传输格式是USB。
当然,你完全没有必要使用STM32103ZE这种级别的MCU,但由于我当时只有这种,所以也没办法。
http://www.comp.nus.edu.sg/~xiangyun/segway3r/pic/DSCN3477.jpg
http://www.comp.nus.edu.sg/~xiangyun/segway3r/pic/DSCN3481.jpg
PC端调试软件
http://www.comp.nus.edu.sg/~xiangyun/segway3r/monitor.png
其实我相当大的一部分精力都放在这里了。一个实时调试的软件对于平衡车这样的动态系统是相当重要的。为此需要设计一份通信协议和编写一些可视化的程序。另外通信部分必须放在另一个线程里,这样才不会干扰UI的更新。
这个调试软件的优点在于可以在任意时刻启动和断开通信,而不会影响车体本身。所有参数都可以随时调整,以实时观察车体的状态变化。
程序的稳定性经过考验,运行3个小时直到车体没电也没有出现问题。
整个程序是用MFC C++写的,使用的都是Windows底层API,可视化部分用了OpenGL 和 FreeType。程序有着良好的构架,而且比较简洁,有兴趣可以参考。
http://www.comp.nus.edu.sg/~xiangyun/segway3r/pc.png
源代码和原理图(注意,原理图是不完整的,只包括必要部件。所有电路都是我手工焊接,画原理图主要是有助于我参考连线方式。)
另:马达控制的STM8S源代码我找不到了,等找到了再发上来。其实通过看通信协议自己写一个并不难。
PC调试软件请用Visual Studio 2010打开。
本帖最后由 yyt1372 于 2012-6-5 21:42 编辑
真漂亮,令人心动 哇,不错,谢谢分享,嘻嘻 速度是由电机控制的,那么这个控制平衡的是什么?
哇,不错,谢谢分享 {:lol:} 漂亮的平衡车!!!! 真漂亮!谢谢分享! 非常漂亮 哥们你的PID 怎么调节的呢?
不得不赞一下,哎,差距好大! 赞一个。。。。 谢谢楼主,有时间学习,估计内容很多 看着和给力啊,有机会倒腾一下。 mark{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:} 车子很漂亮,楼主做的不错。 羡慕啊。我相信,只要够努力,没有做不出来的东西! 漂亮{:lol:} ddddddddddddddddddddddd 漂亮我有一套元器件不知道怎么编程序 漂亮啊{:smile:}{:smile:} 有视频吗?传个看看{:lol:} 学习了,不错 楼主你好,可以交流吗?有没有邮箱或者qq我的是87689136 非常好,学习了 这个车吃的好胖。。。赞上位机程序 按键很唯美,很好 不错,很好看 学习了,MARK。 平衡车MARK。 学习!!!{:sad:}{:sad:}{:sad:} 楼主的上位机真心漂亮!赞一个! mark平衡车 不错的资料 支持楼主 不错 这个要支持 上位机还是用C# WPF之类的省事 楼主这风格像是在国外呀 做的很好,顶一下 界面相当不错~~~~~~~~~~~~~ mark 做的非常不错,要是有一段演示视频给大家看看就更好了。 学习学习,顶个~ 漂亮啊
楼主水平牛逼...佩服下 顶楼主
请问楼主此款小车的轮子从哪里买的??? 谢谢我也准备用STM32做一个平衡车,电机用的和楼主一个型号的(*^__^*) 嘻嘻…… 很强大 mark 赞。标记一下,防止以后找不到。 收藏先,楼主是说他在国外对吧~~~~~~~~ 结构很好. MARK, 楼主,你用的电机什么型号的?在哪里买的?自带编码器么? 遇到高手 楼主,这成本的多少啊 楼主确实强,不知道楼主这些件都在哪里买的? 楼主在国外还有空搞这些啊,不错 整体成本并不高。
外壳+电路板 60 元
两个马达 200 元
陀螺仪 30 元
加速度计 30 元
控制器 两个STM32 80 * 2 = 160 元
子控制器 三个STM8 2 * 3 = 6 元
通信 两个 NRF905 55 * 2 = 110 元
开关降压 8 元
运放,电阻,电容等 30 元
AD7899 很贵,但是可以用自带的ADC,成本忽略
材料总体成本 634元 有人想看视频,所以我上传了一段。
用PS3的无线控制器遥控。
注意:这个是改进过的,与上传的程序稍有不同。
http://v.youku.com/v_show/id_XNDg5MDMwMjcy.html 真心不错 楼主做的很好啊,很漂亮 楼主哪买的电机 mark!!!! 很不错,有机会折腾一个{:lol:} 371278638 发表于 2012-10-29 19:39 static/image/common/back.gif
谢谢我也准备用STM32做一个平衡车,电机用的和楼主一个型号的(*^__^*) 嘻嘻…… ...
你好,问一下你打算用哪款stm32做,我也是准备用arm做,谢谢。 楼主很强大,向楼主学习! 你好。能把你qq给我吗?我也准备做一个这样的小车。。。 你好,在吗?我也准备仿照你的做一个。有很多不懂得东西,我想问问你。可以吗?
楼主的按钮漂亮,是什么型号的? 350247764 发表于 2013-4-14 21:03 static/image/common/back.gif
你好,在吗?我也准备仿照你的做一个。有很多不懂得东西,我想问问你。可以吗?
...
有问题 问吧,我们也可以板凳听课。知道的还可以举手发个言。{:lol:} MARK顶顶 一看那个电机就感觉到差距了。 学习一下 顶OpenGL应用! mark!! mark一下。。。。 多谢分享,学习下了, 东西比较豪华啊,做板子挺美观的,视频里看效果也非常好 这么好的帖子果断要顶顶 这贴以前就看过,不错,顶起。 谢谢分享 谢谢分享。 卖不啊???? 哈哈哈哈哈哈哈哈哈哈哈哈 mark!!!!!! 不错…… 想买楼主的小车,卖不卖? 高端 大气 上档次阿 很棒的 小车 强贴留名
强贴再留名 不错不错,顶一下!!! 论坛 牛人真多 楼主你好 请帮我看下这个帖子 谢谢你了 http://www.amobbs.com/thread-5623212-1-1.html 为什么要用uC-OS II 啊?不用不是也可以调节PID~ 真是抬高大上了! 如果能使用无刷电机声音就会很小了 留名················· 收藏了。谢谢楼主分享! 楼主很强,我觉得上位机软件比较有价值 亲,你好,想问下,你这里还涉及到操作系统? 厉害 顶一下,确实不错 感谢楼主奉献
页:
[1]
2