ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

无人机项目跟踪五十二----pwm控制模块详解

2021-05-20 19:58:40  阅读:309  来源: 互联网

标签:Thro M3 横滚 ---- M4 imu Motor 五十二 pwm


pwm控制模块的函数是 void CtrlMotor(void),详解如下:

    float  cosTilt = imu.accb[2] / ONE_G;        //没有用

    if(altCtrlMode==MANUAL)                      //如果是手动操作
    {
        DIF_ACC.Z =  imu.accb[2] - ONE_G;               //没有用
        Thro = RC_DATA.THROTTLE;                 //油门值    
        cosTilt=imu.DCMgb[2][2];                 //俯仰和横滚的余弦乘积
        Thro=Thro/cosTilt;                       //倾角补偿
    } else {   //自动定高模式
        Thro=(-thrustZSp) * 1000;// /imu.DCMgb[2][2];  //倾角补偿后效果不错,有时过猛
        if(Thro>1000)
            Thro=1000;
    }

如上,其中,imu.DCMgb是地理系到机体系转换矩阵,imu.DCMgb[2][2]为最末一位是横滚角与俯仰角余弦的乘积。Thro=Thro/cosTilt的意思是:用油门值除以横滚和俯仰的余弦乘积得到最终的油门值,相当于是把因横滚和俯仰后倾斜的飞机油门值变换到水平的坐标系的油门值。

 

    //将输出值融合到四个电机
    Motor[2] = (int16_t)(Thro - Pitch - Roll - Yaw );    //M3    //对四个电机进行控制
    Motor[0] = (int16_t)(Thro + Pitch + Roll - Yaw );    //M1
    Motor[3] = (int16_t)(Thro - Pitch + Roll + Yaw );    //M4
    Motor[1] = (int16_t)(Thro + Pitch - Roll + Yaw );    //M2

    if((FLY_ENABLE!=0))
        MotorPwmFlash(Motor[0],Motor[1],Motor[2],Motor[3]);   //将参数值保存到flash中
    else
        MotorPwmFlash(0,0,0,0);  //清空flash

如上,是对电机pwm的控制,油门值与经过pid整定的横滚、俯仰、方位的加减来控制pwm的输出。M1、M2、M3、M4代表四个电机,实际安放位置从前向后从左到右是,M1、M2在前面,M4、M3在后面。当飞机前面向上俯仰时,M1、M2要加快只要增大,所以M1、M2的Pitch前面是加号,M3、M4转速要下降这样才能保证飞机头向上俯仰,所以M3、M4前面为负值。同理横滚方位角也这样理解。最后两行代码是当无人机使能时候保存此参数,否则清空flash。

标签:Thro,M3,横滚,----,M4,imu,Motor,五十二,pwm
来源: https://blog.csdn.net/wyssailing/article/details/117089612

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有