智能车制作

标题: 探讨电磁组的站立,个人站立的经验总结,仅供参考 [打印本页]

作者: xcsjava    时间: 2012-2-3 23:04
标题: 探讨电磁组的站立,个人站立的经验总结,仅供参考
探讨电磁组的站立,个人站立的经验总结,仅供参考,不文明者请绕行!!!
因为图像比较难上传,整文档,带图的请自己下载附件。。[attach]17647[/attach]
一、问题电磁车要直立,需要什么?怎么利用?
①控制车模直立的直观经验来自于杂技表演。一般的人通过简单练习就可以让一个直木棒在手指尖上保持直立。这需要两个条件:一个是托着木棒的手掌可以移动(相当于电磁车的电机);另一个是眼睛可以观察到木棒的倾斜角度(mma7260加速度计)和倾斜趋势(陀螺仪角速度计)。通过手掌移动抵消木棒的倾斜角度和趋势,从而保持木棒的直立。这两个条件缺一不可。
②电磁车要直立需要知道车体的倾斜角度和倾斜速度。通过测量车模的倾角和倾角加速度控制车模车轮的加速度来消除车模的倾角。因此车模倾角以及倾角加速度的测量成为控制车模直立的关键。
③Mma7260如何获得车体倾斜角度

我们按照图0-1的安装方法,就是图0-3的情况
         
图0-3的情况                    图4 串口输出

如果我们用串口输出的话,他的值应该和图0-4一样X y 最小 z最大。
只需要测量其中一个方向上的加速度值,就可以计算出车模倾角,比如使用Z轴方向上的加速度信号。车模直立时,固定加速度器在Z轴水平方向,此时输出信号为零偏电压信号。当车模发生倾斜时,重力加速度g 便会在 Z轴方向形成加速度分量,从而引起该轴输出电压变化。变化的规律为
△u =k g sinθ
式中,g为重力加速度;θ 为车模倾角;k为比例系数。当倾角θ 比较小的时候,
输出电压的变化可以近似与倾角成正比。 似乎只需要加速度就可以获得车模的倾角,再对此信号进行微分便可以获得倾角加速度。但在实际车模运行过程中,由于车模本身的运动所产生的加速度会产生很大的干扰信号叠加在上述测量信号上,使得输出信号无法准确反映车模的倾角。这时怎么办?因此对于车模直立控制所需要的倾角信息需要通过另外一种器件获得,那就是角速度传感器-陀螺仪 二者融合卡尔曼滤波获得角度,角速度。
④角速度传感器
                           
在车模上安装陀螺仪,可以测量车模倾斜的角速度,将角速度信号进行积分便可以得到车模的倾角。那么有了这个两个信息,角度,角速度就可以调整车的直立行走了。
⑤角度、角速度二者如何融合
角速度传感器(ENC-03MB)、加速度传感器(MMA7260)。AD测量并转换得两者数据,送KALMAN滤波,输出得到角度(angle)、角速度(angle_dot),就可以用了!这里有个问题就是,加速度本身算出的是角度,但是他不准!所以才带上角速度传感器一起送入卡尔曼滤波的的输入。加速度计反正弦求出的角度静止时是很精确的,但是在运动(偏航就是运动吧)时由于有除重力附加的加速度,所以算出的角度将不准。角速度积分求出的角度,因为是积分,所以在累加过程中又慢慢的累计误差,慢慢得出的角度也不准了,角速度传感器本身也有温漂问题,也会造成影响。融合之后很精确。

角速度直接来自en03
角度控制电机的p  
角速度控制电机的i

这样通过pi来控制电机的转动速度。就可以了!到此小车直立所需要的信息就够了。如果匀速,就需要加入编码器。

二、硬件的几点注意
1 电路的简单分析

图1 Enc-03官方的参考电路图
里面有几点疑问
1 vout如何通过4.7uf电容
VOUT 后接4.7uf的电容,这VOUT不是输出直流吗?电流极性不变啊,那么怎么通过电容?不是单纯的给电容充电了吗?直流的定义是极性不变,不是说幅值不变。 不动叫恒流。我说的直流是它的定义,和我们的习惯认识有点差异,我们一般说直流更接近横流(或者恒压)。 所以只要有角速度变化一旦陀螺仪检测到角速度,VOUT就会有电压,由于电容的电压不能突变,电容两侧的电压是相等的,所以电压就通过电容了。
2 温飘是什么
  温飘,就是en03静止的时候他的输出端不是一个固定的值,而是随着温度的变化而变化。经过测试,en03的温飘没有想象的那么严重,做智能车的同学可以把它忽略掉。如果温度变化10°以上,需要调整下。测试数据如下:
