劉順財 施培植
(1.福州理工學院計算與信息科學學院;2.福州理工學院移動通信和物聯(lián)網(wǎng)福建省高校工程研究中心福建福州 350014)
在空中飛行需要克服眾多因素,要克服地球的吸引力,以及保持旋轉慣力和空氣的阻力等。此外還需要考慮電池續(xù)航、飛行過程中的亂發(fā)亂竄等問題,這些都需要精密的算法與硬件結合。
系統(tǒng)采用STM32F103為核心芯片,以MPU6050六軸傳感器的芯片作為測量角速率、加速度等主要裝置,遙控部分則通過NRF24L01(2.4G)線通信模塊實現(xiàn)遙控端和飛控端的數(shù)據(jù)傳輸,通過多個算法對數(shù)據(jù)進行處理,產(chǎn)生PWM波調速信號驅動空心杯電機,實現(xiàn)四旋翼飛行器的垂直運動,前后運動,側向運動,偏航運動,俯仰運動等運動,系統(tǒng)如圖1所示。
圖1 系統(tǒng)框架圖
(一)傳感器模塊。STM32F103C8T6有3個16位定時器,設置定時器成為4路用于捕獲/比較/PWM的功能通道,支持2個I2C接口、3個USART接口和2個SPI接口和DMA直接內存存取用于快速數(shù)據(jù)交換[1]。
MPU6050內置一個16位的ADC,能將三軸陀螺儀和三軸加速度計的數(shù)據(jù)轉換成數(shù)字量,編程高頻濾波器程序過濾不需要的信號,以提高系統(tǒng)穩(wěn)定性。配置內部低通濾波器進行數(shù)據(jù)濾波。STM32以集成電路總線通信的方式與MPU6050通信,最高的數(shù)據(jù)傳輸速率可達400kHz。通過芯片內部的數(shù)字運動處理模塊DMP可減小MCU對于姿態(tài)融合運算的負荷。驅動IIC總線,對MPU6050的一系列寄存器進行初始化,再從中讀取數(shù)據(jù)。
(二)通信模塊。NRF24L01是一種傳輸效率高,損耗極低,能在低壓正常運行的射頻收發(fā)器。發(fā)射功率可配制成0dBm、-6dBm、-12dBm和-18dBm[2]。數(shù)據(jù)傳輸速率有兩種選擇分別為1Mbps和2Mbps,具有125個通信通道和6個數(shù)據(jù)通道,數(shù)據(jù)包每次可傳輸最多32個字節(jié)的數(shù)據(jù),通信速率最高10Mbps。使用SPI接口設置輸出功率頻道和傳輸協(xié)議、工作頻率、傳輸速率、通信地址和數(shù)據(jù)包長度,可以通過IRQ引腳觸發(fā)MCU來判斷是否完成數(shù)據(jù)接收和發(fā)送。
(一)飛控板硬件電路。STM32F103C8T6、8M晶振和常規(guī)的電阻電容器件構成飛控板硬件。8M晶振可通過芯片內部PLL鎖相環(huán)倍頻電路將工作頻率提高到72M,以滿足四旋翼飛行器需要的運行速度。
電源電路采用3.7V的動力航模鋰電池,高于STM32工作電壓3.3V。為了能使飛行器更持久的飛行,需要充分利用完鋰電池的內部能量,設計先升壓再降壓的電路。升壓芯片為BL8530,該芯片采用47uH電感作為儲能元件。內部電路工作原理類似BOOST升壓電路,而SS34肖特基二極管充當續(xù)流二極管。3.3V穩(wěn)壓電路采用662K穩(wěn)壓芯片,為MCU和傳感器供電。飛行器在飛行過程中,電池電量會不斷下降。如果單純使用662K降壓電路,當電池電量低于3.3V時,穩(wěn)壓芯片無法正常工作。采用先升壓電路,可為后級降壓電路提供較持久的電壓差,保證四旋翼飛行時間。電源電路如圖2所示。
圖2 電源電路
電機采用的是8520空心杯電機,以PWM調速信號控制2302的nMOS管的導通,達到控制轉速。2302的開啟電壓是3.3V時,導通電流可達3A以上。假設8520空心杯電機的消耗電流為1A,導通瞬間電流以2倍正常工作電流來計算。MOS管的承受電流大于2A,所以2302可以滿足8520空心杯電機的正常工作。電路中100歐姆電阻起到限流作用,當MOS管導通瞬間,防止電流過大會加大MOS管負荷,縮短使用壽命。10K電阻的作用是當芯片復位時,IO口為浮空輸入狀態(tài),IO電平受外界影響,故加上10K下拉電阻防止MOS管異常導通,使電機異常工作。104電容的作用是吸收電機產(chǎn)生的高頻干擾噪聲。電機驅動電路如圖3所示。
圖3 電機驅動電路
由于制板工藝所限,電路設計使用單面板,白線部分為飛線。在飛控板的PCB設計上耗費大量時間,多次修改并重新制作。在設計PCB時要解決當四個空心杯電機同時工作時,電流最大可達2A,必須合理地為電機驅動部分設計對地回路。當四個空心杯電機高速旋轉時,對飛控板產(chǎn)生的強度很大的電磁干擾,影響電路板上電子元器件的正常工作。NRF24L01(2.4G)無線通信模塊對印刷電路板的走線布局非常嚴格。模塊上的印刷天線附近不能存在走線。2.4G模塊對供電電源的純度要求嚴格,所以必須將模塊盡量靠近穩(wěn)壓電源輸出,以保證供電電源的純凈和穩(wěn)定。飛控板硬件電路PCB如圖4所示。
圖4 飛控板PCB
(二)遙控板硬件電路。遙控電路的最小系統(tǒng)電路跟飛控板的電路類似,也是8M晶振和電阻、電容元件。此外還添加了一個復位開關,當遙控設備與飛控設備通信異常的情況需要進行復位。
遙控電源供電部分采用的是MIC5219降壓芯片,將3.7V航模電池的電壓降壓為3.3V,以供MCU和傳感器使用。MIC5219是一種帶載能力強、輸出電流大、輸出電壓精度高、超低噪聲輸出、接近零關斷電流的電壓調節(jié)器。電路如圖5所示。
圖5 遙控板電源
搖桿電位器實質由滑動變阻器組合而成,通過STM32F103內部的ADC采樣電路采集兩個搖桿電位器的電阻分壓值,歸一化后轉換為油門控制值和姿態(tài)角控制值。
系統(tǒng)初始化,包括IIC、SPI通信接口以及MPU6050、NRF24L01設備初始化。接收上位機發(fā)送過來的指令,用LED指示燈顯示系統(tǒng)當前的運行狀態(tài)。當進入中斷時,使用IIC通信接口讀取MPU6050數(shù)據(jù),將讀取到的數(shù)據(jù)經(jīng)過卡爾曼濾波算法程序,通過四元數(shù)姿態(tài)解算程序計算出當前的姿態(tài)信息。再通過PID算法對姿態(tài)數(shù)據(jù)進行控制,更新控制四個空心杯電機的PWM調速信號來調整四旋翼飛行器的姿態(tài),飛行控制軟件包括姿態(tài)算法和姿態(tài)控制。
GPIO模擬IIC通信協(xié)議對MPU6050進行通信。GPIO初始化時配置為開漏輸出。在進行信道信息傳送時,數(shù)據(jù)引腳的數(shù)據(jù)必須在時鐘引腳高電平期間保持不變。在數(shù)據(jù)引腳的電位狀態(tài)變換的過程中,只有電位為0的時候才開始改變。起始信號由當時鐘線為高電平時,數(shù)據(jù)線由高電平向低電平切換。停止信號是當時鐘線是高電平時,數(shù)據(jù)發(fā)生從低電平到高電平的跳變。應答信號則是主控制器將數(shù)據(jù)線釋放(拉高),在響應時間要求內,從機將數(shù)據(jù)線拉低,表示一個有效的應答信號,若從機沒有將數(shù)據(jù)線拉低,則表示為非應答信號。軟件流程圖如圖6所示。
圖6 軟件流程圖
MPU6050設備的初始化:設置三軸陀螺儀采樣率為500Hz,設置低通濾波器頻率為42Hz,設置陀螺儀測量范圍為±2000deg/s,設置三軸加速度計測量范圍為±4G。
SMPLRT_DIV[7:0]是8位無符號數(shù)值。設置該數(shù)值將陀螺儀的輸出分頻,作為MPU6050的采樣頻率。傳感器的輸出、FIFO輸出以及DMP采樣都是基于這個采樣率數(shù)值。采樣完后鎖存器將復位到初始的FSYNC狀態(tài)。DLPF_CFG[2:0]是3位無符號數(shù)值,用來配置陀螺儀和加速度計的數(shù)字低通濾波器。
串行外設接口是單片機和外置設備之間的一種約定速率下的同步傳輸,發(fā)送和接收端都實時做數(shù)據(jù)交流。對NRF24L01初始化,設置通信頻段號,器件有125個頻段通道可供選擇。將通道設置為通道0,設置通信頻率,使能通道0的自動應答,設置通道0的接收地址和有效數(shù)據(jù)寬度,寫發(fā)送節(jié)點地址和接收節(jié)點地址,配置循環(huán)自動請求和最大限制重新發(fā)送請求頻率以及TX發(fā)送的傳輸數(shù)據(jù)。當NRF24L01發(fā)送或接收到數(shù)據(jù)時,會在外部中斷引腳產(chǎn)生一個低電平中斷,通過外部中斷引腳的狀態(tài)來判斷無線通信模塊當前收發(fā)數(shù)據(jù)的完成與否,然后將狀態(tài)標志位清除,繼續(xù)下一次通信。
卡爾曼濾波是關于連續(xù)離散信號的遞歸濾波算法,卡爾曼濾波算法利用上個時刻的估算值和當前時刻的測量值來計算出下一刻的估計值。將卡爾曼濾波算法結合四旋翼飛行器進行闡述。如果想知道飛行器的一個姿態(tài)或速度等信息,就要從飛行器機架上的檢測裝置獲取?;蛘咄ㄟ^以牛頓慣性定律為原理的導航進行數(shù)學邏輯與語言構建的模型來運算。將兩個值通過計算優(yōu)化后得到的優(yōu)化值。通過將該優(yōu)化值與數(shù)學模型計算出來的數(shù)值進行比較,就知道哪種途徑計算出來的數(shù)值更接近優(yōu)化值。下次計算時,應該給予該途徑計算出的數(shù)值更大的權重,通過反復的計算,從而得到一個相對較為實際的數(shù)值。利用卡爾曼濾波算法進行濾波處理后可提高接收信號的準確性[3-5]。程序函數(shù)如下所示:
PID是基于數(shù)學的比例、積分、微分算法組成的反饋控制器。當發(fā)生誤差時,控制系統(tǒng)立即糾正誤差,并且在兩波之后姿態(tài)角將保持在穩(wěn)定水平并最終返回到平衡位置??刂破靼旬斍暗臄?shù)據(jù)和設定的參考數(shù)據(jù)進行比較,然后將差值用于新的計算輸入,最終使系統(tǒng)的輸出達到設定的目標值,P代表比例控制,I代表積分控制,D代表微分控制[6-8]。比例控制越大,對誤差的調節(jié)會過于猛烈,會使系統(tǒng)不穩(wěn)定。如果比例調節(jié)較小,則誤差出現(xiàn)時,控制器的響應較慢,對誤差的修正力度較弱。積分控制會促使系統(tǒng)趨近設定值,消除單純只有比例控制的穩(wěn)態(tài)誤差。積分控制量越大,趨近設定值的速度越快,但也有可能使反饋出現(xiàn)過沖的情況。微分控制是考慮未來誤差,計算誤差的變化率來對系統(tǒng)的改變做出反應[9-10]。微分的結果越大,表明系統(tǒng)對誤差能做出更加快速的反應。程序函數(shù)如下所示:
遙控軟件的功能是MCU采集搖桿電位器的四路電壓值轉換成控制指令,通過NRF24L01給飛行控制板發(fā)送指令,飛控板根據(jù)指令采取相應的動作。
借助匿名科創(chuàng)地面站平臺對四旋翼飛行器進行調試。當前后、左右、上下移動時ACC-X、ACC-Y、ACC-Z都有相應的數(shù)據(jù)變化,表明加速度計正常工作。當飛行器朝3個軸向擺動時,會看到PITCH、ROLL、YAW的數(shù)據(jù)同步更新,代表陀螺儀正常工作。地面站中還有一個飛行器的模型能根據(jù)實際飛行器的姿態(tài)同步更新。借助該平臺來調試PID控制器中比例、積分、微分三個參數(shù)。在地面站寫入對四軸新的PID參數(shù),設置不同的PID參數(shù)組合,從而使飛行器響應快又可較穩(wěn)定的達到平衡。
(一)整機聯(lián)調。通過不斷地對PID參數(shù)進行調整,使四旋翼飛行器能夠較好地抵抗外接干擾,根據(jù)遙控指令作出響應并準確飛行。當系統(tǒng)未能使四旋翼飛行器垂直起飛,起飛時會有偏移現(xiàn)象存在,具體調試步驟如下:先調PITCH和ROLL的內環(huán)P。慢慢加大P,使得四旋翼飛行器能平穩(wěn)起飛。然后繼續(xù)增大P,直到四旋翼飛行器開始輕微抖動。再把P值降低,使得四旋翼飛行器能平穩(wěn)起飛。然后再加一點D值抑制振蕩。調節(jié)PITCH和ROLL的外環(huán)P。使P慢慢增大,會感覺四旋翼抑制偏移的力量越來越大,但是會有振蕩現(xiàn)象存在。此時一樣加入D抑制振蕩,再調節(jié)一下參數(shù)I就可以使四旋翼飛行器工作地較為流暢穩(wěn)定。
在調節(jié)四旋翼飛行器的過程中,經(jīng)常會出現(xiàn)通信突然異常,飛控板不受遙控控制,飛行器出現(xiàn)亂飛亂竄的現(xiàn)象。通過調試發(fā)現(xiàn)原因是空心杯電機高速旋轉時帶來的電磁干擾。為此重新設計飛控板PCB設計,對每一個電機的電流回路都做了相應的處理,使電機運轉產(chǎn)生的大電流有單獨的對地回路,并且增大對地回路的面積。而后又將NRF24L01無線通信模塊單獨通過飛線固定在板外。降低電機產(chǎn)生的電磁干擾影響。通過以上設置之后,后續(xù)的調試過程中,沒有產(chǎn)生通信異常等狀況,作品如圖7所示。
圖7 成品電路圖
改進式軟硬件的四旋翼飛行器系統(tǒng),實驗調試總結如下:
(一)如果利用直接3.3穩(wěn)壓芯片的供電電路,隨著鋰電池低于3.3V時,系統(tǒng)因為辦法穩(wěn)壓導致飛行器沒有辦法飛行。對比設計一個先升壓再降壓,并穩(wěn)定3.3V的供電電壓,可以基本用完鋰電池的能量。
(二)如果不考慮高頻和地線線寬的布線,直接隨機等寬自動布線時,系統(tǒng)因為電流和電磁場的干擾導致飛控板不受遙控控制,飛行器出現(xiàn)亂飛亂竄的現(xiàn)象。對比按照高頻信號、抗電磁場和大電流的要求設計一個合理的PCB,基本上沒有在出現(xiàn)亂飛亂竄的現(xiàn)象。
(三)通過卡爾曼濾波算法進行濾波處理后可提高接收信號的準確性。
(四)通過在地面站寫入對四軸新的PID參數(shù),設置不同的PID參數(shù)組合,從而使飛行器響應快又可較穩(wěn)定的達到平衡。