04-基于單片機的自行車碼表設計_第1頁
04-基于單片機的自行車碼表設計_第2頁
04-基于單片機的自行車碼表設計_第3頁
04-基于單片機的自行車碼表設計_第4頁
04-基于單片機的自行車碼表設計_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本科畢業(yè)設計題目:基于單片機的自行車碼表設計姓名:學號:專業(yè):班級:學院:指導教師:完成時間:2021年6月

畢業(yè)設計誠信聲明書本畢業(yè)設計是在導師指導下獨立研究、寫作的成果,文中所引用他人的無論以何種方式發(fā)布的文字、研究成果,均在文中加以說明;有關教師、同學和其他人員對本文的寫作、修訂提出過并為我在文中加以采納的意見、建議,均已在我的致謝辭中加以說明并深致謝意。學生(簽字): 時間: 年 月 日指導教師已閱(簽字): 時間: 年 月 日畢業(yè)設計版權使用授權書本畢業(yè)設計是在導師指導下獨立完成的。本人同意學校保留或向國家有關部門或機構送交設計的印刷件和電子版,允許設計被查閱和借閱;本人授權山東協(xié)和學院可以將本設計的全部或部分內容編入有關數(shù)據(jù)庫進行檢索,可以采用影印、縮印或其他復制手段保存和匯編。學生(簽字): 時間: 年 月 日指導教師已閱(簽字): 時間: 年 月 日目錄目錄TOC\o"1-3"\h\u摘要 引言1.1研究現(xiàn)狀愛好騎行的騎行者大部分都有一款輔助工具,就是自行車碼表,騎行者們用它來記錄自行車的實時速度,騎行里程,最快速度,騎行時間,更高檔一些的還會有心率功能,踏頻記錄,當然這種碼表的價格也是非常高的,還有一些帶有踏頻記錄的功能能幫助騎手進行自行車運動訓練,此次設計針對市場上昂貴的碼表價格設計一款成本相對廉價性價比較高的產(chǎn)品,以此用來供預算有限的騎行者選擇。對于碼表來說,功能已經(jīng)越來越強大如今的碼表在便攜性、外觀的時尚性、功能的多樣性以及長續(xù)航等方面提出了更高的要求,本設計在控制成本的情況下盡量滿足上述要求。1.2研究目的及意義自行車碼表是一款功能豐富的輔助性工具,在暢行綠色環(huán)保出行的今天,以自行車為首的環(huán)保代步工具是其他代步工具所不能比較的,因此對自行車設計一款輔助工具是有必要的,因此自行車碼表的豐富功能就能滿足這種需求,碼表的豐富功能能夠使我們實時了解自己的運動狀態(tài),能夠讓運動者更好更合理的利用碼表上的數(shù)據(jù)來提醒騎行者騎行的路程或者騎行的時間等信息以供騎行者參考。目前市面上的碼表主要有兩個種類,一是包括傳統(tǒng)的有線或無線自行車碼表,其工作原理,通過手動設定,車輪的周長參數(shù),利用固定于前閘車架位置的感應器,及固定在輔條上的永久磁鐵來計算車輪的轉動頻率,碼表內置的芯片可以根據(jù)以的上數(shù)據(jù)計算并顯示即時速度。另一種是GPS碼表,除了包括傳統(tǒng)支架的速度測量以外,還提供更多的專業(yè)運動數(shù)據(jù),通過衛(wèi)星定位進行操作,高端GPS碼表會配置ant+協(xié)議的感應器和磁鐵等傳統(tǒng)測量配件,測量結果更準確并減少信號擾動對數(shù)據(jù)收集造成。碼表的選擇對于一個熱愛騎行的騎手來說是非常重要的,現(xiàn)在市面上的大部分碼表受到類似于GPS、踏頻功能、心率測量等功能的擴展價格也是非常高以西格瑪碼表為例子價格在300元到800元不等價格波動非常大。在考慮到碼表的續(xù)航時間功耗等參數(shù)后對于預算有限的騎行愛好者非常重要,因此對于高續(xù)航的騎行愛好者來說有一款有合理價位區(qū)間的碼表有非常重要的意義。1.3研究內容把霍爾傳感器放置到前輪胎的位置上,將前車輪輻條上安裝永磁體以記錄車輪轉動的頻率,前車輪轉動時永磁體跟隨車輪轉動,轉動的永磁體可以看作是一點頻率的脈沖信號,脈沖信號被固定的霍爾傳感器所捕獲,此時的霍爾傳感器就可以將被測量的信號傳給單片機做數(shù)據(jù)處理。根據(jù)對脈沖信號的計數(shù)與處理可以測出自行車的速度與里程等參數(shù)。并由此計算出均速、路程等量。本設計采用集成霍爾傳感器A3144,它具有頻率響應快,抗干擾能力強的特點。主要完成以下任務:1.選用合適控制芯片滿足系統(tǒng)控制要求;2.將處理完成的信號轉換為數(shù)字顯示到LCD顯示屏上供騎行者觀看;3.通過LCD屏幕顯示日期、溫度、速度、里程等參數(shù)供騎行者參考;4.控制測量精度在規(guī)定范圍。2系統(tǒng)總體設計與選型2.1主控模塊論證根據(jù)上述設計的要求,碼表控制系統(tǒng)屬于輸入?yún)?shù)設置比較少的系統(tǒng),據(jù)此考慮價格與性能擬定了以下兩個方案:方案一采用STM32系列芯片,實物如圖2-1所示,庫函數(shù)豐富、處理速度快、I/O口豐富等特點。性能優(yōu)越,適用于復雜的項目中,能夠發(fā)揮其高效強大的性能,綜合來說STM32系列單片機無論在處理速度還是外部接口等方面擁有較大優(yōu)勢。圖2-1STM32系列芯片方案二采用AT89C52系列單片機作為主控芯片,AT89C52系列單片機是市面上常用的單片機,是一種低功耗芯片,這種低功耗特性非常適合本次的高續(xù)航設計,32個的外部雙向輸入\輸出串口,擴展模塊豐富也符合本次設計的霍爾傳感器等外接設備,有8K的可編程Flash存儲器,完全符合本次編程的需求REF_Ref23903\r\h[2]。圖2-2AT89C52芯片綜合考慮過后,STM32雖然運算速度更快,功能更強大,但是對于本設計有太多多余的資源,并且相對AT89C52單片機開發(fā)難度相對較大,所以綜合比較后選擇了方案二,既滿足設計的實際需要,也不會過多地浪費資源、投入不必要的成本,大大降低了開發(fā)難度節(jié)約了開發(fā)時間,增加了開發(fā)的速度。2.2霍爾模塊論證把開關型霍爾傳感器按照固定的位置放置,此時自行車的輪條可以看作一個磁性轉盤再將永久磁鐵安裝在自行車輪條上,車輪每轉動一圈可以認為是一次脈沖,霍爾傳感器收集到的脈沖信號交給單片機做數(shù)據(jù)處理,在永久磁體上焊裝一個固定的鐵框架用以加固磁體的穩(wěn)定性,避免自行車行駛在復雜路面時引起的劇烈晃動將磁體震落或脫離磁體固定的位置避免磁體因位置移動引起霍爾傳感器數(shù)據(jù)收集不準確,影響騎行者對行駛數(shù)據(jù)的錯誤判斷REF_Ref4302\r\h[6]。因此在霍爾傳感器選擇的過程中要充分考慮到自行車路面的復雜性和傳感器與單片機連接的穩(wěn)定性,同時還要考慮傳感器的測量精度,因為此方案面對的是追求性價比的騎行者因此還要考慮此霍爾傳感器合理的價格區(qū)間,綜合上述幾個條件目前給出兩種霍爾傳感器的方案選擇條件供選擇。方案一采用霍爾元件傳感器即霍爾片,霍爾片一般分為貼片型和直插型。貼片型的霍爾片型號比較多有單極、雙極鎖存和線性等,貼片型的霍爾片用途比較窄,因此選擇直插型霍爾片?;魻柶捏w積小,安裝靈活方便比較符合對于此次設計的需求,可用于測速,且與普通的磁鋼片配套使用,價格便宜一般為2.5~5元REF_Ref4498\r\h[18]。方案二采用霍爾傳感器,選型號為CHV-25P/10的霍爾傳感器。這種類型的霍爾傳感器體積比較大,在電焊機,工業(yè)控制以及伺服電機等大型器械設備應用廣泛,在對于這次的設計的便攜性不太符合,價格一般為30~130元之間不等。綜上考慮,選擇方案一直插型霍爾傳感器,方案二所用傳感器價格比較昂貴并且應用方向偏大型的器械設備,在對比方案一之后選擇便攜性更高應用更靈活價格較低的方案一,選擇A3144EUA直插型霍爾傳感器,實物如圖2-4所示。圖2-3A3144型霍爾傳感器2.3電源模塊論證電源模塊作為單片機的能量來源十分重要,因此要選擇合理的電源模塊為單片機供電。方案一采用鋰電池作為電源模塊,鋰電池是一種可以循環(huán)充放電的以鋰合金為負極材料的電池,能量密度比較大,添加電壓穩(wěn)定模塊降低高電壓電流對單片機造成傷害。該方案實施成本非常高并且需要加入復雜的降低電壓電流模塊,現(xiàn)在常用的智能手機大多采用鋰電池供電,但是很明顯該方案的高昂的價格與復雜的模塊不太符合我們對于低成本的考慮。方案二采用干電池串并聯(lián)達到5V作為電源模塊為單片機供電。干電池價格低廉應用范圍廣泛,該方案實施比較簡單,因此不用搭建外接電路降低電源電壓,干電池可回收利用,現(xiàn)階段干電池技術比較成熟,安全隱患小。對比這兩種電源的解決方案,干電池在價格還是購買的方便性都比鋰電池要高,盡管要考慮到續(xù)航等問題上,但還是選擇價格相對便宜的干電池為單片機供電。2.4顯示模塊論證方案一采用8段LED數(shù)碼管作為顯示模塊顯示參數(shù)。數(shù)碼管顯示器件價格方面會便宜一些,但是數(shù)碼管的功耗比較大、編寫程序時相對麻煩,工作量大,本次程序編寫在追求優(yōu)良的顯示效果的同時也在追求編程的方便性與快捷性。方案二采用LCD1602液晶顯示器作為顯示模塊核心。LCD顯示器工作原理比較簡單,編程速度較為方便和快捷,LCD1602所消耗的功耗比較少節(jié)能又環(huán)保符合今天時代節(jié)能環(huán)保的發(fā)展主題,對于本次設計也能夠提供優(yōu)良的顯示效果,能夠滿足對該設計的任務。綜上所述,采用性價比較高且成本更低的方案二。一般LCD1602分為帶背光與無背光兩種,兩者在應用中差別不大。

