亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于STM32的硬件開發(fā)技術(shù)圖形化模擬平臺(tái)

        2020-07-10 15:52:18王寅文易文淏易宇琦鄭子豪
        軟件 2020年5期
        關(guān)鍵詞:內(nèi)環(huán)語句小車

        王寅文,易文淏,易宇琦,張 輝,鄭子豪

        (哈爾濱商業(yè)大學(xué),黑龍江 哈爾濱 150028)

        0 引言

        隨著世界逐步進(jìn)入信息化時(shí)代,計(jì)算機(jī)技術(shù)已運(yùn)用在生活的方方面面,而我國(guó)更是計(jì)算機(jī)技術(shù)的大國(guó)。在這樣的時(shí)代背景下,讓青少年從小接觸編程教育就顯得尤為重要。正是基于這樣的需求,此外通過研究國(guó)內(nèi)外類似產(chǎn)品,例如 SCRACTH、ardublock等,發(fā)現(xiàn)了市面上現(xiàn)存的圖形編程平臺(tái)或只局限線上編程,或單單利用了arduino或者樹莓派等硬件平臺(tái)進(jìn)行開發(fā)。類似arduino這樣的硬件平臺(tái)很少用于實(shí)際工業(yè)以及嵌入式項(xiàng)目的專業(yè)開發(fā)。為了彌補(bǔ)這一不足,同時(shí)使學(xué)習(xí)過程更加完善,因此本文采用STM32作為硬件平臺(tái),使學(xué)習(xí)者能夠更接近實(shí)際工程的開發(fā),培養(yǎng)其計(jì)算思維。本文使用C++作為編程語言,硬件系統(tǒng)以 STM32作為核心處理器,以Qt作為UI界面的工具架構(gòu)。

        本文通過搭建一個(gè)宿主機(jī)上運(yùn)行的圖形編程平臺(tái),用戶可以通過此平臺(tái)熟悉編程,并且通過軟件平臺(tái)控制兩個(gè)硬件子平臺(tái)的運(yùn)動(dòng)狀態(tài)來實(shí)際檢驗(yàn)自己的編程成果,并且在硬件平臺(tái)上加入多種外圍設(shè)備,以提高軟件編程的趣味性與多樣性。

        1 STM硬件開發(fā)軟件模擬

        本文將軟件平臺(tái)分為前臺(tái)設(shè)計(jì)與后臺(tái)設(shè)計(jì)。前臺(tái)設(shè)計(jì)指利用QT軟件編程的UI界面,其主要作用是面向使用者展現(xiàn)易于上手的編程界面,通過圖形化的編程方式,得到“所見即所得”的編程效果。而后臺(tái)設(shè)計(jì)主要指利用C++編程語言實(shí)現(xiàn)對(duì)STM32的控制,利用相應(yīng)程序進(jìn)入STM32的BootLoader,將編寫好的程序燒錄至芯片中,通過硬件平臺(tái)完成相應(yīng)的功能。

        1.1 Qt主窗口與Unity坐標(biāo)變換UI設(shè)計(jì)比較

        本文將主窗口界面劃分為三個(gè)部分,即畫布部件,語句設(shè)計(jì)部件和工具部件。在畫布部件中,分割的子窗口提供出用戶想要做的事情,用戶根據(jù)自己的當(dāng)時(shí)想法選擇并進(jìn)入該事件中,用戶點(diǎn)擊語句后語句顯示在語句設(shè)計(jì)窗口中并對(duì)語句進(jìn)行排序,不論用戶是否拼接正確,都會(huì)彈出消息框來提示用戶,消息框本文采取以卡通人物或者其他的形式彈出,不同的消息框會(huì)出現(xiàn)不同的形式,從而吸引用戶的興趣。若用戶拼接成功,在恭喜用戶之后,用戶可以將程序燒入致硬件平臺(tái)中,以此來實(shí)現(xiàn)相關(guān)的功能。否則,會(huì)彈出失敗的對(duì)話框來提醒用戶拼接失敗,并在下面的消息框中顯示出用戶拼接錯(cuò)誤的地方。

        在整個(gè)主窗口顯示過程中,平臺(tái)會(huì)插入背景動(dòng)態(tài)圖,在其他的子窗口本文也會(huì)插入相應(yīng)的背景圖,在拼接過程中,每一步都要有相應(yīng)的背景音樂,并擁有不同的效果音。本文采用類似于闖關(guān)的形式設(shè)置編程難度,分別不同學(xué)習(xí)能力的用戶。

        本文在使用Qt軟件進(jìn)行實(shí)際設(shè)計(jì)中,將各部分類別以及功能進(jìn)行了詳細(xì)的劃分:

        (1)主窗口類

        主窗口類的基本元素有菜單欄,狀態(tài)欄、工具

        欄,錨接部件和中心部件。主窗口中可以部署其他子窗口,而本文在主窗口中部署了三個(gè)子窗口,分別為畫布部件,語句設(shè)計(jì)部件和工具部件。

        圖1 Qt界面布局Fig.1 Qt interface layout

        (2)工具部件

        本文通過在主窗口中添加子窗口并命名為工具部件,主要完成設(shè)置鼠標(biāo)拖拽事件,即用戶將要拖拽的代碼條框所在區(qū),在此窗口中的程序可以拖拽但不可修改。以及繪制場(chǎng)景,本文會(huì)在此子窗口中單獨(dú)繪制其專屬場(chǎng)景。

        (3)畫布部件

        本文在主窗口中添加子窗口并命名為畫布部件,主要完成繪制場(chǎng)景,本文會(huì)在此子窗口中單獨(dú)繪制其專屬場(chǎng)景;以及功能選擇,用戶可以在此窗口中選擇想要小車實(shí)現(xiàn)的功能并再點(diǎn)擊后將相關(guān)的代碼條框在工具部件中顯示。

        (4)語句設(shè)計(jì)部件

        本文通過在主窗口中添加子窗口并命名為語句設(shè)計(jì)部件,用以實(shí)現(xiàn)設(shè)置拖拽事件,用戶可以在此界面中用鼠標(biāo)對(duì)程序進(jìn)行拖拽排序。手動(dòng)添加代碼,用戶可以在此界面中補(bǔ)全程序所缺內(nèi)容或自己敲寫代碼。

        (5)記錄行為類

        即用戶在語句設(shè)計(jì)中拼接成功的可實(shí)現(xiàn)小車功能的完整程序。

        使用Qt完成軟件前臺(tái)設(shè)計(jì)理論框圖如圖2所示。

        此外本文還通過unity實(shí)現(xiàn)來軟件前臺(tái)的制作。首先編寫坐標(biāo)變換函數(shù),通過模塊對(duì)于攝像機(jī)的方向來計(jì)算被拖動(dòng)模塊在單位向量上的法向量,從而將屏幕坐標(biāo)轉(zhuǎn)換為世界坐標(biāo),再將鼠標(biāo)的屏幕坐標(biāo)通過以上函數(shù)也轉(zhuǎn)換成世界坐標(biāo),獲得鼠標(biāo)點(diǎn)擊位置的坐標(biāo)點(diǎn),然后賦值給模塊。最后計(jì)算獲取鼠標(biāo)拖拽后的坐標(biāo)以及物體與鼠標(biāo)間的偏移量實(shí)現(xiàn)模塊的拖動(dòng)功能。

        圖2 Qt理論框圖Fig.2 Qt theoretical block diagram

        通過計(jì)算模塊間重心的相對(duì)距離向量、最小間距與上下高度判斷從而改變世界坐標(biāo),亦或加入碰撞檢測(cè)以實(shí)現(xiàn)模塊聯(lián)動(dòng)間的拖動(dòng)插入調(diào)整。將程序指令塊以字符串的形式封裝在各自的模塊里,順序拼接模塊完善程序、實(shí)現(xiàn)功能。

        通過對(duì)Qt以及unity的對(duì)比,由于Qt的方便性以及專用性,本文最終選擇使用Qt軟件進(jìn)行軟件前臺(tái)的設(shè)計(jì)。

        1.2 軟件模擬STM32串口Bootloader燒錄

        本文將軟件后臺(tái)設(shè)計(jì)為主要完成對(duì)用戶的圖形模塊程序的編譯、綜合、下載,可以分為以下幾步。

        1.2.1 模塊編譯

        在本文中,系統(tǒng)使用模塊C語言文本映射法,完成圖形模塊到C語言的轉(zhuǎn)換,主要完成以下幾個(gè)工作。

        (1)確定模塊的邏輯位置

        將模塊分為兩個(gè)類別,一個(gè)是為位于程序主干的非填充類,和位于循環(huán)和選擇語句中的填充類,每一個(gè)填充類對(duì)于其中的選擇循環(huán)語句又屬于非填充類,這樣語句就有了層層鏈條的關(guān)系,對(duì)于同屬于一個(gè)類別的模塊們,使用指針將其串成鏈表,這樣就確定了模塊的邏輯順序。

        (2)循環(huán)與代碼填充

        通過循環(huán)與選擇后的關(guān)鍵字確定循環(huán)與選擇語句的尾部,填充到尾前即可。

        (3)參數(shù)修改

        用戶通過接口為字符串修改參數(shù)

        (4)邏輯查錯(cuò)

        由于已經(jīng)對(duì)代碼進(jìn)行了封裝,一定程度上不會(huì)存在語法錯(cuò)誤,而只有邏輯上的錯(cuò)誤。

        (5)字符串拼接

        同樣通過關(guān)鍵字確定每個(gè)模塊的字符串的尾部,然后根據(jù)這個(gè)位置按順序拼接字符串。

        圖3 模塊邏輯位置確定示意圖Fig.3 Schematic diagram of module logical position determination

        1.2.2 C語言文件綜合

        用戶使用特別定制編譯器完成C語言到匯編語言再到hex文件的轉(zhuǎn)換,編譯器是專門為STM32單片機(jī)設(shè)計(jì)的,符合STM32的配置習(xí)慣。

        1.2.3 將HEX轉(zhuǎn)換bin文件并通過串口下載到單片機(jī)中

        先將Hex文件轉(zhuǎn)化為bin文件,然后根據(jù)STM32的 Bootloader協(xié)議使用動(dòng)態(tài)庫 STMBLLIB.dll與STUARTBLLIB.dll完成下載工作,具體步驟如圖4。

        圖4 文件轉(zhuǎn)換燒錄示意圖Fig.4 Schematic diagram of file conversion and programing

        2 STM硬件開發(fā)平臺(tái)

        本文將硬件平臺(tái)分為兩個(gè)子平臺(tái),一個(gè)是智能小車平臺(tái),另一個(gè)是無人機(jī)平臺(tái)。兩個(gè)平臺(tái)的主控制芯片都為STM32。通過前文所述的軟件平臺(tái)將編譯好的程序直接燒錄其中,通過小車以及無人機(jī)的相應(yīng)動(dòng)作來驗(yàn)證程序的正確性。

        STM32是由ST公司開發(fā)的32位微控制器,該芯片內(nèi)核是由ARM公司推出的全新的基于ARMv7架構(gòu)的32位Cortex-M3微控制器內(nèi)核,并由ST公司添加了相應(yīng)的外圍設(shè)備。而STM32憑借其產(chǎn)品的多樣化、極高的性價(jià)比,簡(jiǎn)單易用的開發(fā)方式脫穎而出,在現(xiàn)代嵌入式設(shè)計(jì)中起著不可替代的作用。

        2.1 PWM控制小車以及外圍傳感器通信

        本文使用 STM32F103ZET6作為智能小車的控制芯片,通過添加光電傳感器、超聲波測(cè)距以及電機(jī)驅(qū)動(dòng)芯片等外圍設(shè)備,實(shí)現(xiàn)上位機(jī)程序在硬件上的運(yùn)行。使青少年在學(xué)習(xí)編程中,能夠直觀地檢查所編寫的程序邏輯與語法是否有錯(cuò)誤,此外,還能通過小車不同的行為模式來激發(fā)青少年學(xué)習(xí)興趣,達(dá)到寓教于樂的作用。

        智能小車的運(yùn)動(dòng)采用 PWM控制電機(jī)驅(qū)動(dòng)芯片L293D,即脈寬調(diào)制方式來控制小車的前進(jìn)與轉(zhuǎn)向。

        STM32F103ZET6包含 8個(gè)定時(shí)器,其中有 2個(gè)高級(jí)定時(shí)器,6個(gè)通用定時(shí)器;其中一個(gè)定時(shí)器擁有4路通道,每一路通道可以輸出4路占空比不同的 PWM波,這極大的簡(jiǎn)化了小車的控制。本文利用TIM2定時(shí)器,輸出4路PWM波,通過選用相應(yīng)引腳是否開啟復(fù)用功能以確定小車前進(jìn)方向;利用差速轉(zhuǎn)向的原理控制小車的左右;同時(shí)改變PWM波的占空比來調(diào)整小車的運(yùn)動(dòng)速度,達(dá)到了比較良好的小車運(yùn)動(dòng)狀態(tài)。

        圖5 輸出四路不同占空比的PWM波Fig.5 Output four PWM waves with different duty cycles

        同時(shí)再利用其它不同的傳感器,例如光電傳感器,通過對(duì)光線的反射而達(dá)到避障或巡線的功能;或者使用其它傳感器通過直接與 MCU相連或者使用IIC、SPI等協(xié)議進(jìn)行通信,可以使小車完成許多實(shí)驗(yàn)與測(cè)試,可以讓使用者充分發(fā)揮主觀能動(dòng)性,從而提高平臺(tái)編程的多樣性與趣味性。

        2.2 串行PID解算無人機(jī)飛行姿態(tài)

        本文著重介紹如何實(shí)現(xiàn)無人機(jī)子平臺(tái)的飛行姿態(tài)解算過程。其他外圍設(shè)備則可通過IIC,SPI等通信協(xié)議進(jìn)行添加,實(shí)現(xiàn)不同的功能。

        本文通過STM32讀取MPU60506個(gè)原始數(shù)據(jù),即加速度計(jì)測(cè)得的三軸的加速度與陀螺儀測(cè)得的角速度。通過加速度和角速度都可以得到Pitch和Roll角(加速度不能得到Y(jié)aw角)[13],但MPU6050的加速度計(jì)和陀螺儀各有優(yōu)缺點(diǎn),三軸的加速度值可以直接通過正切運(yùn)算得到傾角,但是包含待測(cè)物運(yùn)動(dòng)震動(dòng)時(shí)產(chǎn)生的噪聲,使得誤差較大;陀螺儀對(duì)外界振動(dòng)影響小,精度高,通過對(duì)角速度積分可以得到傾角,但是會(huì)隨著時(shí)間累計(jì),產(chǎn)生的誤差越大。因此,不能單獨(dú)使用MPU6050的加速度計(jì)或陀螺儀來得到傾角[13],需要采取姿態(tài)融合的方法,盡量減小噪聲。常見的姿態(tài)融合算法有四元數(shù)解算,一階互補(bǔ)濾波,二階互補(bǔ)濾波,卡爾曼濾波等。

        姿態(tài)解算后,得到歐拉角,其對(duì)時(shí)間求導(dǎo)即得到角速度,然后利用串行PID算法對(duì)電機(jī)進(jìn)行PWM控制。

        內(nèi)外環(huán)PID(式1)算法如下:

        其中,εθ為當(dāng)前角度誤差,θe為期望角度,θn當(dāng)前角度, Pout為外環(huán)PID的P項(xiàng)輸出, K pout為外環(huán)PID的P項(xiàng)系數(shù), εθ(t )為當(dāng)前角度誤差,Iout為外環(huán)PID的I項(xiàng)輸出,K iout為外環(huán)PID的I項(xiàng)參數(shù),PIDout為外環(huán)PID輸出。

        內(nèi)環(huán)PID(式2):

        其中, εω( t )為當(dāng)前角速度誤差, ωn(t )為當(dāng)前角速度, Pin為內(nèi)環(huán)PID的P項(xiàng)輸出, 為內(nèi)環(huán)PID的P項(xiàng)參數(shù), Iin為內(nèi)環(huán)PID的I項(xiàng)輸出, K iin為內(nèi)環(huán)PID的I項(xiàng)參數(shù),Din為內(nèi)環(huán)PID的D項(xiàng)輸出,K din為內(nèi)環(huán)PID的D項(xiàng)參數(shù),P IDin為內(nèi)環(huán)PID的輸出。

        圖6 串行PID控制方框圖Fig.6 Block diagram of serial PID control

        3 結(jié)語

        本文通過研究模塊化編程以及建立軟件與硬件之間的相互聯(lián)系,找到了有效的編程燒錄方法,通過軟件編程的圖示化,有效的達(dá)到了“所見即所得”的編程目標(biāo),同時(shí)也與硬件教具相聯(lián)系,能夠較好地支持與輔導(dǎo)青少年的編程學(xué)習(xí)。但在如何提高平臺(tái)的編程趣味性以及簡(jiǎn)化軟硬件平臺(tái)之間的下載與通信有著較大的研究空間。

        猜你喜歡
        內(nèi)環(huán)語句小車
        博物館文創(chuàng)產(chǎn)品設(shè)計(jì)的“內(nèi)環(huán)-外循”框架研究
        包裝工程(2023年16期)2023-08-25 11:39:16
        快樂語文(2020年36期)2021-01-14 01:10:32
        自制小車來比賽
        重點(diǎn):語句銜接
        劉老師想開小車
        文苑(2018年22期)2018-11-19 02:54:18
        兩輪自平衡小車的設(shè)計(jì)與實(shí)現(xiàn)
        電子制作(2018年8期)2018-06-26 06:43:02
        精彩語句
        經(jīng)臍兩孔法腹腔鏡腹股溝疝內(nèi)環(huán)高位結(jié)扎加臍外側(cè)襞加強(qiáng)術(shù)治療小兒腹股溝斜疝*(附108例報(bào)告)
        經(jīng)臍微型腹腔鏡內(nèi)環(huán)高位結(jié)扎術(shù)聯(lián)合包皮環(huán)套術(shù)的臨床應(yīng)用
        如何搞定語句銜接題
        亚洲最新精品一区二区| 麻豆精产国品| 成人在线免费视频亚洲| 日本福利视频免费久久久| 亚洲一区二区综合精品| 人妻无码第一区二区三区| 任我爽精品视频在线播放| 狠狠色狠狠色综合日日不卡| 在线成人tv天堂中文字幕| 亚洲国产一区二区精品| 久久综合九色综合97婷婷| 美女露内裤扒开腿让男人桶无遮挡| 免费观看黄网站在线播放| 精品国产一区二区三区香蕉| 高清亚洲精品一区二区三区| 国产精品久色婷婷不卡| 情人伊人久久综合亚洲 | 亚洲国产熟女精品传媒| 午夜理论片yy6080私人影院| 国产欧美日韩精品a在线观看| 国产成年无码久久久免费| 精品国产麻豆免费人成网站| 亚洲国产国语在线对白观看| 爆乳熟妇一区二区三区霸乳| 婷婷四房播播| 国产黄色污一区二区三区| 精品久久综合日本久久综合网| 久久婷婷五月综合色欧美| 国产suv精品一区二人妻| 久久夜色精品国产噜噜噜亚洲av| 亚洲国产精品久久性色av| 久久综合噜噜激激的五月天| 亚洲成人色区| 亚洲av不卡电影在线网址最新| 91久久国产精品综合| 亚洲色一区二区三区四区| 香港日本三级亚洲三级| 久久精品熟女不卡av高清| 网红尤物泛滥白浆正在播放| 亚洲狠狠婷婷综合久久久久| 99久久人人爽亚洲精品美女|