基于stm32f4的藍(lán)牙控制小車_第1頁
基于stm32f4的藍(lán)牙控制小車_第2頁
基于stm32f4的藍(lán)牙控制小車_第3頁
基于stm32f4的藍(lán)牙控制小車_第4頁
基于stm32f4的藍(lán)牙控制小車_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、ARM-STM32校園創(chuàng)新大賽項(xiàng)目報(bào)告題 目: 基于stm32f4的藍(lán)牙控制小車 學(xué) 校: 中南民族大學(xué) 指導(dǎo)教師: 視頻觀看地址:題 目: 基于stm32f4的藍(lán)牙控制小車 關(guān)鍵詞: STM32F4 LM2940-5.0 L298N FBT06_LPDB 藍(lán)牙串口通信 androidFBT06_LPDB FBT06_LPDB 摘要 “基于stm32f4的藍(lán)牙控制小車”是一個(gè)基于意法半導(dǎo)體與ARM公司生產(chǎn)的STM32F4 DISCOVERY開發(fā)板的集電機(jī)驅(qū)動模塊、電源管理模塊、stm32f4主控模塊、藍(lán)牙串口通信模塊、android控制端模塊。電機(jī)驅(qū)動模塊使用了兩個(gè)L298N芯片來驅(qū)動4路電機(jī)

2、,使能端連接4路來自主控板的PWM波信號,8個(gè)輸入端接主控板的8個(gè)輸出端口;電源管理模塊使用了LM2940-5.0芯片進(jìn)行12V到5V的轉(zhuǎn)換,12V用于電機(jī)模塊的供電,5V用于藍(lán)牙模塊、傳感器等的供電;主控模塊采用了MDK編輯程序,然后下載到主控板,實(shí)現(xiàn)硬件與軟件的交互;藍(lán)牙串口通信模塊則是采用了FBT06_LPDB針插藍(lán)牙模塊,與主控板進(jìn)行串口通信,同時(shí)與android手機(jī)進(jìn)行通信;android控制端模塊是一個(gè)集開啟藍(lán)牙、搜索藍(lán)牙、控制小車等功能。用戶可以通過android控制端進(jìn)行控制小車的運(yùn)動,實(shí)現(xiàn)一些用戶需要的功能和服務(wù)。1. 引言藍(lán)牙的創(chuàng)始人是瑞典愛立信公司,藍(lán)牙技術(shù)是一種無限數(shù)據(jù)

3、與語音通信的開放性全球規(guī)范,它以低成本的近距離無線連接為基礎(chǔ),為固定與移動設(shè)備通信環(huán)境建立一個(gè)特別連接。手機(jī)之間通過藍(lán)牙實(shí)現(xiàn)數(shù)據(jù)共享成為常理,將手機(jī)變?yōu)檫b控器為人們的生活帶來無限方便。遙控小車在工業(yè)、國防、科研等領(lǐng)域應(yīng)用越來越廣泛,例如說:消防遙控小車、探測小車等。本文詳細(xì)闡述了使用藍(lán)牙通信的手機(jī)遙控小車前行、倒退、左轉(zhuǎn)、右轉(zhuǎn)和停止等功能的軟硬件設(shè)計(jì)過程。2. 系統(tǒng)方案 該系統(tǒng)分為電機(jī)驅(qū)動模塊、電源管理模塊、主控板、藍(lán)牙通信模塊、android控制端等5個(gè)模塊,如圖2.1所示:stm32f4主控板電源管理模塊超聲波測距模塊藍(lán)牙通信模塊GPS導(dǎo)航模塊其它待擴(kuò)展模塊音頻輸出電機(jī)驅(qū)動模塊指示燈圖2.

4、1 系統(tǒng)模塊圖3. 系統(tǒng)硬件設(shè)計(jì)3.1 電機(jī)驅(qū)動模塊3.1.1 L298N的封裝H 橋電路雖然有著諸多的優(yōu)點(diǎn),但是在實(shí)際制作過程中,由于元件較多,電路的搭建也較為麻煩,增加了硬件設(shè)計(jì)的復(fù)雜度。由于H 橋電路有諸多的優(yōu)點(diǎn),但是在實(shí)際制作過程中電路又比較麻煩,因此在本設(shè)計(jì)中我們采用H 橋集成電機(jī)驅(qū)動芯片L298。L298N 的工作原理和以上介紹的H 橋相同,引腳圖如圖3.1 所示:圖3.1 L298N封裝圖3.1.2 L298N的原理圖設(shè)計(jì)L298N 是ST 公司生產(chǎn)的一種高電壓、大電流電機(jī)驅(qū)動芯片。該芯片采用15 腳封裝。主要特點(diǎn)是:工作電壓高,最高工作電壓可達(dá)46V;輸出電流大,瞬間 峰值電流