3自行車碼表的硬件設計3.1總體設計思路此系統(tǒng)以AT89C52單片機為核心,包括霍爾傳感器、LCD顯示屏、按鍵電路、時鐘芯片,可以實現(xiàn)信息顯示和報警功能。由霍爾傳感器接收安裝在自行車輪輻條上的永磁體接受到的脈沖信號,該脈沖信號經(jīng)過放大傳送給霍爾傳感器接收,霍爾傳感器接收到的脈沖信號交給單片機做數(shù)據(jù)處理,其中單片機和霍爾傳感器由通過過壓保護電路的電源供電,該電源由串聯(lián)電池組組成。時鐘芯片提供單片機振蕩頻率,時鐘芯片一般由2個20pF的電容以及石英晶體振蕩器組成,單片機提供外接按鍵供騎行者設置碼表的參數(shù)功能,單片機外接一個低功耗的LCD顯示屏用以顯示設置的參數(shù)和時間等重要信息。另外單片機外接一個報警功能,當騎行者使用自行車在運動的過程中,難免會有速度過快的情況,當自行車運動速度過快,為避免引發(fā)交通事故增加報警功能提醒騎行者。圖3-1總體框圖以AT89C52單片機為核心,外接霍爾傳感器模塊根據(jù)實際情況測量并顯示自行車行駛過程中的各項參數(shù),包括行駛時間、當前行駛里程、實時速度等,各參數(shù)顯示在LCD屏幕上。本設計在車輪運行時才進行時間計算,具有行駛時間準確性,且實用性高。當自行車開始運動時在自行車輻條上的永久磁鐵提供給自行車車架上固定的霍爾傳感器磁場,當霍爾傳感器在磁場在穿過時會引起霍爾傳感器內部半導體的電動勢的變化,由此產(chǎn)生了一次脈沖信號,此信號在經(jīng)過霍爾傳感器脈沖放大后交給單片機做數(shù)字信號處理,此時處理的是數(shù)字信號,因此此數(shù)字信號要經(jīng)過BCD編碼之后才能用LCD1602顯示芯片顯示出來,當單片機在單位的時間內收到的脈沖信號過多時,此刻說明自行車的速度過快,單片機就會針對過快的騎行速度向蜂鳴器發(fā)送信號提醒騎行者自行車速度過快。3.2主控電路3.2.1AT89C52單片機AT89C52單片機以低電壓、高性能有著廣泛的的應用,本次設計采用AT89C52單片機做主控芯片具體功能如表3-1所示。表3-1AT89C52功能特性標準MCS-52內核和指令系統(tǒng)片內8kROM(可擴充64kB外部存儲器)32個雙向I/O口256x8bit內部RAM(可擴充64kB外部存儲器)3個16位可編程定時/計數(shù)器時鐘頻率3.5-12/24/33MHz向上或向下定時計數(shù)器改進型快速編程脈沖算法6個中斷源5.0V工作電壓全雙工串行通信口布爾處理器幀錯誤偵測4層優(yōu)先級中斷結構自動地址識別兼容TTL和CMOS邏輯電平空閑和掉電節(jié)省模式PDIP(40)和PLCC(44)封裝形式3.2.2最小系統(tǒng)單片機最小系統(tǒng)或者稱為最小應用系統(tǒng),最小系統(tǒng)是用最少的元器件使單片機可以工作。要使單片機可以正常工作少不了三個條件:供電來源、晶振和復位電路。上述三個條件是單片機必不可少的三個條件否則單片機就沒辦法正常工作了。下圖3-2是一個單片機的最小系統(tǒng),在這個圖上有6個外接電路和元器件使單片機工作分別有18腳和19腳并聯(lián)在一起的晶振,與晶振并聯(lián)在一起的是兩個20uF的電容,晶振作為驅動單片機的模塊之一非常重要因為晶振要為單片機提供頻率來源,單片機若沒頻率來源是無法正常工作的,所以晶振模塊對于單片機來說非常重要。9引腳是單片機的復位引腳,系統(tǒng)開啟時復位會是高電平狀態(tài),但此時的單片機處于不穩(wěn)定狀態(tài)需要上電復位至單片機電壓穩(wěn)定,在下圖3-2我們觀察此復位電路由電容C和電阻R構成,高電平的持續(xù)時間可以由電路的RC值決定,一般來說RC組合要在RST引腳上產(chǎn)生不少于兩個機械周期的高電平。在30和31引腳接入5V的電源為單片機供電,這樣單片機就構成了一個最小系統(tǒng),其中晶振頻率是固定的,暫時不可調節(jié)。圖3-2最小系統(tǒng)3.3測速模塊設計霍爾傳感器是由霍爾效應的原理來制作的,當電流垂直外磁場并且通過半導體,這時自由電荷發(fā)生偏轉,垂直于電路和磁場的方向會產(chǎn)生附加電場,從而半導體兩端產(chǎn)生電勢差。這就是霍爾效應,此次設計就是通過固定永久磁鐵霍爾傳感器經(jīng)過永久磁鐵產(chǎn)生的電勢差來進行測量脈沖的,因此根據(jù)霍爾效應制作的霍爾傳感器會有誤差,測量精度等問題,霍爾傳感器的價格也要考慮,綜合來看用以下型號的霍爾傳感器比較合適。本次設計采用A3144型霍爾傳感器該傳感器的產(chǎn)品特點:體積小、靈敏度高、精確度高、可靠性高、可和各種邏輯電路直接接口等。表3-2A3144型霍爾傳感器工作參數(shù)電源電壓工作范圍4.5V-24V輸出反向擊穿電壓Vce50V輸出低電平電流IOL50mA工作環(huán)境溫度 TAE檔:-20~85℃,L檔:-40~150℃貯存溫度范圍TS-65~150 ℃此次設計要面對的外部環(huán)境是自行車騎行者們所面對的外界環(huán)境,因此它的工作溫度環(huán)境完全夠用,典型的應用場合以電動機和風機控制,轉速計以及流量傳感等為主,所以此型號傳感器應用范圍廣泛。綜上所屬此款傳感器可以無壓力的應用在本次設計中。測量模塊的就是對霍爾傳感器測量輻條上的永久磁體進行分析測量,自行車的車輪每轉動一圈可以看作一個周期根據(jù)這個周期的時間以及自行車車輪的周長計算公式不難算出自行車在這個周期內走過的路程。目前市場上常用的自行車車輪直徑規(guī)格由22英寸、24英寸、26英寸和28英寸,所以本設計在計算車輪直徑時會優(yōu)先考慮計算這四種規(guī)格的車輪直徑。以24英寸的車輪直徑為例相當于0.61米,利用圓周計算公式C=Rπ可以計算出車輪的周長約為1.9米,我們所用的霍爾傳感器相當于一塊集成芯片。

