生来孤独 发表于 2014-12-11 15:27:18

DIY两轮小车全部开源(PCB+程序+......)超长~~~

本帖最后由 生来孤独 于 2014-12-11 17:32 编辑

http://v.youku.com/v_show/id_XODQ2NTIzNTky.htmlhttp://v.youku.com/v_show/id_XODQ2NDgzMjEy.htmlhttp://v.youku.com/v_show/id_XODQ2NDgwNTYw.html前段时间DIY了一辆两轮平衡小车,感觉挺有意思。很多资料都是参考的其他大神的,本着受益于开源,回馈于开源的精神。现在也把自己的做品拿出来晒晒!

故事很长,不想听的建议倒着看~~~

//********************************************************************************************************//
大二的时候就想做一辆平衡小车玩,那时刚刚学习STM32基本上编程也是瞎搞的,很多都是直接copy瞎改,效果可想而知....... 后来也不了了之放弃了   

附当时图片两张:
http://www.amobbs.com/forum.php?mod=image&aid=243764&size=300x300&key=9f81e9f9bdfd317d&nocache=yes&type=fixnonehttp://www.amobbs.com/forum.php?mod=image&aid=243766&size=300x300&key=36bde711e592c29e&nocache=yes&type=fixnone
之后就没有再考虑平衡车,知道自己渣,做不出来~~~~~

转眼暑假,没有回家,留在学校里参加暑假的大学生电子科技比赛(TI杯),那时选择了个寻找铁疙瘩的题目~~~ 说起来比较简单了呐~~~就**的个传感器,跟循迹一样的原理但没做好~~~最痛苦的是接线,用了好多的杜邦线,乱七八糟的几十根有的~~
搞到 最后看到电线头都大了~~~
再来一张~~
http://www.amobbs.com/forum.php?mod=image&aid=243777&size=300x300&key=87bdd3ca537e7a31&nocache=yes&type=fixnone
暑假过后自己也没有回家,然后就在寝室里上上网,看看书,打打游戏,出去打打篮球等~~
最重要的是学习绘制电路板,,,,,开始安装了protle99,,,越用月感觉不对劲儿~~后查了查安装了Altium Designer14之后就是宅寝室浑浑噩噩的看视频,照着比划了~~~~http://www.amobbs.com/forum.php?mod=image&aid=243778&size=300x300&key=ad99fc8c89e28275&nocache=yes&type=fixnone
当时自评价自己的一句话就是 忙忙碌碌却又碌碌无为~~~~(一个人挺伤感的...)


俗话功夫不负有心人自己画了自己的第一块板子---------STM32F10364引脚的最小系统板
{:lol:}{:lol:}{:biggrin:}

下面进入正题
static/image/hrline/4.gif
static/image/hrline/4.gif
先展示一张成品图吧:
http://www.amobbs.com/forum.php?mod=image&aid=243773&size=300x300&key=230e0a4560b22374&nocache=yes&type=fixnonehttp://www.amobbs.com/forum.php?mod=image&aid=243775&size=300x300&key=043eac53983de078&nocache=yes&type=fixnone

主控芯片选用       STM32f103RBT6
电机驱动选用      东芝TB6612
传感器模块选择      MPU6050
蓝牙模块   (能连上就行)
电源供电 12V——(7805)——5V——(1117)——3.3V

然后就是设计板子外形尺寸然后布线

上面是控制板,还有一块电源板子,用于把12V电源稳压到5V 然后输送过来,另一方面为了给小车起到支撑作用,图就不上了,最后我会把工程上传上来的。

然后是还能接电路,为了焊好这东西自己也是蛮拼的,之前先买了一些焊接贴片元件的板子,用来练手。之后为了焊接QFN封装的芯片,还买风枪和一些QFN封装的芯片的模块,拆了焊焊了拆的~~~终究也是练到了好的技术
晒晒自己手工焊好的板子吧!!!!{:lol:}{:lol:}{:loveliness:}


哇哈哈,感觉很有成就感啊~~~~

再说一下电机和电池(排除广告嫌疑~~~~)


