




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
基于STM32仿生六足機器人_畢業(yè)設(shè)計基于STM32仿生六足機器人畢業(yè)設(shè)計(論文)基于STM32仿生六足機器人學院:電子與信息工程學院專業(yè):XXXXXXXXXXXXXXXX學號:XXXXXXXXXXX作者:XXX指導老師:XXX基于STM32仿生六足機器人.緒論1.1課題研究背景意義機器人是集合了電子技術(shù)、機械技術(shù)、傳感器技術(shù)、智能控制技術(shù)等于一體的高科技產(chǎn)品。各國現(xiàn)今大力的對它研究,研究機器人的水平在一定程度上反應了該國科技的水平。隨著科技的發(fā)展,人們對機器人的需求也越來越高,人們希望機器人能在復雜環(huán)境中既具有高移動能力,又具有高可靠性。過去的機器人結(jié)構(gòu)多為輪式結(jié)構(gòu),這種機器人只局限于二維平面的運動,對于那些崎嶇不平以及有高度差的路面將失去靈活性,因此外形類似人類或昆蟲的兩足甚至多足機器人誕生了。仿生六足機器人是基于仿生學原理與電子技術(shù)相結(jié)合的足式機器人。和輪式或著履帶式的機器人相比較,六足機器人自由度比較多、相對靈活、但結(jié)構(gòu)復雜、控制繁瑣[1]。由于六足機器人的腿部是離散結(jié)構(gòu),具有較好的機動性,它可以選擇最優(yōu)的立足點來實現(xiàn)自身的平衡,從而實現(xiàn)一些輪式或履帶式機器人無法實現(xiàn)的工作,例如攀爬階梯,橫跨溝,坎等,即使在不平的路面,也能通過控制腿的伸縮使機身保持水平。由于以上的諸多特點,足式的機器人成為當今的科技研究熱點。1.2仿生六足機器人的現(xiàn)狀最近在國外科技會展上出現(xiàn)了一款基于仿生學的六足機器人。這款命名為“蟑螂”的機器能夠模仿昆蟲行走,有較強通過性。“MANTIS(蟑螂)”行走機器人是由名為micromagicsystems的公司制造,駕駛艙內(nèi)能夠容納一名駕駛員。MANTIS機器人模仿了六足行進模式的昆蟲,六足機器人行走的時候腿分為兩組,不斷的重復腳抬高、前進、落下動作,抬起的三條腿正好連成三角形形狀,這樣就能夠確保行走時的穩(wěn)定性,這種行走方法速度比較慢,但是很適合在復雜的地形行走。圖1-1MANTIS模仿昆蟲行走模式由上海交通大學設(shè)計研發(fā)出的“六爪章魚”救援機器人進行了載人試驗?!傲φ卖~”由18個直流電機作為驅(qū)動,高度為1米,伸展時的大小能達到4米。它是通過遠程控制,能夠非常靈敏的向各個方向行走,速度最高能達1.2千米/小時,能載重200kg的物體?!傲φ卖~”吸引人的地方不只是它的外表,它的用途主要是用來救援和環(huán)境的探測,能夠在核電站等具有高輻射的惡劣環(huán)境下工作,并且?guī)е鴻z測工具進入危險環(huán)境作業(yè)。同時該機器人還可在火災、水下、地震災區(qū)進行搜索救援任務。圖1-12013年5月上??萍紙D1-22012年上海工博會,美節(jié)上,小朋友體驗六足機器人女與機器人大跳“江南style”1.3本設(shè)計系統(tǒng)結(jié)構(gòu)該機器人采用STM32為主控芯片,通過按鍵進行功能選擇。當選擇藍牙控制功能時,機器人將通過藍牙接收電路接收手機端發(fā)來的信號,主芯片對藍牙信號進行處理,使機器人做出相應動作。當選擇避障功能時,主芯片控制步進電機電路使步進電機帶動紅外傳感器旋轉(zhuǎn),紅外傳感器對外部環(huán)境掃描并判斷,反饋給主芯片,主芯片對紅外傳感器傳來信息處理并控制舵機轉(zhuǎn)動,使機器人產(chǎn)生相應動作。當選擇舞蹈功能時,機器人將自動跳出有節(jié)奏的動作。手機藍牙信號藍牙串口接收功能選擇按鍵手機藍牙信號藍牙串口接收功能選擇按鍵STM32F103RBT6STM32F103RBT6核心處理芯片光耦隔離驅(qū)動電路光耦隔離驅(qū)動電路脈寬調(diào)制脈寬調(diào)制控制控制避障避障紅外傳感器臺式電腦電源供電18個MG955舵機臺式電腦電源供電18個MG955舵機方向控制方向控制根據(jù)紅外檢測、藍牙遙控進行行走舞蹈等動作根據(jù)紅外檢測、藍牙遙控進行行走舞蹈等動作步進電機步進電機圖1-3系統(tǒng)結(jié)構(gòu)1.4本論文的組織結(jié)構(gòu)第一章闡述課題的背景,課題的研究意義,國內(nèi)外發(fā)展現(xiàn)狀,并介紹了本課題的主要工作內(nèi)容和系統(tǒng)框圖。第二章介紹仿生六足機器人的步態(tài)規(guī)劃,詳細介紹三角步態(tài)的原理及機器人實現(xiàn)行走的動作控制,以及機器人的肢體結(jié)構(gòu)。第三章詳細的介紹了系統(tǒng)硬件的具體實現(xiàn)。把硬件部分一一的列舉出來,并分析各個硬件的工作原理,引腳的連接。第四章介紹了軟件開發(fā)工具和軟件的具體實現(xiàn)方法。包括開發(fā)環(huán)境介紹,脈寬調(diào)制信號的生成,機器人行走的軟件設(shè)計,藍牙信號的接收設(shè)計等。第五章總結(jié)了系統(tǒng)的工作,以及對整個系統(tǒng)的展望。2.肢體結(jié)構(gòu)設(shè)計及步態(tài)規(guī)劃2.1肢體結(jié)構(gòu)設(shè)計一期方案:采用0.8mm鋁板為肢體原料,通過鐵皮剪刀裁剪出機器人肢體的各個部分形狀,通過鐵釘鉆孔,螺絲固定,組裝成肢體架構(gòu)。此方案完全為自主設(shè)計,成本較低,但由于鋁板較薄,硬度不夠,負重能力較差,且鋁板裁剪過程中難免存在誤差,造成機器人靈活性下降。以下為采用方案一制作出的第一版機器人,僅能實現(xiàn)行走。二期方案:在吸取方案一的經(jīng)驗教訓后,對肢體結(jié)構(gòu)進行改造,采用3mm的硬質(zhì)支架,從而解決了由于支架造成的影響。圖2-1方案一支架圖2-2方案二支架2.2六足機器人步態(tài)規(guī)劃2.2.1三角步態(tài):為了實現(xiàn)六足機器人的平衡與運動,采用了三角步態(tài)的工作方式。行走的時后將六條腿劃分成兩組,每組腿構(gòu)成三角形,不斷的重復著抬起、前進、放下動作,這樣就可以保證行進過程的穩(wěn)定性[2]。六足機器人的舵機分布如圖2-3所示,因為一足的運動需要3個舵機,根據(jù)六足的不同位置,將18個舵機進行命名,分別為頭右1,頭右2,頭右3,中右1,中右2,中右3,尾右1,尾右2,尾右3,頭左1,頭左2,頭左3,中左1,中左2,中左3,尾左1,尾左2,尾左3。圖2-3舵機分布命名前進時每支腿的運動情況如下:第一步驟:頭右2、尾右2、中左2抬起;第二步驟:頭右1、尾右1、中左1,前轉(zhuǎn),同時頭左1、尾左1、中右1歸位;第三步驟:頭左2、尾右2、中右2放下;第四步驟:頭左2、尾左2、中右2抬起;第五步驟:頭左1、尾左1、中右1前移,同時頭右1、尾右1、中左1,歸位;第六步驟:頭左2、尾左2、中右2放下;后退時每支腿的運動情況如下:第一步驟:頭右2、尾右2、中左2抬起;第二步驟:頭右1、尾右1、中左1,后轉(zhuǎn),同時頭左1、尾左1、中右1歸位;第三步驟:頭左2、尾右2、中右2放下;第四步驟:頭左2、尾左2、中右2抬起;第五步驟:頭左1、尾左1、中右1后轉(zhuǎn),同時頭右1、尾右1、中左1,歸位;第六步驟:頭左2、尾左2、中右2放下;在需要左右移動時,沒有選擇螃蟹橫移法,而是需要先轉(zhuǎn)向,然后再前進或后退。左轉(zhuǎn)時每支腿的運動情況如下:第一步驟:頭右2、尾右2、中左2抬起;第二步驟:頭右1、尾右1、中左1,前轉(zhuǎn),同時頭左1、尾左1、中右1歸位;第三步驟:頭左2、尾右2、中右2放下;第四步驟:頭左2、尾左2、中右2抬起;第五步驟:頭左1、尾左1、中右1后轉(zhuǎn),同時頭右1、尾右1、中左1,歸位;第六步驟:頭左2、尾左2、中右2放下;右轉(zhuǎn)時每支腿的運動情況如下:第一步驟:頭右2、尾右2、中左2抬起;第二步驟:頭右1、尾右1、中左1后轉(zhuǎn),同時頭左1、尾左1、中右1歸位;第三步驟:頭左2、尾右2、中右2放下;第四步驟:頭左2、尾左2、中右2抬起;第五步驟:頭左1、尾左1、中右1前轉(zhuǎn),同時頭右1、尾右1、中左1,歸位;第六步驟:頭左2、尾左2、中右2放下;2.3本章小結(jié)本章介紹兩種方案的六足機器人肢體結(jié)構(gòu),經(jīng)過實踐后分析出兩種方案的利弊,為后續(xù)研究提供可靠的硬件平臺。其次分析了六足機器人的行走步態(tài),采用模仿蜘蛛行走的三角步態(tài),并針對基本的行走動作做了詳細的分析。硬件設(shè)計介紹與系統(tǒng)各部分工作原理3.1主控芯片STM32F103RBT6簡介STM32F103RBT6是一款中端32位ARM微控制器,該芯片是由意法半導體(ST)公司生產(chǎn),其核心是ARM的32位Cortex-M3CPU。該芯片F(xiàn)lash大小是容量128K。芯片集成了USB,CAN,有4個定時器,每個定時器都可以產(chǎn)生出4路PWM脈沖,2個ADC,SPI,I2C,USB,UART等[3]。內(nèi)核:ARM的32位Cortex-M3CPU;最高的工作頻率為72MHZ。內(nèi)存:閃存程序存儲器128K字節(jié)。低功耗:睡眠,關(guān)機和待機模式,VBAT為RTC和后備寄存器。ADC:兩個12位ADC,1微秒轉(zhuǎn)換時間(多達16個輸入通道);轉(zhuǎn)換范圍為0?3.6V;具有保持和雙采樣的功能,含有內(nèi)部的溫度傳感器。DMA:DMA通道有2個(七個DMA1通道,5個DMA2通道),2個DMA的控制器,51個I/O口,所有I/O端口映像到16個外部中斷,幾乎所有的端口可以容忍5V信號。支持外設(shè)定時器,ADC,SPI,USB,IIC和UART。調(diào)試模式:串行線調(diào)試(SWD)和JTAG接口。計算單位:CRC計算單元,96個新一批的唯一代碼。封裝:ECOPACK封裝。3.2STM32F103RBT6最小系統(tǒng)電路最小系統(tǒng)電路由主芯片、晶振電路、復位電路、電源電路、下載電路、外部引腳外擴電路組成,各部分介紹如下:3.2.1主芯片原理圖STM32F103RBT6有64個引腳,有PA、PB、PC、PD四組I/O口,其中定時器各個通道所對應的引腳為:TIME1_CH1:PA8TIME1_CH2:PA9TIME1_CH3:PA10TIME1_CH4:PA11TIME2_CH1:PA0TIME2_CH2:PA1TIME2_CH3:PA2TIME2_CH4:PA3TIME3_CH1:PA6TIME3_CH2:PA7TIME3_CH3:PB0TIME3_CH4:PB1TIME4_CH1:PB6TIME4_CH2:PB7TIME4_CH3:PB8TIME4_CH4:PB9STM32F103RBT6管腳排列如下: 圖3-1STM32F103RBT6芯片原理圖3.2.2晶振電路STM32共有5個時鐘源,分別是:HSE時鐘:高速外部時鐘信號,本設(shè)計中采用8MHZ外部陶瓷晶振。HSI時鐘:內(nèi)部高速時鐘信號,是由8MHz的內(nèi)部RC振蕩器產(chǎn)生的,能夠作為系統(tǒng)時鐘或2分頻之后作為 PLL輸入。PLL時鐘:內(nèi)部PLL,能夠倍頻HSI、RC的時鐘輸出或著HSE晶體的時鐘輸出。LSE時鐘:低速外部時鐘信號,LSE的32.768kHz晶體是一種低速外部晶體或陶瓷諧振器[4]。它提供了 低功耗和精確的時鐘源的實時時鐘或其它定時功能。LSI時鐘:低速內(nèi)部時鐘,LSI的RC發(fā)揮低功耗時鐘源的作用,它可以保持在關(guān)機和待機模式下運行。LSI的時鐘頻率為40kHz左右(30kHz和60kHz的之間)。以下為HSE時鐘和LSE時鐘電路:圖3-2晶振電路3.2.3復位電路nRST接主芯片第7腳,按動按鍵K1可使芯片復位,電路原理圖如下所示:圖3-3復位電路3.2.4下載電路STM32支持多種下載方式,本設(shè)計采用JTAG及串口下載兩種方式,當使用串口下載時,PA10為RX,PA9為TX,需接RX232電平轉(zhuǎn)換電路進行下載,下載軟件采用mcuisp,下載方式選擇DTR的低電平復位,RST高電平進BootLoader。當下載完成時應將BOOT0接地,此時程序才可執(zhí)行。原理圖如圖3-4、圖3-5所示:圖3-4ISP下載電路圖3-5JTAG下載電路3.3舵機原理與控制3.3.1舵機內(nèi)部結(jié)構(gòu)舵機內(nèi)部包括小型直流電動機,齒輪組,一個可調(diào)反饋電位器,電路控制板。直流電動機的高速旋轉(zhuǎn),以提供原始動力并帶動減速齒輪組,從而產(chǎn)生一個高輸出扭矩,變速傳動比大的舵機的輸出轉(zhuǎn)矩也越大,意味著越能承受較大的重量,但是轉(zhuǎn)速也較低[5]。圖3-6舵機的內(nèi)部結(jié)構(gòu)圖3.3.2舵機的工作原理舵機是一個閉環(huán)的反饋系統(tǒng),其原理可由圖3-7表示:圖3-7舵機的工作原理圖減速齒輪組是由電機驅(qū)動的,它的輸出端有一個線性的比例電位器作為位置的檢測,這個電位器會把轉(zhuǎn)角所對應的坐標轉(zhuǎn)換為成相應比例的電壓并反饋給控制線路板,控制線路板將收到的電壓信號同輸入的控制脈沖信號進行對比,就會產(chǎn)生糾正脈沖,同時驅(qū)動直流電機正向或反向地轉(zhuǎn)動,使齒輪組的輸出位置與所期望的數(shù)值相同,讓糾正脈沖逐漸的趨于零,通過這種方法使舵機達到精確定位的目的。[6]3.3.3舵機控制方法MG955舵機有3條引出的導線,分別是電源線、地線、和信號控制線,其中紅色的為電源線,棕色的為地線,橙色的為控制信號線,電源線接5V電壓[7]。圖3-8標準舵機電源線和地線給舵機內(nèi)部的直流電機和控制電路供電。電壓范圍為3—7V,本設(shè)計采用5V供電,由于該機器人共需舵機18個,每個舵機的驅(qū)動電流大約為200毫安到500毫安左右,18個舵機所需電流為2A到10A,因此給舵機供電電源應能提供足夠的功率,本設(shè)計采用了臺式電腦電源,保證了足夠的功率。控制線要輸入一個周期為20ms的方波脈沖信號[8]。當方波脈沖的寬度發(fā)生變化的時候,舵機的角度就相應的發(fā)生改變,脈沖的寬度變化和角度的改變是成正比例的。MG955舵機的舵機信號控制圖如圖3-9表示。圖3-9舵機信號控制圖3.3.4輝盛MG995舵機相關(guān)參數(shù)結(jié)構(gòu)材質(zhì):采用金屬的銅齒,電機采用空心杯電機。
連接線:30CM,信號線(黃色)、電源線(紅色)、地線(暗紅色)。
尺寸大?。?0.7mm*19.7mm*42.9mm工作死區(qū):4us
重量:55g
轉(zhuǎn)速和反應:無負載時速度為0.17秒/60度(4.8V時);0.13秒/60度(6V時)
扭矩:13KG/cm
工作電壓:3.0V-7.2V
溫度范圍:負30度到正60度。
附件:、固定的螺釘、舵盤。3.4舵機驅(qū)動電路該機器人需要實現(xiàn)6條腿的運動,且各條腿能做出不同動作,每條腿需要3個舵機對其進行控制,因此要求舵機驅(qū)動電路能產(chǎn)生18路的pwm脈寬調(diào)制信號。由于我采用的主控芯片為STM32F103RBT6,該芯片有TIM1,TIM2,TIM3,TIM4四個定時器,每個定時器可產(chǎn)生4路pwm脈寬調(diào)制信號,這樣一共可產(chǎn)生16路pwm。由于不足18路,所以我的控制方法是:腿部的12個舵機每個直接由一路pwm控制,而與機器人身體連接的6個舵機則采用74HC138分時復用方式,由一路pwm控制2個舵機。這樣一共使用了15路的pwm,還剩1路未使用。為防止舵機對主控芯片的影響以及系統(tǒng)工作的穩(wěn)定性,采用光耦對其進行隔離。每個舵機所對應的I/O口為:頭左1:PA8(PC8=0)頭右1:PA8(PC8=1)中左1:PB6(PD2=0)中右1:PB6(PD2=1)尾左1:PB7(PB5=0)尾右1:PB7(PB5=1)頭左2:PB9頭右2:PA11中左2:PB8中右2:PA10尾左2:PA2尾右2:PA6頭左3:PA0頭右3:PB0中左3:PA1中右3:PB1尾左3:PA3尾右3:PA7其中PC8、PD2、PB5對舵機進行選擇,當為高電平時選擇右端舵機,當為低電平時選擇左端舵機。以下是74HC138[9]復用電路及光耦隔離電路部分原理圖。圖3-1074HC138復用電路部分原理圖圖3-11光耦隔離電路部分原理圖3.5步進電機驅(qū)動電路在避障過程中由于需要紅外傳感器不斷的掃描外部環(huán)境,所以需要步進電機不斷旋轉(zhuǎn),步進電機采用ULN2003A驅(qū)動,其中IN1接PC3,IN2接PC1,IN3接PC0,IN4接PC2。以下為驅(qū)動電路原理圖:圖3-12步進電機驅(qū)動電路3.6藍牙接收電路藍牙模塊采用英國CSR公司blueCore4-Ext芯片,遵循V2.1+EDR藍牙規(guī)范,支持主從一體,支持SPI編程接口,內(nèi)置8MbitFlash,本模塊為3.3V供電,其中使用的引腳為VCC、GND、RX、TX四個引腳。圖3-13為藍牙模塊原理圖。圖3-13藍牙模塊原理圖3.7供電系統(tǒng)介紹本設(shè)計需要對18個舵機及步進電機供電,還有主芯片,藍牙接收電路,紅外傳感等供電。需要有5V和3.3V電壓。3.7.1舵機供電由于18個舵機需要2-10A左右的電流,普通電池和7805穩(wěn)壓電路無法驅(qū)動,本設(shè)計采用廢舊的臺式電腦電源對機器人供電,臺式電腦電源由市電220V經(jīng)變壓處理后得到5V電壓,該開關(guān)電源最大負載電流18A,且電壓平穩(wěn),非常適合給舵機供電。3.7.2主芯片及其他電路供電主芯片及其他電路需要3.3V供電,為了防止舵機對主芯片的影響,必須采用雙電源供電,本設(shè)計采用7.4V航模鋰電池,經(jīng)AMS117穩(wěn)壓芯片降壓為3.3V給主芯片及其他電路供電。3.8本章小結(jié)本章對硬件體系結(jié)構(gòu)進行分解并逐一介紹,包括STM32F103RBT6芯片介紹,及最小系統(tǒng)原理圖介紹,舵機的原理及舵機驅(qū)動電路介紹,步進電機驅(qū)動電路介紹,藍牙接收電路介紹,供電系統(tǒng)的分析。4.軟件流程設(shè)計與開發(fā)工具介紹4.1軟件流程框圖由于本設(shè)計中的機器人具有多種功能,因此采用按鍵進行模式選擇,可選擇的模式有藍牙遙控模式、舞蹈模式、避障模式。以下通過流程圖方式介紹軟件的設(shè)計思路:開始開始系統(tǒng)初始化系統(tǒng)初始化否否是否按鍵?是否按鍵?鍵值判斷是鍵值判斷是Key3(PB13=0)Key1(PB12=0)Key2(PB14=0)Key3(PB13=0)Key1(PB12=0)Key2(PB14=0)藍牙遙控功能避障功能藍牙遙控功能避障功能舞蹈功能圖4-1軟件流程框圖4.2PWM脈沖信號的形成脈沖寬度調(diào)制(PWM),是“PulseWidthModulation”縮寫,簡稱為脈寬調(diào)制,它是利用微處理器數(shù)字輸出對模擬電路進行控制的一種有效的技術(shù)[10]。也就是對脈沖的寬度控制。STM32F103RBT6的定時器TIM1、TIM2、TIM3、TIM4都可以用來分別同時產(chǎn)生4路PWM,所以,STM32F103RBT6最多可以同時產(chǎn)生16路PWM輸出。以下僅介紹TIM3的CH2產(chǎn)生一路PWM輸出。其他路的PWM輸出程序詳見附件。要使STM32F103RBT6的定時器TIM3產(chǎn)生PWM輸出,必須要設(shè)置3個寄存器來控制PWM。首先是捕獲/比較模式寄存器(TIMx_CCMR1/2),該寄存器總共有2個,TIMx_CCMR1和TIMx_CCMR2。TIMx_CCMR1控制CH1和CH2,TIMx_CCMR1控制CH3和CH4。圖4-2TIMx_CCMR1寄存器各位的描述該寄存器在不同模式下有些位的功能會不同,因此上圖就把寄存器分成上下2層,第一層對應輸出而第二層則對應輸入。模式設(shè)置位OCxM是由3位組成的,一共能設(shè)置成7種模式,本設(shè)計是PWM模式,因此這3位要設(shè)置成為110/111。這兩種模式的不同之處就是輸出高低電平不同,一個是輸出高,另一個是輸出低。接下來,介紹捕獲/比較使能寄存器(TIMx_CCER),這個寄存器是用來控制輸入輸出通道開關(guān)的[11]。該寄存器的各位描述如下:圖4-3捕獲/比較使能寄存器各位描述最后是捕獲/比較寄存器(TIMx_CCR1~4),這個寄存器一共有4個,對應的分別是通道1到通道4。這4個寄存器都差不多,這里只介紹TIMx_CCR1,該寄存器的各個位描述如下:圖4-4捕獲/比較寄存器(TIMx_CCR1~4)各位描述輸出的模式下,該寄存器和CNT值相比,根據(jù)比較的結(jié)果產(chǎn)生相對應的動作。利用這點,我們只要設(shè)置該寄存器,就可能實現(xiàn)PWM的輸出脈寬控制。到這里就把要用到的TIMx相關(guān)寄存器介紹完了,接下來就是如何達到設(shè)計的要求。要利用TIM3的CH2輸出PWM來控制舵機,就要在軟件上控制TIM3_CH2的PWM輸出。以下介紹達到這個目的5個步驟:1)把PA7設(shè)置成為復用輸出功能,打開TIM3的時鐘。要使用TIM3,必須要把TIM3的時鐘打開(通過設(shè)置APB1ENR),這里還要把PA7配置為復用輸出,因為TIM3_CH2通道是以IO復用的形式連接到PA7上的,這里要使用復用輸出的功能。2)設(shè)置TIM3的ARR和PSC。在打開TIM3的時鐘后,要設(shè)置ARR和PSC這兩個寄存器的值來控制輸出PWM周期。這里要設(shè)置的PWM周期為20ms。3)設(shè)置TIM3_CH2的PWM模式。接下來,把TIM3_CH2設(shè)置為PMW模式(這里是默認凍結(jié)的),要通過設(shè)置TIM3_CCMR1相關(guān)的位來控制TIM3_CH2的模式。4)使能TIM3的CH2輸出,使能TIM3。以上設(shè)置完成了以后,通過TIM3_CCER1設(shè)置來打開TIM3通道2的輸出。通過設(shè)置TIM3_CR1來打開TIM3,是整個TIM3的總開關(guān)。配置好這兩個寄存器后,就能在TIM3通道2上看到有PWM波的輸出。5)修改TIM3_CCR2來控制占空比。經(jīng)過了以上4步的設(shè)置,已經(jīng)有PWM輸出,但是其周期和占空比都是不變的,需要通過設(shè)置TIM3_CCR2來控制輸出的占空比。其中高電平占空比時間為1ms到2ms才能使舵機轉(zhuǎn)動。以下為PWM輸出初始化部分程序://PWM輸出初始化//arr:自動重裝值//psc:時鐘預分頻數(shù)voidPWM_Init(u16arr,u16psc){ RCC->APB1ENR|=1<<1; GPIOA->CRL&=0X00FFFFFF; GPIOA->CRL|=0XBB000000; GPIOA->ODR|=1<<7; GPIOA->ODR|=1<<6; GPIOB->CRL&=0XFFFFFF00; GPIOB->CRL|=0X000000BB; GPIOB->ODR|=1<<0; GPIOB->ODR|=1<<1; TIM3->ARR=arr; TIM3->PSC=psc; TIM3->CCMR1|=7<<12; TIM3->CCMR1|=1<<11; TIM3->CCMR1|=7<<4; TIM3->CCMR1|=1<<3; TIM3->CCMR2|=7<<12; TIM3->CCMR2|=1<<11; TIM3->CCMR2|=7<<4; TIM3->CCMR2|=1<<3; TIM3->CCER|=1<<4; TIM3->CCER|=1<<0; TIM3->CCER|=1<<8; TIM3->CCER|=1<<12; TIM3->CR1=0x8000; TIM3->CR1|=0x01;}設(shè)置好初始化程序后,只需在主程序里寫入PWM_Init(14399,99);即設(shè)置了自動重裝值和時鐘預分頻數(shù),99是指預分頻數(shù)為100,即PWM頻率=72000/100=72Khz,周期為(14399+1)/72khz=20ms,以后只需令PA7=720~1440即可實現(xiàn)舵機從0度到90度轉(zhuǎn)動。4.3行走程序介紹通過4.2的介紹,我們知道只需要改變PWM脈寬就可以控制舵機。2.2已經(jīng)介紹了前進時各個舵機的運動,本節(jié)通過軟件設(shè)置各個舵機的PWM輸出,以下截取前進子程序:其中720對應20ms脈沖周期內(nèi)有1ms的高電平;1440對應20ms脈沖周期內(nèi)有2ms的高電平,其他依次類推。//******前進子程序*********voidforword(void){ while(1) { //**********頭右2,尾右2,中左2抬起********** PB9=1200;//頭左2//*****頭右2,尾右2,中左2放下******PB8=1440;//中左2 PA2=1200;//尾左2 PA11=720;//頭右2 PA10=960;//中右2 PA6=720;//尾右2 delay_ms(250);//*****頭右1,尾右1,中左1前轉(zhuǎn),頭左1,尾左1,中右1復位*** PC8=1; PA8=920;//頭右1 PB5=1; PB7=920;//尾右1 PD2=0; PB6=1240;//中左1 delay_ms(100); PC8=0; PA8=1080;//頭左1 PD2=1; PB6=1080;//中右1 PB5=0; PB7=1080;//尾左1 delay_ms(250);//*****頭右2,尾右2,中左2放下****** PB9=1200;//頭左2 PB8=1200;//中左2 PA2=1200;//尾左2 PA11=960;//頭右2 PA10=960;//中右2 PA6=960;//尾右2 delay_ms(250);//****頭左,尾左2,中右2抬起********PB9=1440;//頭左2 PB8=1200;//中左2 PA2=1440;//尾左2PA11=960;//頭右2 PA10=720;//中右2 PA6=960;//尾右2 delay_ms(250);//*****頭左1,尾左1,中右1前轉(zhuǎn),頭右1,尾右1,中左1復位********* PC8=0; PA8=1240;//頭左1 PB5=0; PB7=1240;//尾左1 PD2=1; PB6=920;//中右1 delay_ms(250); PC8=1; PA8=1080;//頭右1 PB5=1; PB7=1080;//尾右1 PD2=0; PB6=1080;//中左1delay_ms(250);//******頭左,尾左2,中右2放下****** PB9=1200;//頭左2 PB8=1200;//中左2 PA2=1200;//尾左2 PA11=960;//頭右2 PA10=960;//中右2 PA6=960;//尾右2 delay_ms(250);}}4.4藍牙上位機設(shè)計機器人采用手機藍牙遙控,上位機軟件采用Google公司的一款Android程序云端開發(fā)工具:AppInventor。此款軟件開發(fā)方式類似于VB,同樣是在可視化界面添加控件,然后對控件進行編程。與VB不同的是此款軟件的編程語言為Java,其編程特色就是采用搭積木方式組裝程序,使編程變得簡單易懂。以下是我設(shè)計的上位機控制界面:圖4-5藍牙上位機控制界面當按下selectserver按鍵后,手機將自動搜索附近可識別的藍牙,并列表顯示出來,我們選擇機器人攜帶的藍牙從機。然后按下Connect按鍵后將和機器人藍牙從機建立連接,連接成功后將在中間的文本框中顯示connectsucceed。此時便和機器人建立連接,就可以對機器人進行控制了。以下為部分上位機程序:圖4-6上位機程序4.5藍牙接收程序介紹藍牙接收使用串口接收方式,由于STM32的RX和TX對應的I/O已用來產(chǎn)生PWM輸出,不可再用作串口接收,本設(shè)計借用一片STC89C52芯片接收藍牙信號,然后將接收到的信號轉(zhuǎn)化為I/O口的電平變化,STM32通過讀取52芯片I/O信號,從而執(zhí)行相應程序。以下為52單片機藍牙接收程序:#include<reg52.h>#include<intrins.h>#defineucharunsignedchar[12]#defineuintunsignedintsfrT2MOD=0xC9;uchartmp;sbitpA12=P1^5;sbitpB10=P2^6;sbitpB11=P2^7;sbitpC4=P1^4;sbitpC5=P2^5;sbitpC6=P3^3;sbitpC7=P3^4;sbitpC9=P3^5;/****程序初始化*****/voidinit(){T2MOD=0x00;T2CON=0x00;TH2=(65536-100)/256;TL2=(65536-100)%256;RCAP2H=(65536-100)/256;//上面兩個裝滿則系統(tǒng)會自動的重裝RCAP2L=(65536-100)%256;EA=1;//打開總中斷ET2=1;//打開外部中斷方式2TR2=1;//啟動定時器2}voidmain(){init();/*******開啟外部中斷方式0*********/EX0=1;//開啟外部中斷方式0IT0=1; EA=1;TMOD|=0x20;//定時器1工作在8位的自動重加載模式,產(chǎn)生波特率TH1=0xFD;//波特率設(shè)置為9600TL1=0xFD;SCON=0x50;PCON&=0xef;//波特率不產(chǎn)生倍增TR1=1;//開啟定時器1while(1){if(RI) //判斷是否有數(shù)據(jù)來到{RI=0;tmp=SBUF; //數(shù)據(jù)接收暫存 switch(tmp){ case0x04:{ pC4=0;pC5=1;pC6=1; pC7=1;pC9=1; }break;case0x05:{ pC4=1;pC5=0;pC6=1; pC7=1;pC9=1; }break; case0x06:{ pC4=1;pC5=1;pC6=0; pC7=1;pC9=1; }break;case0x07:{ pC4=1;pC5=1;pC6=1; pC7=0;pC9=1; }break;case0x01:{ pC4=1;pC5=1;pC6=1; pC7=1;pC9=0; }break; } }}}[13]以下為藍牙接收程序的流程框圖:開始開始藍牙遙控功能藍牙遙控功能藍牙接收初始化藍牙接收初始化否否是否收到藍牙信號?是否收到藍牙信號?是是信號分析信號分析0X01停止0X05左轉(zhuǎn)0X07后退0X04前進0X06右轉(zhuǎn)0X01停止0X05左轉(zhuǎn)0X07后退0X04前進0X06右轉(zhuǎn)圖4-7藍牙程序流程框圖4.6舞蹈子程序介紹舞蹈功能是由多個動作組合完成,每個動作都有各自的程序,以下列舉最經(jīng)典的俯臥撐程序:voiddunxia_qili(void){ u16pwmval1=1440; u16pwmval2=720; u8dir1=0; u8dir2=0; while(1) { delay_ms(10); if(dir1)pwmval1++; elsepwmval1--; if(pwmval1>=1440)dir1=0; if(pwmval1<=720)dir1=1; if(dir2)pwmval2++; elsepwmval2--; if(pwmval2>=1440)dir2=0; if(pwmval2<=720)dir2=1; PA0=pwmval1;//頭左3 PB1=pwmval2;//中右3 PA3=pwmval1;//尾左3 PB0=pwmval2;//頭右3 PA1=pwmval1;//中左3 PA7=pwmval2;//尾右3PB9=pwmval1;//頭左2 PA10=pwmval2;//中右2PA2=pwmval1;//尾左2 PA11=pwmval2;//頭右2 PB8=pwmval1;//中左2 PA6=pwmval2;//尾右2 }}4.7避障子程序介紹以下為避障流程圖:開始開始避障初始化避障初始化前進前進否否前方是否有障礙?是前方是否有障礙?是步進電機右轉(zhuǎn)90度步進電機右轉(zhuǎn)90度機器人右轉(zhuǎn)90度步進電機左轉(zhuǎn)90度否機器人右轉(zhuǎn)90度步進電機左轉(zhuǎn)90度否是右方是否有障礙是右方是否有障礙步進電機左轉(zhuǎn)180度步進電機左轉(zhuǎn)180度機器人左轉(zhuǎn)90度步進電機右轉(zhuǎn)90度否機器人左轉(zhuǎn)90度步進電機右轉(zhuǎn)90度否是左方是否有障礙是左方是否有障礙步進電機右轉(zhuǎn)90度步進電機右轉(zhuǎn)90度后退三步后退三步右轉(zhuǎn)90度右轉(zhuǎn)90度圖4-8避障程序流程框圖4.8本章小結(jié)本章首先采用流程圖方式對整個軟件設(shè)計流程進行整體介紹,之后列舉各個部分子程序中最具代表性的程序段進行介紹,包括對PWM實現(xiàn)所需寄存器設(shè)置的介紹,機器人實現(xiàn)行走的介紹,藍牙上位機的介紹,藍牙接收程序的介紹,避障程序的介紹,舞蹈程序的介紹等等。5.設(shè)計制作與調(diào)試過程本次畢業(yè)設(shè)計共分為三個階段,首先是資料的收集與設(shè)計方案的確定,其次是硬件電路的設(shè)計制作,最后是軟件的編寫與系統(tǒng)的調(diào)試。5.1硬件電路設(shè)計本設(shè)計包括最小系統(tǒng)板和擴展板,其中擴展板包括光耦隔離電路、74HC138復用電路、步進電機驅(qū)動電路、藍牙接收電路、電源電路等。具體的設(shè)計步驟為:畫原理圖和PCB圖、打印和熱轉(zhuǎn)印、腐蝕電路板、鉆孔、焊接、硬件調(diào)試。5.1.1原理圖PCB電路與制作工藝設(shè)計原理圖與PCB電路設(shè)計采用AltiumDesigner軟件,由于原理圖較復雜,引線較多,PCB電路都采用雙層布線,線寬為信號線1mm,電源線和地線1.2mm,焊盤和過孔內(nèi)徑1mm,外徑2.2mm[14]。其中STM32主控芯片,STC89C52芯片,電源芯片及部分最小系統(tǒng)元件都采用貼片形式,并且是雙層板焊接,因此對焊接技術(shù)有很大的考驗。5.1.2PCB板的檢測PCB電路板焊接后不能馬上進行上電測試,如若馬上上電測試則很容易由于焊接,或板的工藝使得電源與地之間短路,或是其他原因造成PCB電路板的燒毀。因此剛焊好的PCB板要經(jīng)過較嚴格的檢測。首先要對電源與地之間的檢測,即用萬用表檢測電源與地之間是否短路。再者檢測每個芯片的電源供電通路是否順暢。在排除了這些問題之后,再給芯片燒錄程序,檢測每個模塊的工作是否正常,如若不正常則還需對出問題部分的元器件進行一一排查直至PCB電路板正常工作。5.2初步軟件編程與調(diào)試軟件編譯環(huán)境為KeiluVision3.8,軟件本身帶有軟件仿真功能,對設(shè)計帶來很大的方便,在設(shè)計過程中,采用仿真來觀察PWM脈沖信號,確保信號輸出的準確性。在編譯軟件編譯形成.HEX文件后,采用mcuisp燒錄軟件將程序燒錄到STM32芯片中。藍牙上位機軟件開發(fā)環(huán)境為AppInventer,該軟件是Google公司的一款Android云端程序開發(fā)工具。軟件具有良好的開發(fā)界面,只需在開發(fā)界面上添加控件,并對控件編程即可下載至手機。5.3制作調(diào)試過程中出現(xiàn)的問題在一開始的設(shè)計思路中,為了提高每路pwm的利用率,采用了一路pwm分時復用控制一條腿上的三個舵機。此方案已經(jīng)制成電路板并使用,但是在調(diào)試過程中舵機總是不斷顫抖,機器人無法站立。后來分析其原因是:舵機分時復用時,當舵機沒有信號輸入,就沒有反饋電壓,此時舵機是不工作的,不工作的舵機就無法支撐起肢體。所以腿部的舵機不能采用分時復用。在吸收了此次經(jīng)驗后,我采用了腿部的12個舵機每個直接由一路pwm控制,而與機器人身體連接的6個舵機則采用74HC138分時復用方式,由一路pwm控制2個舵機。在一期方案的設(shè)計過程中,由于肢體過軟,造成機器人行走緩慢,動作受到局限。為了制作出更完美的機器人,在吸取了一期方案的經(jīng)驗教訓后,采用了二期方案。二期方案能很好的解決一期方案中的弊端。在機器人的供電問題上也是幾經(jīng)波折,首先選用航模電池經(jīng)整流橋堆降壓至6V后為舵機供電。此種方法只能為少數(shù)舵機供電,一旦18個舵機一起供電,就會電流不足使舵機無法精確可靠的工作。此時設(shè)計陷入了瓶頸,在一次偶然的機會看到了一個臺式電腦電源,在研究后發(fā)現(xiàn)它可以輸出5V電壓,最大負載電流18A,正好能夠滿足18個舵機的供電要求。換上該電源后,各個舵機工作正常。由于成本的限制,只能采用精度較低的舵機,此舵機本身存在機械誤差,即使給予精確的脈沖信號,都會與目標值存在誤差,一旦舵機誤差,進而造成肢體結(jié)構(gòu)的誤差,從而使每條腿負重不同,最終導致機器人失去平衡,這也是調(diào)試過程中存在的難點。由于這種誤差是由舵機的精度問題導致,是無法避免的,因此在調(diào)試過程中只能盡量規(guī)避和減少誤差。結(jié)束語本次畢業(yè)設(shè)計歷時3個月之久,雖說在大學四年里,有過不少的電子制作經(jīng)驗,也參加了不少的電子設(shè)計競賽,但是本次畢業(yè)設(shè)計是我所有電子設(shè)計中難度最大,資料最匱乏,成本最高,研究時間最長的課題,可以說是對自我的挑戰(zhàn)。深深的體會到要從一個機器人的門外漢到入門可不是一件簡單的事情,光是肢體結(jié)構(gòu)的方案一設(shè)計就耗費了近一個月的時間。為了實現(xiàn)本設(shè)計的控制,在此之前就自學了STM32,因為普通的51單片機無法擔此重任。就是這么一個艱難的過程,導致最后的成果只實現(xiàn)了基本功能,但是機器人的研究是漫長而艱難的,短短的時間是無法達成理想效果。因此我會樹立長久的研究目標,在以后的工作中,將繼續(xù)深入研究機器人。7.致謝在此次畢業(yè)設(shè)計過程中,面臨許多困難,也解決了不少問題,從中學會了不少新的知識。其中離不開老師與同學的支持和鼓勵,是他們給予我信心,在我遇到問題沮喪的時候,是他們告訴我要堅持下去。在此不得不特別感謝我的指導老師XXX老師,從選題到制作過程都給予了我極大的幫助和建議,他是我見過非常富有責任心的老師,他思維獨特,想法新異,非常富有創(chuàng)新精神,是他讓我們的畢業(yè)設(shè)計有了新意。本次畢業(yè)設(shè)計已經(jīng)接近尾聲,由于自己知識水平有限,覺得作品完成得不是很完美,總感覺留有遺憾,也感覺愧對指導老師的關(guān)心指導。通過此次畢業(yè)設(shè)計,讓我認知到自己那些方面不足,以后我會不斷努力,爭取做出更完美的六足機器人。這次畢業(yè)設(shè)計讓我對電子設(shè)計的愛好有了進一步的提升,為以后工作留下了寶貴的經(jīng)驗和財富。參考文獻:[1]遲冬祥,顏國正.仿生機器人的研究狀況及其未來發(fā)展[J].機器人,2001,23(5).[2]張秀麗,鄭浩峻,陳懇.機器人仿生學研究綜述[J].機器人,2002,24(2). [3]百度百科.STM32./view/2700466.htm.2013-09-15.[4]楊素行.模擬電子技術(shù)基礎(chǔ)簡明教程[M].北京:高等教育出版社,2006,367.[5]石愛平,杜玉杰.高校單片機實驗教學系統(tǒng)的設(shè)計[J].電氣電子教學學報,2010,32(1):84-85.[6]方龍,陳丹,肖獻保.基于單片機的機械手臂控制系統(tǒng)設(shè)計[J].廣西輕工業(yè),2008,第八期(總第 117期):89-90.[7]王永鼎,聶莉娜.基于模糊控制的智能競速車舵機轉(zhuǎn)向系統(tǒng)[A].2010年中國人工智能學會智能檢測 與運動控制技術(shù)會議論文集[C].北京:中國人工智能學會,2010,8-20.[8]吳華波,錢春來.基于AT89C2051的多路舵機控制器設(shè)計[J].單片機及嵌入式系統(tǒng)應用,2008.[9]余孟嘗.數(shù)字電子技術(shù)基礎(chǔ)簡明教程[M].北京:高等教育出版社,2006,177-178.[10]劉軍.例說STM32[M].北京:北京航空航天大學出版社,2013,142-143.[11]劉乾,孫志鋒.基于ARM的四旋翼無人飛行器控制系統(tǒng)[J].機電工程,2011,28(10):1237-1240.[12]譚浩強.C程序設(shè)計[M].北京:清華大學出版社,2005,204-217.[13]唐穎.單片機原理與應用及C51程序設(shè)計[M].北京:北京大學出版社,2008,146-153.[14]江思敏,胡燁.AltiumDesigner(Protel)原理圖與PCB設(shè)計教程[M].北京:機械工業(yè)出版社,2009, 6-10.[15]羅剛.小型仿人機器人的設(shè)計與步態(tài)研究[J].重慶大學,2009.[16]鄭啟文.基于無線通信網(wǎng)絡的多智能小車協(xié)作控制系統(tǒng)研[J].南京師范大學,2012. [17]趙慧,張婷婷.一種基于FPGA的舵機伺服系統(tǒng)設(shè)計[J].機床與液壓,2010,38(6):59-61.BasedontheSTM32bionicsix-leggedrobotDepartmentofElectronicandInformationEngineeringXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXAuthor:XXXTutor:XXX【Abstract】Intherapiddevelopmentofscienceandtechnologyinformationsociety,therobotinindustry,military,detectionandotherfieldsisplayingamoreandmoreimportantandirreplaceableposition,roboticsresearchisbecomingahotspotofcurrentresearcharoundtheworld.Bionicsix-leggedrobotonbionics,mechanics,informationtechnologyandsensortechnology,andmanyotherdisciplines,isabranchofroboticsresearch.Bionicsix-leggedrobotcopynaturereptilesbodystructure,hasgoodflexibilityandadaptiveability,inthemilitarytransportation,mining,planetaryexploration,andmanyotherfieldshasabroadprospect.ThisdesignUSEStheARMkernelstructure(architecture(M3)STM32F103RBT6asmaincontrolchip,throughinternaltimergeneratePWMsignals,andusing74hc138time-sharingmultiplexingtocontrolsix-leggedrobotjoints,namelythe18MG955steeringgear.ThroughtheBMX-02connectmobilephoneandtherobotturnbluetoothserialportmodule,bluetoothremotecontrol.DrivenbyUN2003Amotordriverchipsteppermotorandinfraredsensorstomakerobotintelligentescapes.Sincethe18degreesoffreedomrobot,flexiblebody,alsocanrealizeallkindsofspecialactionsimilartodance.【keywords】Thebionicsix-leggedrobotSteeringgearcontrolBluetoothremotecontrol附錄一、原理圖最小系統(tǒng)原理圖擴展板原理圖擴展板原理圖附錄二:PCB圖擴展板PCB圖擴展板PCB圖附件三:實物圖二期方案實物圖一期方案實物圖附錄四:器件清單器件列表 數(shù)量MG955舵機 18個TLP521-4光耦 5個74HC138 3個 貼片STM32F103RBT6芯片 1片 12MHZ晶振 1個 32.768KHZ晶振 1個LED發(fā)光二極管 1個AMS1117 1個跳線帽1個5.1K電阻18個150歐電阻 1個 輕觸開關(guān) 1個 貼片STC89C52RC 1個 11.0592MHZ晶振 1個 22pf電容 4個 100uf電容 4個 104電容 4個 LM7805 1個 電源母座 1個 1K電阻 1個 六角自鎖開關(guān) 5個 步進電機 1個 紅外傳感器 1個 ULN2003A 1個 機器人支架 1套 7.4V航模電池 1個 12V鋰電池 1個 臺式電腦電源 1個 藍牙模塊 1個 排針 若干 排針座 若干 杜邦線 若干 16腳芯片底座 8個 雙層玻纖板 2塊 附錄五、部分程序PWM脈沖設(shè)置程序:#include"timer.h"#include"led.h"http://PWM輸出初始化//arr:自動重裝值//psc:時鐘預分頻數(shù)voidPWM_Init(u16arr,u16psc){ RCC->APB1ENR|=1<<1; GPIOA->CRL&=0X00FFFFFF; GPIOA->CRL|=0XBB000000; GPIOA->ODR|=1<<7; GPIOA->ODR|=1<<6; GPIOB->CRL&=0XFFFFFF00; GPIOB->CRL|=0X000000BB; GPIOB->ODR|=1<<0; GPIOB->ODR|=1<<1; TIM3->ARR=arr; TIM3->PSC=psc; TIM3->CCMR1|=7<<12; TIM3->CCMR1|=1<<11; TIM3->CCMR1|=7<<4; TIM3->CCMR1|=1<<3; TIM3->CCMR2|=7<<12; TIM3->CCMR2|=1<<11; TIM3->CCMR2|=7<<4; TIM3->CCMR2|=1<<3; TIM3->CCER|=1<<4; TIM3->CCER|=1<<0; TIM3->CCER|=1<<8; TIM3->CCER|=1<<12; TIM3->CR1=0x8000; TIM3->CR1|=0x01; RCC->APB1ENR|=1<<0; GPIOA->CRL&=0X00FF0000; GPIOA->CRL|=0XBB00BBBB; GPIOA->ODR|=1<<0; GPIOA->ODR|=1<<1; GPIOA->ODR|=1<<2; GPIOA->ODR|=1<<3; TIM2->ARR=arr; TIM2->PSC=psc; TIM2->CCMR1|=7<<12; TIM2->CCMR1|=1<<11; TIM2->CCMR1|=7<<4; TIM2->CCMR1|=1<<3; TIM2->CCMR2|=7<<12; TIM2->CCMR2|=1<<11; TIM2->CCMR2|=7<<4; TIM2->CCMR2|=1<<3; TIM2->CCER|=1<<4; TIM2->CCER|=1<<0; TIM2->CCER|=1<<8; TIM2->CCER|=1<<12; TIM2->CR1=0x8000; TIM2->CR1|=0x01; RCC->APB1ENR|=1<<2; GPIOB->CRL&=0X00FFFF00; GPIOB->CRL|=0XBB0000BB; GPIOB->ODR|=1<<6; GPIOB->ODR|=1<<7; GPIOB->CRH&=0XFFFFFF00; GPIOB->CRH|=0X000000BB; GPIOB->ODR|=1<<8; GPIOB->ODR|=1<<9; TIM4->ARR=arr; TIM4->PSC=psc; TIM4->CCMR1|=6<<12; TIM4->CCMR1|=1<<11; TIM4->CCMR1|=6<<4; TIM4->CCMR1|=1<<3; TIM4->CCMR2|=7<<12; TIM4->CCMR2|=1<<11; TIM4->CCMR2|=7<<4; TIM4->CCMR2|=1<<3; TIM4->CCER|=1<<4; TIM4->CCER|=1<<0; TIM4->CCER|=1<<8; TIM4->CCER|=1<<12; TIM4->CR1=0x8000; TIM4->CR1|=0x01; GPIOA->CRH&=0XFFFFFFF0; GPIOA->CRH|=0X0000000B; GPIOA->ODR|=1<<8; GPIOA->CRH&=0XFFFFFF0F; GPIOA->CRH|=0X000000B0; GPIOA->ODR|=1<<9; GPIOA->CRH&=0XFFFFF0FF; GPIOA->CRH|=0X00000B00; GPIOA->ODR|=1<<10; GPIOA->CRH&=0XFFFF0FFF; GPIOA->CRH|=0X0000B000; GPIOA->ODR|=1<<11; RCC->APB2ENR|=1<<11; TIM1->ARR=arr; TIM1->PSC=psc; TIM1->CCMR1|=6<<4; TIM1->CCMR1|=1<<3; TIM1->CCMR1|=7<<12; TIM1->CCMR1|=1<<11; TIM1->CCMR2|=7<<4; TIM1->CCMR2|=1<<3; TIM1->CCMR2|=7<<12; TIM1->CCMR2|=1<<11; TIM1->CCER|=1<<0; TIM1->CCER|=1<<4; TIM1->CCER|=1<<8; TIM1->CCER|=1<<12; TIM1->BDTR|=1<<15; TIM1->CR1|=0x01; } #ifndef__TIMER_H#define__TIMER_H#include"sys.h"#definePA7TIM3->CCR2#definePA6TIM3->CCR1#definePB0TIM3->CCR3#definePB1TIM3->CCR4#definePA1TIM2->CCR2#definePA0TIM2->CCR1#definePA2TIM2->CCR3#definePA3TIM2->CCR4#definePB7TIM4->CCR2#definePB6TIM4->CCR1#definePB8TIM4->CCR3#definePB9TIM4->CCR4#definePA9TIM1->CCR2#definePA8TIM1->CCR1#definePA10TIM1->CCR3#definePA11TIM1->CCR4voidPWM_Init(u16arr,u16psc);#endif2、I/O口設(shè)置程序#include"led.h"voidLED_Init(void){ RCC->APB2ENR|=1<<2;//使能PORTA時鐘 RCC->APB2ENR|=1<<3;//使能PORTB時鐘 RCC->APB2ENR|=1<<4;//使能PORTC時鐘 RCC->APB2ENR|=1<<5;//使能PORTD時鐘 GPIOB->CRL&=0XFF0FFFFF; GPIOB->CRL|=0X00300000; GPIOB->ODR|=0<<5; GPIOB->CRH&=0X0000FFFF; GPIOB->CRH|=0X88880000; GPIOB->ODR|=1<<12; GPIOB->ODR|=1<<13; GPIOB->ODR|=1<<14; GPIOB->ODR|=1<<15; //步進電機接pc0,pc1,pc2,pc3 GPIOC->CRL&=0X00000000; GPIOC->CRL|=0X88883333; GPIOC->ODR|=0<<0; GPIOC->ODR|=0<<1; GPIOC->ODR|=0<<2; GPIOC->ODR|=0<<3; GPIOC->ODR|=1<<4; GPIOC->ODR|=1<<5; GPIOC->ODR|=1<<6; GPIOC->ODR|=1<<7; GPIOC->CRH&=0XFF0FFF00; GPIOC->CRH|=0X00800083; GPIOC->ODR|=0<<8; GPIOC->ODR|=1<<9; GPIOC->ODR|=1<<13; GPIOD->CRL&=0XFFFFF0FF; GPIOD->CRL|=0X00000300; GPIOD->ODR|=0<<2;}#ifndef__LED_H#define__LED_H #include"sys.h"#definePB5PBout(5)#definePC8PCout(8)#definePD2PDout(2)#defineLED0PCout(9)#defineLED1PDout(1)#definepc0PCout(0)#definepc1PCout(1)#definepc2PCout(2)#definepc3PCout(3)#definepc13PCin(13)#definePC13PCout(13)#definePC4PCin(4)#definePC5PCin(5)#definePC6PCin(6)#definePC7PCin(7)#definePC9PCin(9)#definePB12PBin(12)#definePB13PBin(13)#definePB14PBin(14)#definePB15PBin(15)voidLED_Init(void);//初始化 #endif3、行走程序voidxingzou_init(void){ delay_ms(500); delay_ms(500); delay_ms(500); delay_ms(500); PC8=1; PA8=1080;//頭右1 PD2=1; PB6=1080;//中右1 PB5=1; PB7=1080;//尾右1 delay_ms(500); PC8=0; PA8=1080;//頭左1 PD2=0; PB6=1080;//中左1 PB5=0; PB7=1080;//尾左1 delay_ms(500); PB9=1200;//頭左2 PB8=1200;//中左2 PA2=1180;//尾左2 PA11=1000;//頭右2 PA10=1000;//中右2 PA6=1060;//尾右2PB0=880;//頭右3 PB1=830;//中右3 PA7=860;//尾右3 PA0=1300;//頭左3 PA1=1300;//中左3 PA3=1340;//尾左3 delay_ms(500); delay_ms(500); delay_ms(500);}//*****************************************前進子程序****************************************************************************voidforword(void){ while(1) { //*************************************頭右2,尾右2,中左2抬起**************************************** PB9=1200;//頭左2 PB8=1440;//中左2 PA2=1200;//尾左2 PA11=720;//頭右2 PA10=960;//中右2 PA6=720;//尾右2 delay_ms(250); //**********************頭右1,尾右1,中左1前轉(zhuǎn),頭左1,尾左1,中右1復位***************************** PC8=1; PA8=920;//頭右1 PB5=1; PB7=920;//尾右1 PD2=0; PB6=1240;//中左1 delay_ms(100); PC8=0; PA8=1080;//頭左1 PD2=1; PB6=1080;//中右1 PB5=0; PB7=1080;//尾左1 delay_ms(250); //*************************************頭右2,尾右2,中左2放下**************************************** PB9=1200;//頭左2 PB8=1200;//中左2 PA2=1200;//尾左2 PA11=960;//頭右2 PA10=960;//中右2 PA6=960;//尾右2 delay_ms(250); //*************************************頭左,尾左2,中右2抬起**************************************** PB9=1440;//頭左2 PB8=1200;//中左2 PA2=1440;//尾左2 PA11=960;//頭右2 PA10=720;//中右2 PA6=960;//尾右2 delay_ms(250); //**********************頭左1,尾左1,中右1前轉(zhuǎn),頭右1,尾右1,中左1復位***************************** PC8=0; PA8=1240;//頭左1 PB5=0; PB7=1240;//尾左1 PD2=1; PB6=920;//中右1 delay_ms(250); PC8=1; PA8=1080;//頭右1 PB5=1; PB7=1080;//尾右1 PD2=0; PB6=1080;//中左1delay_ms(250); //*************************************頭左,尾左2,中右2放下**************************************** PB9=1200;//頭左2 PB8=1200;//中左2 PA2=1200;//尾左2 PA11=960;//頭右2 PA10=960;//中右2 PA6=960;//尾右2 delay_ms(250);if(pc13==0) break;}}//*****************************************后退子程序****************************************************************************voidback(void){ u8b; for(b=10;b>0;b--) { //*************************************頭右2,尾右2,中左2抬起**************************************** PB9=1200;//頭左2 PB8=1440;//中左2 PA2=1200;//尾左2 PA11=720;//頭右2 PA10=960;//中右2 PA6=720;//尾右2 delay_ms(200); //**********************頭右1,尾右1,中左1后轉(zhuǎn),頭左1,尾左1,中右1復位***************************** PC8=1; PA8=1240;//頭右1 PB5=1; PB7=1240;//尾右1 PD2=0; PB6=920;//中左1 delay_ms(100); PC8=0; PA8=1080;//頭左1 PD2=1; PB6=1080;//中右1 PB5=0; PB7=1080;//尾左1 delay_ms(200); //*************************************頭右2,尾右2,中左2放下**************************************** PB9=1200;//頭左2 PB8=1200;//中左2 PA2=1200;//尾左2 PA11=960;//頭右2 PA10=960;//中右2 PA6=960;//尾右2 delay_ms(200); //*************************************頭左,尾左2,中右2抬起**************************************** PB9=1440;//頭左2 PB8=1200;//中左2 PA2=1440;//尾左2 PA11=960;//頭右2 PA10=720;//中右2 PA6=960;//尾右2 delay_ms(200); //**********************頭左1,尾左1,中右1后轉(zhuǎn),
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣東江門中醫(yī)藥職業(yè)學院高職單招職業(yè)適應性測試歷年(2019-2024年)真題考點試卷含答案解析
- 2025年常州機電職業(yè)技術(shù)學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2025年常州信息職業(yè)技術(shù)學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2025年山西青年職業(yè)學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2025年山西老區(qū)職業(yè)技術(shù)學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2025年寧波職業(yè)技術(shù)學院高職單招職業(yè)適應性測試歷年(2019-2024年)真題考點試卷含答案解析
- 2025年天津石油職業(yè)技術(shù)學院高職單招(數(shù)學)歷年真題考點含答案解析
- 2025年天津輕工職業(yè)技術(shù)學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2025年天津廣播影視職業(yè)學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- (一模)2025年廣州市普通高中畢業(yè)班綜合測試(一)物理試卷(含答案詳解)
- 《小王子》數(shù)字故事
- 甘肅省英語中考試卷及解答參考(2025年)
- 《危險化學品生產(chǎn)建設(shè)項目安全風險防控指南》企業(yè)主要負責人培訓
- 綠色金融推動碳中和目標實現(xiàn)的研究現(xiàn)狀與路徑展望
- 3.1細胞膜的結(jié)構(gòu)和功能說課課件-高一上學期生物人教版(2019)必修1
- 小學英語四年級語法專項練習(2024年)
- 解三角形滿分突破10講-試題版
- 2024年天津市中考英語真題卷及答案
- 13R503 動力工程設(shè)計常用數(shù)據(jù)
- JGJ/T235-2011建筑外墻防水工程技術(shù)規(guī)程
- 如果歷史是一群喵
評論
0/150
提交評論