它結合了采樣和放大功能一體。首先我們把永磁體放在自行車的輻條上,而霍爾元件就放在與其水平的固定轉軸上,當我們完成安裝后,轉動自行車的轉軸,永久磁鐵也就跟著一起旋轉,永磁體用螺絲固定住以免自行車在經(jīng)過復雜的山地,坡道等路面時產(chǎn)生劇烈晃動,將永磁體震落導致無法霍爾傳感器無法測量,因此加一個螺絲固定是必要的,此時的永磁體為了方便可以安裝兩個,一個代表高電平另外一個代表低電平,也就是霍爾傳感器在自行車車輪旋轉一周之內被永久磁鐵改變了兩次磁場強度,這樣一圈之內霍爾傳感器將輸出兩個脈沖,這樣每過100米霍爾傳感器會有大概52個脈沖,單片機這52個脈沖進行計數(shù)所計算得來的數(shù)據(jù)交給單片機分析并顯示在LCD顯示屏上就可以判斷我們走過的里程數(shù)。單片機在計算的過程中由于是脈沖數(shù)據(jù)也就是數(shù)字信號因此必須要對數(shù)字信號進行BCD編碼才能將結果輸入到顯示模塊供騎行者參考。下圖3-3為霍爾傳感器在單片機中的連接。圖3-3A3144型霍爾傳感器3.4時鐘模塊設計3.4.1DS1302時鐘芯片DS1302是由美國DALLAS公司推出的一款低功耗實時時鐘芯片。它可以對年、月、日、周、時、分、秒進行計時,并且具有閏年補償?shù)榷喾N功能。圖3-4DS1302芯片DS1302芯片給系統(tǒng)提供時間設置,X1、X2一般外接一個頻率為32.768kHz的晶振保證震蕩頻率。Vcc2為主電源,Vcc1作為后備電源,即使斷電后Vcc2不工作也能保證芯片不斷電。RST為復位引腳,當RST為高電平時電路被復位,允許DS1302操作。I/O為串行雙向輸入端,SCLK串行時鐘引腳。3.4.2時間設置DS1302芯片的I/O口與P1.4連接,SCLK與P1.3連接,DS1302內部有7個時間寄存器分別對應秒、分、時、天、周、月、年,根據(jù)本次的設計需求設置到年。分寄存器設置到60制,即60秒一個循環(huán),時寄存器可以設置12小時制也可以設置24小時制,天寄存器7天一個循環(huán)到周,月寄存器可分為30天或31天或28天DS1302還可以設置閏年,因此年寄存器可以區(qū)分閏年和平年。寄存器的值采用BCD碼的形式存放,方便讀取。表3-3DS1302芯片功能引腳編號符號引腳說明標號符號引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負極3.5按鍵模塊設計隨著單片機硬件性能的提高和程序代碼量的加大,在編寫單片機的應用程序的過程當中,編程的復雜性隨之提高,按鍵模塊是必不可少的,碼表設置了5個按鍵,默認的功能鍵為KEY1鍵,這是系統(tǒng)總鍵用來切換功能設置,KEY2鍵當切換到某一功能后進行功能轉換設置,KEY3鍵用來設置加,KEY3鍵用來設置減,KEY4為復位REF_Ref10176\w\h[8]。圖3-5按鍵設計圖

