Pixhawk原生固件PX4之调节怠速

欢迎交流~ 个人 Gitter 交流平台,点击直达:Gitter


怠速

这里怠速指的是Pixhawk解锁后电机的转速。是电机最小的转速,油门打到最低依然存在的转速。

根据这个思路我们找到了PWM_MIN

/**
 * Set the minimum PWM for the main outputs
 *
 * IMPORTANT: CHANGING THIS PARAMETER REQUIRES A COMPLETE SYSTEM
 * REBOOT IN ORDER TO APPLY THE CHANGES.
 *
 * Set to 1000 for industry default or 900 to increase servo travel.
 *
 * @reboot_required true
 *
 * @min 800
 * @max 1400
 * @unit us
 * @group PWM Outputs
 */
PARAM_DEFINE_INT32(PWM_MIN, 1000);

根据代码可以看出主通道输出的最小PWM值为1000,但是问题是博主刷完固件在QGC地面站上配置时默认的PWM_MIN = 1230

pwm

明显与我们设置的PWM_MIN不一致,既然所有的参数都是编译得到的,那么PWM_MIN这一项必定是在代码中某一个位置被赋值了,全局搜索后发现:

# Firmware/ROMFS/init.d/px4fmu_common/4011_dji_f450

sh /etc/init.d/4001_quad_x

if [ $AUTOCNF == yes ]
then
    ...
    # DJI ESCs do not support calibration and need a higher min
    param set PWM_MIN 1230
fi

在机型配置时,在相应的脚本文件中重写了PWM_MIN为1230,这样才导致看到地面站上的数值是1230而不是1000。

修改怠速可以从这里入手了,最低设置为800(怠速为0),最高1400。

但是建议不要关闭怠速,因为修改怠速之后整个油门行程都改变了。起初默认1230us,开始就转这么快 然后推油门就加转速;把怠速调小了,油门需要先推一段才能达到默认怠速的转速。

好比以前40%油门起飞,现在要45%。改与不改、如何修改还看各位看官的感觉了。

其余机型方法无异,不再赘述

电机控制

前文提到的1000us、1200us代表什么?

与Pixhawk配套使用的是BLDC(Brushless Direct Current)无刷直流电机,通过ESC(Electronic Speed Control)电子调速器控制电机转速。

也就是常说的PWM控制,就是通过占空比控制输出电压,占空比是一个周期内高电平时间与总时间之比,例如周期1s,高电平0.2s,那么占空比就是1 : 5 。若直流电机的供应电源电压为10伏特,乘以20%的工作周期即得到2伏特的输出至电机上,不同的工作周期对应出不同电压让直流电机转速产生不同的变化。

与转速的关系可简单由下式表达

=KV

/**
 * Set the PWM output frequency for the main outputs
 *
 * IMPORTANT: CHANGING THIS PARAMETER REQUIRES A COMPLETE SYSTEM
 * REBOOT IN ORDER TO APPLY THE CHANGES.
 *
 * Set to 400 for industry default or 1000 for high frequency ESCs.
 *
 * @reboot_required true
 *
 * @min -1
 * @max 2000
 * @unit Hz
 * @group PWM Outputs
 */
PARAM_DEFINE_INT32(PWM_RATE, 400);

PX4中PWM波的更新频率为400Hz,一个周期为2500us。PWM输出范围为800~2200。现在就可以根据上面的公式对转速有一个大致的估算了。

问题: 为什么当PWM_MIN设置为800的时候,怠速就为 0 了呢?莫非是有一个起转电压吗?
待解决

Tips

不要疑惑为什么Pixhawk上有两个控制器(PX4FMU和PX4IO)却只用一根连接到PX4FMU的USB线就可以完成刷固件的操作了。

