APM飞控固件编程-GPIO输入

描述

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

01相机拍照反馈

单反相机热靴接口的反馈信号,用于将照片拍摄的位置和时间保存到飞控的日志中;

02液位仪IO信号

植保无人机检测剩余药量是否低于警戒值;

03弹射检测信号

通过一个金属触点弹片来检测无人机是否从发射架上弹射出去,对于一些需要延迟开启推进电机的应用比较有用。

硬件基础

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

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

IO信号

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

IO信号

软件编程

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号的定义:

IO信号

参数设置

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

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

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

结语

以上就是APM固件GPIO输入功能的使用方法,希望对对大家有所帮助,

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分