遙控小車(chē)報(bào)告_第1頁(yè)
遙控小車(chē)報(bào)告_第2頁(yè)
遙控小車(chē)報(bào)告_第3頁(yè)
遙控小車(chē)報(bào)告_第4頁(yè)
遙控小車(chē)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告第18頁(yè),共18頁(yè)電子系統(tǒng)設(shè)計(jì)基于STM32的無(wú)線遙控小車(chē)課程設(shè)計(jì)黃光普2011112020433電子信息科學(xué)與技術(shù)物理與電子科學(xué)學(xué)院2014年05月2日電工電子中心2009年5月繪制湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告第2頁(yè),共18頁(yè)基于STM32的無(wú)線遙控小車(chē)一.任務(wù)解析1、電機(jī)驅(qū)動(dòng)方案以及主控芯片選擇2、無(wú)線通信模塊的驅(qū)動(dòng)和調(diào)試3、軟件控制算法4、STM32主控制板PCB打樣及調(diào)試二.方案實(shí)施1方案論證:1)電機(jī)驅(qū)動(dòng)方案選擇:電機(jī)的常用驅(qū)動(dòng)方式有兩種:直流電壓驅(qū)動(dòng),PWM加H橋驅(qū)動(dòng)。直流驅(qū)動(dòng)實(shí)現(xiàn)簡(jiǎn)單,但是一般只能實(shí)現(xiàn)單向旋轉(zhuǎn),并且效率低。PWM加H橋的驅(qū)動(dòng)方式可以在一組電源的情況下方便實(shí)現(xiàn)正反轉(zhuǎn),H橋工作在開(kāi)關(guān)狀態(tài)下,效率高,故采用PWM加H橋的驅(qū)動(dòng)方案。2)主控芯片選擇:一路電機(jī)需要兩路PWM信號(hào)來(lái)控制正反轉(zhuǎn)以及轉(zhuǎn)速,小車(chē)有四個(gè)獨(dú)立的直流電機(jī),所以需要8路PWM。不管是傳統(tǒng)51單片機(jī)還是改進(jìn)型的12單片機(jī)都已經(jīng)不能勝任此任務(wù),這里采用意法半導(dǎo)體公司的STM32F103RBT6芯片作為主控。STM32F103RBT6有128K的FLASH,20K的SRAM,最高72MHZ工作頻率,2個(gè)12位ADC(16個(gè)通道),支持DMA傳輸,多達(dá)7個(gè)定時(shí)器,9個(gè)通信接口。強(qiáng)大的性能以及低廉的價(jià)格完全可以滿足本設(shè)計(jì)的需求。2無(wú)線模塊的驅(qū)動(dòng)和調(diào)試無(wú)線通信采用的是挪威NORDIC公司的NRF24L01+芯片。nRF24L01+是一款高速低功耗集收發(fā)于一體的半雙工芯片,最大傳輸速度可以達(dá)到2Mbps,工作在2.4GHz全球開(kāi)放ISM頻段,最大0dBm發(fā)射功率,免許可證使用。nRF24L01+集成了所有與RF協(xié)議相關(guān)的高速信號(hào)處理部分,其通信接口采用標(biāo)準(zhǔn)的SPI總線接口。用51單片機(jī)驅(qū)動(dòng)NRF24L01+的做法是軟件模擬SPI時(shí)序,但是軟件模擬的時(shí)序存在部分問(wèn)題:1),軟件模擬時(shí)序速度慢,2)穩(wěn)定度不夠高,STM32F103RBT6芯片自帶硬件雙路SPI,最高速度可以達(dá)到18MBits/s,此處的NRF24L01+和OLED都是通過(guò)硬件SPI驅(qū)動(dòng)的。硬件SPI配置的關(guān)鍵代碼如下:SPI_InitTypeDefSPI_InitStructure;//聲明SPI結(jié)構(gòu)體 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能復(fù)用AFIO時(shí)鐘,使用硬件SPI必須先使能復(fù)用AFIO時(shí)鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE); //使能SPI1時(shí)鐘,使用外設(shè)時(shí),必須先使能外設(shè)時(shí)鐘 SPI_Cmd(SPI1,DISABLE); //改變MODE前先禁止SPI SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;//設(shè)置為兩線全雙工模式SPI_InitStructure.SPI_Mode=SPI_Mode_Master;//設(shè)置為主模式 SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;//道PWM為比較輸出高模式}2)小車(chē)前進(jìn)/后退以及轉(zhuǎn)彎控制圖1:L9110典型應(yīng)用圖如上圖1所示,當(dāng)正轉(zhuǎn)信號(hào)端有PWM信號(hào),反轉(zhuǎn)信號(hào)端為低電平時(shí),電機(jī)正轉(zhuǎn),此時(shí)小車(chē)前進(jìn)。當(dāng)正轉(zhuǎn)信號(hào)端為低電平,反轉(zhuǎn)信號(hào)端有PWM信號(hào)時(shí),電機(jī)反轉(zhuǎn),即小車(chē)后退,通過(guò)控制輸入PWM的占空比即可以實(shí)現(xiàn)小車(chē)速度的調(diào)節(jié)。由于市面上賣(mài)的四輪驅(qū)動(dòng)小車(chē)的四個(gè)輪子都是固定的,不能像汽車(chē)那樣,導(dǎo)向輪可以左右轉(zhuǎn)動(dòng),這里采取使左右輪的速度不一致的方式來(lái)實(shí)現(xiàn)轉(zhuǎn)彎,當(dāng)左輪速度大,右輪速度小,小車(chē)向右轉(zhuǎn),反之左轉(zhuǎn)。如果以固定的差值改變左右PWM占空比,這樣油門(mén)不同的時(shí)候就會(huì)出問(wèn)題,例如為了解決這個(gè)問(wèn)題,這里采用比例法,用這個(gè)比例系數(shù)去乘上油門(mén)的值,這樣就可以很容易的解決問(wèn)題。轉(zhuǎn)彎的關(guān)鍵代碼如下:u16Throttle; //油門(mén)u16Direction; //方向floatDirL,DirR;//左右輪油門(mén)比例if(Direction>2048)//如果方向值大與2048{DirL=1.0;//設(shè)置左輪油門(mén)比例系數(shù)為1DirR=(4096-Direction)/2048.0;//右輪油門(mén)比例系數(shù)隨著方向值增大而減小}Else//如果方向值小與2048{DirL=Direction/2048.0;//左輪油門(mén)比例系數(shù)隨著方向值減小而減小DirR=1.0;//設(shè)置右輪油門(mén)比例系數(shù)為1}TIM_SetCompare1(TIM4,0); //設(shè)定TIM4通道CHx占空比為0,即為低電平,此時(shí)為正轉(zhuǎn),小車(chē)前進(jìn)TIM_SetCompare2(TIM4,0);TIM_SetCompare3(TIM4,0);TIM_SetCompare4(TIM4,0);if(Nflag!=Oflag)//當(dāng)Nflag!=oldflag(車(chē)換向時(shí))時(shí),設(shè)置死區(qū)延時(shí),防止同一側(cè)兩個(gè)開(kāi)關(guān)管同時(shí)導(dǎo)通燒壞芯片{delay_ms(50);}TIM_SetCompare1(TIM2,(u32)Thr*DirR);//設(shè)定通道CH1占空比,占空比的值由油門(mén)值以及油門(mén)比例系數(shù)共同決定TIM_SetCompare2(TIM2,(u32)Thr*DirR);//同上TIM_SetCompare3(TIM2,(u32)Thr*DirL);TIM_SetCompare4(TIM2,(u32)Thr*DirL);3)在實(shí)際的測(cè)試過(guò)程中發(fā)現(xiàn)當(dāng)遙控的油門(mén)減小前就突然斷電了,小車(chē)會(huì)保持之前的狀態(tài)繼續(xù)運(yùn)動(dòng),這樣就會(huì)失去控制,很容易出問(wèn)題。后來(lái)在此基礎(chǔ)上想到了看門(mén)狗,如果在規(guī)定時(shí)間里沒(méi)有向看門(mén)狗寄存器里寫(xiě)入特定的數(shù)據(jù),就會(huì)產(chǎn)生系統(tǒng)復(fù)位,當(dāng)復(fù)位后,初始狀態(tài)下車(chē)是停止的,這樣一旦接收不到遙控的發(fā)來(lái)的數(shù)據(jù)就停止喂狗,系統(tǒng)處于一直復(fù)位狀態(tài),知道接收到遙控發(fā)送的數(shù)據(jù),這樣就保證了系統(tǒng)的穩(wěn)定工作。具體實(shí)現(xiàn)代碼如下:IWDG_Config(IWDG_2K5,2500);//配置獨(dú)立看門(mén)狗時(shí)鐘為2.5K,計(jì)數(shù)值為2500,1/2500*2500=1s,在1s內(nèi)喂狗不會(huì)產(chǎn)生系統(tǒng)復(fù)位if(STATE==1&&flag!=0xff)//判斷接收標(biāo)志位,當(dāng)遙控突然斷電后,用串口發(fā)現(xiàn)依然能夠接收到0XFF的標(biāo)志位,原因暫時(shí)不詳{IWDG_Feed(); //接受到數(shù)據(jù)后喂狗,1S內(nèi)沒(méi)接收到數(shù)據(jù)產(chǎn)生系統(tǒng)復(fù)位Throttle=RxBuf[0]*256+RxBuf[1];//獲得油門(mén)值Direction=RxBuf[2]*256+RxBuf[3];//獲得方向值flag=RxBuf[4];//獲得正/反轉(zhuǎn)標(biāo)志位值printf("%d%d%d\r\n",Throttle,Direction,flag);//串口打印接收到的數(shù)據(jù),便于系統(tǒng)調(diào)試STATE=0;//清空接收標(biāo)志位}為了清晰的觀察,系統(tǒng)是否處在復(fù)位狀態(tài)下,這里加了指示燈加以指示,當(dāng)系統(tǒng)復(fù)位時(shí),會(huì)觀察到燈以1S左右的周期閃爍,當(dāng)系統(tǒng)正常工作時(shí),燈處于長(zhǎng)亮狀態(tài)。具體代碼如下:LED=1;//初始復(fù)位,狀態(tài)指示燈不亮delay_ms(500);//當(dāng)硬件一直復(fù)位時(shí),形成狀態(tài)燈以1s周期閃爍的效果while(1){LED=0;//當(dāng)系統(tǒng)正常工作時(shí),狀態(tài)指示燈長(zhǎng)亮3,STM32主控制板PCB打樣及調(diào)試在進(jìn)行PCB打樣之前,先得進(jìn)行原理的驗(yàn)證,這塊板子的原理圖參考了周兆豐老師以及正點(diǎn)原子的MiniSTM32開(kāi)發(fā)板,在他們的基礎(chǔ)上有所增減。當(dāng)然,這不是一塊純粹的小車(chē)控制板,是一個(gè)完整的STM32開(kāi)發(fā)板。里面的模塊很多,這里就只介紹其中一部分。原理圖部分如下:圖2:串口/USB選擇當(dāng)1和3,2和4相連是,是串口的功能,當(dāng)3和5,4和6相連時(shí),是USB功能,這里相對(duì)正點(diǎn)原子的少了兩個(gè)排針,3,4可以作為公用的,減少了排針數(shù)目。圖3:一鍵下載電路當(dāng)然,這個(gè)電路不是我原創(chuàng)的啦,是正點(diǎn)原子的,覺(jué)得很經(jīng)典,在這里說(shuō)明一下。下載的時(shí)候選擇DTR的低電平復(fù)位,RTS的高電平進(jìn)BootLoard。一鍵下載電路的具體實(shí)現(xiàn)過(guò)程:首先,mcuisp控制DTR輸出低電平,則DTR_N輸出高,然后RTS置高,則RTS_N輸出低,這樣Q2導(dǎo)通了,BOOT0被拉高,即實(shí)現(xiàn)設(shè)置BOOT0為1,同時(shí)Q1也會(huì)導(dǎo)通,STM32的復(fù)位腳被拉低,實(shí)現(xiàn)復(fù)位。然后,延時(shí)100ms后,mcuisp控制DTR為高電平,則DTR_N輸出低電平,RTS維持高電平,則RTS_N繼續(xù)為低電平,此時(shí)STM32的復(fù)位引腳,由于Q1不再導(dǎo)通,變?yōu)楦唠娖剑琒TM32結(jié)束復(fù)位,但是BOOT0還是維持為1,從而進(jìn)入ISP模式,接著mcuisp就可以開(kāi)始連接STM32,下載代碼了,從而實(shí)現(xiàn)一鍵下載。圖4:通用OELD模塊接口我的這個(gè)OLED排母有9個(gè)引腳,可能你會(huì)覺(jué)得奇怪,本來(lái)SPI驅(qū)動(dòng)模式的OLED (128*64)市面上常用的一般都只有6個(gè)引腳,多的也才7個(gè)引腳,為什么要多此一舉多弄兩個(gè)電源引腳呢?仔細(xì)觀察之后,你也許會(huì)明白,這樣做是為了兼容性,當(dāng)你順著看的時(shí)候可以完全兼容6腳或者7腳的OLED,那么IIC驅(qū)動(dòng)模式的呢,對(duì)了,當(dāng)你從下往上看的時(shí)候,會(huì)發(fā)現(xiàn)正好就是4腳IIC驅(qū)動(dòng)模式的OLED,而且蠻巧的,正好硬件IIC的引腳和硬件SPI的引腳是挨著的,這樣在方便布線的同時(shí)保證兼容市面上所有接口類(lèi)型的OLED(單指128*64點(diǎn)),并且在程序上都可以采用硬件功能驅(qū)動(dòng),可以更快速的顯示動(dòng)態(tài)畫(huà)面。圖5:TFT彩屏以及正點(diǎn)原子OLED接口彩屏接口是照著正點(diǎn)原子的原理圖畫(huà)的,因?yàn)閷?duì)彩屏不是太熟悉,加之中等容量的STM32沒(méi)有FSMC,只能用模擬時(shí)序的方式去驅(qū)動(dòng)彩屏,并且在正點(diǎn)原子的TFT程序功能已經(jīng)如此豐富的情況下,貿(mào)然去大幅度更改會(huì)造成不必要的麻煩。這里也可以兼容正點(diǎn)原子的OLED,他是采用模擬時(shí)序的方式驅(qū)動(dòng)的,雖然他的驅(qū)動(dòng)方式靈活(8080,SPI,IIC可選),但是在速度上就比不上硬件驅(qū)動(dòng)了上幾張整體效果圖:三.結(jié)果展示四.經(jīng)驗(yàn)總結(jié)這次做遙控小車(chē),是源于大二時(shí)的想法,當(dāng)時(shí)還沒(méi)接觸到STM32,用來(lái)用去都是51,一想到8路PWM就立馬感覺(jué)無(wú)可奈何了。其實(shí)當(dāng)時(shí)也只是一時(shí)覺(jué)得好玩,想趁著考研之前做點(diǎn)玩的,順便也挑戰(zhàn)一下自己,深入學(xué)習(xí)一下STM32。做之前也沒(méi)想那么多,找到有意愿想做的,一番簡(jiǎn)單商量之后就開(kāi)始開(kāi)工了。在做的過(guò)程中,不斷發(fā)現(xiàn)問(wèn)題,一個(gè)一個(gè)解決問(wèn)題。STM32開(kāi)發(fā)板我是自己打了兩版的,第一版沒(méi)有一鍵下載電路,下載程序不能一鍵下載,需要通過(guò)短路帽選擇啟動(dòng)區(qū)。當(dāng)時(shí)畫(huà)PCB因?yàn)椴幻靼啄鞘且绘I下載電路,就給省掉了。后來(lái)想著既然做,就做的像個(gè)樣子,于是經(jīng)過(guò)修改調(diào)整之后才有了現(xiàn)在這一版。在小車(chē)最后調(diào)試階段,在全速時(shí)突然換向,結(jié)果導(dǎo)致電機(jī)驅(qū)動(dòng)板燒壞,剛開(kāi)始以為是全速換向瞬時(shí)電流太大導(dǎo)致的。后來(lái)?yè)Q了一塊新驅(qū)動(dòng)板,在低速下?lián)Q向,發(fā)現(xiàn)還是燒了。經(jīng)過(guò)測(cè)試,全速換向時(shí),瞬時(shí)電流也遠(yuǎn)沒(méi)有達(dá)到800MA,愣是沒(méi)想明白問(wèn)題在哪。我仔細(xì)研究了一下H橋驅(qū)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論