所謂小車控制實際上就是電機控制,本論文所設計的小車分為藍牙通信,直流電機控制,舵機控制三大結構。 藍牙通信使用收發一體式低功耗藍牙模塊HC-05,該模塊最大優點是無需了解藍牙傳輸協議,只需讀取模塊串口接受到的數據和通過串口將數據發送數去。 結構上小車使用金屬底板,一體充壓成型的鋁固定件,將電機與傳動軸緊密咬合在一起,增加了和汽車原理相似的差速結構,差速結構最大的好處體現在小車轉彎時,可以通過內部的動力分配單元使內外側輪速度不同。電機385高速電機帶來更快的速度,后輪加入兩顆法蘭杯式軸承,確保了電機轉動更加靈活。和專業的遙控賽車原理相同,使用兩根拉桿通過轉向舵機來控制小車的方向,大扭力舵機確保轉向角度精確可靠。 動力系統使用一個直流電機和一個舵機。通過舵機控制左右方向,通過直流電機控制前進后退,實現小車的基本運動功能;通過對電機轉速的調節控制小車的運動速度。根據實際情況,則表1-1是電機轉動狀態與小車運動方向的關系表。
表1-1 電機轉動狀態與小車運動方向關系表
2.1.2 主要軟件資源 編程語言選用C語言: C語言是一種計算機程序設計語言,屬高級語言范疇。它既具有高級語言的特點,又具有匯編語言的特點。它可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬件的應用程序,代碼清晰知精簡,十分靈活。
1、java、.net、c++這些高級語言的基礎都跟c語言類似的 所以c語言是編程語言的基礎。
2、c語言用途非常廣泛,大到衛星導彈,小到一個計算器,都可以用C語言來實現。 現在學的只是C語言的基本語法,要做真正有用的程序,還要道學很多東西,比如windows api,學了之后就知道怎么用C語言調用Windows api畫窗口、按鈕、進回度條等等,做出像QQ一樣實用的程序。
3、C語言只是一門計算答機語言,說到底就是一種工具。它的用處就是可以用它編出能夠運行的程序來,而這些程序可以實現某些人需要的功能。人通過學習c語言也可以更加深入的了解計算機,所以很多人都把c語言作為計算機入門的第一門語言來學習,因為學習起來相對簡單一些。至于實際的意義,無非是多學會一門技能,更加深入對計算機的了解,為學習其他計算機語言打下好的基礎。 采用標準的Windows應用程序μVision4作為開發環境,μVision4 是Keil公司提供的用于開發MCS-51系列芯片的匯編語言與C程序的集成開發環境,μVision4 環境包括工具條、菜單、編輯及顯示多種窗口。μVision4 支持使用的Keil C51工具,包括宏匯編器、C編譯器、連接定位器、目標代碼到HEX的轉換器。 2.2 硬件系統設計總框圖 系統框圖如下: 圖1-1 小車系統框圖 2.3 驅動模塊 2.3.1 直流電機驅動模塊 實驗室中比較常見的電機驅動芯片是L298N芯片,L298N 是一種雙H橋電機驅動芯片,其中每個H橋可以提供2A的電流,功率部分的供電電壓范圍是2.5-48v,邏輯部分5v供電,接受5vTTL電平。一般情況下,功率部分的電壓應大于6V否則芯片可能不能正常工作。在原理上它內部集成H橋電路,其輸出電流比較大,功率可以達到比較高。其固定輸出電流可以達到2A,最高電流可以達到4A,最高工作電壓50V,可以直接驅動感性負載,比如大功率直流電機,步進電機,電磁閥等,特別是其輸入端可以與單片機的IO口直接相聯,從而很方便地受單片機控制。當驅動直流電機時,使能端接高電平,兩個輸入端電平狀態決定電流方向即決定電機轉動方向,輸出端接電機,從而實現電機正轉與反轉,實現此功能只需改變輸入端的邏輯電平。 下圖是L298N芯片內部原理圖。 圖2-1 L298N內部電路圖 為了在實際使用中方便的使用該芯片,廠商將其設計為模塊,僅留出控制接口。在該模塊的設計中,續流二極管必不可少。電機類似于電感的性質,在轉動過程中,尤其是高速轉動時以及電機兩端電壓較高時,有可能會發生自感,為了防止電源關閉時自感電壓擊穿開關元件,才設置了這些二極管作為自感能量的釋放途經。同時也是防止電機受外力作用運轉時發電造成芯片損壞。 在本次小車設計中,因為只需控制一個直流電機,所以只使用到該模塊的兩個輸入,兩個輸出引腳和一個使能端,輸入引腳接入單片機的IO口,同時該IO口接了led指示燈來判斷正反轉狀態,在6腳即EN A接入PWM信號,該信號由單片機的定時器TIM2產生,可實現速度由0-100%控制。具體電路圖如下所示。 圖2-2 L298N驅動模塊圖
2.3.2 舵機供電及工作原理 關于舵機的定義一直存在比較大的爭議,使用者往往無法從根本上說出它與伺服電機的區別,而實際上,“舵機”這個詞可以說是民間玩航模以及遙控車的玩家對其的稱呼,舵機主要是由外殼、電路板、無核心馬達、齒輪與位置檢測器所構成。其工作原理是由接收機發出訊號給舵機,經由電路板上的 IC判斷轉動方向,再驅動無核心馬達開始轉動,透過減速齒輪將動力傳至擺臂,同時由位置檢測器送回訊號,判斷是否已經到達定位。位置檢測器其實就是可變電阻,當舵機轉動時電阻值也會隨之改變,藉由檢測電阻值便可知轉動的角度。一般的伺服馬達是將細銅線纏繞在三極轉子上,當電流流經線圈時便會產生磁場,與轉子外圍的磁鐵產生排斥作用,進而產生轉動的作用力。依據物理學原理,物體的轉動慣量與質量成正比,因此要轉動質量愈大的物體,所需的作用力也愈大。舵機為求轉速快、耗電小,於是將細銅線纏繞成極薄的中空圓柱體,形成一個重量極輕的五極中空轉子,并將磁鐵置於圓柱體內,這就是無核心馬達。這里的舵機工作原理是:在每個舵機內部都有一個基準電路,其作用是產生周期為20ms,寬度為1.5ms的基準信號,舵機控制信號(由信號線傳入)由接收機的通道接收后進入信號調制芯片,獲得直流偏置電壓。然后將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后,電壓差的正負輸出到電機驅動芯片決定電機的正反轉,這就是舵機能控制角度的原因。當電機轉速一定時,通過級聯減速齒輪帶動電位器旋轉,使得電壓差為0,電機停止轉動。 在本次設計中,采用的是金屬齒輪舵機MG996R,該舵機在需要精確控制角度變化的系統中被廣泛使用,主要技術參數:無負載速度 0.17 秒/60 度(4.8V),有負載速度,0.13 秒/60 度(6.0V),扭矩: 13KG。從參數上看,其角度控制精確快速,保證轉向的可靠性 舵機的控制信號是PWM信號,利用占空比的變化改變舵機的位置。一般舵機的控制要求下圖所示。 圖2-3 舵機控制圖 小車的舵機控制信號由單片機的TIM2 CH4通道產生,舵機通過連桿帶動前輪轉向,實現前輪45-135度的轉向角度變化。得益于單片機的強大處理能力和穩壓電路供電,實際使用中轉向角度準確穩定且精度高,使小車變得更加靈活。 由于舵機工作時所需電流比較大,且波動也比較大,根據實際情況測試發現如果不給舵機單獨供電會對其他模塊運行產生很大影響。給舵機單獨供電,不但能提高電壓,增大電流,以提供大的驅動功率,而且能改善單片機體統供電質量,提高抗干擾能力,是一比較優化的供電方案。 供電模塊MP1584EN是一個高頻率的降壓開關穩壓器,具有一個內部集成的高端高壓功率MOSFET,它提供最大3A的電流輸出,輸入輸出壓差可以做大比較大,同時效率很高,體積很小,該模塊被廣泛應用于各種供電電路。簡化示意圖如下圖所示。 圖2-4 MP1584EN電源模塊圖 2.3.3 藍牙模塊供電及工作原理 藍牙模塊HC-05 是一個可雙向數據傳輸的藍牙串口模塊,它采用藍牙 2.0 協議,可與任何版本的藍牙兼容通訊,包括與具有藍牙功能的電腦、藍牙主機、手機、 PDA、PSP 等終端配對,可實現串口透傳功能。其最大的特點是驅動 HC-05 模塊時只需要使用TTL 電平標準的串口即可(5V/3.3V 電壓均可),而且支持的波特率范圍很廣,支持的波特率范圍為 4800~1382400,它的這些特性,非常適合用于單片機系統擴展藍牙特性。 在小車中,該模塊主要功能是接受手機藍牙的信號,然后將該信號傳給單片機,單片機經過處理后作出相應指令。實際測試中發現該模塊同樣對電源穩定性要求較高,因此也才用單獨供電模塊,原理圖如下。 圖2-5 藍牙模塊及供電模塊圖 供電模塊MP1584EN是一個高頻率的降壓開關穩壓器,具有一個內部集成的高端高壓功率MOSFET,它提供最大3A的電流輸出,輸入輸出壓差可以做大比較大,同時效率很高,體積很小,該模塊被廣泛應用于各種供電電路。簡化示意圖如下圖所示。
2.4 總電路圖 圖2-6 小車整體電路圖
3 軟件系統設計3.1 選擇編程環境設計中使用的軟件主要有KEIL,Multisim,Visio Studio,Matlab,其中KEIL為主要的軟件環境,Visio Studio主要用于圖新界面的設計,Matlab為輔助軟件用于獲取濾波器設計的參數,Multisim主要用于電路仿真。 3.2 建立新工程首先使用KEIL軟件先建立一個新工程,這里命名為DigitalScope,工程建立步驟如下: 1:打卡KEIL軟件,點擊Project->New uVision Project,新建工程命名為DigitalScope。 
圖3-1 新建工程 2:選擇所使用的芯片型號,我這里使用的是STM32F407ZET6,所以選擇的是這個型號; 3:芯片型號選擇完成后我們就完成了新項目的創建了,工程新建完成后的界面如圖,此時只是一個空的項目,什么內容都沒有添加。 
圖3-2 選擇芯片型號圖 圖3-3 新建空的工程 3.3 添加STM32F4官方驅動文件由于剛才新建的新項目只是一個空的項目,接下來我們需要添加ST公司的官方底層驅動庫,ST的官方底層驅動庫分為庫函數版和寄存器版,這里我們采用的是庫函數版本,不過在實際代碼編寫的時候可以庫函數與寄存器混合使用,ST官方驅動庫的添加方法如下: 1:打開KEIL的工程項目管理器,如圖3.4: 
圖3-4 工程項目管理器 2:將Project Target命名為DigitalScope,然后在Groups中新建ST官方底層標準庫文件組StdPeriph_Driver,并且在Files中添加驅動文件: 
圖3-5 新建文件分組以及添加標準庫文件 3:要使得芯片能夠正常工作。我們還需要添加組基本的啟動文件,新建分組MDK-ARM,添加啟動文件以及芯片系統文件,如圖所示: 
圖3-6 添加啟動文件
3.4 添加硬件文件
在Keil編寫好的代碼,通過編譯后,下載到單片機。我們只能看到兩種結果:第一實驗成功,展現出我們想要的效果;第二實驗不成功,什么效果都沒有看到。失敗的原因是什么,通過硬件測試,我們無法看到代碼在單片機內部里面如何運行、變量是如何傳遞、變量的變化情況等等。由此可見,它的調試功能是非常強大而且重要的。 
圖3-7 Keil MDK軟件界面圖 本次開發使用的是ST公司最新的HAL庫,并且使用該公司最新推出的圖形化編程軟件STM32CubeMx。HAL庫對外設操作進行了細致的封裝封裝,幾乎所有外設操作都可以用HAL庫中函數實現,讓用戶不用很了解甚至完全不去學習外設細節就可以編程操作。對于熟悉C語言,但第一次接觸STM32甚至單片機的人來說,使用起來非常方便容易。另外HAL庫也對中斷進行了一定程度的處理,這讓用戶很大程度上不用理會中斷函數了——HAL庫中已經有比較完善的中斷處理函數,只需要聲明回調函數,在回調函數里做相應處理就好了。
3.5程序設計思路及部分模塊程序 3.5.1 程序總體設計思路 眾所周知整個小車控制系統的程序設計采用模塊化的編程思想,整個主程序的流程圖如圖3-8。 圖3-8 程序邏輯圖 3.5.2 單片機控制程序設計單片機主要是用來接收手機通過串口發送給藍牙模塊的數據,根據不同的數據做出不同的反應。如圖3-9所示: 先進行初始化設置,注意串口和藍牙模塊的波特率一致,本設計選取波特率為9600。再判斷接收數據“w”“a”“x”“d”“s”分別對應圖3-9的“前進” “左轉”“后退”“右轉”“停止”。
圖9 控制程序流程圖
3.5.3 調試藍牙HC-05是一個串口藍牙通信模塊,內部的芯片上封裝了藍牙通信協議以及用于調試的AT指令集,功能是:可以通過藍牙接受數據,再從串口通信協議從針腳發送出去,也可以從串口接受消息,再經過芯片用藍牙發送出去,相當于通信無線到有線通信的一個橋梁。 AT指令是應用于終端設備與PC應用之間的連接與通信的指令。AT即Attention。每個AT命令行中只能包含一條AT指令;對于AT指令的發送,除AT兩個字符外,最多可以接收1056個字符的長度(包括最后的空字符) 我們將藍牙模塊(HC-05)通過轉換器(TTL轉USB)連接到電腦上, 在電腦上使用串口調試軟件(CoolTerm)向藍牙模塊發送特定的AT指令來對藍牙模塊的一些參數,比如設備名稱、配對碼、主從角色等等。 1 將串口藍牙模塊(HC-05) 與PC相連接 使用 USB轉TTL模塊 連接 HC-05,連線如下圖: 連線:GND--GND;5V--5V;RX--TX;TX--RX 要按住RST鍵連接USB,才能進入AT調試模式 按住藍牙模塊上的RST鍵,插入PC機的USB口,松開RST鍵,進入AT指令調試模式,標志是藍牙模塊上的紅色指示燈慢速閃爍 如果不按住RST鍵直接連接USB口的話,紅色指示燈會快速閃爍,標志進入藍牙連接模式 2 打開CoolTerm,建立串口通信連接 將藍牙模塊連接到PC上后,查看設備管理器,打開CoolTerm軟件,點擊【Options】圖標進入選項設置,【Port】選項選擇設備管理器中CH340對應的端口(根據電腦的不同,不一定是COM5),【Baudrate】修改為 38400,然后點擊底部的【OK】確定 進入設置,修改端口和波特率 設置完成后,點擊軟件上方的【Connect】圖標 3 使用AT指令調整藍牙模塊的參數 【Connect】成功后,依次點選菜單欄上的【Connection】→【Send String】,會出現一個消息發送框,通過這個可以向藍牙模塊發送AT指令,如下圖: 輸入“AT+回車” 注意,使用AT指令的時候一定要回車到第二行再點擊【Send】發送 AT指令集 分別輸入如下指令,查看設備的當前狀況
“AT”:回復“OK”,說明設備正常。
“AT+UART”:查看設備的串口通信參數,本實驗模塊藍牙模式的波特率為9600
“AT+ADDR”:查看設備的藍牙地址
“AT+ROLE”:查看設備的主從轉臺,“0”為從模式,“1”為主模式
“AT+PSWD”:查看設備當前的配對碼,默認是1234
“AT+NAME”:查看設備當前的名稱,默認是 HC-05
“AT+RESET”:重啟設備 用AT指令配置設備 發送完上述AT指令查看完設備信息后,需要根據你的情況修改一些設備信息,方法是,在相應的AT指令后加“=”號,輸入要修改的信息即可,本項目主要修改信息如下例 - “AT+ROLE=0”:設置藍牙設備為從模式
- “AT+PSWD=123456”:修改配對碼為123456,用戶自定義
- “AT+NAME=Carduino”:修改名稱為Carduino,用戶自定義
- “AT+UART=9600,0,0”:修改藍牙工作狀態波特率為9600,無停止位和校驗位
注意!每次都要回車到第二行再點擊“Send” 由于硬件存在一定的缺陷,HC-05藍牙模塊在設置【NAME】參數時會有些問題,可能需要多設置幾次
如果改名不成功,請使用“AT+ADDR”查詢藍牙設備地址,在手機上根據搜索到的設備地址來連接藍牙模塊 4 下載安裝BlueSPP軟件,設置按鍵消息 BlueSPP是一個手機端的藍牙串口通訊通信工具,可以連接藍牙設備,通過串行通訊協議發送消息,打開APP。 進入BlueSPP,連接設備,如圖:
點右上角圖標搜索設備并連接,如圖: 輸入事先配置的配對碼,APP首頁可以在聊天窗口中向設備發送消息,右滑,進入自定義鍵盤頁面,每個按鈕的“名稱”可定義,按鈕對應的“按下”,“松開”事件都可配置成發送特定消息。 配置按鈕“左轉”,其余配置如圖表。 [td]按鍵名稱 | 按下發送 | 松開發送 | 前進 | w |
| 后退 | x | s | 左轉 | a | w | 右轉 | d | w | 停止 | s |
|
配置完成,就可以采用BlueSPP控制小車前進轉向了。
4 總結本文根據設計內容和要求,制定了設計方案,并逐步完成了硬件和軟件部分的設計。整個系統以STM32為主控芯片,實現對小車簡單運動的控制,其中硬件部分包括STM32F103及外圍電路、電平轉換電路、電機驅動電路、舵機控制電路,完成各部分電路設計并使用Altium Designer14畫出電路設計原理圖;軟件部分在STM32集成開發環境Keil MDK下編寫各模塊程序,整個設計將硬件與軟件相結合,實現對小車的控制,使小車能夠做出前進、后退、左轉、右轉等動作,基本完成一個遙控小車該有的功能。論文基本完成了硬件和軟件的設計,并使之符合設計要求。 本設計與實際應用相結合,隨著智能控制技術與傳感檢測技術的飛速發展,作為智能機器人雛形的智能小車在探測、考古、娛樂各領域得到廣泛應用,尤其在足球機器人研究方面有很好的發展前景。在智能機器人發展如火如荼之期,智能小車控制系統的研制為其提供了更有利的研制手段和方法,將有助于推動智能機器人的發展。由于初次接觸STM32F10x系列芯片,對其先進的中斷響應系統未能很好掌握,傳感信號的接收選擇了一般I/O口,不過基于STM32F103的高性能,其反應速度還是可以滿足設計要求,但要充分利用芯片資源及更好的實時控制在這部分還有待改進;另外,對于小車行走中遇到障礙物的處理還未能實現?偟膩碚f,設計方案是比較完善的,基本上達到了設計要求。 最后,在軟硬件的結合下,制作出了實物,如下圖所示:
圖3-12 小車實物圖
|