搜索
bottom↓
回复: 3

关于MK算法的一些值的取值范围的疑惑------希望各位大大尤其CNMUSIC能够赐教!

[复制链接]

出0入0汤圆

发表于 2012-2-14 20:52:39 | 显示全部楼层 |阅读模式
关于MK算法的一些值的取值范围的疑惑------希望各位大大尤其CNMUSIC能够赐教!
最近在看MK的算法,觉得对于里面一些值的范围不是很理解,例如MEAN()中的这一部分:

// Roll
        Reading_GyroRoll += tmpl;
        Reading_GyroRoll += (tmpl2 * FCParam.Yaw_NegFeedback) / 512L;
        Reading_IntegralGyroRoll2 += Reading_GyroRoll;
        Reading_IntegralGyroRoll +=  Reading_GyroRoll - AttitudeCorrectionRoll;
        if(Reading_IntegralGyroRoll > TurnOver180Roll)
        {
                Reading_IntegralGyroRoll  = -(TurnOver180Roll - 10000L);
                Reading_IntegralGyroRoll2 = Reading_IntegralGyroRoll;
        }
        if(Reading_IntegralGyroRoll < -TurnOver180Roll)
        {
                Reading_IntegralGyroRoll =  (TurnOver180Roll - 10000L);
                Reading_IntegralGyroRoll2 = Reading_IntegralGyroRoll;
        }
        if(AdValueGyrRoll < 15)   Reading_GyroRoll = -1000;
        if(AdValueGyrRoll <  7)   Reading_GyroRoll = -2000;
        if(BoardRelease == 10)
        {
                if(AdValueGyrRoll > 1010) Reading_GyroRoll = +1000;
                if(AdValueGyrRoll > 1017) Reading_GyroRoll = +2000;
        }
        else
        {
                if(AdValueGyrRoll > 2020) Reading_GyroRoll = +1000;
                if(AdValueGyrRoll > 2034) Reading_GyroRoll = +2000;
        }


                if(AdValueGyrRoll > 2020) Reading_GyroRoll = +1000;
                if(AdValueGyrRoll > 2034) Reading_GyroRoll = +2000;


AdValueGyrRoll不是陀螺仪的数值吗?但是AVR可是10位的AD啊,理论上最大值应该就是1024啊,为什么要写
>2020呢?仔细看了看,没有发现MK对这个值进行了放大。觉得很疑惑,请教各位了,谢谢!



还有最后的姿态结算部分


    DiffNick = Reading_GyroNick - StickNick;        // get difference
    SumNick += IntegralNick * Gyro_I_Factor - StickNick; // I-part for attitude control
   
    if(SumNick >  (STICK_GAIN * 16000L)) SumNick =  (STICK_GAIN * 16000L);
    if(SumNick < -(STICK_GAIN * 16000L)) SumNick = -(STICK_GAIN * 16000L);
    pd_result = DiffNick + Ki * SumNick; // PI-controller for nick

    tmp_int = (int32_t)((int32_t)FCParam.DynamicStability * (int32_t)(GasMixFraction + abs(YawMixFraction)/2)) / 64;
    if(pd_result >  tmp_int) pd_result =  tmp_int;
    if(pd_result < -tmp_int) pd_result = -tmp_int;

        // Motor Front
    MotorValue = GasMixFraction + pd_result + YawMixFraction;          // Mixer

根据前面提到的,KI=0.0001,而这里面与加速度计补偿陀螺有关的好想只有IntegralNick,而由IntegralNick得来的SumNick乘了
0.0001,这样的话,前面的补偿的影响不是十分小了吗?看不太明白,期待高手解答~~~

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-2-15 17:37:21 | 显示全部楼层
沙发

出0入0汤圆

发表于 2012-2-15 18:01:35 | 显示全部楼层
楼主看看MK代买里面的Analog.c

        case 0:
                nick1 = ADC;
                kanal = AD_ROLL;
                break;

        case 5:
                nick1 += ADC;
                kanal = AD_ROLL;
                break;

        case 10:
                nick1 += ADC;
                kanal = AD_ROLL;
                break;

        case 15:
                nick1 += ADC;
                if(PlatinenVersion == 10) nick1 *= 2; else nick1 *= 4;
                AdWertNick = nick1 / 8;
                nick_filter = (nick_filter + nick1) / 2;
                HiResNick = nick_filter - AdNeutralNick;
                AdWertNickFilter = (AdWertNickFilter + HiResNick) / 2;
                kanal = AD_ROLL;
                break;


每一个周期
AdWertNick值叠加了4次,又放大了4被然后缩小了8被。
1024*4*4/8=2048
AdValueGyrRoll也是一样的。

出0入0汤圆

 楼主| 发表于 2012-2-15 20:01:03 | 显示全部楼层
恩,MK代码真是够复杂啊。。。。谢谢啦!终于有人回答了。。。莫非大家都已经觉得
MK研究透了,已经转向了?感觉比较冷清啊。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 04:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表