這段時間正在學習stm32處理器的使用,為了鞏固所學知識,初步熟悉STMF103處理器和外設的使用,打算制作一架微型四軸飛行器,由於這個項目對我來講還是有難度的,網上也看到一些不太成功的案例,因此打算分幾步來實現,即硬件選型(飛控)==>物理結構(機架和電機)==>軟件編寫(姿態解算+PID控制)==>安裝調試(穩定性+性能)。
目前初步的方案是:
硬件選型:采用STM103C8T6核心板+MPU6050
物理結構:采用軸距100mm左右的8250空心杯小四軸結構,具體待定(實際情況為軸距80mm+112mm,使用720空心杯電機)
軟件編寫:使用正點原子的開發板和配套軟件來開發
安裝調試:打算使用匿名上位機(實際主要通過NRF24L01+USB串口 PC端上位機來調試)
順便說一下,由於這個項目對於初學者有一定難度,最好保持足夠的專注度,不要同時做其它項目,在遇到困難時可以從硬件和軟件兩個角度想辦法,另外對收集到的資料和開發過程要做一些摘要和記錄,打鐵還需自身硬, 知識不消化等於沒有。
目前手頭上有miniSTM32開發板,附帶的光盤資料整理得很完備也比較多,由於以前學過51單片機,為避免分散注意力導致抓不住重點,我刪除了所有的視頻資料(STM32資料要少而精,最好不超過1G),打算從《stm32不完全手冊》+《Cortex-M3權威指南》+數據手冊+使用手冊入手,采用開發板+STMF103C8T6核心板+面包板操作,就從點亮一個LED燈開始學習光盤附帶的一些例程。
跑馬燈實驗, 知識要點:GPIO端口的配置
MPU6050三軸加速度,角速度測量以及通過DMP計算四元數並獲取姿態角實驗
接線方式:使用CH340E USB轉TTL串口模塊給STMF103C8T6+MPU6050統一供電,
USART1接線:PA9(USART1_TX) -- 串口模塊RX腳 ,PA10(USART1_RX) -- 串口模塊TX腳
MPU6050接線:VCC -- 3.3V ,GND -- GND,SCL -- PB6,SDA -- PB7
MCU接線:VCC -- 串口模塊V3.3腳,GND -- 串口模塊GND腳,ST-Link的四根引線分別接核心板排針上的GND腳,CLK腳,IO腳和V3.3腳
知識要點:模擬IIC的配置及讀寫函數,MPU6050三軸加速度和角速度數據的獲取,DMP庫的移植,通過四元數計算歐拉角
注意事項:使用匿名上位機V4.22處理上傳的串口數據時要使用新的通信協議定義的數據格式,另外要小心延時函數的使用,有可能導致數據讀不出,具體原因有待研究
NRF24L01無線模塊收發實驗
接線方式:使用有源USB Hub給主板和無線模塊供電,
USART1接線:PA9(USART1_TX) -- 串口模塊RX腳 ,PA10(USART1_RX) -- 串口模塊TX腳
MPU6050接線:VCC -- 3.3V ,GND -- GND,SCL -- PB6,SDA -- PB7
NRF24L01接線:VCC -- 3.3V, GND-- GND, CE -- PA12, CS -- PA4, SCK -- PA5, MOSI -- PA7, MISO -- PA6, IRQ -- PA1
MCU接線:VCC -- 串口模塊V3.3腳,GND -- 串口模塊GND腳,ST-Link的四根引線分別接核心板排針上的GND腳,CLK腳,IO腳和V3.3腳
知識要點:SPI的配置及讀寫函數,NRF24L01的初始化和收發函數
注意事項:注意USB供電是否充足
PWM驅動空心杯實驗
接線方式:使用有源USB Hub給主板和無線模塊供電,
USART1接線:PA9(USART1_TX) -- 串口模塊RX腳 ,PA10(USART1_RX) -- 串口模塊TX腳
MPU6050接線:VCC -- 3.3V ,GND -- GND,SCL -- PB6,SDA -- PB7
NRF24L01接線:VCC -- 3.3V, GND-- GND, CE -- PA12, CS -- PA4, SCK -- PA5, MOSI -- PA7, MISO -- PA6, IRQ -- PA8
MCU接線:VCC -- 串口模塊V3.3腳,GND -- 串口模塊GND腳,ST-Link的四根引線分別接核心板排針上的GND腳,CLK腳,IO腳和V3.3腳
空心杯驅動電路:見上圖,SI2302的控制極即G極通過10歐姆電阻接PA8腳
知識要點:定時器Tim1的配置和引腳配置
注意事項:STM103C8T6核心板和電機要統一供電,核心板的引腳無法重映射
整機試驗一
接線方式:使用有源USB Hub給主板和無線模塊供電,
USART1接線:PA9(USART1_TX) -- 串口模塊RX腳 ,PA10(USART1_RX) -- 串口模塊TX腳
MPU6050接線:VCC -- 3.3V ,GND -- GND,SCL -- PB6,SDA -- PB7
NRF24L01接線:VCC -- 3.3V, GND-- GND, CE -- PA12, CS -- PA4, SCK -- PA5, MOSI -- PA7, MISO -- PA6, IRQ -- PA1
MCU接線:VCC -- 串口模塊V3.3腳,GND -- 串口模塊GND腳,ST-Link的四根引線分別接核心板排針上的GND腳,CLK腳,IO腳和V3.3腳
空心杯驅動電路:見上圖,SI2302的控制極即G極通過10歐姆電阻接PA8腳,PWM-CH1:A0, PWM-CH2:A1, PWM-CH3:A2, PWM-CH4:A3(使用TIM2四個通道)
知識要點:使用NRF24L01遙控電機轉速
注意事項:1. 本次試驗發現電機噪聲污染導致NRF24L01無法工作或核心板自動復位,因此保證核心板的供電穩定在3.3V並且純凈是很重要的,可以使用單獨的3.3V穩壓模塊或者參考上圖將電池電壓先升壓至5V再穩壓到3.3V,可以使用電容+電感濾波。
2. 目前整機較重,四軸飛行器升力不足,必要時考慮用熱熔膠把空心杯電機直接固定到PCB底板上。
整機試驗二
接線方式:使用有源USB Hub給主板和無線模塊供電,
USART1接線:PA9(USART1_TX) -- 串口模塊RX腳 ,PA10(USART1_RX) -- 串口模塊TX腳
MPU6050接線:VCC -- 3.3V ,GND -- GND,SCL -- PB6,SDA -- PB7
NRF24L01接線:VCC -- 3.3V, GND-- GND, CE -- PA12, CS -- PA4, SCK -- PA5, MOSI -- PA7, MISO -- PA6, IRQ -- PA1
MCU接線:VCC -- 串口模塊V3.3腳,GND -- 串口模塊GND腳,ST-Link的四根引線分別接核心板排針上的GND腳,CLK腳,IO腳和V3.3腳
空心杯驅動電路:見上圖,SI2302的控制極即G極通過10歐姆電阻接PA8腳,PWM-CH1:A0, PWM-CH2:A1, PWM-CH3:A2, PWM-CH4:A3(使用TIM2四個通道)
知識要點:使用PID控制電機轉速,上油門后四軸能平穩飛行
注意事項:1. 本次試驗發現采用PCB焊裝模塊的方式很難保證飛行器的重心在正中間(電池的位置也不能偏離重心),如果重心嚴重偏離中心,由於空心杯電機升力有限,光靠PID調整電機轉速很難保證飛行器平穩飛行;
2. 由於PCB(70mm X 90mm)和電池(650mAH)超重加上重心偏離,導致飛行器最終沒能飛起來,只是單側飛起來導致炸槳好幾次,因此還是使用PCB layout的方式成功率更高,剛開始制作的時候沒有考慮周全這在項目開發中也是比較常見的,只能逢山開路遇水架橋了,目前我已經堅持了兩個月,還需要繼續努力才可能把四軸飛起來。
3.為解決升力不足的問題打算把55mm槳葉更換為75mm槳葉,把650mAH電池更換為350mAH電池,適當調整電池的位置使得重心對中。
4.現在航模電池很多都使用專用USB充電線,注意最好不要直接使用電腦的USB端口,而是使用手機充電器+專用USB充電線,我的USB充電線由於和電池的端子不匹配,在改裝時USB充電線和電池的正負極接反產生了一連串可怕的后果:筆記本電腦兩個USB口燒壞,電池也報銷了,如果采用手機充電器就不會有這樣嚴重的問題。
5.MPU6050在核心板剛上電時讀出的數據是不准確的,不能用於PID控制,如果不校正上電后要等十幾秒才能啟動油門。
6.為了加大軸距我使用了四小片碳纖維板把空心杯電機引出,否則槳葉產生的下降氣流被PCB擋住影響升力。
7.注意四軸必須是兩個正槳+兩個反槳交叉布局,正反槳的區分注意不能看顏色而是看形狀,如上圖所示。
8.油門(Thro)不能設置為定時器的最大值而是要預留PID調整所需的空間,比如定時器重裝值為999,油門則最大為900左右。
9.PID調參時可以將Kp,Ki,Kd單獨測試它們的臨界值(產生震盪),主要用到的是Kp和Kd,若使用積分需要將積分誤差限幅為油門的%5左右。
后記
由於自制機架無法保證四個電機的垂直度以及它們的中心在圓內接正方形的四個頂點上,最終我還是選用了軸距為100mm的有刷穿越機的機架,對於四軸飛行器物理結構的精度和軟件的精確控制同樣重要,否則無法區分到底是硬件還是軟件的問題。
目前整機可以飛行,高度約20cm,飛行狀態也不穩定,無法做到懸停,顯然四軸還是偏重,考慮自己焊裝飛控以減輕重量。
附錄: 自制飛控
在上一篇中小四軸實現了有限的飛行,但由於機架的電機垂直度仍然有偏差(我使用720電機但機架適配820電機),重量超標(模塊搭建自然超重),效果不盡如人意,因此打算采用自制飛控的方式同時選購新的機架,由於本人不會熟練地畫pcb布線圖,因此目前還沒有想好如何自制飛控。
打算從以下幾個方面做准備:
1)熟悉貼片元件的焊接方法並購買必要的工具;
貼片焊接方法可參看 貼片焊接 貼片元件的焊接方法(上) 貼片元件的焊接方法(下) SMT芯片的焊接方法
相關工具參考下文
隨着時代和科技的進步,現在的越來越多電路板的使用了貼片元件。貼片元件以其體積小和便於維護越來越受大家的喜愛。但對於不少人來說,對貼片元件感到“畏懼”,特別是對於部分初學者,因為他們認為自己不具備焊接元件的能力,覺得它不像傳統的直插元件那樣易於焊接把握,其實這些擔心是完全沒有必要的。讀者可以使用合適的工具和掌握一些手工焊接貼片的知識,很快就會成為焊接貼片元件的專家。
一、使用貼片元件的好處
首先我們來了解貼片元件的好處。與引線元件相比,貼片元件有許多好處。第一方面:體積小,重量輕,容易保存和郵寄。如常用的貼片電阻0805封裝或者0603 封裝比我們之前用的直插電阻要小上很多。幾十個直插電阻就可以裝滿一袋子但換成貼片電阻的話足以裝好幾千個甚至上萬個。當然,這是在不考慮其所能承受最大電流情況下的。第二方面:貼片元件比直插元件容易焊接和拆卸。貼片元件不用過孔,用錫少。直插元件最費事也最傷神的就是拆卸,做過的朋友都有這個體會,在兩層或者更多層的PCB 板上,哪怕是只有兩個管腳,拆下來也不太容易而且很容易損壞電路板,多引腳的就更不用說了。而拆卸貼片元件就容易多了,不光兩只引腳容易拆,即使一、二百只引腳的元件多拆幾次也可以不損壞電路板。第三方面:貼片元件還有一個很重要的好處,那就是提高了電路的穩定性和可靠性,對於制作來說就是提高了制作的成功率。
這是因為貼片元件體積小而且不需要過孔,從而減少了雜散電場和雜散磁場,這在高頻模擬電路和高速數字電路中尤為重要。綜述所說,筆者可以負“責任”的說,只要你一旦適應和接受了貼片元件,除非不得已的情況,你可能再也不想用直插元件了。
二、焊接貼片元件需要的常用工具
在了解了貼片元件的好處之后,讓我們來了解一些常用的焊接貼片元件所需的一些基本工具(見圖1)。
圖1 手工焊接貼片元件所用到常用工具
1. 電烙鐵
手工焊接元件,這個肯定是不可少了。在這里向大家推薦烙鐵頭比較尖的那種,因為在焊接管腳密集的貼片芯片的時候,能夠准確方便的對某一個或某幾個管腳進行焊接。
2. 焊錫絲
好的焊錫絲對貼片焊接也很重要,如果條件允許,在焊接貼片元件的時候,盡可能的使用細的焊錫絲,這樣容易控制給錫量,從而不用浪費焊錫和吸錫的麻煩。
3. 鑷子
鑷子的主要作用在於方便夾起和放置貼片元件,例如焊接貼片電阻的時候,就可用鑷子夾住電阻放到電路板上進行焊接。鑷子要求前端尖而且平以便於夾元件。另外,對於一些需要防止靜電的芯片,需要用到防靜電鑷子。
4. 吸錫帶
焊接貼片元件時,很容易出現上錫過多的情況。
特別在焊密集多管腳貼片芯片時,很容易導致芯片相鄰的兩腳甚至多腳被焊錫短路。此時,傳統的吸錫器是不管用的,這時候就需要用到編織的吸錫帶。
吸錫帶可在賣焊接器材的地方買到,如果沒有也可以拿電線中的銅絲來代替,后文將會講述。
5. 松香
松香是焊接時最常用的助焊劑了,因為它能析出焊錫中的氧化物,保護焊錫不被氧化,增加焊錫的流動性。在焊接直插元件時,如果元件生銹要先刮亮,放到松香上用烙鐵燙一下,再上錫。而在焊接貼片元件時,松香除了助焊作用外還可以配合銅絲可以作為吸錫帶用。
6. 焊錫膏
在焊接難上錫的鐵件等物品時,可以用到焊錫膏,它可以除去金屬表面的氧化物,其具有腐蝕性。
在焊接貼片元件時,有時可以利用其來“吃”焊錫,讓焊點亮澤與牢固。
7. 熱風槍
熱風槍是利用其槍芯吹出的熱風來對元件進行焊接與拆卸的工具。其使用的工藝要求相對較高。
從取下或安裝小元件到大片的集成電路都可以用到熱風槍。在不同的場合,對熱風槍的溫度和風量等有特殊要求,溫度過低會造成元件虛焊,溫度過高會損壞元件及線路板。風量過大會吹跑小元件。對於普通的貼片焊接,可以不用到熱風槍,在此不做詳細敘述。
8. 放大鏡
對於一些管腳特別細小密集的貼片芯片,焊接完畢之后需要檢查管腳是否焊接正常、有無短路現象,此時用人眼是很費力的,因此可以用到放大鏡,從而方便可靠的查看每個管腳的焊接情況。
9. 酒精
在使用松香作為助焊劑時,很容易在電路板上留下多余的松香。為了美觀,這時可以用酒精棉球將電路板上有殘留松香的地方擦干凈10. 其他貼片焊接所需的常用工具除了上述所說的之外,還有一些如海綿、洗板水、硬毛刷、膠水等。在此不做贅述,有條件的朋友可以去了解和動手實踐使用。
(從左至右,第一排為:熱風槍、鑷子、焊錫絲。第二排為:電烙鐵、松香、吸錫帶)
2)尋找已有的飛控原理圖和布線圖並考慮打樣;
使用匿名開拓者飛控和遙控器,以下是打樣回來的pcb樣板
3)准備相應的物料清單;
可以從pcbdoc文件中導出BOM文件
4)對源程序要做相應的修改以適應飛控。
源程序主要是要分析各模塊的驅動程序和主控程序,如有必要才做修改。
世上無難事,只怕有心人,四軸飛行器牽涉的知識確實比較多,我想很多人從小都有一個飛行夢,如果是這樣那么從多軸飛行器起步是一個不錯的選擇。