RC 输入和输出

遥控输入是所有(飞行)控制器的关键部分,它能让飞行员控制机身,允许他们改变模式,还能让他们控制相机支架等辅助设备。

可用通道数取决于特定板卡的硬件。请注意,SBUS 和 Spektrum/DSM 都是串行协议。SBUS 是 100k 波特的反相 UART 协议,而 Spektrum/DSM 是 115200 波特的 UART 协议。有些电路板使用硬件 UART(如 PX4)实现这些协议,有些则使用位错软件 UART(Linux)实现这些协议。

RC 输出是 ArduPilot 控制舵机和电机的方式。可用输出通道的数量取决于电路板的类型,甚至取决于载具类型和配置参数。RC 输出默认为 50Hz PWM 值,但可配置为多种更新率。例如,Copter 代码将其电机输出设置为以更高的速率(通常超过 400Hz)驱动电调。

AP_HAL RC 输入对象

第一个需要了解的对象是 AP_HAL RCInput 对象,该对象以 hal.rcin 的形式提供。它提供了对电路板上当前接收到的通道值的低级访问。返回值是以微秒为单位的 PWM 值。

去看看 libraries/AP_HAL/examples/RCInput/RCInput.cpp 草图,并在电路板上试用。尝试移动发射器上的摇杆,检查输出中的数值变化是否正确。

AP_HAL RCOutput 对象

AP_HAL RCOutput 对象(可作为 hal.rcout)可对所有输出通道进行低级控制。如何实现这一点取决于电路板,可能需要对片上定时器或 I2C 外设进行编程,或通过协处理器(如 PX4IO 微控制器)进行输出。

去看看 libraries/AP_HAL/examples/RCOutput/RCOutput.cpp 示例草图。你会看到,它只是设置了所有通道,让舵机在几秒钟内从最小值到最大值挥动。将一些舵机连接到电路板上,然后进行测试,确保它适合你。

RC_ 通道对象

上面讨论的 hal.rcin 和 hal.rcout 对象是低级函数。在 ArduPilot 中处理 RC 输入和输出的通常方法是通过一个名为 RC_Channel 的高级对象。该对象具有用户可配置的参数,用于设置每个通道的最小/最大/微调,并支持辅助通道功能、输入和输出缩放以及许多其他功能。

去看看 libraries/RC_Channel/examples/RC_Channel/RC_Channel.cpp.该示例展示了如何设置 RC 通道、读取输入以及将输入值复制到输出值。在您的电路板上运行该示例,检查发射机输入是否传递到伺服。试着将其改为反向通道,并更改通道上的最小/最大/微调值。查看 RC_Channel.h,了解有哪些 API 函数可用。

RC_Channel_aux 对象

除了 RC_Channel 之外,libraries/RC_Channel 中还有一个重要的类。它就是 RC_Channel_aux 类,它是 RC_Channel 的子类。

RC_Channel_aux 对象是一种 RC_Channel 类型,但具有附加属性,允许用户指定其用途。例如,用户希望通道 6 成为相机支架的滚动稳定器。他们会将 RC6_FUNCTION 参数设置为 21,即 "方向舵"。那么另一个库就可以说

RC_Channel_aux::设置伺服输出(RC_Channel_aux::k_rudder, 4500);

任何将其 FUNCTION 设置为 21 的通道都将移动到全挠度(因为 k_rudder 设置为以厘度为单位的角度,4500 为最大值)。请注意,这是一种一对多的安排。如果用户愿意,可以将多个通道设置为 FUNCTION 21,所有这些通道都将移动,每个通道使用各自的最小/最大/调整值。