5、可達(dá)3A,持續(xù)工作電流為2A;額定功率25W。內(nèi)含兩個(gè)H 橋的高電壓大電流全橋式驅(qū)動器,可以用來驅(qū)動直流電動機(jī)和步進(jìn)電動機(jī)、繼電器線圈等感性負(fù)載;采用標(biāo)準(zhǔn)邏輯電平信號控制;具有兩個(gè)使能控制端,在不受輸入信號影響的情況下允許或禁止器件工作有一個(gè)邏輯電源輸入端,使內(nèi)部邏輯電路部分在低電 壓下工作;可以外接檢測電阻,將變化量反饋給控制電路。使用L298N 芯片驅(qū)動電機(jī),該芯片可以驅(qū)動一臺兩相步進(jìn)電機(jī)或四相步進(jìn)電機(jī),也可以驅(qū)動兩臺直流電機(jī)。L298 的參考電路圖如圖3.2所示。圖3.2 電機(jī)驅(qū)動電路原理圖3.1.3 電機(jī)驅(qū)動模塊實(shí)物1、控制板內(nèi)部帶5V邏輯電平轉(zhuǎn)換芯片,不需要額外的5V供電。2、如果E

6、N1、EN2、EN3、EN4不接PWM調(diào)速信號,次腳需要和對應(yīng)的管教短接。3、GND和12V接電機(jī)電源,其中12V可以接7V-24V電平,板子上的電源開關(guān)只是控制邏輯5V電平的開關(guān),L298的12V電源不受此開關(guān)控制.4、輸出端和輸入端一一對應(yīng),當(dāng)輸入端為5V時(shí),輸出端也為高電平,輸入端為低電平時(shí)輸出亦為低電平。圖3.3 L298N電機(jī)驅(qū)動模塊實(shí)物圖3.2 電源管理模塊3.2.1 智能車電源設(shè)計(jì)要點(diǎn)電源是整個(gè)系統(tǒng)穩(wěn)定工作的前提,因此必須有一個(gè)合理的電源設(shè)計(jì),對于小車來說電源設(shè)計(jì)應(yīng)注意兩點(diǎn):1. 與一般的穩(wěn)壓電源不同,小車的電池電壓一般在6-8V 左右,還要考慮在電池?fù)p耗的情況下電壓的降低,因此

7、常用的78 系列穩(wěn)壓芯片不再能夠滿足要求,因此必須采用低壓差的穩(wěn)壓芯片,在本文中以較為常見的LM2940-5.0 為例。2. 單片機(jī)必須與大電流器件分開供電,避免大電流器件對單片機(jī)造成干擾,影響單片機(jī)的穩(wěn)定運(yùn)行?,F(xiàn)在各種新型的電源芯片層出不窮,各位讀者可以根據(jù)自己的需求自行選擇電源芯片,對于本設(shè)計(jì)應(yīng)該主要注意穩(wěn)壓壓差和最大輸出電流兩個(gè)指標(biāo)能否滿足設(shè)計(jì)要求。3.2.2 低壓差穩(wěn)壓芯片LM2940 簡介LM2940 系列是輸出電壓固定的低壓差三端端穩(wěn)壓器;輸出電壓有5V、8V、10V 多種;最大輸出電流1A;輸出電流1A 時(shí),最小輸入輸出電壓差小于0.8V;最大輸入電壓26V;工作溫度-40+12

8、5;內(nèi)含靜態(tài)電流降低電路、電流限制、過熱保護(hù)、電池反接和反插入保護(hù)電路。同時(shí)LM2940 價(jià)格適中而且較容易購買,非常適合在本設(shè)計(jì)中使用。LM2940-5.0 封裝和實(shí)物如圖3.4所示。圖3.4 LM2940 封裝和實(shí)物圖如圖3.5所示,采用兩路供電,這樣可以使用其中一路單獨(dú)為STM32F4discovery電路板供電,指示燈等供電。另外一路提供L298N、舵機(jī)、藍(lán)牙的工作電壓,L298N 的驅(qū)動電壓由電池不經(jīng)任何處理直接給出。舵機(jī)可以用6V 供電,也可以直接用5V 供電。圖3.5 電源模塊原理圖如圖3.6中的PCB圖:圖3.6 電源模塊PCB圖圖3.7 是運(yùn)用腐蝕液自制的電源管理模塊,具有1

