xymeng 发表于 2012-6-5 21:32:25

一份完整的平衡车制作文档 [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:38:57

本帖最后由 yyt1372 于 2012-6-5 21:42 编辑

真漂亮,令人心动

qqhjq451506709 发表于 2012-6-6 14:26:09

哇,不错,谢谢分享,嘻嘻

x11223y 发表于 2012-6-6 17:57:54

速度是由电机控制的,那么这个控制平衡的是什么?

stm8s 发表于 2012-6-6 18:46:37


哇,不错,谢谢分享 {:lol:}

l09046162 发表于 2012-6-6 20:14:33

漂亮的平衡车!!!!

shanyan 发表于 2012-6-6 20:17:17

真漂亮!谢谢分享!

无意间 发表于 2012-7-7 00:14:21

非常漂亮

ldh0504 发表于 2012-7-8 20:32:43

哥们你的PID 怎么调节的呢?

jesonsyj 发表于 2012-7-9 14:34:09

不得不赞一下,哎,差距好大!

zm6605 发表于 2012-7-9 20:01:20

赞一个。。。。

weixinal 发表于 2012-7-9 20:25:37

谢谢楼主,有时间学习,估计内容很多

jamie_zheng 发表于 2012-7-9 20:32:22

看着和给力啊,有机会倒腾一下。

largeboss 发表于 2012-7-31 17:00:31

mark{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}

fdcnuaa 发表于 2012-8-4 19:16:53

车子很漂亮,楼主做的不错。

Randy1022 发表于 2012-8-6 10:44:14

羡慕啊。我相信,只要够努力,没有做不出来的东西!

wanwan-mcu 发表于 2012-8-7 09:11:31

漂亮{:lol:}

mcuprogram 发表于 2012-8-7 09:30:18

ddddddddddddddddddddddd

chenteng 发表于 2012-8-10 14:26:47

漂亮我有一套元器件不知道怎么编程序

esdart 发表于 2012-8-10 15:10:10

漂亮啊{:smile:}{:smile:}

kent.c 发表于 2012-8-12 16:11:01

有视频吗?传个看看{:lol:}

yangjing29 发表于 2012-8-13 18:43:59

学习了,不错

xidao 发表于 2012-8-14 20:40:06

楼主你好,可以交流吗?有没有邮箱或者qq我的是87689136

kms2hh 发表于 2012-8-15 00:19:45

非常好,学习了

窝窝头 发表于 2012-8-15 08:58:53

这个车吃的好胖。。。赞上位机程序

linhao1581 发表于 2012-8-15 09:25:13

按键很唯美,很好

mypc16888 发表于 2012-8-31 14:15:51

不错,很好看

honphylin 发表于 2012-8-31 14:58:46

学习了,MARK。

jxglg 发表于 2012-9-14 15:22:50

平衡车MARK。

dory_m 发表于 2012-9-14 15:29:35

学习!!!{:sad:}{:sad:}{:sad:}

zhyscout 发表于 2012-9-15 13:34:35

楼主的上位机真心漂亮!赞一个!

jjj 发表于 2012-9-15 13:54:28

mark平衡车

zZ_Droid 发表于 2012-9-19 11:40:29

不错的资料   支持楼主

skystalker 发表于 2012-9-19 12:02:03

不错 这个要支持 上位机还是用C# WPF之类的省事

skystalker 发表于 2012-9-19 12:03:56

楼主这风格像是在国外呀

mytowns 发表于 2012-9-20 12:52:12

做的很好,顶一下

jacktau 发表于 2012-10-21 15:35:34

界面相当不错~~~~~~~~~~~~~

lxliang09 发表于 2012-10-21 19:37:03

mark                     

automaticdai 发表于 2012-10-21 19:42:04

做的非常不错,要是有一段演示视频给大家看看就更好了。

易水寒 发表于 2012-10-24 15:39:44

学习学习,顶个~

whxiaowang 发表于 2012-10-24 16:59:12

漂亮啊

detail2012 发表于 2012-10-29 15:15:29

楼主水平牛逼...佩服下

mawenran 发表于 2012-10-29 15:38:37

顶楼主
请问楼主此款小车的轮子从哪里买的???

371278638 发表于 2012-10-29 19:39:53

谢谢我也准备用STM32做一个平衡车,电机用的和楼主一个型号的(*^__^*) 嘻嘻……

lehemu 发表于 2012-11-11 12:48:57

很强大 mark

名字不能太长 发表于 2012-11-11 16:43:35

赞。标记一下,防止以后找不到。

llysc 发表于 2012-11-11 20:27:57

收藏先,楼主是说他在国外对吧~~~~~~~~

雕刻时光 发表于 2012-11-12 08:57:17

结构很好.

ym7205 发表于 2012-11-22 11:08:22

MARK,                     

sgzzour 发表于 2012-11-22 12:46:22

楼主,你用的电机什么型号的?在哪里买的?自带编码器么?

mmy168 发表于 2012-12-6 08:34:10

遇到高手

xyz2008 发表于 2012-12-6 08:42:13

楼主,这成本的多少啊

hmsfeng 发表于 2012-12-6 08:56:48

楼主确实强,不知道楼主这些件都在哪里买的?

liuhengpeng123 发表于 2012-12-7 17:14:48

楼主在国外还有空搞这些啊,不错

xymeng 发表于 2012-12-16 13:46:08

整体成本并不高。

外壳+电路板 60 元
两个马达 200 元
陀螺仪 30 元
加速度计 30 元
控制器 两个STM32 80 * 2 = 160 元
子控制器 三个STM8 2 * 3 = 6 元
通信 两个 NRF905 55 * 2 = 110 元
开关降压 8 元
运放,电阻,电容等 30 元
AD7899 很贵,但是可以用自带的ADC,成本忽略

材料总体成本 634元

xymeng 发表于 2012-12-16 14:09:51

有人想看视频,所以我上传了一段。

用PS3的无线控制器遥控。

注意:这个是改进过的,与上传的程序稍有不同。

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

ronic 发表于 2012-12-21 12:31:46

真心不错

kexiao 发表于 2012-12-21 21:33:09

楼主做的很好啊,很漂亮

number007cool 发表于 2012-12-25 09:38:19

楼主哪买的电机               

ommanipadmehum 发表于 2012-12-25 11:53:19

mark!!!!

jiaohaitao 发表于 2012-12-25 12:03:40

很不错,有机会折腾一个{:lol:}

沪上静悄悄 发表于 2013-1-3 23:05:42

371278638 发表于 2012-10-29 19:39 static/image/common/back.gif
谢谢我也准备用STM32做一个平衡车,电机用的和楼主一个型号的(*^__^*) 嘻嘻…… ...

你好,问一下你打算用哪款stm32做,我也是准备用arm做,谢谢。

karlandry 发表于 2013-1-3 23:19:32

楼主很强大,向楼主学习!

350247764 发表于 2013-3-20 14:27:59

你好。能把你qq给我吗?我也准备做一个这样的小车。。。

350247764 发表于 2013-4-14 21:03:56

你好,在吗?我也准备仿照你的做一个。有很多不懂得东西,我想问问你。可以吗?

185724132 发表于 2013-4-14 21:07:32

楼主的按钮漂亮,是什么型号的?

wugang_1213 发表于 2013-4-14 22:51:04

350247764 发表于 2013-4-14 21:03 static/image/common/back.gif
你好,在吗?我也准备仿照你的做一个。有很多不懂得东西,我想问问你。可以吗?
...

有问题 问吧,我们也可以板凳听课。知道的还可以举手发个言。{:lol:}

create 发表于 2013-4-15 04:53:10

MARK顶顶

皮爱了西 发表于 2013-4-15 08:55:59

一看那个电机就感觉到差距了。

好人不学坏 发表于 2013-4-15 14:55:40

学习一下

sunliezhi 发表于 2013-4-15 17:48:46

顶OpenGL应用!

阿发 发表于 2013-4-15 20:35:31

mark!!

usartcodeed 发表于 2013-6-12 19:09:06

mark一下。。。。

gzrldt 发表于 2013-6-12 20:12:04

多谢分享,学习下了,

rantingting 发表于 2013-7-2 18:37:37

东西比较豪华啊,做板子挺美观的,视频里看效果也非常好

灵魂重新 发表于 2013-7-2 20:22:17

这么好的帖子果断要顶顶

cooleaf 发表于 2013-7-2 22:10:14

这贴以前就看过,不错,顶起。

1125526801 发表于 2013-7-6 23:20:36

谢谢分享

leahcim89 发表于 2013-7-20 12:14:25

谢谢分享。

ym7205 发表于 2013-7-22 09:36:49

卖不啊????

hyh19890917 发表于 2013-7-23 10:37:37

哈哈哈哈哈哈哈哈哈哈哈哈

蓝泽亮 发表于 2013-9-9 16:46:55

mark!!!!!!

qwerwe 发表于 2013-9-15 22:45:08

不错……

cestregle 发表于 2013-9-17 21:57:09

想买楼主的小车,卖不卖?

lh5566 发表于 2013-10-5 21:18:20

高端 大气 上档次阿

小蝌蚪13925 发表于 2013-10-13 20:33:11

很棒的 小车

diskcopy 发表于 2013-10-13 20:38:55

强贴留名

强贴再留名

xl1736 发表于 2013-10-13 23:04:48

不错不错,顶一下!!!

AE007 发表于 2013-10-15 11:55:03

论坛 牛人真多

tangcangeng 发表于 2015-5-22 09:19:04

楼主你好 请帮我看下这个帖子 谢谢你了 http://www.amobbs.com/thread-5623212-1-1.html

syler 发表于 2015-5-22 10:35:05

为什么要用uC-OS II 啊?不用不是也可以调节PID~

秋夜木语 发表于 2015-5-22 10:38:32

真是抬高大上了!

哈哈嘻嘻 发表于 2015-5-30 19:29:56

如果能使用无刷电机声音就会很小了

tjniuqun 发表于 2015-5-31 19:30:15

留名·················

au8988 发表于 2015-5-31 21:40:59

收藏了。谢谢楼主分享!

smallmount3 发表于 2016-5-9 17:29:04

楼主很强,我觉得上位机软件比较有价值

mingaiting999 发表于 2016-5-10 09:04:07

亲,你好,想问下,你这里还涉及到操作系统?

xiong57785 发表于 2016-5-11 16:20:43

厉害                                       

wader 发表于 2016-5-18 16:40:44

顶一下,确实不错

hongmark 发表于 2016-5-18 16:57:29

感谢楼主奉献
页: [1] 2
查看完整版本: 一份完整的平衡车制作文档 [uC-OS II, Virtual COM,MFC C++, OpenGL]