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

该博客详细解析了无人机的PWM控制模块,包括手动和自动定高模式下的油门值计算。通过imu传感器获取的数据调整油门,实现对横滚、俯仰、方位的控制,以确保飞行稳定性。在横滚和俯仰变化时,油门值会根据余弦乘积进行补偿,以保持水平飞行。同时,四个电机的PWM输出根据控制算法调整,确保飞机按预期方向运动。在飞行使能状态下,参数会被保存,否则清空。
摘要由CSDN通过智能技术生成

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wyssailing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值