有時(shí)候,我們的飛控需要引入一些外部IO信號(hào),比如:
01相機(jī)拍照反饋
單反相機(jī)熱靴接口的反饋信號(hào),用于將照片拍攝的位置和時(shí)間保存到飛控的日志中;
02液位儀IO信號(hào)
植保無(wú)人機(jī)檢測(cè)剩余藥量是否低于警戒值;
03彈射檢測(cè)信號(hào)
通過(guò)一個(gè)金屬觸點(diǎn)彈片來(lái)檢測(cè)無(wú)人機(jī)是否從發(fā)射架上彈射出去,對(duì)于一些需要延遲開(kāi)啟推進(jìn)電機(jī)的應(yīng)用比較有用。
硬件基礎(chǔ)
對(duì)于大部分運(yùn)行APM固件的飛控來(lái)講,其第9通道以后(含)的PWM輸出通道同時(shí)也支持作為GPIO輸入,當(dāng)然,部分飛控硬件的前8個(gè)通道也支持作為GPIO輸入,這與飛控的硬件架構(gòu)相關(guān)。
如下圖所示,此飛控的PWM1~PWM8使用了SN74LVC8T245這款芯片作為接口保護(hù)芯片,并且將此芯片的方向控制引腳固定拉低,從而這8個(gè)通道只支持作為PWM輸出或者GPIO輸出。
如下圖所示,其PWM9~PWM16通道使用了TXS0108ERGYR這款芯片作為接口保護(hù)芯片,這款芯片支持自動(dòng)切換各個(gè)通道的方向的功能,因此這8個(gè)通道既可以作為PWM輸出,也可以作為GPIO輸入。
軟件編程
APM固件的GPIO輸入功能的使用是非常簡(jiǎn)單的,如下面的例子所示:
// 第一步,將GPIO50設(shè)置為輸入模式
hal.gpio- >pinMode(50, HAL_GPIO_INPUT);
// 第二步,將GPIO50設(shè)置為內(nèi)部上拉(可選,可以不上拉;如果要下拉,則第二個(gè)參數(shù)設(shè)置為0)
hal.gpio- >write(50, 1);
// 第三步,讀取GPIO50的狀態(tài),返回值為0表示低電平,為1表示高電平
uint8_t gpio_state = hal.gpio- >read(50);
注意,例程中的“50”是“軟件層面”的GPIO號(hào),不是STM32單片機(jī)“硬件層面”的GPIO號(hào), 并且各個(gè)飛控的定義不同。此值的定義在APM源代碼“Libraries/AP_HAL_ChibiOS/hwdef/飛控硬件名/hwdef.dat”中,下圖為原版Pixhawk對(duì)于GPIO號(hào)的定義:
參數(shù)設(shè)置
對(duì)于最新的APM固件,“BRD_PWM_COUNT”這個(gè)參數(shù)已經(jīng)被刪掉了,因此不需要設(shè)置這個(gè)參數(shù)。
SERVOx_FUNCTION:設(shè)置為-1。注意,AUX OUT引腳的標(biāo)號(hào)在參數(shù)表中是從9開(kāi)始依次遞增的,如AUX OUT 1引腳對(duì)應(yīng)SERVO9,AUX OUT 2引腳對(duì)應(yīng)SERVO10,依次類推。
你看的沒(méi)錯(cuò),只需要設(shè)置這一個(gè)參數(shù)即可,非常簡(jiǎn)單。
結(jié)語(yǔ)
以上就是APM固件GPIO輸入功能的使用方法,希望對(duì)對(duì)大家有所幫助,
-
單片機(jī)
+關(guān)注
關(guān)注
6071文章
45254瀏覽量
659941 -
PWM
+關(guān)注
關(guān)注
116文章
5799瀏覽量
222441 -
STM32
+關(guān)注
關(guān)注
2301文章
11069瀏覽量
369297 -
GPIO
+關(guān)注
關(guān)注
16文章
1299瀏覽量
55243 -
IO信號(hào)
+關(guān)注
關(guān)注
0文章
6瀏覽量
2238
發(fā)布評(píng)論請(qǐng)先 登錄
HAL庫(kù)GPIO輸入模式在cubemx中的配置
apm 飛控的pwm輸入輸出通道串聯(lián)的220歐電阻的作用?
飛控疑難雜癥解決方法匯總
基于LCD單片機(jī)輸入/輸出端口GPIO編程
固件#06--STM32-MCU-GPIO工作模式

Linux應(yīng)用開(kāi)發(fā)【第九章】GPIO編程應(yīng)用開(kāi)發(fā)

適用于PIX或APM的本地升級(jí)固件方法
APM32F072CBT6_GPIO問(wèn)題_PB12無(wú)法正確讀取外接的電平狀態(tài)

APM飛控固件的兩種輸出調(diào)試信息的方法

評(píng)論