下面开始扯一下程序算法~!!!!!!
控制算法:
1.倾角环                        得到t时刻的小车平面 和 地理水平面的夹角(正负偏差) +      此夹角                              的变化速度2.车速环                        得到小车整体的运动速度                得到小车的位移量
3.PWM输出                左右电机通过PWM驱动TB6612控制输出
定义变量:Angle_err                小车平面和地理平面的角度偏差Angle_Gyro                小车角度变化的速度      (角度偏差的变化速度【Gyro 陀螺仪】)Moto_Speed_L      小车左边电机的速度Moto_Speed_R      小车右边电机的速度Moto_Disp_L                小车左边电机的位移Moto_Disp_R                小车右边电机的位移

核心计算公式:PWM_L =(Kp_1 * Angle_err + Kd_1 * Angle_Gyro) + (Kp_2 * Moto_Disp_L + Kd_2 *Moto_Disp_L)

PWM_R =(Kp_1 * Angle_err + Kd_1 * Angle_Gyro) + (Kp_2 * Moto_Disp_R + Kd_2 *Moto_Disp_R)

核心代码注释:void IMU_GetAngle_Now_(float *Ang){
      float Angle_1;                                    float Angle_2;      short acc;                                                                存放加速度数据0,1,2, 对应XYZ轴      short gyro;                                                                存放陀螺仪数据      0,1,2对应 XYZ轴
      MPU6050ReadAcc(acc);                                        读取传感器的XYZ轴的加速度分量AD值 0~2`16      Angle_1 = atan((acc*1.0f) / (acc*1.0f));      Angle_1 计算当前的角度值 反正切      Angle_1 = (Angle_1 * 180 ) / 3.14 ;                        反三角函数计算得到的是弧度制,抓换为                                                                                        角度值      MPU6050ReadGyro(gyro);                                        得到传感器的角速度 (通过陀螺仪)
      Gyro += ( -gyro / 16.4f )*0.02 ;                              AD值 转换为角度值 计算原理参见传                                                                                        感器数据手册转换为角度值后进行积分处理0.02为积      分采样时间20ms
      Angle_2 = 0.98 *Gyro + 0.02 * Angle_1;                角度的低通滤波,以消除震动和干扰误差
      Gyro = Angle_2 ;                                                                              防止陀螺仪误差积分漂移      Ang = Angle_2+3.18;                                                Ang【0】 当前偏差角度+ 3.18 传感器                                                                                        安装偏差(零偏)      Ang = (-gyro / 16.4f) * 0.01;                              纠正陀螺仪方向 返回角速度}滤波效果图:(说真的,没搞懂卡尔曼滤波~~~~~这个效果也不差,还简单)


绿色 加速度计算角度   黄色 低通输出曲线                红色 陀螺仪跟踪曲线
输入参数 当前角度   角速度 输出参数      voidvoid IMU_Control_Gyro4(float Angle ,float Gyro){      static int speed ;      int Left , Reght ;
      if(Angle > -45 && Angle < 45)                        当前角度情况判断      {                //得到 速度 和 位移                //speed         speed_L                左边速度                          //speed   speed_R                右边速度                //speed                //speed                //speed    speed_move_L      位移L                //speed         speed_move_R                      MOTO_Get_Speed2(speed);                      //直立                Left = Angle * 75 + Gyro * 75 ;                                Reght = Angle * 75 + Gyro * 75 ;                      //叠加速度位移控制                speed = speed * 2.0 + speed * 28 ;                speed = speed * 2.0 + speed * 28 ;                //对叠加的速度位移控制做平滑输出处理                speed *= 0.09 ;                speed *= 0.09 ;                //直立控制和平滑后的速度位移控制相叠加                Left += speed ;                Reght += speed ;                //PWM通过电机驱动模块输出到电机                TIM3_Pwm_Set(Left,Reght);      }      else       {                NC = 0 ;                              关闭电机                LED1 = !NC ;                        LED关闭         }}







void MOTO_Get_Speed2 (int *V){      int I_ = 1000 ;      //得到计数器值      V =TIM_GetCounter(TIM2);                        //A0                              V =TIM_GetCounter(TIM1);                        //A12                              //计数器清零,准备下一次采样      TIM_SetCounter( TIM1,0);                /      TIM_SetCounter( TIM2,0);      //由电机当前的驱动方向,判断电机转动方向的正负,进而判断速度的正负      if(AIN_1==1)                V = -V ;      if(BIN_1==1)                V = -V ;            //对速度做平滑处理,类似之前的角度处理方法      V = V * 0.7 + V * 0.3 ;      V = V * 0.7 + V * 0.3 ;
      V = V ;      V = V ;      //左右车轮取平均值输出 使其做直线运动V【4】当前的车速      V = ( V + V ) / 2 ;      V = V ;      //速度累加 的到位移左右车轮的位移      V += V ;            V += V ;      //对位移(积分)的饱和处理 防止误差积分偏移过远 造成速度位移控制的不稳定      if(      V < -I_)      V = -I_ ;      if( V > I_ )      V =I_ ;      if( V < -I_) V = -I_ ;      if( V > I_ ) V =I_ ;      //增加小车的位移控制量 前进 后退 左转 右转      V = V + MOTO_SPEED_L ;      V = V + MOTO_SPEED_R ;}




void TIM3_Pwm_Set(int LL,int RR){      **************************************************      if(RR<0)                AIN_1=1,AIN_2=0;      else                AIN_1=0,AIN_2=1;
      if(LL<0)                BIN_1=1,BIN_2=0;      else                BIN_1=0,BIN_2=1;      **************************************************      LL = abs(LL)+25;                        增加控制死区      RR = abs(RR)+25;
      if(LL>=999) LL=999;                控制饱和处理      if(RR>=999) RR =999;
      TIM_SetCompare2(TIM3,LL);                电机对应的PWM通道输出      TIM_SetCompare1(TIM3,RR);}
中断判断标志位:
if(TIM4_IMU)                        {                              IMU_GetAngle_Now_(IMU);                              IMU_Control_Gyro4(IMU,IMU);                                 TIM4_IMU=0;                        }
最后再上一张示意图,,,,,有点抽象,自己画的
嗯,,,,,,,,,该说的都说完了~~~上电,烧程序,小车跑起来了~~~
下面2楼上传视频和工程代码.........(不要和我抢!!!!!)

static/image/hrline/4.gif



关于遥控,自己只做了按键的控制,没有再做6050的姿态控制,本打算通关按键切换控制模式,既可以按键控制也可以6050姿态控制(类似空中鼠标把),后来事情有点多,拖一拖,回头再弄,大体上已经完成!!!!小车一些参数可能还要再细细调一调!!!!!



画了多少钱????
八九百吧~~~~~乱七八糟的,打板子画了400大样,有很多设计废的~~~~   买芯片什么的,差不多就是这个数!!!不过感觉还是很值得的!!!远比要买一个现成的划算得多!!


写的哼乱啊啊~~~
资料在七楼和十楼!!!!

cu_ice 发表于 2014-12-11 15:30:46

{:lol:}{:lol:}很多图片都看不到

shower.xu 发表于 2014-12-11 15:30:54

你说你是多想被XX啊

霸气侧漏 发表于 2014-12-11 15:33:02

你的图片挂了

zjk 发表于 2014-12-11 15:33:18

谢谢LZ的分享哈,不过貌似图全挂了。。。

zjk 发表于 2014-12-11 15:34:59

本帖最后由 zjk 于 2014-12-11 15:38 编辑

LZ换个图库吧

生来孤独 发表于 2014-12-11 15:50:39

工程文件:

遥控好像暂时上传不了了~~~视频太大,上传到优酷待审核中

生来孤独 发表于 2014-12-11 15:52:20

zjk 发表于 2014-12-11 15:33
谢谢LZ的分享哈,不过貌似图全挂了。。。

是吗?????{:funk:} 我再看看

zysblog 发表于 2014-12-11 15:55:53

生来孤独 发表于 2014-12-11 15:52
是吗????? 我再看看

你的图片直接从QQ空间上复制链接过来的,被屏蔽了,把图片直接上传到论坛吧。你自己可能发现不了,用另一个浏览器,或另一个电脑,也许就发现问题了。

生来孤独 发表于 2014-12-11 15:56:27

生来孤独 发表于 2014-12-11 15:52
是吗????? 我再看看

遥控程序和遥控PCB与原理图

生来孤独 发表于 2014-12-11 15:57:17

zysblog 发表于 2014-12-11 15:55
你的图片直接从QQ空间上复制链接过来的,被屏蔽了,把图片直接上传到论坛吧。你自己可能发现不了,用另一 ...

谢谢,提醒,阿莫就没有个截图的工具吗

zjy9430 发表于 2014-12-11 15:58:05

图片几乎全挂了

zysblog 发表于 2014-12-11 15:59:54

生来孤独 发表于 2014-12-11 15:57
谢谢,提醒,阿莫就没有个截图的工具吗

给你个超级好用的截图工具:FSCapture .该软件支持滚动屏幕截图,非常强大,截完图后,可以进行简单编辑。阿莫论坛,应该不支持编辑状态下截图,没发现。

luweiqi1995 发表于 2014-12-11 16:05:25

你的图挂了

sl961102 发表于 2014-12-11 16:11:56

真的不错,也在做类似的东西,

aragon 发表于 2014-12-11 16:15:54

赞赞赞赞赞赞赞赞,,,,很不错,生命在于折腾。。。。。。。

dxzky 发表于 2014-12-11 16:18:37

相当赞~如果能再编辑一下就好了,看着很乱感觉

2013的弹子球 发表于 2014-12-11 16:29:02

哈哈,TI的那个金属探测是吧我黑龙江的也做了

eva015401 发表于 2014-12-11 16:29:40

羡慕楼主大学有如此好的宿舍

Vampireyifeng 发表于 2014-12-11 16:34:12

楼主的皮鞋好酷的样子{:biggrin:}{:biggrin:}

ZXF_CUG 发表于 2014-12-11 16:38:45

不错~~~·

ZXF_CUG 发表于 2014-12-11 16:39:06

不错~~~~~~~~

fuquan_dai 发表于 2014-12-11 19:01:52

楼主电机的广告还是可以做一做的嘛。。。淘宝上有吗?

生来孤独 发表于 2014-12-11 20:21:31

eva015401 发表于 2014-12-11 16:29
羡慕楼主大学有如此好的宿舍

我们寝室是真个楼栋最差的~~~{:lol:} {:lol:}

生来孤独 发表于 2014-12-11 20:22:02

Vampireyifeng 发表于 2014-12-11 16:34
楼主的皮鞋好酷的样子

迪卡侬的运动鞋好不好~~~

yhx669321 发表于 2014-12-11 20:41:50

这电机没霍尔?

tjagen 发表于 2014-12-11 22:19:21

顶一把,顺便mark

sisia 发表于 2014-12-11 22:35:28

好东西,这一套大概要多少钱,不做板子,手焊的话,一直想做一个,好久不干电子了,没时间研究啊。。。。

sisia 发表于 2014-12-11 22:36:46

还有一个问题 我没有示波器啊 能做吗

wangzh 发表于 2014-12-11 22:49:27

做了一次小车已经对你很熟了!{:biggrin:}

liyang121316 发表于 2014-12-11 23:40:17

谢谢分享 ,学习了!

生来孤独 发表于 2014-12-14 11:48:14

sisia 发表于 2014-12-11 22:36
还有一个问题 我没有示波器啊 能做吗

完全可以的!!!

Ray______ 发表于 2014-12-14 12:10:06

.速度控制不是调pi的吗

might2014 发表于 2014-12-14 21:24:20

感谢楼主的分享,刚看了楼主的程序和原理图,二者有出入,程序中定义的引脚和原理图中不一致。。。

RudeBoy 发表于 2014-12-14 21:49:36

不错,做的很认真,你的车子用这个电机速度能起来么?

QW993523 发表于 2014-12-14 22:18:44

问一下 楼主减速电机的型号是什么 最好给一下淘宝链接{:kiss:}

tiantang46800 发表于 2014-12-19 11:37:48

楼主的这个厉害,值得学习!!!!

生来孤独 发表于 2014-12-22 13:44:56

RudeBoy 发表于 2014-12-14 21:49
不错,做的很认真,你的车子用这个电机速度能起来么?

速度还好吧,相比飞思卡尔他们那个嗖嗖跑的差远了~~~但也不满

生来孤独 发表于 2014-12-22 13:48:01

might2014 发表于 2014-12-14 21:24
感谢楼主的分享,刚看了楼主的程序和原理图,二者有出入,程序中定义的引脚和原理图中不一致。。。 ...

一个是遥控的,一个是小车的   二者PCB和程序都有上传,,可能你看差了吧,,,,,

1139193886 发表于 2014-12-22 20:03:04

很不错的作品哦,谢谢共享

fengyunyu 发表于 2014-12-22 20:54:48

生来孤独 发表于 2014-12-22 13:44
速度还好吧,相比飞思卡尔他们那个嗖嗖跑的差远了~~~但也不满

速度差别的原因是因为选的电机么?

L7科创 发表于 2014-12-22 21:39:04

顶一把,顺便mark

HYLG 发表于 2014-12-23 00:08:20

做的真心不错。高手都是钻研出来的。

xiong57785 发表于 2014-12-23 15:50:07

确实好长.....   楼主宿舍不错哈。。。 有车有床有沙发

生来孤独 发表于 2014-12-24 10:55:06

fengyunyu 发表于 2014-12-22 20:54
速度差别的原因是因为选的电机么?

恩,本身电机为了增加扭矩就减慢了速度极限速度跑不快,,,,,,,我感觉不安装减速器直接拿电机驱动也可以的!!

sunnyczp 发表于 2015-1-14 11:27:16

好象是在校生,又一力作呀!

江湖笑 发表于 2015-1-15 19:43:44

楼主你那遥控器上的摇杆按键哪儿买的?

123bac 发表于 2015-1-16 12:57:16

支持楼主的开源精神,我也在做类似的,有空一起交流啊1164512033{:handshake:} {:victory:}

生来孤独 发表于 2015-4-7 14:26:31

江湖笑 发表于 2015-1-15 19:43
楼主你那遥控器上的摇杆按键哪儿买的?

T宝,五相摇杆按键

生来孤独 发表于 2015-4-7 14:37:35

今天自己下来看看之前上传的小车PCB好像传错了,现在补上

laylovesb1314 发表于 2015-4-26 14:50:49

好贴!不错!

32MCU 发表于 2015-5-12 11:12:24

顶一下,不错!

cndavy 发表于 2015-5-13 05:48:57

记号笔

liaoze22 发表于 2015-5-13 14:04:43

很好,谢谢分享

liaoze22 发表于 2015-5-13 16:25:01

楼主QQ号多少?想向您学习,我的QQ:394519046

liu615 发表于 2015-9-28 15:44:48

非常好 学习学习

linux-0405209 发表于 2015-9-28 16:30:47

支持楼主~~很厉害吖~~

fuxinaries 发表于 2015-9-29 00:00:21

楼主挺有钻研精神的,赞一个。
有没有啥入门资料啊,感觉对于自平衡小车的原理不太懂 {:dizzy:}

jimmyxumotor 发表于 2015-11-3 22:10:48

思路讲的不错,LZ还是很棒的

mtlsh 发表于 2015-11-8 22:50:25

打算用TB6612驱动电机, 从网上找的五花八门的资料我已经懵了。请教一下LZ,对TB6612的输入,
主控是输出两路PWM给 PWM_A、PWM_B,用GPIO控制 AIN_1、AIN_2、BIN_1、BIN_2;
还是要输出4路PWM给AIN_1、AIN_2、BIN_1、BIN_2,用GPIO控制PWM_A、PWM_B?
       
       

生来孤独 发表于 2015-11-9 15:38:45

mtlsh 发表于 2015-11-8 22:50
打算用TB6612驱动电机, 从网上找的五花八门的资料我已经懵了。请教一下LZ,对TB6612的输入,
主控是输出两 ...

主控是输出两路PWM给 PWM_A、PWM_B,用GPIO控制 AIN_1、AIN_2、BIN_1、BIN_2控制方向

a85921819 发表于 2015-11-12 15:58:28

大神你好 最近我也在做平衡小车, 但是无论如何直立环都立不起来
调了2天了,你能方便和我讨论下吗,谢谢了

生来孤独 发表于 2015-11-14 16:53:59

a85921819 发表于 2015-11-12 15:58
大神你好 最近我也在做平衡小车, 但是无论如何直立环都立不起来
调了2天了,你能方便和我讨论下吗,谢谢 ...

控制工程不太懂,全凭感觉~~

sunnyczp 发表于 2016-1-20 11:11:28

控制工程不太懂,俺也是全凭感觉~~
页: [1]
查看完整版本: DIY两轮小车全部开源(PCB+程序+......)超长~~~