型号        时间10s        时间1min        时间10min        时间1h
ENC-03MB          0x1f4        0x1f2        0x1f1        0x1f2
ENC-03RC #1        0x2a3        0x2ac        0x2b5        0x2b2
ENC-03RC #2        0x04f        0x04f        0x058        0x05a
一个ENC-03MB、两个ENC-03RC主要测试静态,AMS1117-3.3V供电,环境温度19度 测试长期加电的输出漂移,测试点为运放输出,为10位AD所采集的原始数据。
结论是:ENC-03MB温飘小,比较好。
3 en03的放置
首先看清en03m的引脚分布

                     图3 en03 官方的引脚图
看手册是从左下开始,逆时针1234.

图4实际的安装方法图
三、调试的几点注意
首先要确保采集到的角度足够稳定,要没有毛刺,也就是说硬件要有保证。有微小偏差没关系,这是因为车平衡时的角度为0度,如果有点偏差,车顶多就是平衡时倾斜一点,再靠水平的速度、位移调节也不会让车动弹的!
  再就是一定要确保你的PID各项构成负反馈,如果其中任意一项构成正反馈都永远不会稳,或者只能稳定一小段时间。参数共4项,需要依次测试。
    调节过程中,要时刻记住PWM量程是多少,假设为0~255,那么在调节过程中就要根据这个参数来设定各个K值大概的值。你想想太小的话,假设角度K=2,那么当角度很大的时候,假设30度,这时控制量才为2*30=60<<255,效果就是车都快到了,你给电机的能量才一点点,你说车还能站


作者: xcsjava    时间: 2012-2-3 23:06
首先要确保采集到的角度足够稳定,要没有毛刺,也就是说硬件要有保证。有微小偏差没关系,这是因为车平衡时的角度为0度,如果有点偏差,车顶多就是平衡时倾斜一点,再靠水平的速度、位移调节也不会让车动弹的!
  再就是一定要确保你的PID各项构成负反馈,如果其中任意一项构成正反馈都永远不会稳,或者只能稳定一小段时间。参数共4项,需要依次测试。
    调节过程中,要时刻记住PWM量程是多少,假设为0~255,那么在调节过程中就要根据这个参数来设定各个K值大概的值。你想想太小的话,假设角度K=2,那么当角度很大的时候,假设30度,这时控制量才为2*30=60<<255,效果就是车都快到了,你给电机的能量才一点点,你说车还能站起来么?另外K=10000的话,当车体倾斜1度的时候,控制量为10000*1=10000>>255,效果就是只要角度不为精确地0度,那么电机就会全速运行,以最大力量调整车体,这时你想想能稳定么,车体倾斜角度会很快发散,最后倒下。
    整定方法大概如下:
1.调角度K值,调到基本能够站立;
2.调角速度K值,从零慢慢增加,这个K很小。太小的话,车子反应迟钝,好像没有这项一样,太大的话,车子抗扰能力变差,所以要适当。
3.调水平速度K值的时候,要注意你获得的车速是不是很精确的,如果用很多线的光电码盘就会很精确,但如果码盘只要几线,或者用一个霍尔传感器,获得的速度就会很不精确,这时就要做好车速的低通滤波,很关键!有这个功夫还不如直接上个编码器。车速K值也是慢慢增加,增加过程中观察车的反应。
4.位移K值也应该很小,因为是速度的累计,慢慢会漂移变大,设定一个上下限,是为了防止漂移过大造成控制量过大最后会等于255。
稳定站立,长达20分钟,前后移动1cm,几乎原地不动,测试视频:
http://v.youku.com/v_show/id_XMzQ1MDY3NTgw.html
巡线跑,速度稳定,测试视频:
http://v.youku.com/v_show/id_XMzQ1MDQ3ODA4.html
助赢电子上海分店http://shop60778869.taobao.com

作者: renanqi    时间: 2012-2-3 23:40
跟这个怎么这么像啊?
117楼?
http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=4506043

