搜索
bottom↓
回复: 13

求解德国平衡车程序

[复制链接]

出0入0汤圆

发表于 2014-6-6 10:25:21 | 显示全部楼层 |阅读模式

/*****************************************************
函数 : Get_Tiltangle()
计算的倾斜角度与手工制作的环路滤波器,
计算角速度
*****************************************************/
void Get_Tiltangle()
{
    buf = total_ADXL_GYRO / total_looptime;
    total_ADXL_GYRO -= buf;

    // 加速度输入
    buf = AD_ADXL- ADXL_ZERO+ ADXL_offset;       
    total_ADXL_GYRO += buf;

    // 陀螺仪输入
    buf1 = Average_Gyro / total_looptime;
    Average_Gyro -= buf1;

    Average_Gyro += AD_GYRO;
    buf1 = Average_Gyro / (total_looptime / 10);

    // 计算角速度
    buf1 = buf1 - AD_GYRO * 10;        
    buf1 *= 35;                                       
    buf1 /= 100;
    Angle_Rate = buf1;

    // 计算倾斜角
    total_ADXL_GYRO += Angle_Rate;
    Tilt_ANGLE = total_ADXL_GYRO / (total_looptime / 10);
}

/************************************************************************/
/*****************************************************
函数 : Algorythmus()
返回限制最高速度的倾斜角,计算行车速度
*****************************************************/
void Algorythmus()

{        
    Balance_moment =  Angle_Rate*4 +   5 * (Tilt_ANGLE + Anglecorrection);      // 平衡力矩计算

    Overspeed = fmax(0, Drive_sum - Overspeedlimit);                            // 恢复速度

    if (Overspeed > 0)
    {
        if(MODE == Run)Overspeed_flag = 1;
        Overspeed_integral = fmin(1000, Overspeed_integral + fmin(500, Overspeed + 125));   // 计算速度积分
    }
    else
    {
        Overspeed_flag = 0;
        Overspeed_integral = fmax(0, Overspeed_integral - 100);                 // 计算速度积分
    }
    Anglecorrection = Overspeed / 200 + Overspeed_integral / 125;               // 计算角度校正
    Drive_sum += Balance_moment;                                                // 计算 Drive_sum

    if(Drive_sum >  Drivesumlimit)Drive_sum = Drivesumlimit;
    if(Drive_sum <- Drivesumlimit)Drive_sum =-Drivesumlimit;

    Drivespeed = Drive_sum / 250 + Balance_moment / 40;                         // 计算速度
}

/*****************************************************
函数 : Signal_Processing()
生成启动条件,计算左/右转向信号
*****************************************************/
void Signal_Processing()
{
    if(MODE == Standby)                                    // 待命模式
    {
        PWM_output(0,0);
        Drivespeed=0;  
        Anglecorrection=0;
        Overspeed=0;     
        Overspeed_integral = 0;
        Drive_sum = 0;
        total_ADXL_GYRO = 0;
        Tilt_ANGLE = 0;   
        Average_Gyro = total_looptime * GYRO_ZERO;              
        buf2 = AD_ADXL - ADXL_ZERO + ADXL_offset;
        if(buf2 == 0&&(Footswitch==0))                                       // 坚持是开始位置的初始运行系统
        {            
            MODE = Run;
        }
    }
    else                                                    // 启动模式
    {
        Steeringsignal =AD_ZHUANWAN - ZHUAN_WAN_ZERO ;           // 得到转向信号

        // 检查 死区
        if(Steeringsignal <- ROCKER_DEADBAND)
        {
            Steeringsignal += ROCKER_DEADBAND;
        }
        else
        {
            if(Steeringsignal > ROCKER_DEADBAND)
            {
                Steeringsignal -= ROCKER_DEADBAND;
            }
            else
            {
                Steeringsignal = 0;
            }
        }

        // 计算减少信号的差速转向
        Steeringsignal *= 7;
        buf2 = Drivespeed;
        if(buf2 < 0)buf2 *= -1;
        buf2 /= 5;
        Steeringsignal /= (buf2 + 7);

         speed_output_LH= Drivespeed + Steeringsignal;               // 差速转向
         speed_output_RH= Drivespeed - Steeringsignal;               // 差速转向
                 PWM_output (speed_output_LH,speed_output_RH);
    }
}
求解德国平衡车程序核心的平衡算法 用到的环路滤波是怎么实现的,哪位有环路滤波的资料,谢谢

出0入0汤圆

发表于 2014-10-21 11:36:27 | 显示全部楼层

出0入0汤圆

发表于 2014-10-21 11:43:46 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2014-10-21 11:47:45 | 显示全部楼层
顶一吓。。。。。。。。。。。。。。。。。。

出0入0汤圆

发表于 2014-10-21 11:59:20 | 显示全部楼层
哦。。。。

出0入0汤圆

发表于 2014-10-21 13:23:06 | 显示全部楼层
这手伸的。。。

出0入0汤圆

发表于 2014-10-21 15:12:26 | 显示全部楼层

出0入0汤圆

发表于 2014-10-21 15:19:27 | 显示全部楼层

出0入0汤圆

发表于 2014-10-22 09:26:11 | 显示全部楼层
这种程序哪里找来的?我也想找找,苦于没有来源,楼主能不能提供一下?

出0入0汤圆

发表于 2014-10-22 09:27:05 | 显示全部楼层
程序哪来的?

出0入0汤圆

发表于 2014-12-1 14:54:43 | 显示全部楼层
楼主有没有研究透彻呢    透彻了也给我们也分享一下呗
头像被屏蔽

出0入0汤圆

发表于 2014-12-1 15:17:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2015-10-29 17:30:10 | 显示全部楼层
求解德国平衡车程序

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-29 02:50

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

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