3.6顯示模塊設計顯示模塊采用LCD1602液晶顯示器,LCD1602引腳功能如表3-3所示。表3-4LCD1602芯片功能引腳編號符號引腳說明編號符號引腳說明1Vss電源地9D2數(shù)據(jù)口2VDD電源正極10D3數(shù)據(jù)口3VO液晶顯示對比度調節(jié)端11D4數(shù)據(jù)口4RS數(shù)據(jù)/命令選擇端(H/L)12D5數(shù)據(jù)口5R/W讀寫選擇端(H/L)13D6數(shù)據(jù)口6E使能信號14D7數(shù)據(jù)口7D0數(shù)據(jù)口15BLA背光電源正極8D1數(shù)據(jù)口16BLK背光電源負極LCD1602液晶顯示器是廣泛使用的一種字符型液晶顯示模塊。它是由字符型液晶顯示屏(LCD)、控制驅動主電路HD44780及其擴展驅動電路HD44100,以及少量電阻、電容元件和結構件等裝配在PCB板上而組成。圖3-6顯示模塊設計3.7整體電路設計電路的整體設計如圖3-6所示,由時鐘模塊、霍爾傳感器模塊、電源模塊、LCD顯示模塊、CPU模塊、蜂鳴器報警電路、按鍵部分以及電機接口組成。圖3-7是PCB圖圖3-7電路總體設計圖3-8PCB圖4系統(tǒng)軟件設計4.1程序總體設計思路首先,在明確開發(fā)環(huán)境后程序設計部分采用C語言進行編寫,滿足每個模塊的設計功能,模塊與模塊之間也要有相對獨立性。程序設計應當遵循邏輯性,邏輯性較強的設計會帶來整個系統(tǒng)的流暢感,當系統(tǒng)供電后對模塊初始化,自行車處于靜止狀態(tài)時,設置一個低功耗模式,此時的低功耗模式并非單片機斷電,此模式下既降低了功耗又增加了碼表續(xù)航時間,低功耗模式設置一個時間2個小時,當兩個顯示后單片機斷電,這樣防止自行車一直處于低功耗模式,當自行車開始行駛時則系統(tǒng)判斷騎行開始,此時單片機正常工作不再處于低功耗模式,自行車騎行時正常判斷此時的狀態(tài)日期、時間、行駛速度等,按鍵的設置分為單片機開關機時間的設置、里程的設置、速度的設置等,單片機根據(jù)當前的速度進行判斷當速度為零時程序初始化,重復上面的判斷REF_Ref10176\w\h[8]。4.2主程序設計主程序模塊當系統(tǒng)啟動后首先對液晶模塊進行初始化,當液晶模塊初始化完成后定時器中斷開啟,此時中斷開啟后模塊就會判斷中斷時間是否到,當中斷時間未到時,程序則循環(huán)會到上一步再次判斷中斷時間而進行循環(huán)。中斷時間到時則重新設置中斷時間,當中斷時間被重新設置后,就會計算速度和里程等參數(shù),并將計算得來的參數(shù)顯示到LCD顯示屏上,顯示內容。圖4-1主程序流程圖在本次設計中的中斷系統(tǒng)比較少除了系統(tǒng)總體模塊只有部分主流程序采用了中斷,在自行車從行駛狀態(tài)到未行駛狀態(tài)時單片機采用了低功耗模式,此時的單片機要進行中斷判斷自行車此時的狀態(tài)是靜止的狀態(tài),判斷完成后的單片機要進行低功耗模式。4.3顯示程序設計顯示流程圖如圖4-2所示。程序開始執(zhí)行初始化程序,程序對寄存器初始化和定時器初始化,此時系統(tǒng)判斷是否中斷,當顯示器亮了則繼續(xù)顯示內容,若顯示器未亮則系統(tǒng)繼續(xù)判斷。圖4-2顯示流程圖4.4超速報警程序設計超速報警程序在自行車運行中提供警報功能,自行車運動時,單片機手動上電運行,運動中的自行車產(chǎn)生的運動速度由霍爾傳感器接收,單片機處理運行速度,系統(tǒng)判斷運行速度,當速度未超速系統(tǒng)會循環(huán)判斷自行車的運行速度,當速度超過騎行者手動設定的速度上限時,系統(tǒng)判斷自行車超速,超速后單片機會發(fā)送信號給蜂鳴器,蜂鳴器發(fā)出警報警示自行車超速。根據(jù)不同騎行者的需求速度報警上限可手動調節(jié)REF_Ref10327\w\h[11]。圖4-3速度流程