作者: xcsjava    时间: 2012-2-4 08:43
是的,调试方法参考这个帖子的。里面的内容还参考了清华的文档,参考内容比较多,因为学习这些东西,需要查一些资料,我就把查阅的一些资料,做了一些记录,也为了防备后期自己找不到,再花费很多时间找
作者: xcsjava    时间: 2012-2-4 08:44
本手册内容是店主学习过程中得资料总结,参考了网上很多资料,互相交流仅供参考,
作者: xcsjava    时间: 2012-2-4 09:11
在整个调试过程中,我个人觉得调试的方法很重要,pid怎么看现象,什么现象是超调,怎么就算可以?网上说的个人觉得还是偏抽象,念口诀不怎么管用。调试的中册,是对调试方法的一个总结,也是结合了网上的一些资料和自己调试过程遇到的一些问题。几天内发布。
作者: 天才大空翼    时间: 2012-2-4 09:57
必须顶。
作者: wo520    时间: 2012-2-4 11:48
嗯!很不错!楼主的这个传感器模块需要零点矫正吧??能详细讲讲陀螺仪和加速度计的零点修正吗?
作者: wo520    时间: 2012-2-4 11:51
楼主只是直立,不行走。就用了PI 吗?PWM=角度*p+ 角速度*i  是这样吗?疑惑中!!


作者: xcsjava    时间: 2012-2-4 19:43
PWM=角度*p+ 角速度*i  是这样
作者: xcsjava    时间: 2012-2-4 19:55
当然这里还有方向,控制电机正反转。
作者: wo520    时间: 2012-2-4 20:06
楼主把 PWM=角度*p+ 角速度*i 作为占空比。不需要用到剩下的两个参数(位移K或者速度K)也能实现平衡吗?我调了很久就 PWM=角度*p+ 角速度*i 两个参数调,还是无法平衡!必须要结合PWM=角度*p+ 角速度*i +速度K 才能平衡,不知道楼主是如何调的,想请教!
作者: xcsjava    时间: 2012-2-4 20:37
不需要用到剩下的两个参数(位移K或者速度K)也能实现平衡。用这些东西就用到编码器了,在没有直立的时候引入这些,我觉得不好,参数越少越好调,多了就乱了。
作者: wo520    时间: 2012-2-4 21:07
楼主能再请教一下控制电机正反转的判断依据是什么吗??
作者: xcsjava    时间: 2012-2-5 22:46
控制电机正反转的判断依据,判断依据是自己程序里面的pwm设置啊。在程序里面设置一个标志。要根据获得的角度的正负来控制正反转,角度的正负。
作者: 云端暮雪    时间: 2012-2-5 23:55
又是定性的描述了一番...
有个问题,如果要做个arcsin()函数,怎么编?
作者: yu2010550221    时间: 2012-2-6 10:13

作者: liu小渝儿    时间: 2012-2-6 10:44
手册下呢?????????
作者: xcsjava    时间: 2012-2-6 21:41
下册要等中册发布后,呵呵,这几天又点小忙,没有顾得发布。

作者: zl6977    时间: 2012-2-7 14:25
顶一个,期待啊。
作者: O.Z.N    时间: 2012-2-7 15:45
一定要顶
作者: xiduoduo    时间: 2012-2-7 15:47

作者: 叶子萌    时间: 2012-2-7 17:50
顶一个好不好!!!
作者: qifei    时间: 2012-2-8 10:09
厉害
作者: lwzhdu    时间: 2012-2-8 11:16
调试经验,还有参数整定~~期待回复
作者: 032409    时间: 2012-2-8 21:02
为什么文档下不了啊?
作者: LJG    时间: 2012-2-10 20:37

作者: AB绝对LY    时间: 2012-2-11 10:28
标记学习,电磁组自立行走

作者: 5768340    时间: 2012-2-12 10:29
等你的中册和下册,等的头发都白了
作者: xcsjava    时间: 2012-2-12 12:13
为什么文档下不了啊?刚试验过,能下载啊
作者: jxndlym    时间: 2012-2-12 13:18
楼主文档快点儿发布啊
作者: 我の小车    时间: 2012-2-12 15:09

作者: harryxp    时间: 2012-2-12 21:12
背景音乐是什么啊?
作者: harryxp    时间: 2012-2-12 21:24
很有帮助.
作者: 月光疾风    时间: 2012-2-15 14:13
xcsjava 发表于 2012-2-12 12:13
为什么文档下不了啊?刚试验过,能下载啊

顶一个,等待楼主尽快贴出后续版本~
作者: 我是北丐    时间: 2012-2-21 22:57
顶楼主,学习了!
作者: zhuwenwujy    时间: 2012-2-22 16:54
卡尔曼的参数怎么调的啊?感觉的卡尔曼延迟有点大,能不能说一下你的卡尔曼参数?

作者: 流浪花    时间: 2012-2-23 13:21
PWM=角度*p+ 角速度*i  是这样里面的p是什么变量啊?
作者: AK47-CTBU    时间: 2012-2-23 22:55
标记
作者: 骑鱼士    时间: 2012-2-26 23:10

