標籤:思路 線性 表示 比較 論文 電池 大學 頻率 電路設計
單片機應用技術實訓設計報告
(四軸飛行器)
所屬系部: 電氣資訊工程系
班 級: (2014)通訊技術1班
姓 名: 彭世秋
指導老師: 施 芸
摘 要
為了滿足四軸飛行器的設計要求,設計了以微控制器為核心的控制系統和演算法。首先進行了各單元電路方案的比較論證,確定了硬體設計方案。四軸飛行器採用了固連在剛性十字架交叉結構上的4個無刷電機驅動的一種飛行器,以ARM公司的Context-M3 CPU內核為基礎,圍繞新的Context-M3 CPU內核演化而來的意法半導體公司的STM32F103高容量單片機作為控制核心,工作頻率高達72MHz,標準工作電壓3.3V,適合各種類型的消費類電子和工業應用, 該控制器為32位低功耗單片機,有助於降低系統功耗,削減總系統的構建成本。採用電調驅動無刷電機,且具有控制簡單、功率大、帶5V電源輸出等特性。通過採用MPU-6050整合的3軸陀螺儀、3軸加速器,並含可藉由第二個I2C連接埠串連其他廠牌之加速器、磁力感應器、或其他感應器的數位運動處理(DMP: Digital Motion Processor)硬體加速引擎,而本系統採用的是利用MPU-6050內部DMP計算出四元數,通過公式轉換為歐拉角,通過串級PID計算出PWM增量,即時調節四軸飛行器的姿態,串級PID具有調試簡單,效率高,穩定性好等優點。依靠藍芽、NRF24L模組和四軸飛行器進行資料交換。
關鍵詞:四軸飛行器,MPU-6050,STM32F103,串級PID,歐拉角 , DMP ,四元數
目 錄
目錄
一、系統方案論證4
1.1 姿態模組的論證與選擇4
1.2 電源模組的論證與選擇4
1.3飛行方式的論證與選擇5
1.4 無刷電機驅動模組的論證與選擇5
1.5 單片機的選擇6
1.6遙控方式的選擇6
二、系統理論分析與計算7
2.1 串級PID控制演算法的分析7
2.1.1串級PID理論分析7
2.1.2 串級PID整定方法的分析7
2.1.3 串級PID框圖8
2.2 歐拉角的理論與計算8
2.2.1 歐拉角的理論分析8
2.2.2 四元數計算出歐拉角的理論分析9
2.2.3 四元數計算出歐拉角的程式設計10
2.2.4 硬體加速引擎(DMP)理論分析12
2.3 四軸飛行器和飛行結構分析13
2.3.1 結構形式13
2.3.2 工作原理14
三、電路與程式設計17
3.1 電路的設計17
3.1.1 系統總體框圖17
3.1.2 MPU6050電路原理圖17
3.1.3電機驅動系統框圖18
3.1.4電源模組18
3.1.5 單片機最小系統電路設計19
3.1.6 電調串連原理圖19
3.2程式的設計20
3.2.1程式功能描述與設計思路20
3.2.2程式流程圖21
四、測試方案與測試結果22
4.1測試方案22
4.2 測試結果及分析22
4.2.1測試分析與結論22
五、專用周總結23
六、參考資料25
六、附錄:26
一、系統方案論證
系統主要由單片機控制模組、姿態採集模組、電源模組、電機驅動模組、無刷電機、機架和防撞圈等七部分組成,採用“+”型飛航模式,下面分別論證這幾個模組的選擇。
1.1 姿態模組的論證與選擇
方案一:MPU6050三軸陀螺儀。MPU6050三軸陀螺儀就是可以在同一時間內測量六個不同方向的加速、移動軌跡以及位置的測量裝置。單軸的話,就只可以測定一個方向的量,那麼一個三軸陀螺就可以代替三個單軸陀螺。它現在已經成為雷射陀螺的發展趨向,具有可靠性很好、結構簡單不複雜、重量很輕和體積很小等等特點,但是其輸出資料需要大量的浮點預算才能保證較高的精度,這樣會影響單片機對最終的姿態控制的響應速率,優點是改晶片資料多,應用成熟,價格便宜,是一款非常適合初學者入門的晶片。
方案二:光纖陀螺儀。光纖陀螺儀是以光導纖維線圈為基礎的敏感元件, 由雷射二極體發射出的光線朝兩個方向沿光導纖維傳播。光傳播路徑的變化,決定了敏感元件的角位移。光纖陀螺儀壽命長,動態範圍大,瞬時啟動,結構簡單,尺寸小,重量輕,但是成本較高。
方案三:AHRS模組。AHRS模組包含了MPU6050(整合3軸陀螺儀和3軸加速度計)、HMC5883L(3軸地磁感應器),BPM180氣壓高度計等模組。且AHRS模組內部已經進行一些資料處理,通過串口直接輸出飛行器的當前姿態狀態,減少了單片機進行姿態解算的已耗用時間消耗,進一步提高了單片機對飛行器的姿態控制,但是該模組為整合模組,價格較高,不適合初學者學習QFN封裝的焊接。
綜合以上三種方案,我們選擇了方案一。
1.2 電源模組的論證與選擇
飛行器的電機電源由12伏的航模專用鋰電池直接提供,而我們採用的電調為12V,帶5V電源輸出,STM32單片機的工作電壓為3.3V,所以系統需要進行一次電壓轉換,為控制核心供電,其品質直接決定了系統的穩定性。
方案一:ME6219系列是以CMOS工藝製造的高精度,低噪音,超快響應低壓線性穩壓器。這個系列的穩壓器內建固定的參考電壓源,誤差修正電路,限流電路,相位補償電路以及低內阻的MOSFET,達到高紋波抑制,低輸出噪音,超快低壓差效能。高精度輸出電壓高。
方案二:AMS1117。AMS1117系列穩壓器有可調版與多種固定電壓版,設計用於提供1A輸出電流且工作壓差可低至1V。在最大輸出電流時,AMS1117器件的壓差保證最大不超過1.3V,並隨負載電流的減小而逐漸降低。AMS1117的片上微調把基準電壓調整到1.5%的誤差以內,而且電流限制也得到了調整,以盡量減少因穩壓器和電源電路超載而造成的壓力。但是能提供的電流較小,且在大電流工作狀態下易發熱。
綜合以上兩種方案,選擇方案二。
1.3飛行方式的論證與選擇
方案一:十字飛行方式。四軸的四個電機以十字的方式排列,調整的時候應該對角調整,我們這裡主要用於測試演算法。優點:十字飛航模式調試簡單,非常適合初學者掌握四軸飛行器飛行演算法,缺點:它靈活性和可調性有限。
方案二:X行飛行方式。四軸的四個電機以X字的方式排列,調整的時候應該相鄰兩個調節,靈活性和可調性較高。X型飛行方式非常自由靈活,旋轉方式多樣,可以花樣飛行,也可以做出很多高難度動作,但是該方式參數較難調試,不適合初學者使用。
綜合以上兩種方案,選擇了方案一。
1.4 無刷電機驅動模組的論證與選擇
方案一:自己製作無刷電機驅動電路,這個難度大,容易炸機,不適合初學者採用,但是自己製作驅動模組可以進一步學習類比電路。
方案二:採用電調模組,該模組應用已經非常成熟,且和自己製作電調相比,具有控制簡單,內建5V電源輸出,可以省去5V電源設計,簡化電路結構,減少電路佔用面積,穩定性非常高,控制靈活,非常適合初學者採用。
綜合以上兩種方案,選擇了方案二。
1.5 單片機的選擇
方案一:採用國產STC15W4K61S4系列單片機,該單片機8位單片機,成本低,可以工作在1T模式下,最高內部震蕩頻率為30MHZ,可以省去最小系統的設計,不需要外接晶振和複位電路,可以省去電路設計的工作量。但是該單片機處理效率低,運行速度慢,不適合姿態計算和資料融合的計算量相當大的應用場合。
方案二:採用ST公司的STM32F103系列單片機,該單片機採用ARM Context-M3核心,該單片機為32位,最高工作頻率為72MHZ,具有處理速度快,工作效率高,適合應用於工業控制。該單片機資料多,採用ST公司整合庫開發具有開發簡單,開發週期短,效率高等優點,非常適合用於四軸飛行器的控制核心。
綜合以上兩種方案,選擇了方案二。
1.6遙控方式的選擇
方案一:採用藍芽方式控制四軸飛行器,因為藍芽控制簡單,很方便的和手機和PC串連,控制容易。且採用匿名四軸飛行器的匿名上位機和四軸串連可以分析四軸資料,對PID進行設定和針對遊戲手柄控制四軸,非常適合初學者,且做四軸演算法驗證實驗。
方案二:採用NRF24L01模組,該模組工作頻段為2.4GHz,傳輸距離遠,採用SPI和MCU通訊,可實現長達1千米左右的遠距離控制,但是必須自己製作遙控器,適合對四軸演算法調試成功後對四軸進行控制,這個也是以後的製作目標。
方案三:採用現在比較流行的多通道遙控器,內部為2.4模組和MCU構成,直接輸出PPM脈寬,單片機只需捕獲該脈寬就可以對四軸進行控制,該遙控器已經產品化,使用簡單,穩定高效,也不需要自己編寫通訊協定。但是該遙控器價格昂貴,目前還沒有資金支援。
綜合以上三個方案,選擇了方案一。
二、系統理論分析與計算
2.1 串級PID控制演算法的分析
2.1.1串級PID理論分析
ROLL和PIT軸向按照以上公式計算PID輸出,但YAW軸比較特殊,因為偏航角法線方向剛好和地球重力平行,這個方向的角度無法由加速度計直接測得,需要增加一個電子羅盤來替代加速度計。如果不使用羅盤的話,我們可以單純的通過角速度積分來測得偏航角,缺點是由於積分環節中存在積分漂移,偏航角隨著時間的推移會偏差越來越大。我們不使用羅盤就沒有比例項,只僅使用微分環節來控制。串級PID:採用的角度P和角速度PID的雙閉環PID演算法------>角度的誤差被作為期望輸入到角速度控制器中 (角度的微分就是角速度)
對於本系統則採用了將角度控制與角速度控制級聯的方式組成整個串級 PID 控制器。串級 PID 演算法中,角速度內環佔著極為重要的地位。在對四旋翼飛行的物理模型進行分析後,可以知道造成系統不穩定的物理表現之一就是不穩定的角速度。因此,若能夠直接對系統的角速度進行較好的閉環控制,必然會改善系統的動態特性及其穩定性,通常也把角速度內環稱為增穩環節。而角度外環的作用則體現在對四軸飛行器的姿態角的精確控制。
外環:輸入為角度,輸出為角速度
內環:輸入為角速度,輸出為PWM增量
使用串級PID,分為:角度環控制PID環,和角速度控制環穩定環。主調為角度環(外環),副調為角速度環(內環)。
參數整定原則為先內後外,故在整定內環時將外環的PID均設為0
所謂外環就是只是一個P在起作用,也就是比例在起作用;P也就是修正力度,越大越容易使飛機震蕩。
震蕩的特點是:頻率小、幅度大。
2.1.2 串級PID整定方法的分析
調試該系統分為6步:
第一步:將內外環PID都歸0,適當增加內環的P,調整P至四軸從正面朝上自然轉動到正面朝下時能感受到阻力,且沒有抖動,有抖動就應減小P,當P減小到無抖動或者輕微抖動時即可。
第二步:讓內環的D慢慢增加,到你用手能明顯感受到轉動四軸產生排斥外力的阻力即可,D能抑制P產生的振蕩,但是D過大也會導致高頻振蕩,調整D至系統無振蕩且能抑制外界的力即可。
第三步:給內環一點點I,注意的是I的積分要在油門開啟後才開始,油門關閉就清0,且必須有積分限幅。I推薦取越小越好,我取的是0.01,I取大了會導致系統振蕩。
將內環P減半,將外環P調至內環的50-70倍,根據系統產生的高頻振蕩降低內環的D,直至高頻振蕩消除即可。
給外環一點點I,同3.
第四步:根據實際情況對參數進行最佳化調整,調整過程中要注意區分各個參數的作用,時刻記住,P是回複力,大了會低頻振蕩,D是抑制力,大了會高頻振蕩,I是靜差消除力,越小越好,大了會產生振蕩。
2.1.3 串級PID框圖
圖1 串級PID控制原理框圖
2.2 歐拉角的理論與計算
2.2.1 歐拉角的理論分析
在3D模型中,最常用的旋轉表示方法便是四元數和歐拉角,比起矩陣來具有節省儲存空間和方便插值的優點。本文主要歸納了兩種表達方式的轉換,計算公式採用3D笛卡爾座標系:
定義 分別為繞Z軸、Y軸、X軸的旋轉角度,如 果用Tait-Bryan angle表示,分別為航向角(Yaw)、俯仰角(Pitch)、
橫滾角(Roll)。
歐拉角的動態定義把歐拉角看成3次連續轉動而形成的,按照轉動軸線及其順序選擇的不同,有12種定義方法。這裡我們主要分析航空次序歐拉角,航空次序歐拉角是按照Z-Y-X的順序定義的繞Z軸旋轉代表航向角(Yaw),繞Y軸旋轉代表俯仰(Pitch),繞X軸旋轉代表橫滾角(Roll)。
2.2.2 四元數計算出歐拉角的理論分析
一、四元數的定義
=1
通過旋轉軸和繞該軸旋轉的角度可以構造一個四元數:
其中 是繞旋轉軸旋轉的角度, 為旋轉軸在x,y,z方向的分量(由此確定了旋轉軸)。
二、歐拉角到四元數的轉換
三、四元數到歐拉角的轉換
arctan和arcsin的結果是 ,這並不能覆蓋所有朝向(對於 角 的取值範圍已經滿足),因此需要用atan2來代替arctan。
四、在其他座標系下使用
在其他座標系下,需根據座標軸的定義,調整一下以上公式。如在Direct3D中,笛卡爾座標系的X軸變為Z軸,Y軸變為X軸,Z軸變為Y軸(無需考慮方向)。
2.2.3 四元數計算出歐拉角的程式設計
float q0 = 1, q1 = 0, q2 = 0, q3 = 0; //定義四元素
void IMU_Update(void)
{
float norm;
float gx = MPU6500_Gyro.X*GYRO_GR,gy = MPU6500_Gyro.Y*GYRO_GR,gz = MPU6500_Gyro.Z*GYRO_GR;//角度之間的單位轉換
float ax = Acc_Avg.X,ay = Acc_Avg.Y,az = Acc_Avg.Z;
float q0q0 = q0 * q0;
float q0q1 = q0 * q1;
float q0q2 = q0 * q2;
float q1q1 = q1 * q1;
float q1q3 = q1 * q3;
float q2q2 = q2* q2;
float q2q3 = q2*q3;
float q3q3 = q3*q3;
float vx, vy, vz;
float ex, ey, ez;
floatq0_yawq0_yaw = q0_yaw * q0_yaw;
floatq1_yawq1_yaw = q1_yaw * q1_yaw;
floatq2_yawq2_yaw = q2_yaw * q2_yaw;
floatq3_yawq3_yaw = q3_yaw * q3_yaw;
floatq1_yawq2_yaw = q1_yaw * q2_yaw;
floatq0_yawq3_yaw = q0_yaw * q3_yaw;
//**************************Yaw軸計算******************************
//Yaw軸四元素的微分方程
q0_yaw = q0_yaw + (-q1_yaw * gx - q2_yaw * gy - q3_yaw * gz) * SAMPLE_HALF_T;
q1_yaw = q1_yaw + (q0_yaw * gx + q2_yaw * gz - q3_yaw * gy) * SAMPLE_HALF_T;
q2_yaw = q2_yaw + (q0_yaw * gy - q1_yaw * gz + q3_yaw * gx) * SAMPLE_HALF_T;
q3_yaw = q3_yaw + (q0_yaw * gz + q1_yaw * gy - q2_yaw * gx) * SAMPLE_HALF_T;
//正常化Yaw軸四元數
norm = sqrt(q0_yawq0_yaw + q1_yawq1_yaw + q2_yawq2_yaw + q3_yawq3_yaw);
q0_yaw = q0_yaw / norm;
q1_yaw = q1_yaw / norm;
q2_yaw = q2_yaw / norm;
q3_yaw = q3_yaw / norm;
if(ax * ay * az== 0)
return ;
//正常化加速度計值
norm = sqrt(ax * ax + ay * ay + az * az);
ax = ax / norm;
ay = ay / norm;
az = az / norm;
//估計重力方向和流量/變遷
vx = 2 * (q1q3 - q0q2);
vy = 2 * (q0q1 + q2q3);
vz = q0q0 - q1q1 - q2q2 + q3q3 ;
//向量外積再相減得到差分就是誤差
ex = (ay * vz - az * vy) ;
ey = (az * vx - ax * vz) ;
ez = (ax * vy - ay * vx) ;
//對誤差進行PI計算
ex_int = ex_int + ex * IMU_KI;
ey_int = ey_int + ey * IMU_KI;
ez_int = ez_int + ez * IMU_KI;
//校正陀螺儀
gx = gx + IMU_KP * ex + ex_int;
gy = gy + IMU_KP * ey + ey_int;
gz = gz + IMU_KP * ez + ez_int;
//四元素的微分方程
q0 = q0 + (-q1 * gx - q2*gy - q3*gz)*SAMPLE_HALF_T;
q1 = q1 + (q0*gx + q2*gz - q3*gy)*SAMPLE_HALF_T;
q2 = q2 + (q0*gy - q1*gz + q3*gx)*SAMPLE_HALF_T;
q3 = q3 + (q0*gz + q1*gy - q2*gx)*SAMPLE_HALF_T;
//正常化Pitch、Roll軸四元數
norm = sqrt(q0q0 + q1q1 + q2q2 + q3q3);
q0 = q0 / norm;
q1 = q1 / norm;
q2 = q2 / norm;
q3 = q3 / norm;
//求解歐拉角
Angle.X = atan2(2 * q2q3 + 2 * q0q1, -2 * q1q1 - 2 * q2q2 + 1) * 57.3f;
Angle.Y = asin(-2 * q1q3 + 2 * q0q2) * 57.3f;
Angle.Z = atan2(2 * q1_yawq2_yaw + 2 * q0_yawq3_yaw, -2 * q2_yawq2_yaw - 2 * q3_yawq3_yaw + 1)* 57.3f;
}
程式說明:該程式由開源四軸BlackHole1提供。
2.2.4 硬體加速引擎(DMP)理論分析
MPU-6050整合了3軸陀螺儀、3軸加速器,數字運動處理(DMP: Digital Motion Processor)硬體加速引擎,該DMP功能的最強大功能就是它使用的是MPU6050整合的內部加速引擎,避開上文的利用MPU6050未經處理資料,通過各種演算法得到穩定的四元數,而我們利用官方的DMP驅動程式直接讀取出四元數的數值,省下大量的工作量,在利用四元數計算公式計算出穩定,有效歐拉角。但是因為沒有採用地磁補償,航向角(Yaw)會隨時間產生誤差。
計算出歐拉角的部分程式如下:
q0 = quat[0] / q30;//q30格式轉換為浮點數
q1 = quat[1] / q30;
q2 = quat[2] / q30;
q3 = quat[3] / q30;
//計算得到俯仰角/橫滾角/航向角
*pitch = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3;// pitch
*roll = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3;// roll
*yaw = atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) * 57.3;//yaw
2.3 四軸飛行器和飛行結構分析
2.3.1 結構形式
旋翼對稱分布在機體的前後、左右四個方向,四個旋翼處於同一高度平面,且四個旋
翼的結構和半徑都相同,四個電機對稱的安裝在飛行器的支架端,支架中間空間安放飛行控
制電腦和外部裝置
圖4四軸結構圖
2.3.2 工作原理
四旋翼飛行器通過調節四個電機轉速來改變旋翼轉速,實現升力的變化,從而控制飛
行器的姿態和位置。四旋翼飛行器是一種六自由度的垂直升降機,但只有四個輸入力,同時
卻有六個狀態輸出,所以它又是一種欠驅動系統。
四軸飛行器的電機 1 和電機 3 逆時針旋轉的同時,電機 2 和電機 4 順時針旋轉,
因此當飛行器平衡飛行時,陀螺效應和空氣動力扭矩效應均被抵消。在中,電機 1 和電機 3 作逆時針旋轉,電機 2 和電機 4 作順時針旋轉,規定沿x 軸正方向運動稱為向前運動,↑箭頭表示此電機轉速提高,↓表示此電機轉速下降。
在中,電機 1 和電機 3 作逆時針旋轉,電機 2 和電機 4 作順時針旋轉,規定沿x 軸正方向運動稱為向前運動,箭頭在旋翼的運動平面上方表示此電機轉速提高,在下方表示此電機轉速下降。
( 1)垂直運動:同時增加四個電機的輸出功率,旋翼轉速增加使得總的拉力增大,當總拉力足以克服整機的重量時,四旋翼飛行器便離地垂直上升;反之,同時減小四個電機的輸出功率,四旋翼飛行器則垂直下降,直至平衡落地,實現了沿 Z 軸的垂直運動。當外界擾動量為零時,在旋翼產生的升力等于飛行器的自重時,飛行器便保持懸停狀態。
( 2)俯仰運動:在圖( b)中,電機 1 的轉速上升,電機 3 的轉速下降(改變數大小應相等),電機 2、電機 4 的轉速保持不變。由於旋翼 1 的升力上升,旋翼 3 的升力下降,產生的不平衡力矩使機身繞 y 軸旋轉,同理,當電機 1 的轉速下降,電機 3 的轉速上升,機身便繞 y 軸向另一個方向旋轉,實現飛行器的俯仰運動。
( 3)滾轉運動:與圖 b 的原理相同,在圖 c 中,改變電機 2 和電機 4 的轉速,保持電機 1 和電機 3 的轉速不變,則可使機身繞 x 軸旋轉(正向和反向),實現飛行器的滾轉運動。
( 4)偏航運動:旋翼轉動過程中由於空氣阻力作用會形成與轉動方向相反的反扭矩,為了克服反扭矩影響,可使四個旋翼中的兩個正轉,兩個反轉,且對角線上的各個旋翼轉動
方向相同。反扭矩的大小與旋翼轉速有關,當四個電機轉速相同時,四個旋翼產生的反扭矩
相互平衡,四旋翼飛行器不發生轉動;當四個電機轉速不完全相同時,不平衡的反扭矩會引起四旋翼飛行器轉動。在圖 d 中,當電機 1 和電機 3 的轉速上升,電機 2 和電機 4 的
轉速下降時,旋翼 1 和旋翼 3 對機身的反扭矩大於旋翼 2 和旋翼 4 對機身的反扭矩,機身便在富餘反扭矩的作用下繞 Z 軸轉動,實現飛行器的偏航運動,轉向與電機 1、電機 3 的轉向相反。
( 5)前後運動:要想實現飛行器在水平面內前後、左右的運動,必須在水平面內對飛行器施加一定的力。在圖 e 中,增加電機 3 轉速,使拉力增大,相應減小電機 1 轉速,使拉力減小,同時保持其它兩個電機轉速不變,反扭矩仍然要保持平衡。按圖 b 的理論,飛行器首先發生一定程度的傾斜,從而使旋翼拉力產生水平分量,因此可以實現飛行器的前飛運動。向後飛行與向前飛行正好相反。(在圖 b 圖 c 中,飛行器在產生俯仰、翻滾運動的同時也會產生沿 x、 y 軸的水平運動。)
( 6)傾向運動:在圖 f 中,由於結構對稱,所以傾向飛行的工作原理與前後運動完全一樣。
三、電路與程式設計
3.1 電路的設計
3.1.1 系統總體框圖
系統總體框圖2所示。
圖5 系統總體框圖
3.1.2 MPU6050電路原理圖
圖7 MPU6050子系統電路
3.1.3電機驅動系統框圖
圖8 電機驅動子系統框圖
3.1.4電源模組
電源由濾波部分、穩壓部分組成。這裡5V電源直接採用電調輸出的5V電源,這裡只是把5V電源通過ASM1117輸出穩定的3.3V電源。
圖9 電源子系統電路
3.1.5 單片機最小系統電路設計
圖10 單片機最小系統電路
3.1.6 電調串連原理圖
圖11 電調串連原理圖
3.2程式的設計
3.2.1程式功能描述與設計思路
1、程式功能描述
根據題目要求軟體部分主要分為三部分,第一部分為無刷電機驅動部分,利用STM32單片機內部定時器的多路PWM輸出功能,實現無刷電機驅動;第二部分為MPU6050模組資料接收部分,利用STM32單片機內部串口USART1和藍芽模組通訊,利用STM32類比IIC介面和MPU6050進行資料轉送;第三部分是姿態控制部分,根據接收到的歐拉角與目標歐拉角之間的差值,運用串級PID控制演算法,解算出相應電機的PWM調整量,設定定時的PWM輸出,使飛行器姿態平衡。擴充部分就是利用IAP在應用中編程方式,先以SWD方式下載一個Bootloader程式到STM32中,在利用藍芽進行無線對城西進行升級,這樣就省去了複雜的修改程式後又燒寫到單片機中的複雜操作。
2、程式設計思路
本設計的程式結合STM32單片機的特點,主要實現思路為:單片機上電、採用按鍵方式對電調進行解鎖,之後利用定時器設定電機PWM周期、串口初始化,在串口中斷服務函數中不斷接收MPU6050模組發送的資料,這裡我們移植了TI單片機的利用MPU6050內部DMP計算出歐拉角,直接讀出歐拉角,省去軟體資料融合計算量,提高程式效率。在初始化結束後,設定目標姿態、進入迴圈函數,不斷檢測MPU6050資料是否接受完成,一旦接收到有效姿態資料,就進入姿態控制函數。在姿態控制函數內部,利用當前四軸飛行器的Roll(翻滾) 和 pitch (俯仰)、yaw(偏航) 資料,結合串級PID控制演算法,解算出不同姿態時,利用空氣動力學原理,融合出每個無刷電機需要的調整量控制電機,這樣不斷的接受姿態資料,解算資料,調整量輸出,使四軸飛行器穩定的飛行。
3.2.2程式流程圖
圖12 程式流程圖
四、測試方案與測試結果
4.1測試方案
1、硬體測試
首先,先對電路電源進行檢查,用萬用表進行檢查,確保無誤之後通電,然後燒寫一個測試最小系統是否工作正常的程式。
採用分模組測試外圍電路是否工作正常。
2、軟體模擬測試
在偵錯工具之前,先用示波器觀察STM32單片機PWM輸出,並用程式模仿飛行器的飛行方法,通過對其模擬來測試PWM的穩定度。
MPU6050 模組(6軸姿態儀)配合電腦匿名四軸串口調試助手進行資料的查看,方便調試。
3、硬體軟體聯調
通過單片機編程,模仿出PWM,調整出電調需要的周期和占空比,並測量是否能通過電機驅動來是飛行器起飛,通過多次測試,找出飛行器起飛時的PWM值。
同過MPU6050 模組(6軸姿態儀)使四軸飛行器穩定的起飛,並懸停在空中;再進行測試,使四軸飛行器前進和後退;最後進行降落的測試。
4.2 測試結果及分析
4.2.1測試分析與結論
根據上述測試資料,可以得出以下結論:
採用STM32作為控制核心通過IIC和MPU6050進行資料轉送,採用藍芽和PC機上的匿名四軸調試助手進行資料分析,遙控控制等調試操作。本次設計共完成了遙控控制四軸飛行器平衡離開地面,但由於我們採用的是MPU6050的6軸感應器,yaw軸處理不恰當,會產生隨時間的漂移,很難控制。故後期還需要對yaw軸的演算法進行改進,在下一代作品中應該採用一個9軸的感應器。
最後實現控制方法為採用匿名四軸上位機,通過藍芽方式和四軸飛行器進行資料交換。因NRF24L01模組還沒調試,還未達到室外飛行的要求。
五、專用周總結
首先談一下對四軸飛行器的嚮往,近幾年無人機火了,連汪峰求婚都用的是國產大疆無人機,各大科技公司也開始推出自己的無人機產品,對於一個無人機來說,我對它一開始還不怎麼瞭解,只是充滿無限的嚮往,我以為要讓它起飛要考慮很多空氣動力學,和數學建模的問題,而這些對於我來說是不可以想象的,太難了吧!但是你自己不嘗試怎麼知道自己能不能了,所以開始在百度上搜尋四軸飛行器的資料,剛開始只是瞭解,看了網友大神自己對四軸飛行器的瞭解。我也開始一步一步的深深紮了進去,對四軸充滿無限的的好奇。看了無數的部落格,看了無數的論文,也收藏了很多個知名的四軸論壇。我也漸漸明確我應該做些什麼準備。其實總結一下就是,只要自己感覺自己能完成本次設計任務,就大膽去做,不要永遠停留在想去做,而是要去付出行動,大膽去嘗試,就算自己最後失敗,你也會收穫很多的,這幾天在學習Linux作業系統,其實剛開始Unix作業系統是個失敗的大工程,可是就是那麼一個人把失敗的東西轉換成了現在非常成功的東西。
剛開始我的計劃是做一個小四軸驗證演算法,找一找成就感。因為對於一個初學者來說,大四軸的難度太大,成本高,也許花了很多錢並沒有什麼結果,所以就要開始自己學PCB電路板的製作,所以一股鬧開始學習郭天祥老師錄得一個Altium Designer的視頻,說實話。我的單片機很多知識都是從郭天祥的十天征服單片機上面學來的,很有幸能夠再次學習到他錄得一個PCB電路板製作的一個視頻,講的非常細。對於我這個連英語三級都沒過的人來說,用起英文版的軟體用起來也得心應手。大概學了半個多月的時間,自以為可以開始了,可是又需要會CAD畫出PCB的外形輪廓,後來得知老師那有一個大疆無人機的機架,所以就沒有開始對小四軸的設計,而是對飛控板的設計。當時也有很多的人給我說就不要去設計飛控了,難度太大,還是去賣一塊飛控板,買個遙控器就自己組裝唄,可是這樣怎麼學習了就算自己失敗了,我也要自己去設計飛控板,當我拿到原來無人機的KK飛控板時,怎麼這飛控板如此簡單。單片機、陀螺儀、各種介面,連電源都沒有接。只有一個AMS1117的一個電源晶片,後來才得知電調是可以輸出5V電源的,這樣我就可以省去12V轉5V的電源電路設計,可謂是一大喜事啊!從原理圖開始,從STM32最小系統開始和外圍電路的串連。到最後的PCB設計,可謂是感受到電路板設計的強大之處,在對PCB檢查了很多次之後,發到了廠家開始打樣,我也在開發板上測試MPU6050,包括去學習什麼是X、Y、Z三個方向的加速度,和X、Y、Z三個方向的角速度,這就構成了6軸立體模型。也開始學習卡爾曼濾波和互補濾波,先後利用匿名四軸上位機觀察濾波前後的資料曲線的變化,可是準備了那麼多,也學習了利用四元數計算出歐拉角,可是演算法我並不是很懂,但是我知道怎麼用。也在一個開源電子論壇上面學習到了可以利用MPU6050內部的(DMP: Digital Motion Processor)硬體加速引擎,可以省去濾波和複雜的四元數資料融合計算,可謂是調高了軟體的執行效率,最後我還驚奇的發現DMP居然可以自動校準。實在是太強大了。
在收到打樣會來的電路後,開始對電路板進行焊接,這也是我第一次焊接貼片元件,其中還有高難度的QFN的封裝,還好我比較機智,有困難找度娘,沒錯,看了一個QFN的焊接視頻之後,我也開始了電路板的攻堅克難階段。最後在廢掉一塊電路板之後,我終於完成了電路板的所有焊接和調試。可謂是越戰越勇,可不知最難得還是演算法的移植問題。
在對無刷電機的驅動,和MPU6050及藍芽和PC機上面的匿名四軸上位機通訊協定搞懂之後,就開始學習串級PID,以前參加2015年全國大學生電子設計大賽時學過單級PID演算法,可是這個用的是串級PID,又是一個嶄新的概念。其中的學習過程就不一一說明了。可謂是跋山涉水,終於可以整體調試了。我在對PID參數進行調試時,通常會利用藍芽接受上位機資料後,修改PID變數的值,達到無線,連續的修改參數。在很多個日日夜夜裡,沒有放棄,最後終於可以讓飛行器離開地面,可是穩定性不是很好,因為沒有採用地磁感應器,所以利用的是角速度的Z軸資料來進行計算,導致yaw(航向角)有隨時間的誤差越來越大,導致四軸飛行器會在外界的幹擾下發生旋轉,導致無法穩定飛行,這個問題由於時間的關係,還沒有得以解決,以及NRF24L01模組還沒有調試,暫且利用藍芽進行控制。本次製作可謂是收穫滿滿,也獲得了一絲絲的勝利。為接下來的設計打好基礎。沒有人是一口吃胖的,所以驗證了我的那句座右銘:付出努力,不放棄,哪怕是失敗,那也是一種收穫。加油!
最後在此感謝給我支援和指導的盛磊老師和施雲老師!致敬
六、參考資料
【1】匿名四軸開源原始碼,上位機。ANO-MR-F1-140104經典pid
【2】郭天祥DXP設計教程
【3】《無感無刷直流電機之電調設計全攻略》By: timegate 墨鳶
【4】《卡爾曼濾波與組合導航原理》 秦永元
【5】《STM32F1開發指南-庫函數版本_V3.1》 劉軍 正點原子出品
【6】開源電子網www.openv.com提供技術指導。
【7】電子發燒友網 http://www.elecfans.com/四軸飛行器論壇提供技術參考
六、附錄:
四軸飛行器設計報告