5設計結果分析5.1仿真結果本次仿真是基于AT89C52單片機為核心的設計,此次設計用Proteus完成仿真,5個按鍵用來對系統(tǒng)設置,晶振模塊提供頻率,LCD1302時鐘芯片可設置年、月、日、小時、分鐘,仿真結果如下圖5-1所示,LCD顯示屏可以輸出sd(速度)、lc(里程)與時間顯示?;魻杺鞲衅饔砂存I代替,按鍵按下后代表霍爾傳感器發(fā)送給單片機一次信號。圖5-1仿真結果5.2實物圖片下圖5-2中用電動馬達代替自行車輪條,馬達模擬自行車的輪條轉動,當馬達轉動時與單片機相連的霍爾傳感器就能感應到馬達的轉動,霍爾傳感器感應到馬達轉動后就會將信號傳輸給單片機處理,處理完成信號的單片機將數(shù)據(jù)顯示在LCD顯示屏上如圖5-2所示,sd表示速度、lc表示里程,屏幕右側則是時間顯示。最下面的黑色按鍵最右側是頁面切換鍵用以切換另外的頁面,第二個按鍵為功能轉換地三鍵為加,第四鍵為減。實物暫采用USB外接電源的方式。圖5-2自行車碼表實物圖致謝6總結與展望6.1總結本次設計的自行車碼表以AT89C52單片機為主控芯片,包括霍爾傳感器模塊、LCD顯示模塊、時鐘控制模塊、超速報警模塊。經(jīng)過測試,可以實現(xiàn)以下功能:自行車在正常行駛狀態(tài)下顯示里程數(shù)與時間并顯示實時速度。按鍵模塊可以設置騎行時間和騎行速度閾值自行車的車速超過設定值時可以報警提示。通過電動機模擬自行車騎行,完成了電路仿真及調試。制作了自行車碼表實物電路。6.2展望本次設計在充分考慮了自行車轉速與霍爾傳感器采樣之間的關系會產(chǎn)生一定的測量誤差與精確度問題,根據(jù)自行車輻條上的永磁體數(shù)量決定了自行車的轉速測量精度因此只要怎加輻條上的永磁體就可以提高精確度,添加永磁體會增加精確度的同時也提高了本次設計的成本,因此采用降低成本的方式減少精確度。自行車碼表是一個擴展性較強的科技型產(chǎn)品,現(xiàn)代的數(shù)碼產(chǎn)品的發(fā)展方向大多趨向于集成化和智能化,不同類型的智能產(chǎn)品日新月異,因此自行車碼表的設計遠遠不止于此,智能化的碼表還配備GPS定位系統(tǒng),心率顯示模塊,藍牙無線信號傳輸?shù)龋踔猎诖嘶A上還能加入實時語音播報??萍嫉陌l(fā)展總是不斷向前,可以預測在不遠的未來自行車碼表會更加趨于多元化。