9、2v5v的供電模塊,可同時(shí)給電機(jī)模塊和主控板(STM32DISCOVERY)供電:圖3.7 電源管理模塊實(shí)物圖4. 系統(tǒng)軟件設(shè)計(jì)41 主控板程序設(shè)計(jì)4.1.1 main程序設(shè)計(jì)主函數(shù)主要分為延遲時(shí)間初始化、串口接收模塊程序、電機(jī)初始化三部分。主函數(shù)的流程圖如圖4.1所示:圖4.1 主函數(shù)流程圖主函數(shù)程序代碼如下:int main(void) delay_init(168);/延遲時(shí)間初始化uart_init(9600);/串口初始化Direction(1);/電機(jī)初始化delay_ms(10);/延遲10msprintf(" welcome to control the smart

10、car!:nr");/輸入語句while(1);4.1.2 串口接收模塊程序主控板接收到藍(lán)牙從串口傳來的數(shù)據(jù)后存入Res變量,然后通過分支程序來選擇執(zhí)行前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)和停止等功能。該模塊的程序流程圖如圖2所示:圖2 串口接收程序流程圖4.1.3 修改PWM輸出值程序該程序是基于“4_PWM的實(shí)現(xiàn)”中的程序改編的。代碼如下:void Change_PWM(int duty1,int duty2,int duty3,int duty4)SCB->AIRCR=0x05AF00;/ 中斷優(yōu)先級分組 搶占:響應(yīng)=3:1 RCC->AHB1ENR|=(1<<2);

11、/ 打開GPIOC時(shí)鐘 GPIOC->MODER|=0x000AA000;/ pc6789第二功能,推挽輸出 GPIOC->OSPEEDR|=0x000FF000;/輸出速度為100m GPIOC->PUPDR|=0x00055000;/上拉 GPIOC->AFR0|=0x22000000;/pc6789的第二功能為AF2 GPIOC->AFR1|=0x00000022; RCC->APB1ENR|=(1<<1);/打開TIM3時(shí)鐘 TIM3->PSC=83;/對84M時(shí)鐘進(jìn)行84分頻,使得計(jì)數(shù)頻率為1M TIM3->ARR=1000

12、0;/周期為10ms TIM3->EGR|=1;/產(chǎn)生一次更新時(shí)間 TIM3->CCMR1|=0x6060;/PWM模式1 TIM3->CCMR2|=0x6060;/PWM模式2 TIM3->CCR1=duty1;/1路PWM TIM3->CCR2=duty2;/2路PWM TIM3->CCR3=duty3;/3路PWM TIM3->CCR4=duty4;/4路PWM TIM3->CCER|=0x1111;/使能比較輸出 TIM3->CCMR1|=0x0808;/啟動預(yù)裝載 TIM3->CCMR2|=0x8080; TIM3->

13、CR1|=1;/開始計(jì)時(shí)4.1.4 設(shè)置電機(jī)轉(zhuǎn)向程序改程序?qū)㈦姍C(jī)驅(qū)動模塊的8個(gè)輸入端口接到了主控板的8個(gè)GPIO口,通過推挽輸出,從而控制電機(jī)的轉(zhuǎn)向,代碼如下:void Direction(int direction)SysTick_Config(SystemCoreClock / 1000); /時(shí)鐘中斷設(shè)為1ms RCC->AHB1ENR |= 0x00000005; /使能GPIOA和GPIOD時(shí)鐘 RCC->APB2ENR |= (1<<14); /使能syscfg時(shí)鐘if(direction=0) GPIOA->MODER &= 0xffff00

14、00; /設(shè)置PA0,1,2,3為輸出 GPIOA->MODER |= 0x00005555; GPIOA->OTYPER &= 0xFFFFff00; /設(shè)置PA0,1,2,3為推挽輸出 GPIOA->OSPEEDR &= 0xffff0000; /設(shè)置PA0,1,2,3的輸出速度為100M GPIOA->OSPEEDR |= 0x0000ffff; SYSCFG->CMPCR = 0x00000001; /使用IO補(bǔ)償單元 GPIOA->PUPDR &= 0xffffff00; /設(shè)置PA0,1,2,3無上拉,無下拉 GPIOA-

15、>BSRRH = 0x00ff; /復(fù)位GPIOA_BSRRH寄存器 GPIOA->BSRRL = 0x0055; elseGPIOA->MODER &= 0xffff0000; /設(shè)置PA0,1,2,3為輸出 GPIOA->MODER |= 0x0000005555; GPIOA->OTYPER &= 0xFFFFff00; /設(shè)置PA0,1,2,3為推挽輸出 GPIOA->OSPEEDR &= 0xffff0000; /設(shè)置PA0,1,2,3的輸出速度為100M GPIOA->OSPEEDR |= 0x0000ffff; S

