機電控制系統設計及仿真_第1頁
機電控制系統設計及仿真_第2頁
機電控制系統設計及仿真_第3頁
機電控制系統設計及仿真_第4頁
機電控制系統設計及仿真_第5頁
已閱讀5頁,還剩57頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

摘要六足仿生機器人可以代替人類在各種不適宜的環境中進行探測和救援。它屬于是一種仿生足式機器人,并且具有良好的性能。六足仿生機器人的穩定特征可以用于一些未來的太空探索、災區搜救、人類活動和生活的其他方面,代替人類完成一些高風險和繁瑣困難的任務,為減輕人類的負擔,幫助科學技術的發展。該畢業設計是通過根據其預定功能設計電路原理圖,并連接各種功能模塊(如單片機和光電傳感器以及舵機等)而設計的。自行設計的仿生機器人的框架是支撐平臺。在六足仿生機器人的控制操作方向上,選擇通用的廉價單片機作為軟件開發平臺,以轉向控制舵機作為中間控制模塊來控制機械足的操作和運行。關鍵詞:六足機器人;單片機;控制系統;程序編程DesignandSimulationofelectromechanicalcontrolsystemforhexapodrobotAbstractHexapodbionicrobotscanreplacehumansfordetectionandrescueinvariousunsuitableenvironments.Itbelongstoabionicfootrobotandhasgoodperformance.Thestablecharacteristicsofthehexapodbionicrobotcanbeusedinsomefuturespaceexploration,searchandrescueindisasterareas,humanactivitiesandotheraspectsoflife,replacinghumanstocompletesomehigh-risktediousanddifficulttaskstoreducehumanburden,helpscienceandTechnologydevelopment.Thisgraduationdesignisbasedonthepre-setfunctionaldesigncircuitschematicdiagram,andconnectseachfunctionalmodule(suchassingle-chipmicrocomputer,photoelectricsensor,servo,etc.)fordesign.Theframeoftheself-designedbionicrobotisthesupportingplatform.Inthecontroloperationdirectionofthehexapodbionicrobot,thegeneralcheapsingle-chipmicrocomputerwasselectedasthesoftwaredevelopmentplatform.Keywords:Hexapodrobot;singlechipmicrocomputer;controlsystem;programprogramming目錄TOC\o"1-3"\h\u307051緒論 162971.1本設計的背景及意義 1310151.2本設計在國內外的發展概況及存在的問題 295621.3本設計應解決的主要問題 4140432方案設計及系統模塊的選型 52462.1機身設計 592142.2系統模塊的選型 7325912.2.1感知模塊的選型 917432.2.2微控制器的選型 10122652.2.3電機驅動模塊的選型 1146062.2.4電源模塊 13161313仿真硬件電路設計 15153203.1Proteus軟件 151543.1.1軟件功能介紹 15275843.1.2硬件電路設計流程 15318643.2仿真硬件電路 1662763.2.1最小系統 16193823.2.2時鐘電路 1816163.2.3復位電路 18233913.2.4電源電路模塊 1923833.2.5超聲波感應電路 1912993.2.6電機驅動電路 2067153.2.7仿真硬件電路 22137874軟件設計 23134084.1主程序設計 23236994.2中斷 24289054.2.1內部定時和外部計數中斷 24257364.2.2中斷控制的有關寄存器 24126594.3子程序設計 25261864.3.1串口驅動子程序設計 25317894.3.2按鍵子程序設計 25183644.3.3顯示屏子程序設計 27322794.4軟件調試 2935555結論 303099參考文獻 3130221謝辭 32537附錄 3322847附錄1 33PAGE61緒論六足仿生機器人屬于地面多足機器人中的其中一類,這種機器人有著強大的運動能力,自動化程度高,結構穩定,學習采用生物的運動模式進行工作。自然界里存在一些人類無法到達或者對人類生命有危險的地方。有如礦井、防災救援等等環境下,足式機器人的優勢在于極強的地形通過能力。并且可設計或大或小的各類型機器人,進入危險區域進行收集信息,大大的改善了人類無法活動區域的限制,在目前都比較常見的是輪式機器人和履帶式機器人中。而且多足機器人的腿部具有多個自由度,利用三組步態和定點轉彎等姿態控制,通過調節腿的伸展程度大大增強機器人自身的靈活性,也可以控制機身重心的位置更讓機器人擁有更高的穩定性。本設計基于仿生學原理,通過51單片機的控制多個舵機的組合實現其獨特的特殊性能使得多足仿生機器人研究的出現更突顯步行機器人的優勢。1.1本設計的背景及意義六足機器人可以代替人類在各種不適宜的環境下進行探測和救援。利用六足仿生機器人的穩定性特點,我們可以代替人類完成一些高風險或者不方便不適合人類到達完成的任務,減輕人類的負擔,幫助科學技術的發展。當應用于復雜的應用地形時,例如房屋倒塌、山體滑坡、礦井坍塌等廢墟環境下,與輪式履帶式機器人相比六足機器人能適應復雜惡劣的地形環境,識別性強,思維局限性較低,自動分析地理環境從而執行不同的步態,控制模式也更加簡潔方便,對比蛇型機器人更加容易實現,本設計對機器人軀干和腿的結構、運動方式和控制系統進行了研究。為六足機器人在不同結構空間和復雜環境下的控制奠定了基礎。六足機器人由于其關節自由度高,運動靈活以及能夠適應復雜地形并且穩定性強被應用于各種復雜多變的環境中。在全球擁有各類機器人,機器人已經變得更加多樣化。綜合考慮其機械機身結構和各種步態模式,避免了諸多動態平衡的問題。但是,由于許多自由度,控制系統的復雜性增加了。因此,設計一種能夠實現多自由度協調運動的柔性控制系統是關鍵技術。人類研制的機器人已經不僅僅是業內人士埋頭地研究,人們還注重研究生物,并從自然中汲取靈感,學習它們的運動原理、運動的機制和行為的控制,使得機器人與仿生學結合,賦予其更多的使用功能,使得仿生機器人的研究更多元化。本次設計利用舵機對機器人進行控制實現各種步態行走操作,舵機相當于是機器人的大腦神經,目的是對機器人各足部協調發送指令動作。機身各結構基節則是機器人的四肢和驅干,在這基礎上還需要機器人的主要控制大腦,這個大腦需要對外部的信息進行接受和處理,分析需要執行的指令,并對舵機統一命令操作。該機器人對外的傳感器是機器人的眼睛,本設計利用超聲波的原理,范圍廣識別度高,它負責接收勘測到的信號。發送給大腦,而舵機并不是機器人的核心。為了實現機器人的智能,我們必須添加另一個主控件,即為機器人安裝一個大腦,而單片機可以成為機器人的主控件。研究了六足仿生機器人的機械結構,控制和功能。六足仿生機器人身體和腿部結構的優化,結合機身自身重量和各模塊部件的裝配,設計更高效率的運動結構、傳動系統及控制系統,優化和豐富其探測功能,使仿生機器人達到更有效、更輕便,更具有適應性,能量消耗更低。1.2本設計在國內外的發展概況及存在的問題在眾多機器人中,由昆蟲運動原理而來的六足機器人在復雜環境及非結構性空間下體現出靈活與高效,代替了人完成人所不適應或力所不及的各種工作,高效的解決問題。近年來美國就機器人這一領域在國際社會頻頻出彩,這背后是美國對機器人研究的大力支持。美國NSF最開始建立是為了促進美國的科學進步,在機器人行業NSF投入了諸多的精力財力和人力,發展時間也經歷了非常長的過程。美國前置性的早期投資,在機器人相關問題的實踐下,對機器人的方向的指導以及探索不斷深入。最近幾年,西班牙科學家利用3D打印技術創造了一款六足機器人NeuroPod,如圖1.1所示。利用內置的集成人工神經網絡模擬自然界的昆蟲在不同的步態之間轉換。根據報道這款六足機器人裝配30個人工的神經元,用以接受電子刺激,以瞬間對腿部電機發送指令,完成各種步態的卻換,比如從慢走到奔跑。現在科研人員還在為機器人裝各種傳感器以便可對外界環境做出不同的響應。圖1.1NeuroPod機器人2018年4月,德國著名自動化技術廠商費斯托公司推出一款名為BionicWheelBot的新型仿蜘蛛機器人如下圖1.2所示。該仿生機器人身長約為55cm,這個機器人不僅能在地面正常行走,還能蜷縮成球用腿輔助向前翻滾。該機器人具有較強的適應性,可應用于農業、探測以及戰場偵查等領域。圖1.2BionicWheelBot機器人近年來,國內的阿爾戈智能機器人團隊,研發出了一種具有創造性適應能力的六足輪腿混合機器人Creadapt,如下圖1.3所示,這個機器人利用最新的運動學和機電一體化設計,配備了最新的適應算法,屬于一款多功能的機器人,不僅可以用輪式行走,也可以使用足部,兩種程序算法各自獨立互不影響,并且這種算法是可以反向運作的的,即使因為環境的原因被翻轉過來,依舊可以繼續完成它的指令,雖然是擁有六條腿,但即使多條腿都損壞了無法行動,它還是能夠繼續有效的移動,Creadapt機器人是國內第一個基于自適應算法設計的移動機器人。圖1.3Creadapt機器人六足仿生機器人在移動機器人這一領域是非常重要研究方向。與其他類型的移動機器人相比,仿生六角形機器人在非典型環境中具有巨大優勢,可用于現場檢查,救災和崎嶇不平的道路運輸。在復雜的環境中,我們研究了基于仿生運動學的系統控制算法,仿生結構設計,控制系統,圖形處理算法,本體結構設計以及仿生六足機器人的設計與實現。1.3本設計應解決的主要問題機器人控制技術是一項非常全面和廣泛的主題技術,包括機器,自動控制,計算機,人工智能等許多科學研究領域的先進技術,六足機器人的控制系統是機器人運動部分的中心。設計出一個需要在非典型環境中滿足基本的移動性要求。同時滿足關鍵零件的強度、剛度和使用壽命要求等條件,然后進行輕量化和小型化優化設計,得到基本的結構尺寸,同時考慮使用高強度和低密度特性的材料,提高機器人的運動效率。本文以統一的形式分析了六邊形機器人模型,研究了機器人的節奏和步態產生,簡單的控制,靈活的運動在構建控制硬件平臺方面。軟件系統。需擬解決問題目前主要以下幾個:1、六足機器人可以左右旋轉以靈活旋轉2、機器人可以越過一些簡單的小障礙3、確定機械支撐架的承受范圍,選擇合適的驅動方式4、運用軟件進行模擬仿真2方案設計及系統模塊的選型2.1機身設計在機械系統中,現今對六足機器人的研究日漸深入,機身結構的形狀也層出不窮,最為典型且應用最為廣泛的是以下三種機身結構:對稱并排分布、正六邊形分布、類橢圓形六邊分布。機身的形狀結構影響這步行腿的分布,進而對步行腿的擺動空間和六足機器人行走運動過程中的穩定性產生較大的影響,小組對以上三種機身結構,就腿部擺動空間和行走穩定性進行對比分析。合適的機身機構可以使步行腿有更大的擺動空間,更廣的觸底平面,在機身總長度及步行腿長度相同的情況下,兩種機身結構的步行腿進行相同擺動角度,對類橢圓形六邊機身結構和對稱機身結構進行步行腿擺動空間對比。在機身總長度及步行腿長度相同的情況下,兩種機身結構的步行腿使用相同擺動角度,類橢圓形六邊機身結構并未發生步行腿相撞的情況,但對稱并排機身結構的步行腿的擺動空間已發生相交,說明此角度已超出最大限制,發生步行腿相撞的情況,如圖2.1所示。可由此分析得出類橢圓形六邊機身結構的空間擺動范圍即觸地平面比對稱并排機身結構大。圖2.1步行腿擺動空間對比圖六足機器人在正常情況下行走時,其穩定性與步態息息相關,所以在分析穩定性前,需選擇一種步態,對三種機身結構進行穩定性對比分析。三種機身結構中,正六邊形機身結構和類橢圓形六邊機身機構相似,都屬于六邊形機身結構,而對稱并排結構與之相差甚遠,所以需先比較六邊形機身機構與對稱并排機身結構的穩定性。在小組成員的分析各種對比后得出,當六邊形結構越趨向類橢圓形六邊形時,其穩定裕度越大,但L值的增大范圍和D值的減少范圍均有有限制,否則會機身左端會觸碰至支撐相,導致比例失調,穩定性下降,如圖2.2所示。所以可知在一定的D值與L值變化范圍內,類橢圓形六邊機身結構的運動穩定性最高,正六邊形次之。圖2.2機身部分參數示意圖綜合上節的步行腿穩定性分析,類橢圓形六邊機身結構不僅可以減少支腳之間的干擾和碰撞,還能保證六足機器人運動的穩定性,本課題的設計的機身選擇類橢圓形六邊機身結構。機身結構選定為類橢圓形六邊機身結構。在建模設計前,計算機身的幾個重要設計參數,如圖2.2所示。通過小組成員設計根據步行腿的設計可知,步行腿的總長度為258mm。為保證步行腿基節在平面擺動角度一般為前后60°,但為保證有盡可能大的擺動空間及避免相撞的現象發生,H的值至少要大于腿長,即260mm,設計選擇的數值應更大,初始選為520mm,D的值只要大于258即可,初始選定為260mm,L初始選定為400mm。足部結構如圖2.3所示。圖2.3足部結構參數示意圖根據選定的尺寸,對六足機器人的機身進行參數結構設計并與步行腿進行組裝,如圖2.4所示,六足機器人完成基本的機身和步行腿設計。圖2.4六足機器人組裝示意圖2.2系統模塊的選型在控制硬件方面主要分為兩部分構成,一是控制系統,二是驅動系統,總體分為四大模塊:感應識別模塊、控制器模塊、電機驅動模塊和電源模塊進行構成,第一步由識別模塊進行障礙物的檢測,然后像控制器模塊發出信號,接著由控制器模塊發出指令控制,對驅動電機驅動系統的脈沖,通過控制電流的脈沖達到電機角度的轉動,進而控制六足機器人的行走。而電源模塊主要就是提供系統所需的電源,使得機器人可在不人為連線供電的情形下自身提供各系統所需的電源。其關聯方式如圖2.5所示:機器人行走電機驅動模塊控制器模塊感知模塊機器人行走電機驅動模塊控制器模塊感知模塊電源模塊電源模塊圖2.5系統結構方式圖每一個模塊的功能作用如下:1、感知模塊作為功能需要去感應前方是由一個發射和接收超聲波傳感器以及一個單片機組成,主要負責測量一定范圍內障礙物的距離,感應傳感器檢測到在機器人前方某個距離范圍內的東西然后反饋給系統。2、控制器模塊作為控制系統的核心,進行數據的分析處理,對各子程序進行控制信號的傳遞,需要對系統每一結構進行協調,完成事先預定的功能程序。3、電機驅動模塊對每只腳單獨驅動,通過脈沖調整,這一驅動主要是由控制器進行驅動。4、電源模塊就是為六足機器人的各功能模塊提供能量,以此來保證機器人各系統的穩定運行。總體方案設計如下圖2.6所示:直流伺服電機控制直流伺服電機控制硬件設計軟件設計硬件設計軟件設計按鍵按鍵直流電機驅動電路單片機C語言程序設計電機控制直流電機驅動電路單片機C語言程序設計電機控制顯示顯示Keil軟件Keil軟件電路原理圖電路原理圖Proteus軟件Proteus軟件仿真調試仿真調試圖2.6總體方案設計2.2.1感知模塊的選型目前市面上比較普遍的傳感器主要有源式傳感器和無源式傳感器兩種類型。對各類型傳感器的使用情況和作用分析,無源傳感器通過吸收被測對象的能量來輸出信號;而有源傳感器需要由電源提供。雖然無源傳感器簡單方便,但是會因為被測對象的影響,而導致靈敏度不高也更加容易受到干擾,在這有源傳感器更具有優勢,靈敏度高也不容易收到干擾,只是需要外部電源的提供。觸覺傳感器屬于有源傳感器的其中一種,通常安裝在外部環境容易接近被測量物體附近的地方。主要功能是將圖像轉換為水平信號,即是根據時間順序,照射到傳感器感光表面的光強度信息將轉換為串行輸出水平信號。就目前來說,視覺傳感器廣泛用于工業機器人和各類型移動機器人上。傳感器將超聲波信號轉換為其他能量信號的聲波傳感器。超聲具有高頻,方向性特別好的特點。對于液體和固體的超聲波滲透非常好,尤其是對于不透光的固體。有顯著的效果。但是超聲波會產生大量反射,從而形成反射回波,只要感應到前方存在物體,則會發生多普勒效應。在此次課題設計的探測機器人中使用超聲波傳感器用于檢測與障礙物之間的距離,超聲波傳感器小巧容易安裝,類型繁多購買方便,實用性強,此次實驗選用超聲波傳感器型號為HC-SR04,如圖2.7所示:產品主要參數如下表2.8所示:圖2.7HC-SR04超聲波傳感器表2.8產品模塊主要參數產品名稱HC-SR04超聲波模塊使用電壓DC5V靜態電流小于2mA電平輸出低0v感應角度不大于15度探測距離2CM-450CM高精度可達3MM該產品安裝方便、尺寸更小,不易老化、材料堅固且耐腐蝕,使用壽命也長,采用IO觸發測距,測距距離=(高電平時間*聲速340M/S/2)。比較其他超聲波傳感器此型號有精度高的特點,自動檢測是否有信號返回。2.2.2微控制器的選型微型控制器俗稱單片機,把CPU、定時器、計數器和多版本I/O接口集成在一塊芯片上,構成了一個小型迷你的微電腦,可以在不同的場合控制不同的應用,它內部內部有著振蕩器、RAM、ROM、并行I/O端口、中斷系統、可編程串行口以及定時器等組成。它具有低功耗、體積小、高性能、成本低等優點,非常適用于開發。本設計基于單片機控制電機,實現足部驅動系統的運作。單片機用作中央處理器。與各種傳感器模塊配合。因此,選擇一塊好的單片機顯得非常重要。由于技術成熟,51系列單片機可提供完整的信息,它為系統開發提供了極大的便利。因此系統選擇STC89C52RC模型與51系列內核完全兼容的單片機。這個型號單片機具有可編程可擦除只讀存儲器的低電壓、高性能的微處理器。并且它指令簡單、自學也易懂容易上手,加上程序編程等硬件設計方便,執行操作也簡單,主要它價格實惠,易于購買,也可多個單片機同時操作,所以用它作為本次設計項目的主體控制部分尤為合適。此型號芯片如下圖2.9所示:圖2.9STC89C52RC單片機單片機STC89C52RC工作原理為其可以不斷地讀取執行指令,再在寄存器中進行譯碼功能,最后通過其他部件完成執行指令。該芯片具有以下特征:(1)完全兼容傳統8051系列產品,程序可兼容,屬于升級版增強型單片機。(2)相同的晶體振蕩器STC89C52RC比傳統的51單片機快8至12倍。(3)內置MAX810復位通道,可進行8次高速10A/D轉換,無需外部A/D模塊。(4)此系列單片機針對電機的控制,比舊版具有強的抗干擾性能。(5)比普通51單片機多了兩個定時器,具有PWM功能。STC89C52RC的管腳排列如下圖2.10:圖2.10單片機管腳排列圖如上圖所示STC89C52RC具有40個引腳,其中32個是外部雙向輸入/輸出(I/O)端口,加上2個外部中斷源、3個16位可編程定時器/計數器中斷和2個串行中斷。2條讀寫中斷線。可以根據現有方法對STC89C52RC進行編程。它結合了通用微處理器和閃存,特別是可以重復擦除的微處理器,極大化的降低了開發成本。2.2.3電機驅動模塊的選型作為控制機器人各角度轉動的電機,現在使用最為廣泛的主要為兩種:其一種是步進電機,另一種為伺服電機。伺服電機又分為伺服交流電機和伺服直流電機,對機器人的控制一般使用伺服直流電機,所以另外一種在此不做深究。步進電機原理是接收到脈沖信號時,電機沿設定方向旋轉固定角度,以固定角度逐步執行旋轉。但是沒有反饋信號,精度較低,也可以控制脈沖的頻率大小控制電機轉動的速度以便加速或減速,進而達到需要調整電機節奏速度的目的。伺服電機控制脈沖數,當電動機旋轉時,它將發送相應數量的脈沖。在此同時驅動器也接收到反饋的信號,精確的控制電機的旋轉,精度可達微米級別,并且電機內部的轉子是永磁體,電機自帶編碼器,該精度遠遠的高于步進電機。其電機原理圖如下圖2.11所示:2.11伺服電機原理圖步進電機和伺服電機的速度響應性能也不同。步進電機當從靜止狀態加速到工作速度時需要幾百毫秒的時間距離。而伺服電機系統往往只需要幾毫秒的時間,有著更加優良的加速性能,它可用于需要快速啟動和停止以及高位置精度的控制站。考慮到舵機的數量和應用的方向,小組討論決定采用型號為AX-18伺服電機,AX-18伺服電動機具有精度高,對速度和轉矩進行閉環控制的優點,并克服了步進電動機失步的問題。電機穩定性能強,無論低速還是高速都能滿足要求也不會存在步進電機的現象,加上及時性強的特點,電機加減速的動態相應時間短,短短在幾十毫秒之內可完成。所以決定使用該型號電機AX-18電機如圖2.12所示、參數如表2.13所示:圖2.12AX-18伺服數字電機表2.13電機參數產品尺寸40.7*19.7*42.9mm產品質量55g工作扭矩16.5kg/cm反應轉速53-62r/m使用溫度-5°C-+85°C死區設定4微秒插頭類型JR、FUTABA通用轉動角度180度/360度舵機類型模擬電機使用電壓7-10v工作電流900mA結構材質金屬銅齒、空心杯電機、雙滾珠軸承伺服電機的控制通常需要大約20Ms的時基脈沖。脈沖的高電平部分通常是角度控制脈沖部分。以180°伺服直流電機為例,對應的關系是:0.5Ms--0°、1.0Ms--45°、1.5Ms--90°、2.0Ms--135°、2.5Ms--180°。許多時候適用于機械臂的選配和航模電機的使用等。2.2.4電源模塊由于需要考慮六足機器人的工作環境和自身結構可知,機器人必須自帶電源。以此確保機器人的穩定運作,本課題設計的六足機器人所需的能源主要用于驅動電機和控制電路以及超聲波范圍。伺服電機可以直接使用通用電源,但超聲波傳感器和單片機控制電路則是需要5V電源。電路模塊上也存在許多感性元件,不能直接通入高壓電源,考慮到六足機器人的工作時間,自身重量,電池尺寸和成本,使用容量為5200mAH的24V5.2Ah鋰電池。鋰電池在和鎳鎘電池和鉛酸電池等類型電池相比之下,鋰電池有著更高的性價比。鋰電池也擁有諸多優點,比如沒有污染,電池輸出電流大,使用壽命長,循環次數多等優點。電池處理模塊采用PCA9685芯片進行驅動伺服電機的運作,它是一個采用I2C通信,內置了PWM驅動器和一個時鐘。和TLC5940系列有很大不同,這個芯片不需要不斷發送信號占用單片機。也可有效壓制輸入電流來使器件不會受到輸入信號的影響。它是5V的兼容,即使是3.3V的單片機控制也能安全地驅動到6V輸出。相比于L298N驅動芯片,可有效控制電機正反轉的效果。外部端子用于連接外圍檢測電阻器。另外可放置另一個輸入電源,以允許邏輯在低壓下工作。該驅動模塊如下圖2.14所示:圖2.14PCA9685電機驅動模塊PCA9685芯片具有更強的驅動能力。并且有著過電流保護功能,當系統出現電機卡死時,可以保護電路和電機等。模塊以及各個接口如圖2.15所示:圖2.15PCA9685驅動各接口功能3仿真硬件電路設計單片機作為一種典型的嵌入式系統,本身是沒有帶開發功能的,需要借助外部工具進行燒錄程序。而尋找一種能夠模擬硬件電路工作方式的平臺是一種好的辦法。這就需要模擬仿真器,將外圍設備的功能在軟件中實現。在單片機開發上,發現Proteus與KeilC聯調可以進行全部的軟件和大多數硬件系統的調試。以Proteus仿真實驗實現系統的動態仿真時,就單片機而言該軟件有著顯著的優勢。不僅可以提高單片機系統設計效率,并且也擁有良好的靈活性方便進行各式各樣的調整和實驗。3.1Proteus軟件3.1.1軟件功能介紹Proteus軟件是應用頗為廣泛的電子線路仿真軟件,它也是目前單片機仿真軟件中較容易操作上手快可以自學的工具軟件,自軟件1989年問世至今經歷30年的發展優化,功能不斷完善,性能也越來越好,元器庫儲量越來越多,因為自身結構的特點,使用用戶也頗為龐大遍布全球,最方便的,是Proteus還可以仿真數碼管、液晶顯示器,可以仿真按容鍵、各種傳感器等等。軟件功能特點:(1)原理布圖;(2)PCB自動或人工布線;(3)SPICE電路仿真。(4)各種信號源和電路虛擬儀表;(5)普遍都支持第三方的軟件編譯和調試環境;3.1.2硬件電路設計流程打開軟件后,將出現一個仿真電路窗口,用于構思設計以及設計完畢后的仿真運行。提前進行構想完成后,在提前預想好電路大致板塊以及個元器件的編碼,根據設計需要提取Proteus元件庫中選取所需的組件,將它們放置在編輯區域中并執行電路設計,例如電路連接。設計電路之后,可以使用系統提供的電氣測試工具對電路進行電氣測試。如若在之前設計的過程中出現錯誤則會出現電氣錯誤提示,根據該報告,可以排除電氣錯誤直至電路完善。本課題設計的六足機器人控制系統電路主要由電源穩壓電路、時鐘電路、復位電路、顯示系統、超聲波感應系統、伺服直流電機等組成,硬件仿真設計總體框圖如下圖3.1所示:時鐘電路單片機STC89C52RC時鐘電路單片機STC89C52RC復位電路復位電路伺服直流電機伺服直流電機按鍵模塊按鍵模塊顯示模塊顯示模塊感應模塊感應模塊電源電路模塊電源電路模塊圖3.1仿真設計總體框圖3.2仿真硬件電路3.2.1最小系統單片機主機系統電路主要由單片機和穩壓模塊組成。工作原理為其可以不斷地讀取執行指令,然后再在寄存器中進行譯碼功能,最后通過其他的部件完成執行指令。最小系統是單片機系統中必不可少的部分,是由可以使單個芯片工作的最少設備組成的系統。STC89C52RC已經包含8KB的程序存儲器,可以輕松地構建最小的單片機系統,只需要連接電源,增加時鐘電路和復位電路即可。最小系統電路圖如圖3.2所示,仿真圖如圖3.3所示:圖3.2最小系統組成圖3.3最小系統滴電路仿真圖3.2.2時鐘電路在所有的單片機電路系統中,就算是最簡單的電路,也都是需要有一個時鐘電路,時鐘電路由晶振組成,晶振為單片機提供基本震蕩源,晶振的震蕩就好比人類心臟的跳動,單片機會檢測到震蕩,有了心跳節拍,才可以實現各種程序運行,不然若連計數都無法完成,則單片機是無法啟動的,所以在設計仿真時務必加入時鐘電路并保證時鐘的穩定,一旦受到干擾對系統是非常致命的。時鐘電路電路圖和仿真圖如下圖3.4所示:(b)圖3.4時鐘電路圖3.2.3復位電路單片機的復位主要是由RST引腳的電壓控制,當收到上升沿或者下降沿時,都會對系統進行一次復位,或者當程序或操作不正確時,可能導致系統崩潰甚至死機結果,這時便需要通過復位操作使其重新開始工作。如下圖3.5所示:(b)圖3.5復位電路圖3.2.4電源電路模塊考慮到系統中有存在著比較感性的遠件,比如電動機和繼電器等等,因此感性組件的運行將拉低系統電壓,導致了調節值偏離出相應范圍外。它的功能是為單片機的直流電源供電,把交流電源轉換為穩壓直流電源。對輸出的電壓進行整流,經過正負電源,同時獲得采樣電壓。為了接線簡單以及節省元器件,使用橋式電路將220V電壓變成整流電路要求的直流電壓,從而實現220V直流穩壓狀態。穩壓電路仿真圖如下圖3.6所示:圖3.6電源穩壓電路圖3.2.5超聲波感應電路超聲波感應裝置采用STC89C52RC單片機與相關的光電檢測設備來設計類似超聲波感應裝置,由于Proteus系統元件庫內沒有超聲波傳感模塊,也沒有類似聲波感應模塊,所以采用ADC芯片進行代替也是一個非常好的方案。ADC芯片模擬超聲波傳感器采用電阻器元件作為檢測元件的傳感器,通過電阻器元件模擬接受外部光信號轉化成電信號然后通過按鍵調節進行反饋,也同時擁有發射裝置、接收裝置和電路裝置,,所以采用替換且能達到一樣效果的超聲波傳感器,從而實現通過外界環境的改變而自動控制機器人電機的轉動。同時在仿真圖中考慮到無法實現和實際中檢測到前方信號的反饋,采取人為控制的按鍵模塊和顯示模塊進行表達實際檢測情況,通過按鍵模塊調節六足機器人前方障礙物的距離,并由顯示板塊直觀表達出來,模擬機器人在實際行走中遇到的各種信號。所以超聲波感應電路其功能模塊主要包括檢測模塊、顯示模塊以及處理模塊三類,其檢測模塊和處理模塊電路圖如下圖3.7所示,顯示屏模塊如下圖3.8所示:圖3.7信號檢測與按鍵模塊圖3.8顯示模塊仿真3.2.6電機驅動電路伺服直流電機通過電機驅動系統驅動,其中一端連接到12V外部電源,另一端接到STC89C52RC單片機的各個引腳上進行控制。通過控制電流脈沖的時間,對電機轉動的角度進行精確控制,考慮到本次課題設計的機器人電機有18個,如果在仿真圖中表示,占幅會非常大,所以未在仿真圖中全部表達,由于本次設計的機器人行走步態為三足步態,三只足部的控制方式相同,三組步態如下圖3.9所示:圖3.9三足步態相位圖在步態相同控制方式節拍相同的情形下,對六只足步分為兩組,為每只腳進行編號后,如下圖3.10所示,1、3、5足部定為A組,2、4、6足部定為B組,通過控制A、B組的步態節奏達到機器人各種模式的實現。電機驅動電路仿真如下圖3.11所示:圖3.10各足部編號示意圖圖3.11電機驅動仿真圖3.2.7仿真硬件電路如下圖3.12所示,是在Proteus軟件中仿真的完整硬件電路的示意圖。通過微控制器STC89C52RC為控制中心,選擇合適的元件而形成可執行功能的仿真硬件電路。圖3.12控制仿真電路圖4軟件設計4.1主程序設計依照提前預定好的方案設計要求,設計主程序、子程序。六足機器人控制系統上電后,首先,進行初始化,比如:定時器0、外部中斷0、等。然后,感知模塊和電機驅動模塊工作,超聲波傳感器檢測機器人周圍環境等,該程序主要完成系統初始化和各種功能的調用,檢測并處理取消中斷的指示位,并監視和顯示完成每個功能的工作過程。在這個以STC89C52RC為大腦的單片機機電控制系統中,單片機需要完成的工作是通過軟件編程將信號指令發送到每個功能模塊以執行其功能。實現一般合作并達到最終控制目的。主程序設計的基本流程是執行功能的基本步驟。當啟動后,系統自動進行初始化,包括將單片機的每個引腳端口設置為高電平并清除內部存儲器。然后啟用系統預設,按下按鈕后,系統進行識別,超聲波感應器開始探測前方的環境狀態,接受信號發送到單片機,大腦發出指令,脈沖計數器記錄電機速度,輸出在特定占空比下執行前進、后退或轉向避障等模式。主流程圖如下圖4.1所示:開始開始初始化(外部中斷、定時器0)初始化(外部中斷、定時器0)超聲波傳感器檢測超聲波傳感器檢測是否有障礙是否有障礙模式檢查模式檢查直行模式避障模式直行模式避障模式圖4.1主程序流程圖4.2中斷中斷服務功能在功能模塊的編程中占有非常重要的位置。可以通過在達到所需目標之前降低中斷功能來解決CPU使用率過高的問題。其中,超聲掃描應用于定時中斷功能,速度測量適用于外部中斷源和計時器,脈沖輸出被添加到計時器。因為每個子功能模塊都更為重要,主程序僅是進行幾個輔助調用,而關鍵部分是每個中斷服務功能的使用。在繼續特定的軟件設計之前,有必要開發STC89C52RC中斷的內容。當CPU執行某個程序時,有時會發生內部或外部緊急事件,需要CPU暫停其工作并處理緊急事件。處理事件后,返回原始中斷位置。繼續運行最初中斷的程序。此過程稱為中斷。4.2.1內部定時和外部計數中斷在機電控制系統中應用的中斷源和中斷原因如下表4.2所示:表4.2中斷源中斷源名稱中斷引起原因INT0外部中斷0引腳輸入低電平或下降沿信號INT1外部中斷1引腳輸入低電平或下降沿信號T0定時器0中斷定時計數器0計數回零溢出T1定時器1中斷定時計數器1計數回零溢出T2定時器2中斷定時計數器2計數回零溢出單片機定時器的作用:(1)可用于精確的延遲處理,比較延遲時間為1ms。(2)可用作計數器。例如,將此功能IO端口連接到時鐘源,就可以計算出有多少個脈沖信號。4.2.2中斷控制的有關寄存器CPU的打開和屏蔽中斷源以及是否可以中斷每個中斷源均由IE中斷啟用寄存器。如表4.3所示:表4.3中斷允許控制寄存器IE的位位序D7D6D5D4D3D2D1D0位標志EA--ET2ESET1EX1ET0EX0中斷使能控制寄存器IE在打開和關閉中斷中實現兩級控制。總的中斷位EA。部分程序如下:voidtimer0()interrupt1{TL0=TIMER0_MODE1_INIT_VALUE_L;///<設定定時器初值 TH0=TIMER0_MODE1_INIT_VALUE_H; timer0_irq();///<定時器0中斷處理函數timer0_irq();///<定時器0中斷處理函數}4.3子程序設計控制的子程序設計包括電機驅動程序設計、前進后退切換程序設計、避障程序設計、按鍵和顯示屏程序設計、超聲波距離傳感程序設計等等。4.3.1串口驅動子程序設計串行接口是一種可以將從CPU接收到的并行數據字符轉換為連續的串行數據流并發送它們的設備,同時可以將接收到的串行數據流轉換為數據字符的設備并行的CPU。通常執行此操作電路。保留串行端口控制器的重要性在于到時候可以通過藍牙通訊模塊接入智能手機控制機器人步態系統。4.3.2按鍵子程序設計按鍵模塊主要是用于模擬調整超聲波感知環境參數使用,按鍵模塊有距離+、距離-及手動控制電機運動功能。由于實際演示之時存在的環境條件上的難以控制的因素,所以改為手動按鈕模擬調節的形式,這樣子即安全又方便,可以在整體演示之時進行恰當的仿真演示,也不失為一個解決問題的好方案。部分程序如下:#defineKEY_ADD 1 //加#defineKEY_SUB 2 //減sbitKEYSET0=P1^5;//按鍵增sbitKEYSET1=P1^6;//按鍵減ucharKey_Scan(){ staticucharkey_up=1;//按鍵按松開標志 if(key_up&&(KEYSET0==0||KEYSET1==0)) { delayms(10);//去抖動 key_up=0; if(KEYSET0==0)return1; elseif(KEYSET1==0)return2; } elseif(KEYSET0==1&&KEYSET1==1) key_up=1; return0;//無按鍵按下} voidKey_pross(){ ucharkey;key=Key_Scan(); //按鍵掃描 if(key==KEY_ADD)set_f++; elseif(key==KEY_SUB)set_f--; }4.3.3顯示屏子程序設計顯示屏采用LCD1602顯示屏,可實現超聲波傳感器對環境的檢測數據并把數據實時反饋在LCD1602顯示屏上面,作為一個數據輸出的反饋設備,可以方便告訴人們現階段系統處于的狀態。此外也方便觀察的數據和在Proteus軟件上進行仿真調整距離,直觀的進行演示。部分程序如下:voidLCD_write_command(uchardat){ //LCD_Busy(); LCD_RS=0;//指令 LCD_RW=0;//寫入 LCD_DB=dat; delay_n40us(3); LCD_E=1;//允許 delay_n40us(13); LCD_E=0;}voidLCD_write_data(uchardat){ //LCD_Busy(); LCD_RS=1;//數據 LCD_RW=0;//寫入 LCD_DB=dat; delay_n40us(3); LCD_E=1;//允許 delay_n40us(13); LCD_E=0; }voidLCD_disp_char(ucharx,uchary,uchardat){ ucharadd; //根據顯示位置(x,y)確定顯示地址 if(y==1) //在第1行顯示 add=0x80+x; elseif(y==2) //在第2行顯示 add=0xc0+x; elseif(y==3) //在第1行顯示 add=0x90+x; elseif(y==4) //在第2行顯示 add=0xd0+x; LCD_write_command(add);//寫入需要顯示的地址 LCD_write_data(dat);//寫入需要顯示的內容}voidlcd1602_write_String(ucharx,uchary,uchar*p){ ucharadd; //根據顯示位置(x,y)確定顯示地址 if(y==1) //在第1行顯示 add=0x80+x; elseif(y==2) //在第2行顯示 add=0xc0+x; elseif(y==3) //在第3行顯示 add=0x90+x; elseif(y==4) add=0xd0+x; //在第4行顯示 LCD_write_command(add);//寫入需要顯示的地址 while(*p!='\0') //寫入需要顯示的內容,直到字符串全部顯示完成 { LCD_write_data(*p++); }}4.4軟件調試調試是一整個六足機器人控制系統設計中的最關鍵環節。首先,先進行硬件調試,各個元件安裝、線路的連接等是否無誤;然后進行軟件調試,該程序主要完成系統初始化和各種功能指令的調用與運行,檢測并處理取消中斷的指示位,并監視和顯示完成每個功能的工作過程。在以STC89C52RC為核心的單片機控制系統中,單片機需要完成的工作是通過軟件編程,信號指令被賦予每個功能模塊以執行其功能,實現整體協作并達到最終控制目標。主要的程序設計的基本思想流程就是功能實現的基本銜接步驟。程序編寫完成之后,我們要在Keil平臺上編譯。首先,對各個單獨的子程序進行編譯,每個子程序沒有出現語法錯誤之后,再對各個模塊合并進行編譯,直至沒有錯誤則為編譯成功。完成實物仿真。常見的軟件調試錯誤如下:(1)使用中斷的時候,注意中斷的優先級別。(2)在中斷開始時,通常必須首先保護站點,然后再保護處理程序以防中斷,返回后,需要恢復站點以確保站點上的數據不被破壞。(3)在使用循環的時候,要加上時間限制,否則很可能會出現無條件死循環。(4)在調試中,沒有開啟看門狗。導致有些問題被掩蓋,不利于調試。本設計中出現了引腳定義錯誤這種低級錯誤,還出現了死循環的問題。整個系統的設計過程中,硬件和軟件的分別調試功夫只占三分之一,軟件與硬件的綜合調試才是設計成功與否的關鍵。所以,為了后面綜合調試故障排除的降低,前面的各個模塊的硬件和軟件單獨調試有必要謹慎對待。單個模塊的聯合調試成功并不意味著各個模塊合并在一起也能順利運行。而且Keil的調試只能檢測基本的語法的編譯錯誤,邏輯錯誤等只能與硬件聯合調試發現問題。5結論六足仿生機器人的控制系統采用STC89C52RC單片機為控制器,完成了六足機器人行走的基本功能,通過直流伺服電機的旋轉,利用脈沖對電機進行角度的精確控制,控制電機正反轉的方向實現前進后退,從而實現機器人各步態的穩定執行。仿真模擬通過按鍵和顯示屏的配合,調整光電傳感器的數據以模擬超聲波探測到的距離,以在顯示屏中直觀體現,并完成仿真的演示。有地形適應性強,肢體冗余度高,容錯性強等突出優點,具有重要的研究價值。由于其控制的復雜性,控制系統的研究是仿生六足機器人的重點和難點。六足仿生機器人項目的長期目標是開發一種結構緊湊,易于控制,地形適應性強的小腳自主移動機器人平臺。在了解六足機器人的行走任務模式和行走環境的檢測后,設計并實現了具有高度安全性,可靠性和實時安全性高并且容易控制的成本低廉的六足機器人運動控制系統。可以實現機器人正常的行走和步態間自由切換控制任務的要求。目前,這個六足機器人控制系統設計尚未完全成熟,例如增加多傳感器的檢測識別,以達到機器人的各種動作的實現,因為尚未在真實的硬件環境中測試系統的異常故障處理機制,所以可以實現對所有仿生機器人電機的同步控制。一旦機器人硬件完全完成,就需要進行進一步的調整和故障異常處理測試。這些問題都是未來需要繼續去研究和繼續探索。參考文獻[1]程院蓮.淺析步進電機、伺服電機和舵機的區別[J].輕工科技,2020,36(01):36-37+62.[2]陳文鑫.基于51單片機的多功能智能小車的探討[J].現代信息科技,2019,3(23):25-29.[3]喬凌霄,郭超維,劉源濤,溫帥,孟朝霞.基于超聲傳感器的避障小車系統設計[J].運城學院學報,2019,37(03):12-15.[4]徐維超.小型六足機器人運動控制系統設計與實現[D].華中科技大學,2019.[5]趙旭磊,耿召里,李小華.智能小車避障算法和速度調節算法研究[J].遼寧科技大學學報,2018,41(03):212-217.[6]黃嘉斌,黃海鵬.多功能全地形智能小車設計[J].電工技術,2018(10):88-90.[7]李俊偉.自主巡邏機器人行進避障及火災預警研究[D].內蒙古工業大學,2017.[8]李冠湛,黃海軍.自主移動機器人運動控制系統的設計與實現[J].電子世界,2016(21):172-173.[9]李程.六足機器人控制系統設計[D].燕山大學,2016.[10]莊嚴,宋鳴,張劭鳳,李超.基于51單片機的六足機器人控制系統設計與制作[J].價值工程,2013,32(30):51-53.[11]劉德高.六足機器人運動控制系統設計與實現[D].哈爾濱工業大學,2013.[12]吳明煜.基于伺服電機精確定位系統的研制[D].南京師范大學,2013.[13]徐崇福.六足機器人運動規劃與控制系統設計[D].哈爾濱理工大學,2013.[14]徐昭.基于AT89C52的多功能實驗板的開發[D].吉林大學,2012.[15]李進吉.六足機器人結構參數優化與控制系統設計[D].哈爾濱工業大學,2012.[16]楊華棟.基于單片機家用機器人的自主移動控制系統研究[D].沈陽理工大學,2011.[17]羅孝龍,羅慶生,韓寶玲,趙小川.仿生六足機器人多電機控制系統的研究與設計[J].計算機測量與控制,2008(04):491-493.[18]馬剛,李向倉.用Proteus與Keil整合構建單片機虛擬仿真平臺[J].現代電子技術,2006(24):129-131.謝辭為期一學期的畢業設計馬上就要結束了,意味著我在北京理工大學珠海學院的大學生涯也即將結束。在畢業設計的這段時間里,我得到了很大的自身提高,其中有包含了對單片機控制系統知識的理解、還有對Proteus仿真軟件的認識等。本次畢業設計是在李春導師悉心指導下完成的,畢業設計期間面臨2020年嚴重的疫情,小組成員分隔多地,交流受阻,老師仍然負責地為我們開會,指導我們畢業設計的出現的困難及問題。同時也給我提供了大量的幫助和建議,設計過程中遇到了問題,都耐心地講解,論文的字里行間都凝聚了老師大量心血和汗水,老師嚴謹求實的治學態度,誨人不倦的品德也將時刻的激勵著我不斷努力前進,在此,衷心感謝李春老師的悉心教導。在這次學習的過程中,也得到了許多同學和朋友的耐心幫助,常常抽空為我解答一些疑惑,在此誠摯地表示謝意。最后,特別感謝母校對我的悉心栽培,致以最崇高的敬禮!祝愿北京理工大學珠海學院前程似錦!祝愿所有的老師身體健康,萬事順意!附錄附錄1程序源代碼六足機器人控制系統主程序:#include"reg52.h"#include"servo.h"#include"adc.h"#include"lcd.h"#defineKEY_ADD 1 //加#defineKEY_SUB 2 //減sbitKEYSET0=P1^5;//按鍵增sbitKEYSET1=P1^6;//按鍵減ucharadval;uchardist[3];ucharset_f=120;uchari; voiddelayms(uintx){ uinty,z; for(z=x;z>0;z--) for(y=110;y>0;y--);}ucharKey_Scan(){ staticucharkey_up=1;//按鍵按松開標志 if(key_up&&(KEYSET0==0||KEYSET1==0)) { delayms(10);//去抖動 key_up=0; if(KEYSET0==0)return1; elseif(KEYSET1==0)return2; } elseif(KEYSET0==1&&KEYSET1==1) key_up=1; return0;//無按鍵按下} voidKey_pross(){ ucharkey;key=Key_Scan(); //按鍵掃描 if(key==KEY_ADD)set_f++; elseif(key==KEY_SUB)set_f--; }voidTIME0_Init(){ TMOD|=0X01; TH0=(65535-50000)/256; TH0=(65535-50000)%256; ET0=1; TR0=1; EA=1;}voidTimer()interrupt1{ TH0=(65535-50000)/256; TH0=(65535-50000)%256; Key_pross(); lcd1602_write_String(0,1,"Setdist:"); lcd1602_write_String(0,2,"Actdist:"); adval=ADC0832_read(0); dist[0]=ASCII[adval/100]; dist[1]=ASCII[adval%100/10]; dist[2]=ASCII[adval%10]; lcd1602_write_String(9,1,dist); LCD_disp_char(9,2,ASCII[set_f/100]); LCD_disp_char(10,2,ASCII[set_f%100/10]); LCD_disp_char(11,2,ASCII[set_f%100%10]); }intmain(){ LCD_init(); TIME0_Init(); pca_set_freq(); pca_set_pwm(0,80); //0 pca_set_pwm(1,80); //0 pca_set_pwm(2,80); //0 pca_set_pwm(3,80); //0 pca_set_pwm(4,80); //0 pca_set_pwm(5,80); //0 delayms(500); while(1) { if(set_f>adval) { //B組電機 pca_set_pwm(4,93);//B組2號電機正旋轉30° pca_set_pwm(5,93);//B組3號電機正旋轉30° pca_set_pwm(3,55);//B組1號電機反轉旋轉36° delayms(500); pca_set_pwm(5,80);//B組2號電機反轉旋轉30° pca_set_pwm(4,80);//B組3號電機反轉旋轉30° delayms(500); //A組電機 pca_set_pwm(1,93);//A組2號電機正旋轉30° pca_set_pwm(2,93);//A組3號電機正旋轉30° pca_set_pwm(0,55);//A組1號電機反轉旋轉36° delayms(500); //AB組電機同時旋轉36度 pca_set_pwm(0,80);//B組1號電機反轉旋轉36° pca_set_pwm(3,80);//B組1號電機反轉旋轉36° delayms(500); pca_set_pwm(2,80);//A組3號電機反轉旋轉30° pca_set_pwm(1,80);//A組2號電機反轉旋轉30° delayms(500); } elseif(set_f==adval) { for(i=0;i<3;i++) { pca_set_pwm(2,93);//A組2號電機正轉旋轉30° pca_set_pwm(1,93);//A組2號電機反轉旋轉30° pca_set_pwm(0,93);//A組2號電機反轉旋轉30° delayms(500); pca_set_pwm(2,80);//A組3號電機反轉旋轉30° pca_set_pwm(1,80);//A組2號電機反轉旋轉30° pca_set_pwm(4,93);//B組2號電機正旋轉30° delayms(500); pca_set_pwm(0,80);//A組1號電機反轉旋轉30° pca_set_pwm(4,80);//B組2號電機反轉旋轉30° delayms(500); } } else { pca_set_pwm(4,93);//B組2號電機正轉旋轉30° pca_set_pwm(5,93);//B組3號電機正轉旋轉30° pca_set_pwm(3,55);//A組2號電機反轉旋轉36° delayms(500); pca_set_pwm(5,80);//B組3號電機反轉旋轉30° pca_set_pwm(4,80);//B組2號電機反轉旋轉30° pca_set_pwm(1,93);//A組3號電機正轉旋轉30° pca_set_pwm(2,93);//A組3號電機正轉旋轉30° pca_set_pwm(0,55);//A組3號電機反轉旋轉36° delayms(500); pca_set_pwm(0,80);//A組1號電機正轉旋轉36° pca_set_pwm(3,80);//B組1號電機反轉旋轉36° pca_set_pwm(2,80);//A組3號電機反轉旋轉30° pca_set_pwm(1,80);//A組3號電機反轉旋轉30° } }}ADC0832子程序:#ifndef_ADC_H_#define_ADC_H_#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitADCLK=P1^0;//時鐘接口sbitADDI=P1^1;//數據輸入接口sbitADDO=P1^1;//數據輸出接口sbitADCS=P1^2;//使能接口voidADC0832_start(); //AD轉換初始化ucharADC0832_read(uintCH);//CH=0選擇通道ch0,=1選擇ch1進行AD轉換voidADC0832_start(){ ADCS=1; //重置ADC芯片 ADCS=0; //開啟轉化 ADDI=1; ADCLK=1; ADCLK=0;//第1個下降沿DI=1}ucharADC0832_read(uintCH){ uchartemp; uinti; ADC0832_start();//發送起始信號 if(CH==0) //選擇通道0 { ADDI=1; ADCLK=1; ADCLK=0;//第2個下降沿DI=1 ADDI=0; ADCLK=1; ADCLK=0;//第3個下降沿DI=0 } else //否則,選擇通道1 { ADDI=1; ADCLK=1; ADCLK=0;//第2個下降沿DI=1 ADDI=1; ADCLK=1; ADCLK=0;//第3個下降沿DI=1 } ADCLK=1; ADCLK=0; for(i=0;i<8;i++) { temp=temp<<1;//每讀取一位后將數據往左移動一位,最右端補0 ADDI=1; //拉高數據信號線 ADCLK=1;//拉高時鐘信號線 if(ADDO)//如果讀取數據為1,將數據寫入緩存 temp+=0x01; ADCLK=0; //拉低時鐘信號線,產生下降沿 } returntemp;}顯示屏子程序:#ifndef_LCD_H#define_LCD_H#include<reg52.h>#defineucharunsignedchar//宏定義#defineuintunsignedint#defineLCD_DBP0sbitLCD_RS=P2^0;sbitLCD_RW=P2^1;sbitLCD_E=P2^2;sbitPSB=P3^2;voidLCD_init(); //初始化函數voidLCD_write_command(ucharcommand); //寫指令函數voidLCD_write_data(uchardat); //寫數據函數voidLCD_disp_char(ucharx,uchary,uchardat);//顯示一個字符,X(0-16),y(1-2)。voidlcd1602_write_String(ucharx,uchary,uchar*p);//顯示一個字符串,X(0-16),y(1-2)。voidlcd1602_write_pic(ucharadd,uchar*pic_num);//寫入自定義字符voiddelay_n40us(uintn); //延時函數ucharcodepic[8]={0x00,0x0e,0x0a,0x0e,0x00,0x00,0x00,0x00};//自定義“℃”字符ucharcodezeng[8]={0x04,0x0a,0x15,0x04,0x04,0x04,0x04,0x00};//自定義“↑”字符ucharcodejian[8]={0x00,0x04,0x04,0x04,0x04,0x15,0x0a,0x04};//自定義“↓”字符ucharcodeASCII[]={'0','1','2','3','4','5','6','7','8','9',':','/','.',''};//LCD1602顯示的字符數組voidLCD_init(){ LCD_write_command(0x38);//設置8位格式,2行,5x7 LCD_write_command(0x38);//設置8位格式,2行,5x7 LCD_write_command(0x38);//設置8位格式,2行,5x7 LCD_write_command(0x0c);//整體顯示,關光標,不閃爍 LCD_write_command(0x06);//設定輸入方式,增量不移位 LCD_write_command(0x01);//清除屏幕顯示 delay_n40us(100);}voidLCD_write_command(uchardat){ LCD_RS=0;//指令 LCD_RW=0;//寫入 LCD_DB=dat; delay_n40us(3); LCD_E=1;//允許 delay_n40us(13); LCD_E=0;}voidLCD_write_data(uchardat){ LCD_RS=1;//數據 LCD_RW=0;//寫入 LCD_DB=dat; delay_n40us(3); LCD_E=1;//允許 delay_n40us(13); LCD_E=0; }voidLCD_disp_char(ucharx,uchary,uchardat){ ucharadd; if(y==1) //在第1行顯示 add=0x80+x; elseif(y==2) //在第2行顯示 add=0xc0+x; elseif(y==3) //在第1行顯示 add=0x90+x; elseif(y==4) //在第2行顯示 add=0xd0+x; LCD_write_command(add);//寫入需要顯示的地址 LCD_write_data(dat);//寫入需要顯示的內容}voidlcd1602_write_String(ucharx,uchary,uchar*p){ ucharadd; if(y==1) //在第1行顯示 add=0x80+x; elseif(y==2) //在第2行顯示 add=0xc0+x; elseif(y==3) //在第3行顯示 add=0x90+x; elseif(y==4) add=0xd0+x; //在第4行顯示 LCD_write_command(add);//寫入需要顯示的地址 while(*p!='\0') //寫入需要顯示的內容,直到字符串全部顯示完成 { LCD_write_data(*p++); }}voidlcd1602_write_pic(ucharadd,uchar*pic_num){ unsignedchari; add=add<<3; for(i=0;i<8;i++) { LCD_write_command(0x40|add+i); LCD_write_data(*pic_num++); }}voiddelay_n40us(uintn){ uinti; ucharj; for(i=n;i>0;i--) for(j=0;j<2;j++);}電機驅動子程序:#ifndef_SERVO_H#define_SERVO_H#include"reg52.h"#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitSCL=P1^3;//定義時鐘引腳sbitSDA=P1^4;//定義數據引腳#definePCA9685_adrr0x80//1+A5+A4+A3+A2+A1+A0+w/r#definePCA9685_SUBADR10x2#definePCA9685_SUBADR20x3#definePCA9685_SUBADR30x4#definePCA9685_MODE10x0#definePCA9685_MODE20x1#definePCA9685_PRESCALE0xFE#definepwm0_ON_L0x6#definepwm0_ON_H0x7#definepwm0_OFF_L0x8#definepwm0_OFF_H0x9#defineALLpwm_ON_L0xFA#defineALLpwm_ON_H0xFB#defineALLpwm_OFF_L0xFC#defineALLpwm_OFF_H0xFDvoidiic_delay()//延時5us{_nop_();_nop_();_nop_();_nop_();_nop_();}voidiic_start()//scl高電平區間,sda一個下降沿啟動信號{SDA=1;iic_delay();SCL=1;iic_delay();SDA=0;iic_delay();SCL=0;iic_delay();}voidiic_stop()//scl在高電平區間,sda一個上升沿信號{SDA=0;iic_delay();SCL=1;iic_delay();SDA=1;iic_delay();}voidiic_wait_ack()//在scl高位時,從機拉低sda引腳表示應答{unsignedchari=0;SCL=1;iic_delay();while((SDA==1)&&(i<255)){i++;}SCL=0;iic_delay();}voidiic_init()//初始化IIC通訊引腳{SCL=1;iic_delay();SDA=1;iic_delay();}voidiic_send_ack(bitiic_ack)//接受完成之后,發送應答位,0應答繼續發送,1不應答停止發送{SDA=iic_ack;SCL=1;iic_delay();SCL=0;iic_delay();}voidiic_write_byte(unsignedchariic_byte){unsignedchari=0;for(i=0;i<8;i++){SCL=0;iic_delay();SDA=iic_byte&0X80;iic_byte=iic_byte<<1;iic_delay();SCL=1;iic_delay();}SCL=0;iic_delay();SDA=1;iic_wait_ack();}voidiic_write(unsignedcharslave_addr,unsignedchariic_addr,unsignedchariic_byte){iic_init();iic_start();iic_write_byte(slave_addr);iic_write_byte(iic_addr);iic_write_byte(iic_byte);iic_stop();}uchariic_read_byte()//讀字節,先讀高位,左移{unsignedchari=0;unsignedchariic_byte=0;SCL=0;iic_delay();SDA

溫馨提示

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

評論

0/150

提交評論