1. 参数
__EXPORT void output_limit_calc(const bool armed, const bool pre_armed, const unsigned num_channels,
const uint16_t reverse_mask, const uint16_t *disarmed_output,
const uint16_t *min_output, const uint16_t *max_output,
const float *output, uint16_t *effective_output, output_limit_t *limit);
// armed 系统是否解锁
// prearmed 安全开关是否打开
// num_channels 通道数
// reverse_mask 通道反向
// disarmed_output 加锁状态的输出
// min_output 最小输出
// max_output 最大输出
// output 原始输出
// effective_output 经过限制计算后的输出
// limit 限制状态机状态,此函数向外输出的内容
2. 用处
-
src/lib/mixer_module/mixer_module.cpp中的
bool MixingOutput::update()
使用了
其中参数pre_armed = armNoThrottl()在两种情况下为真- prearmed而且没有armed
- 在电调校准状态
-
src/lib/mixer_module/mixer_module.cpp中的
bool MixingOutput::update()
使用了
3 状态
OUTPUT_LIMIT_STATE_OFF = 0,
OUTPUT_LIMIT_STATE_INIT,
OUTPUT_LIMIT_STATE_RAMP,
OUTPUT_LIMIT_STATE_ON
4 状态转移图
如果系统pre-armd,则将limit_state临时设置为ON。
在外部,pre-armd状态下一些输出被设置为有效的,无效的输出被设置为NAN。
这情况没存储在状态机里,因为油门通道需要ramp ( need to go through the ramp at regular arming time)。
5 每个状态里都干了啥
可见,其从disarm到min是h文件定义的RAMP_TIME_US
也就是0.5s
对于直升机无人机或者油动发动机等设备,可能需要更长时间的暖机或者慢车时间,或者更多状态,可以在此基础上做改动。