16、YSCFG->CMPCR = 0x00000001; /使用IO補(bǔ)償單元 GPIOA->PUPDR &= 0xffffff00; /設(shè)置PA0,1,2,3無上拉,無下拉 GPIOA->BSRRH = 0x00ff; /復(fù)位GPIOA_BSRRH寄存器 GPIOA->BSRRL = 0x00AA;4.2 android客戶端程序設(shè)計(jì)4.2.1 控制界面的布局控制界面主要運(yùn)用了線性布局、相對布局和表格布局。整體采用線性布局,局部采用相對布局,而控制按鈕采用了表格布局??刂平缑娴牟季秩鐖D4.1所示:圖4.1 控制界面的布局4.2.2 布局的代碼如下:<?xml

17、version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" android:layout_width="wrap_content" android:layout_height="fill_parent" android:orientation="vertical" ><RelativeLayout android:id = "+id/container" android:orie

18、ntation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:id= "+id/edit_bottombar" android:layout_alignP

19、arentBottom = "true"> <Button android:id="+id/btn_disconnect"android:layout_width="65dp" android:layout_height="wrap_content" android:layout_alignParentLeft ="true"android:text="斷開"/> <Button android:id="+id/btn_msg_send&qu

20、ot;android:layout_width="65dp" android:layout_height="wrap_content" android:layout_alignParentRight ="true"android:text="發(fā)送"/> <EditText android:id="+id/MessageText" android:layout_width="98dp" android:layout_height="wrap_content

21、" android:layout_toRightOf="+id/btn_disconnect" android:hint="說點(diǎn)什么呢?" android:textSize="15dip" /></RelativeLayout> <ListView android:id="+id/list" android:layout_width="wrap_content" android:layout_height="wrap_content" and

22、roid:layout_above="id/edit_bottombar" android:layout_below="id/container" android:layout_weight="1.0" android:divider="#ffc6c6c6" android:scrollingCache="false" android:visibility="visible" /> <TableLayout android:layout_width="m

23、atch_parent" android:layout_height="wrap_content" > <TableRow android:id="+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="+id/button1" android:layout_width="wrap_cont

24、ent" android:layout_height="wrap_content" android:text="Button" android:visibility="invisible" /> <Button android:id="+id/start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight=

25、"0dp" android:text="start" android:width="120px" /> </TableRow> <TableRow android:id="+id/tableRow2" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" > <Button android:id=

26、"+id/left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="0dp" android:text="left" android:width="120px" /> <Button android:id="+id/stop" android:layout_width="wrap_

27、content" android:layout_height="wrap_content" android:text="stop" android:width="120px" /> <Button android:id="+id/right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="right" and

28、roid:width="120px" /> </TableRow> <TableRow android:id="+id/tableRow3" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="+id/button2" android:layout_width="wrap_content" android

29、:layout_height="wrap_content" android:text="Button" android:visibility="invisible" /> <Button android:id="+id/back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Back" /> </Tabl

30、eRow> </TableLayout></RelativeLayout></LinearLayout>4.2.3 android客戶端的界面如圖4.2所示:圖4.2 android控制界面4.2.4 發(fā)送按鈕的代碼sendButton= (Button)findViewById(R.id.btn_msg_send);sendButton.setOnClickListener(new OnClickListener() Overridepublic void onClick(View arg0) / TODO Auto-generated method

31、 stubString msgText =editMsgView.getText().toString();/獲取編輯框內(nèi)的內(nèi)容if (msgText.length()>0) sendMessageHandle(msgText);/發(fā)送編輯框的內(nèi)容給串口editMsgView.setText("");/清空編輯框editMsgView.clearFocus();/close InputMethodManagerInputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METH

32、OD_SERVICE); imm.hideSoftInputFromWindow(editMsgView.getWindowToken(), 0);elseToast.makeText(mContext, "發(fā)送內(nèi)容不能為空!", Toast.LENGTH_SHORT).show(););4.2.5 控制按鈕的代碼以左轉(zhuǎn)按鈕為例:sendButton= (Button)findViewById(R.id.left);sendButton.setOnClickListener(new OnClickListener() Overridepublic void onClick(View arg0) String msgText ="1" / 發(fā)送左轉(zhuǎn)命令“l(fā)”if (msgText.length()>0) sendMessageHandle(msgText);/發(fā)送“l(fā)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論