介紹
這是使用Digilent Zybo Zynq-7000開發(fā)板為GoPro創(chuàng)建3軸手持照相機穩(wěn)定裝備的指南。此項目是為CPE實時操作系統(tǒng)課程(CPE 439)開發(fā)的。穩(wěn)定器使用三個伺服器和一個IMU來糾正用戶的運動,以保持相機的水平。
項目所需的部件
步驟1:Vivado硬件設(shè)置
讓我們開始為項目創(chuàng)建底層的塊設(shè)計。
- 打開Vivado 2016.2,點擊“Create New Project”圖標(biāo),然后點擊“Next>”。
- 命名您的項目,然后點擊“下一步>”。
- 選擇RTL項目,然后點擊“下一步>”。
- 鍵入到搜索欄xc7z010clg400-1,然后選擇部分,然后點擊“下一步>”和“完成”。
第2步:設(shè)置模塊設(shè)計(相關(guān)文件見附件)
現(xiàn)在我們將開始通過添加和設(shè)置Zynq IP模塊來生成模塊設(shè)計。
- 在左側(cè)面板的IP Integrator下,單擊“創(chuàng)建塊設(shè)計”,然后單擊“確定”。
- 右鍵單擊“圖表”選項卡,然后選擇“添加IP ...”。
- 鍵入“ZYNQ7處理系統(tǒng)”并單擊選擇。
- 雙擊出現(xiàn)的Zynq塊。
- 點擊“導(dǎo)入XPS設(shè)置”,導(dǎo)入提供的“ZYBO_zynq_def.xml”文件。
- 轉(zhuǎn)到“MIO配置”,選擇“應(yīng)用處理器單元”,并啟用定時器0和看門狗定時器。
- 在“I / O外圍設(shè)備”下的同一個選項卡中,選擇ENET 0(并將下拉菜單更改為“MIO 16 .. 27”,USB 0,SD 0,UART 1,I2C 0。
- 在“GPIO”下,檢查GPIO MIO,ENET復(fù)位,USB復(fù)位和I2C復(fù)位。
- 現(xiàn)在導(dǎo)航到“時鐘配置”。在PL結(jié)構(gòu)時鐘下選擇FCLK_CLK0。然后,點擊“確定”。
第3步:創(chuàng)建自定義PWM IP模塊(相關(guān)文件見附件)
這個IP模塊允許電路板發(fā)送一個PWM信號來控制舵機的運動。增加了邏輯來減慢時鐘,使脈沖以正確的速率輸出。該塊取0到180之間的一個數(shù)字,并將其轉(zhuǎn)換成一個750-2150的usec脈沖。
- 現(xiàn)在,在左上角附近的工具選項卡下,點擊“創(chuàng)建和打包IP ...”,然后點擊下一步。
- 然后選擇“創(chuàng)建一個新的AXI4外設(shè)”并點擊下一步。
- 命名您的PWM IP塊(我們將其命名為pwm_core),然后單擊下一步,然后單擊下一頁上的下一步。
- 現(xiàn)在點擊“編輯IP”,然后點擊完成。這將打開一個新窗口來編輯pwm塊。
- 在“Sources”選項卡和“Design Sources”下,展開“pwm_core_v1_0”(用您的名稱替換pwm_core ),然后打開變得可見的文件。
- 將“pwm_core_v1_0_S00_AXI.v”下提供的代碼復(fù)制并粘貼到項目底部的zip文件中。按Ctrl + Shift + R,用你的名字替換“pwm_core” 。
- 接下來打開“ name _v1_0”,并在文件“pwm_core_v1_0.v”中提供的代碼中復(fù)制。按Ctrl + Shift + R并用名稱替換“pwm_core” 。
- 現(xiàn)在導(dǎo)航到“Package IP - name ”選項卡并選擇“Customization Parameters”。
- 在這個標(biāo)簽中,頂部會有一個黃色的條形文字。選擇此項,“隱藏參數(shù)”將顯示在框中。
- 現(xiàn)在進(jìn)入“Customization GUI”,右鍵點擊Pwm Counter Max,選擇“Edit Parameter ...”。
- 選中“在自定義GUI中可見”和“指定范圍”框。
- 將“類型:”下拉菜單更改為整數(shù)范圍,并將最小值設(shè)置為0,最大值設(shè)置為65535,然后選中“顯示范圍”框?,F(xiàn)在點擊OK。
- 在“Page 0”樹下拖動Pwm Counter Max?,F(xiàn)在轉(zhuǎn)到“查看和打包”并點擊“重新打包IP”按鈕。
第4步:添加PWM IP模塊進(jìn)行設(shè)計
我們將IP塊添加到塊設(shè)計中,以允許用戶通過處理器訪問PWM IP塊。
- 右鍵單擊圖表選項卡,然后單擊“IP設(shè)置...”。導(dǎo)航到“資源庫管理器”選項卡。
- 點擊綠色加號按鈕并選擇它?,F(xiàn)在在文件管理器中找到ip_repo并將其添加到項目中。然后點擊應(yīng)用,然后確定。
- 右鍵單擊圖表選項卡,然后單擊“添加IP ...”。輸入您的PWM IP塊名稱并選擇它。
- 在屏幕頂部應(yīng)該有一個綠色的條,首先選擇“運行連接自動化”,然后單擊確定。然后單擊“運行塊自動化”,然后單擊確定。
- 雙擊PWM模塊并將Pwm Counter Max從128更改為1024。
- 將鼠標(biāo)指針懸停在PWM模塊的PWM0上。應(yīng)該有一個小鉛筆,當(dāng)你做的時候出現(xiàn)。右鍵單擊并選擇“創(chuàng)建端口...”,然后在打開窗口時單擊確定。這為要傳遞的信號創(chuàng)建一個外部端口。
- 對PWM1和PWM2重復(fù)步驟6。
- 找到邊欄上的小圓形雙箭頭圖標(biāo),然后單擊該圖標(biāo)。它會重新生成布局,并且您的塊設(shè)計應(yīng)該看起來像上面的圖片。
步驟5:配置HDL包裝并設(shè)置約束文件(相關(guān)文件見附件)
我們現(xiàn)在要為我們的模塊設(shè)計生成高級設(shè)計,然后將PWM0,PWM1和PWM2映射到Zybo板上的Pmod引腳。
- 轉(zhuǎn)到“來源”選項卡。右鍵點擊“Design Sources”下的塊設(shè)計文件,然后點擊“Create HDL Wrapper ...”。選擇“復(fù)制生成的包裝,以允許用戶編輯”,然后單擊確定。這將生成我們創(chuàng)建的塊設(shè)計的高級設(shè)計。
- 我們將輸出的Pmod是JE。
- 在“文件”下,選擇“添加源...”并選擇“添加或創(chuàng)建約束”,然后單擊“下一步”。
- 點擊添加文件,然后選擇包含的“ZYBO_Master.xdc”文件。如果你查看這個文件,你會注意到除了“## Pmod Header JE”下的六個“set_property”行之外,所有內(nèi)容都沒有注釋。您會注意到PWM0,PWM1和PWM2是這些行的參數(shù)。它們映射到JE Pmod的引腳1,引腳2和引腳3。
第6步:生成比特流
在我們繼續(xù)之前,我們需要生成硬件設(shè)計的比特流以導(dǎo)出到SDK。
- 在側(cè)欄的“程序和調(diào)試”下,選擇“生成位流”。這將運行綜合,然后執(zhí)行,然后生成設(shè)計的比特流。
- 糾正彈出的任何錯誤,但通常可以忽略警告。
- 轉(zhuǎn)到文件 - >啟動SDK,然后單擊確定。這將打開Xilinx SDK。
第7步:在SDK中設(shè)置項目
這部分可能有點令人沮喪。如有疑問,建立一個新的BSP并替換舊的BSP。這節(jié)省了我們一大堆的調(diào)試時間。
- 首先下載最新版本的FreeRTOS 。
- 通過單擊文件 - >導(dǎo)入,從FreeRTOS中提取所有內(nèi)容并將其導(dǎo)入到SDK中,然后在“常規(guī)”下單擊“現(xiàn)有項目進(jìn)入工作區(qū)”,然后單擊下一步。
- 在FreeRTOS文件夾中進(jìn)入“FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702”。只從這個位置導(dǎo)入“RTOSDemo”。
- 現(xiàn)在點擊File-> New Board Support Package生成一個Board Support Package(BSP)。
- 選擇“ps7_cortexa9_0”并選中“l(fā)wip141”,然后單擊確定。
- 右鍵單擊RTOSDemo藍(lán)色文件夾并選擇“Project References”。
- 取消選擇“RTOSDemo_bsp”并檢查剛剛創(chuàng)建的新BSP。
第8步:FreeRTOS代碼修改(相關(guān)文件見附件)
我們提供的代碼可以分成7個不同的文件。main.c,iic_main_thread.c,xil_printfloat.c,xil_printfloat.h,IIC_funcs.c,IIC_funcs.h和iic_imu.h。iic_main_thread.c中的代碼已經(jīng)從Kris Winer的庫中調(diào)用。我們主要改變了他的代碼,把任務(wù)合并到Zybo板上。我們還增加了計算相機方向校正的功能。我們留下了幾個對調(diào)試有用的打印語句。他們中的大多數(shù)被評論,但如果你覺得需要你可以取消他們的評論。
- 修改main.c文件最簡單的方法是用我們包含的main.c文件中的代碼復(fù)制代碼。
- 要創(chuàng)建一個新文件,請右鍵點擊RTOSDemo下的src文件夾并選擇C Source File。將該文件命名為“iic_main_thread.c”。
- 復(fù)制包含的“iic_main_thread.c”中的代碼并將其粘貼到新創(chuàng)建的文件中。
- 用剩余的文件重復(fù)步驟2和3。
- 在gcc中需要一個鏈接指令。要將其添加到構(gòu)建路徑中,請右鍵單擊RTOSDemo并選擇“C / C ++構(gòu)建設(shè)置”。
- 一個新窗口將打開。導(dǎo)航到ARM v7 gcc鏈接器 - >庫。選擇右上角的小文件,然后輸入“m”。這將包括項目中的數(shù)學(xué)庫。
- 使用Ctrl + B構(gòu)建項目來確認(rèn)一切正常。檢查生成的警告,但您可能會忽略它們。
- 有幾個地方需要修改,主要是你當(dāng)前位置的磁偏角。我們將解釋如何在教程的校準(zhǔn)部分中進(jìn)行更改。
第9步:穩(wěn)定器的3D打印(相關(guān)文件見附件)
您需要3D打印這個項目的幾個部分。可以購買與我們的印刷部件具有相似尺寸/尺寸的部件。
- 使用提供的文件打印GoPro的手臂和托架。
- 您需要將腳手架添加到.stl文件。
- 一旦打印,修剪/清理多余腳手架的部分。
- 如果您愿意,可以用3D打印部件替換木制銷釘。
步驟10:組裝零件
這是安裝穩(wěn)定器的幾個部分。購買的支架配有4個自攻螺釘和4個帶螺母的螺栓。由于有3個舵機,其中一個伺服喇叭需要預(yù)先敲擊,以允許2個螺栓穿過。
- 將8個引腳焊接到IMU中,每邊4個。
- IMU連接到支架中央的GoPro 3D打印支架上。
- 調(diào)整支架的方向,使伺服安裝孔位于左側(cè)。將IMU放置在距離您最近的邊緣,引腳懸掛在邊緣上。然后,將GoPro安裝架放在IMU的頂部,將IMU和安裝架固定在支架上。
- 將HS-5485HB連接到集成在3D打印臂上的伺服支架。
- 將GoPro支架旋入連接到機械臂的伺服系統(tǒng),確保伺服機構(gòu)處于其運動范圍的中間位置。
- 接下來,將HS-5685MH伺服器連接到伺服支架上。然后用其中一個螺絲輕敲伺服喇叭。現(xiàn)在將伺服器連接到最后一個伺服支架的底部。
- 現(xiàn)在將最后一個伺服器連接到HS-5685MH伺服器上的支架上。然后將手臂旋入該伺服器,確保手臂已擰緊,以便每個方向移動90度。
- 為了完成萬向節(jié)的結(jié)構(gòu),在GoPro支架和3D印刷臂之間加入一小塊木銷。你現(xiàn)在已經(jīng)組裝了穩(wěn)定器。
- 最后,您可以添加連接到底部伺服支架的手柄。
步驟11:將Zybo連接到穩(wěn)定器
這樣做時有幾件事要小心。你要確保電源的5V不會進(jìn)入Zybo板,因為這會導(dǎo)致板的問題。確保仔細(xì)檢查你的跳線,確認(rèn)沒有電線被切換。
- 將Zybo附加到穩(wěn)定器上,您將需要15根male-to-male 跳線和4對male-to-female跳線。
- 首先,沿面包板的+和 - 導(dǎo)軌將兩個跳線連接到您的5V電源。這些將提供舵機的權(quán)力。
- 然后,將3對跳線連接到面包板的+和 - 導(dǎo)軌上。這將是每個舵機的動力。
- 將+和 - 跳線的另一端插入每個舵機。
- 在面包板的導(dǎo)軌和Zybo JE Pmod的一個GND引腳之間連接跳線(見步驟5的圖片)。這將在Zybo電路板和電源之間建立一個共同點。
- 接下來將信號線連接到JE Pmod的引腳1,引腳2和引腳3。引腳1映射到底部伺服器,引腳2映射到手臂末端的伺服器,引腳3映射到中間伺服器。
- 將4根母線插入IMU分線的GND,VDD,SDA和SCL引腳。GND和VDD插入GND和JF引腳上的3V3。將SDA引腳插入引腳8,將SCL插入JF的引腳7(參見步驟5的圖片)。
- 最后,使用micro USB電纜將電腦連接到電路板。這將允許uart通信,并允許您編程Zybo板。
第十二步:真北校正
IMU中的磁強計的校準(zhǔn)對于裝置的正確操作是重要的。磁偏角將磁北向校正為正北。
- 為了糾正磁性和真北方的差異,你需要結(jié)合兩種服務(wù),谷歌地圖和NOAA的磁場計算器。
- 使用Google地圖查找您當(dāng)前位置的緯度和經(jīng)度。
- 把你當(dāng)前的經(jīng)緯度插入磁場計算器。
- 返回的是磁偏角。將此計算插入“iic_main_thread.c”行378中的代碼。如果你的赤緯是東,然后從偏航值減去,如果是西,那么增加偏航值。
*照片取自Sparkfun的MPU 9250連接指南。
第13步:運行程序(相關(guān)文件見附件)
你一直在等待的那一刻!該項目的最好的部分是看到它的工作。我們注意到的一個問題是,從IMU報告的數(shù)值有所偏離。低通濾波器可以幫助糾正這種漂移,并且用磁力計擺弄,加速度和陀螺儀校準(zhǔn)也將有助于糾正這種漂移。
- 首先,在SDK中構(gòu)建所有,這可以通過按Ctrl + B來完成。
- 確保電源已打開并設(shè)置為5V。仔細(xì)檢查所有電線是否正確到位。
- 然后,要運行該程序,請按任務(wù)欄上部中心的綠色三角形。
- 程序運行時,舵機全部復(fù)位到0位,準(zhǔn)備好鉆機移動。程序初始化后,舵機將回到90度的位置。
- 一個磁力計校準(zhǔn)功能將運行,方向?qū)⒈淮蛴〉経ART終端,您可以通過串行監(jiān)視器(如“putty”或SDK中提供的串行監(jiān)視器)連接到該終端。
- 校準(zhǔn)將使您將圖8中的設(shè)備移動大約10秒鐘。你可以通過注釋“iic_main_thread.c”的第273行來刪除這一步。如果你注釋掉,你需要取消注釋行323 - 325“iic_main_thread.c”。這些值最初是從上面的磁力儀校準(zhǔn)中收集的,然后作為值插入。
- 校準(zhǔn)后,穩(wěn)定碼將被初始化,設(shè)備將保持相機穩(wěn)定。