參考文獻陳貴銀.單片機技術在機器人控制系統(tǒng)中的應用研究[J].自動化應用,2017(05):119-121.梁小廷.單片機技術的發(fā)展及應用研究[J].民營科技,2018(06):9.張承暢,吳孟林,張華譽,羅元,何豐.面向學生工程能力達成的“單片機技術”實驗案例設計[J].實驗技術與管理,2018,35(05):178-182.王鵬超,王偉東,劉霞,陳偉.基于單片機技術開發(fā)的智能遙控輪椅[J].價值工程,2018,37(16):134-135.子世界,2018(03):56-58.王子劍.“智能化”電子產(chǎn)品中單片機技術的應用[J].電子技術與軟件工程,2017(15):251.劉婷.傳感器設計中應用單片機技術的分析[J].數(shù)碼設計,2017,6(09):85.肖驍,戈文祺.電氣傳動系統(tǒng)中單片機技術的應用解析[J].中國標準化,2017(22):250-252.SiliconPerspective,FirstEncounterTraining[M].CadenceDesignSystems,inc.2012,22-31.RicardoReis,PowerandTimingDrivenPhysicalDesignAutomation[J].Springer-VerilogBerlinHeidelberg,2013.348-357XinJuanShang.TheDesignoftheNCTeachingPlotterBasedonSingleChipMicrocomputer[J].AdvancedMaterialsResearch,2014,3079.李人厚.智能控制理論和方法[M].西安:西安電子科技大學出版社,2018.李蘭光.單片機技術在智能家具中的應用與發(fā)展[J].電腦迷,2017(02):164-165.劉篤仁,韓保君.傳感器原理及應用技術[M].機械工業(yè)出版社,2019.8.劉覽.基于FPGA的32位RISC嵌入式微處理器設計[D].南京:南京航空航天大學,2018.茅陽.單片機技術在電氣傳動控制系統(tǒng)中的應用與研究[J].中國高新區(qū),2018(01):24.任仁凱.智能家居中單片機控制系統(tǒng)設計[D].南京:南京師范大學,2017.楊德坤.單片機技術在傳感器設計中的應用[J].電子測試,2018(18):127+140.姚越,吳寶慶.關于單片機技術應用的研究[J].科技資訊,2018,16(09):112-113.楊國君.單片機技術在機器人智能控制系統(tǒng)的協(xié)調運用[J].電子制作,2018(Z2):58-59.周正貴.基于單片機技術的按鍵掃描電路分析[J].信息與電腦(理論版),2018(13):29-30.

