<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 設(shè)計應(yīng)用 > 四旋翼飛行器控制系統(tǒng)設(shè)計

          四旋翼飛行器控制系統(tǒng)設(shè)計

          作者:楊建華 趙紅娟 汶少陽 時間:2016-09-28 來源:電子產(chǎn)品世界 收藏
          編者按:本文基于四旋翼飛行器的工作原理和性能特點,給出了飛行器控制系統(tǒng)設(shè)計方案,進(jìn)行了姿態(tài)和高度數(shù)據(jù)采集的軟件設(shè)計,并基于卡爾曼濾波算法完成了傳感器數(shù)據(jù)融合,設(shè)計了PID控制器并完成了軟件實現(xiàn)。實驗結(jié)果表明,該控制系統(tǒng)能夠穩(wěn)定可靠運行,具有較強的魯棒性。

          2.2 MPU6050數(shù)據(jù)讀寫

          本文引用地址:http://www.ex-cimer.com/article/201609/310490.htm

          2.2.1 MPU6050初始化

            首先,我們要解除I2C休眠狀態(tài),(電源管理,典型值:0x00(正常啟用)),然后確定陀螺儀采樣率,典型值:0x07(125Hz),陀螺儀自檢及測量范圍,典型值:0x18(不自檢,2000deg/s),以及加速計自檢、測量范圍及高通濾波頻率,典型值:0x09(不自檢,4G)。如圖4所示。

            除了對MPU6050進(jìn)行工作模式的設(shè)定以外,還需設(shè)定芯片的零漂誤差,在每次采集數(shù)據(jù)后,都應(yīng)作差。這是因為MPU6050自身會受電磁場、溫度等的影響,會產(chǎn)生偏差。該值通過事先固定好MPU6050并進(jìn)行多次采樣,通過加權(quán)濾波算法求取平均值得到。

          2.2.2 濾波算法

            由于原始的歐拉角沒有經(jīng)過濾波,陀螺儀的值會隨著時間產(chǎn)生累積誤差,即經(jīng)過一定的時間之后會出現(xiàn)姿態(tài)錯誤的現(xiàn)象。因此,我們采用算法對得到的原始的歐拉角進(jìn)行濾波和數(shù)據(jù)融合,來消除噪聲和累積誤差,最終得到真實歐拉角。如圖5所示。

            在該系統(tǒng)中,我們從三軸陀螺儀得到的姿態(tài)數(shù)據(jù)有兩組:X、Y軸的加速度轉(zhuǎn)換的角度值和陀螺儀采集的X、Y軸的角速度,我們將加速度轉(zhuǎn)化的角度值設(shè)為temp,角速度轉(zhuǎn)化的角度值設(shè)為angle,angle的值等于上一時刻的真實角度值(即濾波得到的值)加上這一時刻角速度的值乘以時間積分dt,假設(shè)最初的協(xié)方差值為P[2][2] = [1, 0;0, 1],加速度過程協(xié)方差為Q_angle=0.001,加速度過程協(xié)方差為Q_gyro=0.003, 陀螺儀誤差初值q_bias設(shè)為0.05,測量協(xié)方差R_angle=0.5, 積分時間dt=0.0025;我們通過上面的五個公式不斷地更新協(xié)方差P和卡爾曼增益Kg,獲得最終的真實角度值(即角度)。MPU6050與的結(jié)合流程圖如圖6所示。

          3 飛行器穩(wěn)定控制的實現(xiàn)

            所有傳感器以及驅(qū)動部分均已配置好后開始配置主控程序的流程。本實驗通過配置一個通用定時器,每經(jīng)過一定時間后,進(jìn)入一次中斷服務(wù)函數(shù),我們稱之為控制中斷。在中斷服務(wù)函數(shù)里,提取傳感器數(shù)據(jù),進(jìn)行運算以及調(diào)整PWM波。此外還要讀取通過無線接收到的數(shù)據(jù),以及通過無線向上位機發(fā)送信息。

          3.1 控制定時器的設(shè)定

            設(shè)置定時器3為控制定時器,設(shè)置其每2.5ms中斷一次。設(shè)定定時器3的自動重裝載值TIM_Peri為2500,分頻系數(shù)TIM_Prescaler為72-1,采用向上計數(shù)。因為不需要比較輸出,只需要計數(shù)并按照設(shè)定進(jìn)入中斷即可,因此不需要設(shè)置0Cx相關(guān)寄存器。

            最后配置定時器3的搶占優(yōu)先級為2,子優(yōu)先級為0,這樣防止與通訊串口或超聲波模塊傳輸數(shù)據(jù)用的串口發(fā)生沖突等情況。清除中斷標(biāo)志位后,使能定時器3定時器,則系統(tǒng)就會每經(jīng)過2.5ms進(jìn)入中斷,采集傳感器數(shù)據(jù),并進(jìn)行調(diào)節(jié)。

          3.2 控制流程

            控制流程是指定時器3計時結(jié)束,觸發(fā)中斷后,進(jìn)入到中斷服務(wù)函數(shù)里進(jìn)行的操作。在進(jìn)入中斷后,首先清除定時器3的中斷標(biāo)志位,進(jìn)入超聲波測距子程序,并返回高度值。進(jìn)入高度控制器進(jìn)行控制量運算,然后輸出PWM波。之后通過I2C協(xié)議開始讀取MPU6050的數(shù)據(jù),并進(jìn)行數(shù)據(jù)融合,然后經(jīng)過卡爾曼濾波得到比較穩(wěn)定的姿態(tài)角信息,再分別經(jīng)過俯仰PID控制器、橫滾PID控制器以及偏航PID控制器進(jìn)行控制量調(diào)整,得到的PWM控制變量進(jìn)行疊加,最終將疊加后的四個電機的PWM控制變量輸出到四個電機。

            另一方面,為了實現(xiàn)無線數(shù)據(jù)的發(fā)送與接收,在這里,定義一個計數(shù)變量ms,每次進(jìn)入中斷后進(jìn)行自加,根據(jù)該變量的值進(jìn)行判定,是通過無線發(fā)送數(shù)據(jù),還是通過無線接收數(shù)據(jù),這樣可以有效地防止無線通訊發(fā)生混亂。在中斷服務(wù)函數(shù)里,控制流程圖如圖7所示。

          4 總結(jié)

            本文實現(xiàn)了對控制的軟件程序編寫。主要研究了PWM波的輸出以及對MPU6050的數(shù)據(jù)采集與處理。重點是控制流程的設(shè)計,即包含多個PID控制器的協(xié)同工作。與上位機和遙控之間的通訊是通過SPI協(xié)議進(jìn)行讀寫,在本論文中不做深入研究。

            在實際編寫中,是用STM32庫函數(shù)版本進(jìn)行代碼編寫,大大簡化了程序編寫的難度,并且可讀性也更強。

            最后進(jìn)行了系統(tǒng)調(diào)試實驗,定點定姿定高飛行控制姿態(tài)角的收斂情況如圖8所示。從實驗結(jié)果可以看出該控制系統(tǒng)在有一定的外部干擾情況下,能夠在40秒左右達(dá)到控制目標(biāo)。

          參考文獻(xiàn):

            [1]楊明志,王敏.四旋翼微型飛行器控制系統(tǒng)設(shè)計[J],計算機測量與控制,2008,16(4):485-490.

            [2]李勁松,宋立博,顏國正.基于自適應(yīng)逆控制方法的小型四旋翼無人直升機姿態(tài)控制[J].上海交大學(xué)報,2012,46(6):956~961

            [3]王璐,李光春,王兆龍等.欠驅(qū)動四旋翼無人飛行器的滑??刂芠J].哈爾濱工程大學(xué)學(xué)報,2012,33(10):1249~1253

            [4]甄紅濤,齊曉慧,夏明旗等.四旋翼無人機魯棒自適應(yīng)姿態(tài)控制[J].控制工程,2013,20(5):916~919.

            [5]王麗新.基于滑模理論的四旋翼直升機的姿態(tài)控制研究[D].沈陽:東北大學(xué),2009.

            [6]汪紹華,基于卡爾曼濾波的姿態(tài)估計和控制算法研究(英文)[J].控制理論與應(yīng)用,2013,30(9):1109~1115

          本文來源于中國科技期刊《電子產(chǎn)品世界》2016年第9期第48頁,歡迎您寫論文時引用,并注明出處。


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();