作者: 骑鱼士    时间: 2012-2-29 15:11

作者: dbb935623040    时间: 2012-3-5 21:12
:):)
作者: c_do0123    时间: 2012-3-21 19:46
顶呀!
作者: Iiti    时间: 2012-3-25 19:54

作者: ☆帅气★_べ    时间: 2012-3-27 14:07
好东西。顶
作者: wuruijie1990    时间: 2012-3-27 18:29
我先下了学习学习。再给反馈
作者: sean1991    时间: 2012-3-30 09:43
中册和下册怎么还没有发布啊!!!!?????
作者: 阿ken    时间: 2012-3-30 18:47
是PI吗?不是PD吗

作者: 暗波伏龙1    时间: 2012-3-31 15:42
顶一个,期待中!!
作者: 会会1314    时间: 2012-4-19 07:48
现在车子可以站的很稳了 加的有闭环,但是如何实现让他向前走啊??如何实现匀速???调那些参数有什么技巧吗??谢谢
作者: 不倒翁2    时间: 2012-4-19 10:27
xcsjava 发表于 2012-2-4 20:37
不需要用到剩下的两个参数(位移K或者速度K)也能实现平衡。用这些东西就用到编码器了,在没有直立的时候引 ...

我们这样调了很久都没调到平衡呀,一直怀疑角度*P+角速度*D实现不了平衡,不管我们怎么调,小车前后摆动的幅度都会越来越大,这是怎么回事呀??再请问下楼主加了死区吗?加的多大呀?
作者: qjncjlu66    时间: 2012-4-20 18:04
顶啊!
作者: 蒹葭之尹    时间: 2012-4-20 21:43
谢谢你们的分享,我们也是按照助赢电子的方案调试的,但在调试的过程中始终没能解决小车抖动问题,对小车的直立造成很大的影响~~~求解决办法,谢了~~~
作者: め★海诺依☆    时间: 2012-5-10 19:23
会会1314 发表于 2012-4-19 07:48
现在车子可以站的很稳了 加的有闭环,但是如何实现让他向前走啊??如何实现匀速???调那些参数有什么技巧 ...

你是用的助赢方案吗?
作者: 87外泄    时间: 2012-5-17 20:27

作者: 莫忆    时间: 2012-5-21 18:43
不倒翁2 发表于 2012-4-19 10:27
我们这样调了很久都没调到平衡呀,一直怀疑角度*P+角速度*D实现不了平衡,不管我们怎么调,小车前后摆动的 ...

请问 你们原来那个问题 解决了吗?  我的波形非常好 可是无论我怎么调节PD 都无法站到那里不动 求指教!!!!!
作者: caoyuanyun2011    时间: 2012-6-2 09:07
比龙丘好N倍
作者: renqinglei    时间: 2012-6-2 21:04
不倒翁2 发表于 2012-4-19 10:27
我们这样调了很久都没调到平衡呀,一直怀疑角度*P+角速度*D实现不了平衡,不管我们怎么调,小车前后摆动的 ...

你的车已经可以直立了吧,我也按照pwm=p*角度+d*角速度,作为占空比,小车前后摆,幅度越来越大(用手提着它)。怎么解决的呢?

作者: synird    时间: 2012-6-7 16:30
牛!!!!!
作者: 柒枫    时间: 2012-12-19 21:09
顶、

作者: 吉祥鸟    时间: 2013-1-1 11:13
xcsjava 发表于 2012-2-4 19:43
PWM=角度*p+ 角速度*i  是这样

请问如果pwm=p*速度+i*角速度。那么如何构成负反馈呢?谢谢啊。
作者: matthew    时间: 2013-1-2 15:10

作者: ︶ㄣ君宙ㄜ︵    时间: 2013-1-4 19:48
顶一个
作者: mxj1005071012    时间: 2013-1-4 20:50
不错

作者: 虚-客    时间: 2013-1-8 20:36




作者: 为了明天_For_To    时间: 2013-1-21 14:51
顶了
作者: 守一    时间: 2013-4-5 14:20
关键是滤波
作者: tangyinyin123    时间: 2013-4-6 10:10
好啊
作者: psy007    时间: 2013-5-15 19:59

作者: psy007    时间: 2013-5-15 20:16
好好学习
作者: xxl123    时间: 2015-1-10 18:02
顶一个
作者: zhangkaiy1220    时间: 2015-5-18 16:39
谢谢分享
作者: 要定宝宝了    时间: 2015-12-21 13:36
直立的话,机械方面要做什么呢
作者: 辰廼星    时间: 2016-4-10 12:12
收藏





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2