APM飞控固件编程-GPIO输入

 有时候,我们的飞控需要引入一些外部IO信号,比如:

  • 相机拍照反馈:单反相机热靴接口的反馈信号,用于将照片拍摄的位置和时间保存到飞控的日志中;
  • 液位仪IO信号:植保无人机检测剩余药量是否低于警戒值;
  • 弹射检测信号:通过一个金属触点弹片来检测无人机是否从发射架上弹射出去,对于一些需要延迟开启推进电机的应用比较有用。

硬件基础

 对于大部分运行APM固件的飞控来讲,其第9通道以后(含)的PWM输出通道同时也支持作为GPIO输入,当然,部分飞控硬件的前8个通道也支持作为GPIO输入,这与飞控的硬件架构相关。

 如下图所示,此飞控的PWM1~PWM8使用了SN74LVC8T245这款芯片作为接口保护芯片,并且将此芯片的方向控制引脚固定拉低,从而这8个通道只支持作为PWM输出或者GPIO输出。

 如下图所示,其PWM9~PWM16通道使用了TXS0108ERGYR这款芯片作为接口保护芯片,这款芯片支持自动切换各个通道的方向的功能,因此这8个通道既可以作为PWM输出,也可以作为GPIO输入。

软件编程

 APM固件的GPIO输入功能的使用是非常简单的,如下面的例子所示:

// 第一步,将GPIO50设置为输入模式
hal.gpio->pinMode(50, HAL_GPIO_INPUT);

// 第二步,将GPIO50设置为内部上拉(可选,可以不上拉;如果要下拉,则第二个参数设置为0)
hal.gpio->write(50, 1);

// 第三步,读取GPIO50的状态,返回值为0表示低电平,为1表示高电平
uint8_t gpio_state = hal.gpio->read(50);

 注意,例程中的“50”是“软件层面”的GPIO号,不是STM32单片机“硬件层面”的GPIO号,并且各个飞控的定义不同。此值的定义在APM源代码“Libraries/AP_HAL_ChibiOS/hwdef/飞控硬件名/hwdef.dat”中,下图为原版Pixhawk对于GPIO号的定义:

参数设置

 对于最新的APM固件,“BRD_PWM_COUNT”这个参数已经被删掉了,因此不需要设置这个参数。

  • SERVOx_FUNCTION:设置为-1。注意,AUX OUT引脚的标号在参数表中是从9开始依次递增的,如AUX OUT 1引脚对应SERVO9,AUX OUT 2引脚对应SERVO10,依次类推。

 你看的没错,只需要设置这一个参数即可,非常简单。

结语

 以上就是APM固件GPIO输入功能的使用方法,希望对对大家有所帮助,更多飞控固件开发视频教程,链接地址:https://study.163.com/course/introduction/1209568864.htm?share=1&shareId=1448054983

京ICP备19049723号   |   京公网安备 11010502039327号