int
px4io_main(int argc, char *argv[])
{
  ...
  ...

        PX4IO_Uploader *up;
        const char *fn[4];

        /* work out what we're uploading... */
        if (argc > 2) {
            fn[0] = argv[2];
            fn[1] = nullptr;

        } else {
#if defined(CONFIG_ARCH_BOARD_PX4FMU_V1)
            fn[0] = "/etc/extras/px4io-v1.bin";
            fn[1] = "/fs/microsd/px4io1.bin";
            fn[2] = "/fs/microsd/px4io.bin";
            fn[3] = nullptr;
#elif defined(CONFIG_ARCH_BOARD_PX4FMU_V2) || \
      defined(CONFIG_ARCH_BOARD_AUAV_X21) || \
      defined(CONFIG_ARCH_BOARD_PX4FMU_V4PRO)
            fn[0] = "/etc/extras/px4io-v2.bin";
            fn[1] = "/fs/microsd/px4io2.bin";
            fn[2] = "/fs/microsd/px4io.bin";
            fn[3] = nullptr;
#else
#error "unknown board"
#endif
        }

        up = new PX4IO_Uploader;
        int ret = up->upload(&fn[0]);
        delete up;
    ...
    ...
}

PX4FMU(STM32F4)与PX4IO(STM32F1)仅通过一个串口线相连接,F4芯片会完成为F1芯片刷固件的操作,编译出来的可烧录固件nuttx-px4fmu-v2-default.px4Firmware/build_px4fmu-v2_default/src/firmware/nuttx目录下,px4io-v2.bin./extras目录下,一并被烧到主控制器的Flash中去了。

问题:一直传言说PX4IO是作为故障协处理器存在的,但是源码中一直未能找到其故障保护的逻辑,目前其只是负责PWM输出以及安全开关的按下与否。对于其实际的故障保护功能目前存疑……


                                          By Fantasy

  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 原生Android TV固件是指运行原生Android操作系统的电视设备的固件。与传统的定制化操作系统不同,原生Android TV固件基于Google开源的Android操作系统,提供了更纯净的用户体验和更丰富的功能。 原生Android TV固件的优势在于其稳定性和兼容性。由于采用了原生Android操作系统,它能够充分利用Google官方提供的最新更新和安全补丁,保证系统的稳定运行。同时,原生Android TV固件与其他Android设备具有高度的兼容性,可以轻松与各种应用和设备进行连接和交互,提供更广阔的应用选择和功能拓展空间。 此外,原生Android TV固件还提供了丰富的媒体功能和智能化体验。它支持高清视频播放、声音输出和网络连接,可以通过各种应用快速访问流媒体服务和在线视频内容。另外,原生Android TV固件还具有语音控制和智能推荐功能,用户可以通过语音命令轻松控制电视和应用,智能推荐算法也能够根据用户的观看习惯和喜好提供个性化的内容推荐。 然而,原生Android TV固件也有一些限制。由于操作系统的开放性和多样性,某些应用可能不适配或无法在原生Android TV上运行。此外,原生Android TV固件在硬件方面对电视设备的要求较高,低端设备可能无法提供流畅的使用体验。 总体而言,原生Android TV固件是一种值得推荐的选择,它提供了更稳定、兼容和智能化的电视体验,让用户能够享受到更多的媒体和应用内容。 ### 回答2: 原生Android TV固件是指由Google官方开发和维护的操作系统软件,专门为智能电视设备设计的。它采用了与智能手机和平板电脑相似的Android操作系统,并针对大屏幕和遥控器进行了优化。 原生Android TV固件具有以下特点: 1. 用户界面:原生Android TV固件提供了一个简洁、直观的用户界面,用户可以通过遥控器轻松地导航和操作电视。主屏幕上的应用图标和内容推荐帮助用户快速访问他们喜欢的应用和媒体内容。 2. 应用和媒体内容:原生Android TV固件兼容众多电视应用和媒体服务,包括影片、音乐、游戏和社交媒体等。用户可以通过Google Play商店下载和安装各种应用程序,以满足他们的个性化需求。 3. 语音控制原生Android TV固件支持语音搜索和语音操作,用户可以通过麦克风遥控器或是电视内置的语音识别功能轻松实现语音控制。 4. 联网功能:原生Android TV固件可以通过内置的Wi-Fi或有线网络连接到互联网,用户可以浏览网页、观看在线视频和进行网络游戏等。 5. 兼容性:原生Android TV固件具有良好的兼容性,可与各种电视设备和外部设备(如音频系统、游戏手柄等)配对使用,并通过HDMI接口提供高清视频输出。 总之,原生Android TV固件为用户提供了一个全面的智能电视体验,结合了丰富的应用和媒体内容、简单直观的界面、语音控制和联网功能。它使用户能够轻松访问他们的喜爱内容,并提供了个性化、智能化的娱乐和信息服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值