搜索
bottom↓
回复: 10

飞控pid算法

[复制链接]

出0入0汤圆

发表于 2012-7-12 23:04:56 | 显示全部楼层 |阅读模式
最近在研究mwc飞控的气压计定高算法,不知道有没有看过mwc代码的高手来分析一下此段代码

void getEstimatedAltitude(void)
{
    uint32_t index;
    static uint32_t deadLine = INIT_DELAY;
    static int16_t BaroHistTab[BARO_TAB_SIZE];
    static uint32_t BaroHistIdx;
    static int32_t BaroHigh = 0;
    static int32_t BaroLow = 0;
    int32_t temp32;
    int16_t last;

    if (currentTime < deadLine)
        return;
    deadLine = currentTime + UPDATE_INTERVAL;

    //**** Alt. Set Point stabilization PID ****
    //calculate speed for D calculation
    last = BaroHistTab[BaroHistIdx];
    BaroHistTab[BaroHistIdx] = BaroAlt / 10;
    BaroHigh += BaroHistTab[BaroHistIdx];
    index = (BaroHistIdx + (BARO_TAB_SIZE / 2)) % BARO_TAB_SIZE;
    BaroHigh -= BaroHistTab[index];
    BaroLow  += BaroHistTab[index];
    BaroLow  -= last;
    BaroHistIdx++;
    if (BaroHistIdx >= BARO_TAB_SIZE)
        BaroHistIdx = 0;

    BaroPID = 0;
    //D
    temp32 = cfg.D8[PIDALT] * (BaroHigh - BaroLow) / 40;
    BaroPID -= temp32;

    EstAlt = BaroHigh * 10 / (BARO_TAB_SIZE / 2);

    temp32 = AltHold - EstAlt;
    if (abs(temp32) < 10 && abs(BaroPID) < 10)
        BaroPID = 0;  // remove small D parameter to reduce noise near zero position
    // P
    BaroPID += cfg.P8[PIDALT] * constrain(temp32, (-2) * cfg.P8[PIDALT], 2 * cfg.P8[PIDALT]) / 100;
    BaroPID = constrain(BaroPID, -150, +150); // sum of P and D should be in range 150

    // I
    errorAltitudeI += temp32 * cfg.I8[PIDALT] / 50;
    errorAltitudeI = constrain(errorAltitudeI, -30000, 30000);
    temp32 = errorAltitudeI / 500; // I in range +/-60
    BaroPID += temp32;

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-7-12 23:27:10 | 显示全部楼层
分享一下代码吧。也来看看

出0入0汤圆

 楼主| 发表于 2012-7-13 01:07:19 | 显示全部楼层
Y-Edison 发表于 2012-7-12 23:27
分享一下代码吧。也来看看

气压计定高代码在imu.c下面,望高手来指导,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-7-13 01:11:06 | 显示全部楼层
大体的思路看明了了,主要是里面一些变量无法理解,个人觉得算法才是核心,所以想弄懂控制算法,mwc的算法还是比较好理解的,从简单的开始

出0入0汤圆

发表于 2012-7-13 12:10:27 | 显示全部楼层
MWC还有STM32版本的?

出0入0汤圆

发表于 2012-7-13 12:10:44 | 显示全部楼层
还是你自己转的?

出0入0汤圆

发表于 2012-8-15 13:43:35 | 显示全部楼层
我最近也在研究MWC的代码

出0入0汤圆

 楼主| 发表于 2012-8-27 14:38:33 | 显示全部楼层
ksh84222 发表于 2012-8-15 13:43
我最近也在研究MWC的代码

您好  您研究算法到哪进度了

出0入0汤圆

发表于 2012-8-28 15:10:15 | 显示全部楼层
红枫玉 发表于 2012-8-27 14:38
您好  您研究算法到哪进度了

楼主 以前成功飞过???

出0入0汤圆

发表于 2012-8-28 16:15:20 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-11-6 11:24:39 | 显示全部楼层
mark,mark,too
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-8-26 12:19

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

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