致謝本設計能夠順利完成,承蒙王老師以及身邊同學的指導和幫助。在設計過程中,王老師給予了悉心的指導,最重要的是給了我解決問題的思路和方法,并且在設計環(huán)境和器材方面給予了大力的幫助和支持,在此,我對老師表示最真摯的感謝!同時感謝所有幫助過我的同學!感謝評閱老師百忙之中抽出時間對本論文進行了評閱!附錄附錄#include<reg52.h> //調用單片機頭文件#defineucharunsignedchar//無符號字符型宏定義 變量范圍0~255#defineuintunsignedint //無符號整型宏定義 變量范圍0~65535sbitclk=P1^3; //ds1302時鐘線定義sbitio=P1^4; //數(shù)據(jù)線sbitrst=P1^5; //復位線 //秒分時日月年星期 ucharcodewrite_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a};//寫地址ucharcoderead_add[]={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b};//讀地址ucharmiao,fen,shi,ri,yue,week,nian;uchari;unsignedlongspeed1,juli,time2;floatf_hz ,speed_km,speed_m;ucharTH11,TL11;ucharflag_en;//開始計算速度使能uintjuli_s; //每秒走的距離uintjuli_z;//總路程floatzhijing=0.55;//直徑0.55Muints_zhijing=55;bitflag_1s=1; //1sucharmenu_1;//菜單設置變量ucharmenu_2;//菜單設置變量longzong_lc;//總量程ucharflag_200ms;uintshudu;//定義速度的變量uintbj_shudu=50; //報警速度//這三個引腳參考資料sbitrs=P1^0; //寄存器選擇信號H:數(shù)據(jù)寄存器 L:指令寄存器sbitrw=P1^1; //寄存器選擇信號H:數(shù)據(jù)寄存器 L:指令寄存器sbite=P1^2; //片選信號下降沿觸發(fā)uchari;sbitbeep=P3^7;//蜂鳴器IO口定義/******************1ms延時函數(shù)*******************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}/*********************************************************************名稱:delay_uint()*功能:小延時。*輸入:無*輸出:無***********************************************************************/voiddelay_uint(uintq){ while(q--);}/*********************************************************************名稱:write_com(ucharcom)*功能:1602命令函數(shù)*輸入:輸入的命令值*輸出:無***********************************************************************/voidwrite_com(ucharcom){ i=0; e=0; rs=0; rw=0; P0=com; delay_uint(3); e=1; delay_uint(25); e=0;}/*********************************************************************名稱:write_data(uchardat)*功能:1602寫數(shù)據(jù)函數(shù)*輸入:需要寫入1602的數(shù)據(jù)*輸出:無***********************************************************************/voidwrite_data(uchardat){ i=0; e=0; rs=1; rw=0; P0=dat; delay_uint(3); e=1; delay_uint(25); e=0; }/*********************************************************************名稱:write_sfm2(ucharhang,ucharadd,uchardate)*功能:顯示2位十進制數(shù),如果要讓第一行,第五個字符開始顯示"23",調用該函數(shù)如下 write_sfm1(1,5,23)*輸入:行,列,需要輸入1602的數(shù)據(jù)*輸出:無***********************************************************************/voidwrite_sfm2(ucharhang,ucharadd,uintdate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(0x30+date/10%10); write_data(0x30+date%10); }/*********************************************************************名稱:write_sfm4(ucharhang,ucharadd,uchardate)*功能:顯示2位十進制數(shù),如果要讓第一行,第五個字符開始顯示"23",調用該函數(shù)如下 write_sfm1(1,5,23)*輸入:行,列,需要輸入1602的數(shù)據(jù)*輸出:無***********************************************************************/voidwrite_sfm4(ucharhang,ucharadd,uintdate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(0x30+date/10000%10); write_data(0x30+date/1000%10); write_data(0x30+date/100%10); write_data(0x30+date/10%10); write_data(0x30+date%10); write_data('k'); write_data('m'); }voidwrite_sfm7(ucharhang,ucharadd,uintdate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(0x30+date/100000%10); write_data(0x30+date/100000%10); write_data(0x30+date/10000%10); write_data(0x30+date/1000%10); write_data('.'); write_data(0x30+date/100%10); write_data(0x30+date/10%10); write_data('k'); write_data('m'); }/***********************lcd1602上顯示兩位十進制數(shù)************************/voidwrite_sfm1(ucharhang,ucharadd,uchardate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(0x30+date%10); }/*********************************************************************名稱:write_string(ucharhang,ucharadd,uchar*p)*功能:改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"abcdef",調用該函數(shù)如下 write_string(1,5,"abcdef;")*輸入:行,列,需要輸入1602的數(shù)據(jù)*輸出:無***********************************************************************/voidwrite_string(ucharhang,ucharadd,uchar*p){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); while(1) { if(*p=='\0')break; write_data(*p); p++; } }/***********************lcd1602上顯示兩位十進制數(shù)************************/voidwrite_sfm2_ds1302(ucharhang,ucharadd,uchardate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(0x30+date/16); write_data(0x30+date%16); }/*****************控制光標函數(shù)********************/voidwrite_guanbiao(ucharhang,ucharadd,uchardate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); if(date==1) write_com(0x0f);//顯示光標并且閃爍 else write_com(0x0c);//關閉光標} /*********************************************************************名稱:init_1602()*功能:初始化1602液晶*輸入:無*輸出:無***********************************************************************/voidinit_1602()//1602初始化{ write_com(0x38); write_com(0x0c); write_com(0x06); write_string(1,0,"sd:00km/h00:00"); write_string(2,0,"lc:00.00km"); }/*************寫一個數(shù)據(jù)到對應的地址里***************/voidwrite_ds1302(ucharadd,uchardat){ rst=1; //把復位線拿高 for(i=0;i<8;i++) { //低位在前 clk=0; //時鐘線拿低開始寫數(shù)據(jù) io=add&0x01; add>>=1; //把地址右移一位 clk=1; //時鐘線拿高 } for(i=0;i<8;i++) { clk=0; //時鐘線拿低開始寫數(shù)據(jù) io=dat&0x01; dat>>=1; //把數(shù)據(jù)右移一位 clk=1; //時鐘線拿高 } rst=0; //復位線合低}/*************從對應的地址讀一個數(shù)據(jù)出來***************/ucharread_ds1302(ucharadd){ ucharvalue,i; rst=1; //把復位線拿高 for(i=0;i<8;i++) { //低位在前 clk=0; //時鐘線拿低開始寫數(shù)據(jù) io=add&0x01; add>>=1; //把地址右移一位 clk=1; //時鐘線拿高 } for(i=0;i<8;i++) { clk=0; //時鐘線拿低開始讀數(shù)據(jù) value>>=1; if(io==1) value|=0x80; clk=1; //時鐘線拿高 } rst=0; //復位線合低 returnvalue; //返回讀出來的數(shù)據(jù)}/*************把要的時間年月日都讀出來***************/voidread_time(){ miao=read_ds1302(read_add[0]); //讀秒 fen=read_ds1302(read_add[1]); //讀分 shi=read_ds1302(read_add[2]); //讀時 ri=read_ds1302(read_add[3]); //讀日 yue=read_ds1302(read_add[4]); //讀月 nian=read_ds1302(read_add[5]); //讀年 week=read_ds1302(read_add[6]); //讀星期}/*************把要寫的時間年月日都寫入ds1302里***************/voidwrite_time(){ write_ds1302(0x8e,0x00); //打開寫保護 write_ds1302(write_add[0],miao); //寫秒 write_ds1302(write_add[1],fen); //寫分 write_ds1302(write_add[2],shi); //寫時 write_ds1302(write_add[3],ri); //寫日 write_ds1302(write_add[4],yue); //寫月 write_ds1302(write_add[5],nian); //寫星期 write_ds1302(write_add[6],week); //寫年 write_ds1302(0x8e,0x80); //關閉寫保護}/*************液晶顯示時間程序***************/voidinit_1602_ds1302(){ write_sfm2_ds1302(1,11,shi); write_sfm2_ds1302(1,14,fen); }/***********外部中斷0初始化程序****************/voidinit_int0(){ EX0=1; //允許外部中斷0中斷 EA=1; //開總中斷 IT0=1; //外部中斷0負跳變中斷}/*************定時器0初始化程序***************/voidtime_init() //定時器0初始化程序{ EA=1; //開總中斷 TMOD=0X11; //定時器0、工作方式1 ET0=1; //開定時器0中斷 TR0=1; //允許定時器0定時 ET1=1; //開定時器1中斷 TR1=1; //允許定時器1定時}/***********計算速度函數(shù)**************/voidmenu_dis() //計算速度函數(shù){ if(menu_1==0) { if(flag_1s==1) { flag_1s=0; if((flag_en==1)) { flag_en=0; //1s=1/1000000us; //1m/s=0.001km除以1/3600h=3.6km/h f_hz=1/(TH11*256+TL11)/1000000;//算出來就是秒 speed_m=f_hz*zhijing*3.14; //算出來的是m/s juli_z=juli_z+speed_m;//總路程m speed_km=speed_m*3.6; //(帶個小數(shù)點)km/s shudu=speed_km; zong_lc+=speed_m; } write_sfm2(1,3,shudu); write_sfm4(2,3,juli_z); } }}/********************獨立按鍵程序*****************/ucharkey_can; //按鍵值voidkey() //獨立按鍵程序{ if((P3&0x78)!=0x78) //按鍵按下 { delay_1ms(1); //按鍵消抖動 if((P3&0x78)!=0x78) { //確認是按鍵按下 switch(P3&0x78) { case0x70:key_can=4;break; //得到按鍵值 case0x68:key_can=3;break; //得到按鍵值 case0x58:key_can=2;break; //得到按鍵值 case0x38:key_can=1;break; //得到按鍵值 } } }}/**********************設置函數(shù)************************/voidkey_with(){ if(key_can==1) //設置鍵 { menu_1++; if(menu_1==1) //設置時間 { menu_2=1; write_string(1,0,"::W:"); write_string(2,0,"20--"); } if(menu_1==2) //設置報警速度 { menu_2=1; write_string(1,0,"set-sd:00km/h"); write_string(2,0,"zlc:"); } if(menu_1==3) //設置直徑 { menu_2=1; write_string(1,0,"SetZhijing"); write_string(2,0,""); } menu_2=1; if(menu_1>2)//回到正常顯示 { menu_1=0; write_guanbiao(1,2,0); //關閉光標 init_1602();//1602初始化//初始化液晶顯示 } } if(key_can==2) //選擇鍵 { if(menu_1==1) //設置時間 { menu_2++; if(menu_2>7) menu_2=1; } if(menu_1==2) //設置 { menu_2++; if(menu_2>2) menu_2=1; } } if(menu_1==1) { if(menu_2==1) //設置時 { if(key_can==3) //加 { shi+=0x01; if((shi&0x0f)>=0x0a) shi=(shi&0xf0)+0x10; if(shi>=0x24) shi=0; } if(key_can==4) //減 { if(shi==0x00) shi=0x24; if((shi&0x0f)==0x00) shi=(shi|0x0a)-0x10; shi--; } } if(menu_2==2) //設置分 { if(key_can==3) //加 { fen+=0x01; if((fen&0x0f)>=0x0a) fen=(fen&0xf0)+0x10; if(fen>=0x60) fen=0; } if(key_can==4) //減 { if(fen==0x00) fen=0x5a; if((fen&0x0f)==0x00) fen=(fen|0x0a)-0x10; fen--; } } if(menu_2==3) //設置秒 { if(key_can==3) //加 { miao+=0x01; if((miao&0x0f)>=0x0a) miao=(miao&0xf0)+0x10; if(miao>=0x60) miao=0; } if(key_can==4) //減 { if(miao==0x00) miao=0x5a; if((miao&0x0f)==0x00) miao=(miao|0x0a)-0x10; miao--; } } if(menu_2==4) //設置星期 { if(key_can==3) //加 { week+=0x01; if((week&0x0f)>=0x0a) week=(week&0xf0)+0x10; if(week>=0x08) week=1; } if(key_can==4) //減 { if(week==0x01) week=0x08; if((week&0x0f)==0x00) week=(week|0x0a)-0x10; week--; } } if(menu_2==5) //設置年 { if(key_can==3) //加 { nian+=0x01; if((nian&0x0f)>=0x0a) nian=(nian&0xf0)+0x10; if(nian>=0x9a) nian=1; } if(key_can==4) //減 { if(nian==0x01) nian=0x9a; if((nian&0x0f)==0x00) nian=(nian|0x0a)-0x10; nian--; } } if(menu_2==6) //設置月 { if(key_can==3) //加 { yue+=0x01; if((yue&0x0f)>=0x0a) yue=(yue&0xf0)+0x10; if(yue>=0x13) yue=1; } if(key_can==4) //減 { if(yue==0x01) yue=0x13; if((yue&0x0f)==0x00) yue=(yue|0x0a)-0x10; yue--; } } if(menu_2==7) //設置日 { if(key_can==3) //加 { ri+=0x01; if((ri&0x0f)>=0x0a) ri=(ri&0xf0)+0x10; if(ri>=0x32) ri=0; } if(key_can==4) //減 { if(ri==0x01) ri=0x32;

溫馨提示

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

評論

0/150

提交評論