采用STM32設計的四軸飛行器飛控系統
1、引言
本文引用地址:http://dyxdggzs.com/article/201610/307312.htm四軸飛行器是一種結構緊湊、飛行方式獨特的垂直起降式飛行器,與普通的飛行器相比具有結構簡(jiǎn)單,故障率低和單位體積能夠產(chǎn)生更大升力等優(yōu)點(diǎn),在軍事和民用多個(gè)領(lǐng)域都有廣闊的應用前景,非常適合在狹小空間內執行任務(wù)。因此四旋翼飛行器具有廣闊的應用前景,吸引了眾多科研人員,成為國內外新的研究熱點(diǎn)。
本設計主要通過(guò)利用慣性測量單元(IMU)姿態(tài)獲取技術(shù)、PID電機控制算法、2.4G無(wú)線(xiàn)遙控通信技術(shù)和高速空心杯直流電機驅動(dòng)技術(shù)來(lái)實(shí)現簡(jiǎn)易的四軸方案。整個(gè)系統的設計包括飛控部分和遙控部分,飛控部分采用機架和控制核心部分一體設計增加系統穩定性,遙控部分采用模擬搖桿操作輸入使操作體驗極佳,兩部分之間的通信采用2.4G無(wú)線(xiàn)模塊保證數據穩定傳輸。飛行控制板采用高速單片機STM32作為處理器,采用含有三軸陀螺儀、三軸加速度計的運動(dòng)傳感器MPU6050作為慣性測量單元,通過(guò)2.4G無(wú)線(xiàn)模塊和遙控板進(jìn)行通信,最終根據PID控制算法通過(guò)PWM方式驅動(dòng)空心杯電機來(lái)達到遙控目標。
2、系統總體設計
系統硬件的設計主要分要遙控板和飛控板兩個(gè)部分,遙控板采用常見(jiàn)羊角把游戲手柄的外形設計,控制輸入采用四向搖桿,無(wú)線(xiàn)數據傳輸采用2.4G無(wú)線(xiàn)模塊。飛控板采用控制處理核心和機架一體的設計即處理器和電機都集成在同一個(gè)電路板上,采用常規尺寸能夠采用普通玩具的配件。系統軟件的設計同樣包括遙控板和飛控板兩部分的工作,遙控板軟件的設計主要包括ADC的采集和數據的無(wú)線(xiàn)發(fā)送。飛控板的軟件的設計主要包括無(wú)線(xiàn)數據的接收,自身姿態(tài)的實(shí)時(shí)結算,電機PID增量的計算和電機的驅動(dòng)。整個(gè)四軸飛行器系統包括人員操作遙控端和飛行器控制端,遙控端主控制器STM32通過(guò)ADC外設對搖桿數據進(jìn)行采集,把采集到的數據通過(guò)2.4G無(wú)線(xiàn)通信模塊發(fā)送至飛控端。飛控板的主要工作就是通過(guò)無(wú)線(xiàn)模塊進(jìn)行控制信號的接收,并且利用慣性測量單元獲得實(shí)時(shí)系統加速度和角速度原始數據,并且最終解算出當前的系統姿態(tài),然后根據遙控板發(fā)送的目標姿態(tài)和當姿態(tài)差計算出PID電機增量,然后通過(guò)PWM驅動(dòng)電機進(jìn)行系統調整來(lái)實(shí)現飛行器的穩定飛行。
3、四軸飛行器的硬件設計
2.1主控單元選擇
從成本和性能綜合考慮,飛控板和遙控板的主控單元都采用意法半導體公司的增強型高速單片機STM32F103作為主控的,STM32F103是基于的ARM 32位的Cortex-M3內核架構,穩定工作頻率可達72MHz,是一個(gè)具有豐富資源、高速時(shí)鐘的精簡(jiǎn)指令的微處理器。STM32F103擁有從64K或128K字節的閃存程序可選存儲器,高達20K字節的SRAM,2個(gè)12位模數轉換器多達16個(gè)輸入通道,7通道DMA控制器,多達80個(gè)快速I(mǎi)/O端口,串行單線(xiàn)調試(SWD)和JTAG接口調試模式,多達7個(gè)定時(shí)器,多達2個(gè)I2C接口(支持SMBus/PMBus),多達3個(gè)USART接口(支持ISO7816接口,LIN,IrDA接口和調制解調控制),多達2個(gè)SPI接口(18M位/秒),CAN接口(2.0B主動(dòng)),USB2.0全速接口。
2.2 飛控板電路設計
飛控板的核心設計是MPU6050測量傳感器、NRF2401無(wú)線(xiàn)模塊以及飛控板電機驅動(dòng)等模塊的設計。飛控系統的慣性測量單元采用MPU6050作為測量傳感器,MPU6050的驅動(dòng)方式采用IIC接口,時(shí)鐘引腳SCL連接到STM32的PB10,數據引腳連接到STM32的PB11引腳,數據中斷引腳連接到PB5,為了增強驅動(dòng)能力在每個(gè)引腳上都加入了10K的上拉電阻。
相對于其他模塊電系統也是比較重要的部分,飛控系統采用3.7V高放電倍率鋰電池進(jìn)行供電。主控芯片供電部分和IMU傳感器部分采用各自獨立的LDO進(jìn)行供電,這樣確保了系統的穩定性和IMU傳感器數據采集的準確性。
飛控板與遙控板數據的通信同樣采用的是基于2.4G頻段的NRF2401模塊,確保了數據的穩定傳輸。STM32的SPI1外設對2.4G模塊進(jìn)行操作驅動(dòng),引腳的連接如下表1所示。
NRF2.4G為采用3.3V供電無(wú)線(xiàn)模塊,系統采用與單片機相同的電源網(wǎng)絡(luò )對其供電,同時(shí)加入0.1UF電容進(jìn)行濾波確保模塊正常工作。
飛控板的驅動(dòng)系統采用的是四個(gè)分布對稱(chēng)十字交叉的高速空心杯電機,電機的驅動(dòng)開(kāi)關(guān)部分采用N溝道增強型場(chǎng)效應晶體管進(jìn)行控制,通過(guò)修改STM32對應引腳上的PWM信號來(lái)進(jìn)行開(kāi)關(guān)MOS管實(shí)現電機運行開(kāi)與關(guān),從而實(shí)現電機運轉速度的調節。電機1、2、3、4分別采用STM32的定時(shí)器2的通道0、通道1、通道2和通道3的PWM進(jìn)行控制。電機1的控制端連接PA0,電機2的控制端采用PA1,電機2的控制端采用PA2,電機3的控制端采用PA3控制。
2.3遙控板電路設計
遙控板主控單元通過(guò)SPI總線(xiàn)驅動(dòng)2.4G無(wú)線(xiàn)模塊,通過(guò)8位并口驅動(dòng)1602液晶顯示,通過(guò)ADC輸入引腳對搖桿和電池電量進(jìn)行采集,通過(guò)引腳驅動(dòng)三極管開(kāi)關(guān)驅動(dòng)蜂鳴器提示。遙控板的核心設計是搖桿模擬數據進(jìn)行采集模塊、NRF2401無(wú)線(xiàn)模塊等設計。
采用STM32單片機ADC1的通道4、通道5、通道6和通道7進(jìn)行搖桿模擬數據進(jìn)行采集并轉換為數字量,分別連接到PA4、PA5、PA6和PA7引腳,并且加入濾波電容減少雜質(zhì)信號的影響。
遙控板采用NRF2.4G模塊的驅動(dòng)采用STM32的自帶外設SPI2進(jìn)行驅動(dòng),各個(gè)功能引腳的連接如表2所示。
NRF2.4G模塊采用3.3V供電,在供電端口外加0.1UF濾波存儲電容確保無(wú)線(xiàn)系統的穩定性。
4、四軸飛行器的軟件設計
四軸飛行器的軟件設計主要包括飛控板軟件的設計和遙控板軟件的設計。整體軟件在MDK環(huán)境下采用C語(yǔ)言編寫(xiě),采用ST-LINK仿真器對程序進(jìn)行調試與下載。
3.1飛控板系統軟件設計
飛控程序的主要設計思想是開(kāi)機對無(wú)線(xiàn)模塊的初始化、MPU6050的初始化、PWM電機初始化。隨后對整個(gè)系統IMU繼續零偏處理,隨后等待進(jìn)入解鎖信息的傳入。飛控采用定時(shí)器中斷的方式,在中斷中進(jìn)行對時(shí)間的處理,每次中斷計次標志就會(huì )自增,根據不同的中斷積累即不同時(shí)間的間隔分別處理優(yōu)先級不同的任務(wù)。
飛控系統每0.5毫秒中斷一次,每次中斷就會(huì )檢查一次無(wú)線(xiàn)模塊數據的接收,確保飛控系統的控制信息的實(shí)時(shí)性。每?jì)纱沃袛嗉?毫秒讀取一次IMU單元的數據,通過(guò)濾波算法獲得較為準確的系統加速度、角速度的原始數據。每四次中斷即2毫秒通過(guò)IMU的原始數據計算下當前飛控板系統的姿態(tài),然后結合遙控端的目標姿態(tài),根據兩者的差值通過(guò)PID控制算法進(jìn)行對各個(gè)電機的調速控制。每200次中斷即100毫秒,飛控系統會(huì )采集一次電池電壓,然后把電池電壓發(fā)送給遙控板,用來(lái)高速操作人員當前電壓的大小。
MPU6050作為系統的慣性測量單元,是整個(gè)系統正常運行基礎。MPU6050的驅動(dòng)總線(xiàn)為IIC方式,為了程序的方便性本系統選用PB10和PB11模擬IIC來(lái)驅動(dòng)。IMU讀取出來(lái)的數據只是最簡(jiǎn)單的加速度、陀螺儀角速度的原始數據,需要通過(guò)進(jìn)一步的處理才能得到本系統想要的姿態(tài)角度。
根據處理過(guò)后的MPU數據來(lái)獲得當前的姿態(tài),具體的姿態(tài)獲取理論上是根據各個(gè)角度的積分得到當前的系統姿態(tài)歐拉角。本系統的設計實(shí)現是采用四元數算法對MPU6050最濾波后的數據進(jìn)行計算得到最終的歐拉角。
整個(gè)飛控系統的運行動(dòng)作是通過(guò)調整飛控姿態(tài)來(lái)實(shí)現的,本系統設計在當前姿態(tài)的基礎上,根據接收到的遙控器的目標姿態(tài)對空心杯電機進(jìn)行基于PID算法的PWM控制調速,從而實(shí)現飛控系統的各種基本運動(dòng)。飛控板會(huì )對系統慣性測量單元傳感器的原始數據進(jìn)行濾波,然后對濾波后的數據進(jìn)行實(shí)時(shí)結算,最后根據遙控板發(fā)送來(lái)的目標信息進(jìn)行計算出電機的控制增量,最后根據PID控制算法對電機進(jìn)行控制輸出。
3.2遙控板系統軟件設計
遙控板的作用就是把操作人員的操作動(dòng)作轉化成信號傳給飛行控制板,同時(shí)將一些控制信息和飛控板傳回來(lái)的信息進(jìn)行實(shí)時(shí)的顯示和處理。飛控板搖桿數據的采集用到了STM32的ADC功能STM32F103xx增強型產(chǎn)品內嵌2個(gè)12位的模擬/數字轉換器(ADC),每個(gè)ADC共用多達16個(gè)外部通道,可以實(shí)現單次或掃描轉換。而且STM32的ADC可以采用DMA通道,這樣可以進(jìn)一步的節省硬件資源,加快系統實(shí)時(shí)性。采用SPI1驅動(dòng)NRF無(wú)線(xiàn)模塊,進(jìn)行與飛控板的數據通信。
本系統采用STM32的ADC1的通道4、通道5、通道6和通道7進(jìn)行搖桿模擬數據進(jìn)行采集,ADC和DMA的配置代碼如下:
ADC_Configuration(); //ADC 功能配置
DMA_Configuration(); //DMA 功能配置
下面是ADC和DMA的啟動(dòng)和時(shí)能代碼如下:
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //啟動(dòng) ADC1 轉換
DMA_Cmd(DMA1_Channel1, ENABLE); //啟動(dòng) DMA 通道
采用STM32外設SPI1驅動(dòng)NRF2.4G模塊,SPI初始化代碼如下:
Spi1_Init();
采用無(wú)線(xiàn)模塊的通道40進(jìn)行通信,2401初始化函數如下:
Nrf24l01_Init(MODEL_RX2,40); //通道40
2.4G無(wú)線(xiàn)模塊NRF2401的接收函數如下:
Nrf_Check_Event(); //讀取NRF2401數據
通過(guò)2401將控制信號發(fā)送,發(fā)送函數如下:
NRF_TxPacket_AP(NRF24L01_TXDATA_RC,32); //將控制信號發(fā)給四軸
5、結論
本文描述了一個(gè)簡(jiǎn)易四軸飛行器系統的設計實(shí)現,整個(gè)方案分為遙控控制板各飛行控制板兩部分,通過(guò)2.4G無(wú)線(xiàn)模塊進(jìn)行控制通信,飛控系統采用IMU系統獲取姿態(tài)信息根據反饋控制算法進(jìn)行電機控制從而實(shí)現飛行控制。本系統飛控板采用一體設計使得系統簡(jiǎn)單、緊湊,遙控板采用搖桿輸入使系統控制體驗良好,最終實(shí)現飛行器的基本運動(dòng)。實(shí)踐證明該四軸飛行器飛行穩定、可靠,取得了較好效果。
- STM32單片機中文官網(wǎng)
- STM32單片機官方開(kāi)發(fā)工具
- STM32單片機參考設計
評論