Pixhawk原生固件PX4之调节怠速

您所在的位置:网站首页 mini螺旋桨转速过高怎么回事啊 Pixhawk原生固件PX4之调节怠速

Pixhawk原生固件PX4之调节怠速

2024-07-10 03:20| 来源: 网络整理| 查看: 265

欢迎交流~ 个人 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.px4在Firmware/build_px4fmu-v2_default/src/firmware/nuttx目录下,px4io-v2.bin在./extras目录下,一并被烧到主控制器的Flash中去了。

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

                                          By Fantasy



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3