欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3739|回復: 0
打印 上一主題 下一主題
收起左側

單片機紅外對管測扇葉轉速設計論文

[復制鏈接]
跳轉到指定樓層
樓主
ID:368021 發表于 2018-7-9 18:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
課外實踐設計
單片機紅外遙控測扇葉轉速

專業年級
學    號
姓    名 (組長)
指導教師
成員

目錄

一、設計任務與要求
1.1設計任務
1.2設計要求
二、方案總體設計              3
2.1設計目的              3
2.2硬件功能描述              3
2.3設計方案選擇
2.4總體設計              5
2.5總體方案
三、硬件設計              6
3.1 STC89C51芯片              6
3.2電源模塊及晶振模塊              7
3.3數碼管顯示模塊              8
3.4蜂鳴器部分              9
3.5按鍵部分
3.6紅外部分
3.7整形部分
3.8硬件部分原理圖
    3.9 洞洞板設計
四、軟件設計
4.1 Keil C簡介
4.2系統流程
4.3源程序
    軟硬件調試              22
六、設計總結與體會              25
七、參考文獻              26


一、設計任務與要求
1.1設計任務

利用紅外接收管的“光電導”特性,將扇葉旋轉時對光遮擋產生的光信號轉換為單片機可處理的脈沖信號,從而實現對扇葉的測速。

1.2設計要求

以51單片機為基礎,通過紅外對管測量扇葉的旋轉速度,用4位數碼管顯示,超過規定轉速時,蜂鳴器警告。


二、方案總體設計

在設計光電轉換電路時我們想象用紅外發光二極管和紅外接收管固定于旋轉物體定軸上,在轉軸上安裝一遮光板,板做成8葉扇形,當轉輪旋轉時,發光二極管、扇孔、光敏三極管在一條直線上,即有紅外光通過,其他時間則由于擋板作用,沒有光通過,紅外接收管接收紅外光轉化為一個脈沖,產生一個脈沖說明轉八分之一圈。這樣只需要測量一秒內光敏三極管輸出脈沖個數,就知道轉速了,其中我們還利用施密特觸發器將光敏三極管產生的脈沖轉化為了方波。在設計計時電路時,我們使用555定時器作為施密特觸發器。并用51單片機作為信號處理。顯示電路就是利用七段式數碼顯示器將數據顯示出來。

2.1設計目的

隨著測控技術的高速發展,電機的測速已經成為安全生產必不可少的一部分,本次課程設計一方面是為了鞏固自己所學的知識,一方面是了深入了解生產生活:

1)進一步熟練掌握單片機編程的方法和思想。

2)掌握555定時器接成斯密特觸發器的方法。

3)學會利用紅外對管將光信號轉換為脈沖信號。

4)進一步掌握獨立式鍵盤的編程控制并認識獨立式鍵盤在實際中的運用。

5)增強對單片機的興趣及動手能力, 并在此過程中學會對程序的逐步調試。

2.2硬件功能描述

紅外測速儀可以將光信號轉換為脈沖信號,即可以將電機在轉動過程中對光線遮擋的頻率轉換為同等頻率的脈沖信號,通過單片機內部信號處理,通過四位八段數碼管顯示轉速。另外處于安全的考慮,當電機轉速超過某一規定值時,蜂鳴器響以警告,按鍵2可以控制是否打開此功能。

2.3設計方案選擇

1)測速方案:

采用紅外對管

紅外對管由紅外發光管和紅外接收管兩部分組成:

紅外線發射管在LED封裝行業中主要有三個常用的波段,如下850NM、875NM、940NM。根據波長的特性運用的產品也有很大的差異,850NM波長的主要用于紅外線監控設備,875NM主要用于醫療設備,940NM波段的主要用于紅外線控制設備

紅外線接收管功能與光敏接收管相似只是不受可見光的干擾,感光面積大,靈敏度高,屬于光敏二極管,一般只對紅外線有反應。

2)顯示方案:

一個良好的顯示模塊對一個系統來說非常重要,所有操作結果和計時結果,都要通過顯示模塊來顯示出來,同時顯示模塊提供了良好的人機交互平臺。常用的顯示模式有LED 、8段數碼管顯示 、點陣顯示和液晶顯示。

方案1:液晶顯示屏

液晶顯示屏(LED)具有輕薄短小,低耗電量,無輻射危險,平面直角顯示以及形象穩定不閃爍等優勢,可視面積大,畫面效果好,分辨率高,抗干擾能力強等特點,但由于液晶其成本偏高,在使用時,不能有靜電干擾,否則易燒壞其液晶的顯示芯片。

方案2LED數碼管

led數碼管(LEDSegmentDisplays)是由多個發光二極管封裝在一起組成“8”字型的器件,引線已在內部連接完成,只需引出它們的各個筆劃,公共電極。led數碼管常用段數一般為7段有的另加一個小數點,還有一種是類似于3位“+1”型。位數有半位,1,2,3,4,5,6,8,10位等等,led數碼管根據LED的接法不同分為共陰和共陽兩類,了解LED的這些特性,對編程是很重要的,因為不同類型的數碼管,除了它們的硬件電路有差異外,編程方法也是不同的。圖2是共陰和共陽極數碼管的內部電路,它們的發光原理是一樣的,只是它們的電源極性不同而已。顏色有紅,綠,藍,黃等幾種。led數碼管廣泛用于儀表,時鐘,車站,家電等場合。選用時要注意產品尺寸顏色,功耗,亮度,波長等。

3)整形芯片

由于紅外管接收光信號后產生的脈沖波形并不穩定,需要整形成邊沿陡峭的電壓波形方便單片機處理。

方案一:555定時器

555定時器成本低,性能可靠,只需要外接幾個電阻、電容,就可以實現多諧振蕩器、單穩態觸發器及施密特觸發器等脈沖產生與變換電路。它也常作為定時器廣泛應用于儀器儀表、家用電器、電子測量及自動控制等方面。

方案二:74系列芯片

74系列芯片包括有74LS18雙四輸入與非門(施密特觸發)、74LS19六反相器(施密特觸發)、74132、74LS132、74S132、74F132、74HC132四2輸入與非施密特觸發器觸發器74221、74LS22174 HC221、74 C221雙單穩態多諧振蕩器(有施密特觸發器)

方案三:LM393

LM393為雙電壓比較器集成電路,成本低,性能可靠,并可方便的接成正向輸入遲滯比較器電路提高抗干擾能力

綜合考慮到各方面因素,此課程設計采用紅外對管測速,LED數碼管顯示,NE555為整形芯片

2.4總體設計

總體框架圖如圖1

圖1 總體框架圖

由總體框架圖可知:整個設計以51單片機為主體,有兩個輸入,分別為紅外接收部分輸入,按鍵輸入部分輸入;兩個輸出,數碼管輸出,蜂鳴器輸出。

2.5總體方案

此設計以51單片機為數據處理的中心,紅外對管完成數據的采集,按鍵為輸入部分,四位八段數碼管和蜂鳴器為輸出部分。工作時,首先由紅外對管采集數據,經555定時器整形后送往單片機外部中斷P3^2進行處理,然后由四位八段數碼管進行顯示,數碼管位選P1^4~P1^7口控制,段選由P0口8位控制,另外按鍵和蜂鳴器由P1^5~P1^7控制。

三、硬件設計3.1 STC89C51芯片

STC89C51是一個低功耗,高性能CMOS8位單片機,片內含具有如下特點:40個引腳(引腳圖如圖1-1所示),4kBytesFlash片內程序存儲器,128bytes的隨機存取數據存儲器(RAM),32個外部雙向輸入/輸出(I/O)口,5個中斷優先級2層中斷嵌套中斷,2個16位可編程定時計數器,2個全雙工串行通信口,看門狗(WDTC)電路,片內時鐘振蕩器。

此外,STC89C51設計和配置了振蕩頻率可為0Hz并可通過軟件設置省電模式。空閑模式下,CPU暫停工作,而RAM定時計數器,串行口,外中斷系統可繼續工作,掉電模式凍結振蕩器而保存RAM的數據,停止芯片其它功能直至外中斷激活或硬件復位。同時該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應不同產品的需求。STC89C51單片機引腳圖如圖2

圖2 單片機引腳圖

本系統采用單片機STC89C51為控制核心,系統主要包括播放模塊、按鍵控制模塊、紅外對管和555芯片模塊。下面對各模塊的設計逐一進行論證比較。

3.2電源模塊及晶振模塊

單片機復位時只要保持RST引腳接2us的高電平即可。在單片機啟動0.1S后,電容C兩端的電壓持續充電為5V,這是時候10K電阻兩端的電壓接近于0V,RST處于低電平所以系統正常工作。當按鍵按下的時候,開關導通,這個時候電容兩端形成了一個回路,電容被短路,所以在按鍵按下的這個過程中,電容開始釋放之前充的電量。隨著時間的推移,電容的電壓在0.1S內,從5V釋放到變為了1.5V,甚至更小。根據串聯電路電壓為各處之和,這個時候10K電阻兩端的電壓為3.5V,甚至更大,所以RST引腳又接收到高電平。單片機系統自動復位。

外接晶振引腳XTAL1和TXAL2接外部晶振和微調電容的一端。振蕩電路的頻率就是晶體的固有頻率。晶振電路結合單片機內部電路產生單片機所需的時鐘頻率。晶振提高頻率越高,單片機運行速度越快。單片機一切指令的執行都是建立在晶振提供的時鐘頻率上。

另外此系統還設置了自鎖開關用來控制整個電路。

模塊原理圖如圖3

圖3 電源模塊和晶振模塊圖

3.3數碼管顯示模塊

1)數碼管的分類

數碼管按段數分為七段數碼管和八段數碼管,八段數碼管比七段數碼管多一個發光二極管單元(即多一個小數點顯示);按能顯示多少個“8”可分為1位、2位、4位等等數碼管;按發光二極管單元連接方式分為共陽極數碼管和共陰極數碼管。共陽數碼管是指將所有發光二極管的陽極接到一起形成公共陽極(COM)的數碼管。共陽數碼管在應用時應將公共極COM接到+5V,當某一字段發光二極管的陰極為低電平時,相應字段就點亮。當某一字段的陰極為高電平時,相應字段就不亮共陰數碼管是指將所有發光二極管的陰極接到一起形成公共陰極(COM)的數碼管。共陰數碼管在應用時應將公共極COM接到地線GND上,當某一字段發光二極管的陽極為高電平時,相應字段就點亮。當某一字段的陽極為低電平時,相應字段就不亮。

2)四位八段共陰數碼管及上拉電阻

51系列的單片機如果是普通,沒有強輸出的的話,很難驅動數碼管,在實際應用中,一般是需要添加三極管驅動的。

數碼管的電流計算:每個段的電流乘以8,就當你用的是紅色管,這樣電流可以設計在5~10mA,這樣的話,當顯示數字8帶點時,電流就是40~80mA,單片機是很難直接輸出這么大的電流的,所以需要加驅動.用共陽數碼管,P0口做輸出就無需加上拉電阻了。

此報告中,數碼管的段選為P0口,正常工作時電流約為5~10mA,所以在P0口接1k的排阻以提供5mA左右的電路使數碼管正常工作。

數碼管及上拉電阻圖如圖4

圖4 數碼管及上拉電阻圖

3.4蜂鳴器部分

有源蜂鳴器與無源蜂鳴器的區別:

1)內部區別:需要注意的是這里的“源”不是指電源,而是指震蕩源。 也就是說,有源蜂鳴器內部帶震蕩源,所以只要一通電就會叫。而無源內部不帶震蕩源,所以如果用直流信號無法令其鳴叫。有源蜂鳴器往往比無源的貴,就是因為里面多個震蕩電路。

2)外觀區別:兩者的高度略有區別,有源蜂鳴器,高度為9mm,而無源蜂鳴器的高度為8mm。如將兩種蜂鳴器的引腳都朝上放置時,可以看出有綠色電路板的一種是無源蜂鳴器,沒有電路板而用黑膠封閉的一種是有源蜂鳴器。

3)辨別方式:除了從外觀上來看,進一步判斷有源蜂鳴器和無源蜂鳴器,還可以用萬用表電阻檔Rxl檔測試:用黑表筆接蜂鳴器 "-"引腳,紅表筆在另一引腳上來回碰觸,如果觸發出咔、咔聲的且電阻只有8Ω(或16Ω)的是無源蜂鳴器;如果能發出持續聲音的,且電阻在幾百歐以上的,是有源蜂鳴器。

有源蜂鳴器直接接上額定電源(新的蜂鳴器在標簽上都有注明)就可連續發聲;而無源蜂鳴器則和電磁揚聲器一樣,需要接在音頻輸出電路中才能發聲。

無源蜂鳴器的優點是:

1)便宜;

2)聲音頻率可控 ,可以做出“多來米發索拉西”的效果;

3)在一些特例中,可以和LED復用一個控制口有源蜂鳴器的優點是程序控制方便。

由于客觀條件與經濟能力有限,本系統采用無緣蜂鳴器,使用s9012三極管驅動,蜂鳴器原理圖如圖5:

圖5 蜂鳴器原理圖

3.5按鍵部分

常用的按鍵有三種:機械觸點式按鍵、導電橡膠式和柔性按鍵(又稱觸摸式鍵盤)。

機械觸點式按鍵是利用機械彈性使鍵復位,手感明顯,連線清晰,工藝簡單,適合單件制造。但是觸點處易侵入灰塵而導致接觸不良,體積相對較大。導電橡膠按鍵是利用橡膠的彈性來復位,通過壓制的方法把面板上所有的按鍵制成一塊,體積小,裝配方便,適合批量生產。但是時間長了,橡膠老化而使彈力下降,同時易侵入灰塵。

柔性按鍵是近年來迅速發展的一種新型按鍵,可以分為凸球型和平面型兩種。柔性按鍵最大特點是防塵、防潮、耐蝕,外形美觀,裝嵌方便。而且外形和面板的布局、色彩、鍵距可按照整機的要求來設計。

鍵盤編程中主要考慮去抖動的問題:當測試表明有鍵被按下之后,緊接著就進行去抖動處理。因為鍵是機械開關結構,由于機械觸點的彈性及電壓突跳等原因,在觸點閉合或斷開的瞬間會出現電壓抖動。為保證鍵識別的準確,在電壓信號抖動的情況下不能進行行狀態輸入。為此需進行去抖動處理。去抖動有硬件和軟件兩種方法。硬件方法就是加去抖動電路,從根本上避免抖動的產生。軟件消抖,在第一次檢測到有鍵按下時,執行一段延時程序之后,再檢測此按鍵,如果第二次檢測結果仍為按下狀態,CPU便確認此按鍵己按下,消除了抖動。

但是由于客觀條件與經濟能力有限,本系統采用機械觸點式按鍵。共四個,分別為復位鍵,切換鍵,功能鍵。

按鍵部分原理圖如圖6:

圖6 按鍵原理圖

3.6紅外部分

紅外對管說明

紅外對管是紅外線發射管與光敏接收管,或者紅外線接收管,或者紅外線接收頭配合在一起使用時候的總稱。紅外線接收管紅外線接收管功能與光敏接收管相似只是不受可見光的干擾,感光面積大,靈敏度高,屬于光敏二極管,一般只對紅外線有反應。

紅外接收管在紅外光線照射的情況下,正向向電阻發生比較大的變化,利用此特性,將紅外接收管與一合適電阻串聯,光照與無光照時即可輸出不同電壓。

如圖8連接測試電路,調節R5和R4的阻值,當接收管接收到紅外光時,接收管兩端電壓約為1V,當紅外光線被遮擋時,接收管兩端電壓約為4V,然后使用555接成斯密特觸發器輸出即可

圖7為紅外接收原理圖

圖7紅外接收

3.7整形部分

555定時器成本低,性能可靠,只需要外接幾個電阻、電容,就可以實現多諧振蕩器、單穩態觸發器及施密特觸發器等脈沖產生與變換電路。它也常作為定時器廣泛應用于儀器儀表、家用電器、電子測量及自動控制等方面。

它內部包括兩個電壓比較器,三個等值串聯電阻,一個RS觸發器,一個放電管T及功率輸出級。它提供兩個基準電壓VCC/3和2VCC/3。

555定時器的功能主要由兩個比較器決定。兩個比較器的輸出電壓控制RS 觸發器和放電管的狀態。在電源與地之間加上電壓,當5腳懸空時,則電壓比較器C1的反相輸入端的電壓為 2VCC/3,C2 的同相輸入端的電壓為VCC /3。若觸發輸入端TR的電壓小于VCC/3,則比較器 C2的輸出為0,可使 RS觸發器置1,使輸出端OUT=1。如果閾值輸入端 TH 的電壓大于2VCC/3,同時TR端的電壓大于VCC/3,則C1的輸出為0,C2的輸出為1,可將 RS觸發器置0,使輸出為0電平。

它的各個引腳功能如下:

1. 1腳:外接電源負端VSS或接地,一般情況下接地。

2. 2腳:低觸發端。

   3.3腳:輸出端Vo。

   4. 4腳:是直接清零端。當此端接低電平,則時基電路不工作,此時不論TR、TH處于何電平,時基電路輸出為“0”,該端不用時應接高電平。

5. 5腳:VC為控制電壓端。若此端外接電壓,則可改變內部兩個比較器的基準電壓,當該端不用時,應將該端串入一只0.01μF電容接地,以防引入干擾。

6. 6腳:TH高觸發端。

7. 7腳:放電端。該端與放電管集電極相連,用做定時器時電容的放電。

8. 8腳:外接電源VCC,雙極型時基電路VCC的范圍是4.5 ~ 16V,CMOS型時基電路VCC的范圍為3 ~ 18V。一般用5V。

555芯片接口如下圖,本電路是將555做施密特觸發器,對霍爾傳感器輸出的信號進行整形,然后在輸出給單片機的外部中斷口進行計數,可以有效減少計數干擾。

圖8 NE555原理圖

3.8硬件部分原理圖

3.9 洞洞板設計

通過這次課程設計,驗證了以前很多的不確定性,如:那種我們使用的比較小的線能否承載我們想要的電流、三極管基極工作電流以及集電極工作電流的計算、器件擺放對整個萬用板焊接時的方便程度、以及模型線和段線的選擇、焊接時的一些小細節。

而對于各種元器件來說,更為深刻的體會到其數據手冊的實用性,但還是要考慮其數據手冊盡量使用英文版的,中文版的數據手冊往往在翻譯的時候會出現紕漏。

再設計硬件整過中,要充分考慮到你的走線對你的焊接時的影響,同時也要考慮到后期對器件的電氣檢查時的方便程度,這樣有利于后期維護及保障器件的可靠性。

根據自己動手的實際情況,總結出自己本次設計中硬件焊接方面的不足之處,經過自己的理解,總結出了一些關于實物焊接的注意事項:




    • 烙鐵的使用

掌握好電烙鐵的溫度和焊接時間,選擇恰當的烙鐵頭和焊點的接觸位置,才可能得到良 好的焊點。正確的手工焊接操作過程可以分成五個步驟:

步驟一:準備施焊:左手拿焊絲,右手握烙鐵,進入備焊狀態。要求烙鐵頭保持干凈,無焊渣等氧化物,并在表面鍍有一層焊錫。

步驟二:加熱焊件:靠在兩焊件的連接處,加熱整個焊件全體,時間大約為1~2秒鐘。對于在印制板上焊接元器件來說,要注意使烙鐵頭同時接觸兩個被焊接物。

步驟三:送入焊絲焊件的焊接面被加熱到一定溫度時,焊錫絲從烙鐵對面接觸焊件。注意:不要把焊錫絲送到烙鐵頭上!

步驟四:移開焊絲當焊絲熔化一定量后,立即向左上45°方向移開焊絲。

步驟五:移開烙鐵焊錫浸潤焊盤和焊件的施焊部位以后,向右上45°方向移開烙鐵,結束焊接。從第三步開始到第五步結束,時間大約也是1~2秒。







    • 焊接方法

1.保持烙鐵頭的清潔。

2.靠增加接觸面積來加快傳熱,加熱要靠焊錫橋。

3.烙鐵撤離有講究,烙鐵的撤離要及時,而且撤離時的角度和方向與焊點的形成有關 。盡量使焊錫呈現出三角錐型,防止出現虛焊現象。

4.在焊錫凝固之前不能。

5.焊錫用量要適中,過多的焊錫不僅浪費材料,而且恩容易造成虛焊,在調試班子的過程中出現很多類似接觸不良問題而引起的調試過程不便。

6..不要使用烙鐵頭作為運送焊錫的工具。





    • 焊點外觀

1.形狀為近似圓錐而表面稍微凹陷,呈漫坡狀,以焊接導線為中心,對稱成裙形展開。虛焊點的表面往往向外凸出,可以鑒別出來。

2.焊點上,焊料的連接面呈凹形自然過渡,焊錫和焊件的交界處平滑,接觸角盡可能小

3.表面平滑,有金屬光澤。

4.無裂紋、針孔、夾渣。

4)萬能板焊接技巧

在我們焊接板子的過程中,由于焊接基本功的不扎實,容易短路或斷路。除了布局不夠合理和焊錫不良等因素外,缺乏技巧是造成這些問題的重要原因之一。掌握一些技巧可以使電路反映到實物硬件的復雜程度大大降低,減少飛線的數量,讓電路更加穩定。下面就自己焊接的感受談談PCB的焊接技巧。

1.初步確定電源、地線的布局:電源貫穿電路始終,合理的電源布局對簡化電路起到十分關鍵的作用。某些PCB布置有貫穿整塊板子的銅箔,應將其用作電源線和地線;如果無此類銅箔,你也需要對電源線、地線的布局有個初步的規劃。

2.善于利用元器件的引腳:PCB的焊接需要大量的跨接、跳線等,不要急于剪斷元器件多余的引腳,有時候直接跨接到周圍待連接的元器件引腳上會事半功倍。另外,本著節約材料的目的,可以把剪斷的元器件引腳收集起來作為跳線用材料。

3.善于設置跳線:特別要強調這一點,巧妙的設置跳線不僅可以簡化連線,而且要美觀得多。

4.善于利用元器件自身的結構:筆者焊接的矩陣鍵盤。這是一個利用了元器件自身結構的典型例子:圖中的輕觸式按鍵有4只腳,其中兩兩相通,我們便可以利用這一特點來簡化連線,電氣相通的兩只腳充當了跳線。

5.善于利用排針:排針有許多靈活的用法。比如兩塊板子相連,就可以用排針和排座,排針既起到了兩塊板子間的機械連接作用又起到電氣連接的作用。這一點借鑒了電腦的板卡連接方法。



3.10焊接實物圖


四、軟件設計4.1 Keil C簡介

本次設計使用keil 軟件進行程序的編輯與編譯。Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發系統,與匯編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優勢,因而易學易用。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調試器等在內的完整開發方案,通過一個集成開發環境(uVision)將這些部分組合在一起。KeiluVision2是美國KeilSoftware公司出品的51系列兼容單片機C語言軟件開發系統,使用接近于傳統C語言的語法來開發,與匯編相比,C語言易學易用,而且大大的提高了工作效率和項目開發周期,他還能嵌入匯編,您可以在關鍵的位置嵌入,使程序達到接近于匯編的工作效率。KEILC51標準C編譯器為8051微控制器的軟件開發提供了C語言環境,同時保留了匯編代碼高效,快速的特點。C51編譯器的功能不斷增強,使你可以更加貼近CPU本身,及其它的衍生產品。C51已被完全集成到uVision2的集成開發環境中,這個集成開發環境包含:編譯器,匯編器,實時操作系統,項目管理器,調試器。uVision2 IDE可為它們提供單一而靈活的開發環境。

4.2系統流程

圖9 程序流程圖

主函數:

  •    打開定時器中斷和外部中斷。
  •    進入主循環。
  •    檢測按鍵。
  •    檢測轉速超額:若每秒轉速超過額定值,蜂鳴器響。

外部中斷:

1 )  檢測到P3^2口低電平,計數值加一。

定時器部分:

1)  定時器設置定時2ms,中斷調用顯示函數,即每2ms調用顯示函數一次,用數碼管動態掃描的方法,使數碼管實現動態顯示。

2)  定時器計時中斷500次即每隔1s時讀取外部中斷的計數值

  • 軟硬件仿真
5.1 仿真軟件簡介

Proteus是由Labcenter Electronics開發的功能強大的單片機仿真軟件,現在最新版本6.9 SP5,其演示版本可在其官方網站下載。

Proteus與其他的仿真軟件相比較,在下面的優點

1)能仿真模擬電路、數字電路、數模混合電路;

2)能繪制原理圖、PCB圖;

3)幾乎包括實際中所有使用的儀器 ;

4)其最大的亮點在于能夠對單片機進行實物級的仿真。從程序的編寫,編譯到調試,目標版的仿真一應俱全。支持匯編語言和C語言的編程。還可配合Keil C實現程序的聯合調試,將Proteus中繪制的原理圖作為實際中的目標板,而用Keil C集成環境實現對目標板的控制,與實際中通過硬件仿真器對目標板的調試幾乎完全相同,并且支持多顯示器的調試,即Proteus運行在一臺計算機上,而Keil C運行在另一臺計算機上,通過網絡連接實現遠程的調試。

5.2硬件調試

硬件調試是針對單片機部分進行的調試。在上電之前,先確保電路中不存在斷路或短路情況,這一工作是整個調試工作的第一步,也是非常重要的一個步驟。在這部分調試中主要使用的工具是萬用表,用來完成檢測電路中是否存在斷路或者短路情況的任務。注意焊點之間,確保焊點沒有短接在一起,同時注意焊點的美觀,確保沒有開路以及短路的現象出現。

在確保硬件電路正常且無異常情況(短路或斷路)的情況下方可上電調試,上電調試的口的是檢測單片機控制部分、數碼管點亮部分、和音頻轉換電路硬件調試。

1)數碼管LED電路調試:接通電源,按下六腳開關可以看到數碼管顯示數字。

2)按鍵調試:接通電源,按下按鍵一,數碼管量程切換。

3)紅外對管調試:接通電源,用紙片從紅外對管中間劃過,可看到數碼管有顯示。

5.3軟件調試

調試主要方法和技巧:通常一個調試程序應該具有至少四種性能:跟蹤、斷點、查看變量、更改數值。整個程序是一個主程序調用各個子程序實現功能的過程,要使主程序和整個程序都能平穩運行,各個模塊的子程序的正確與平穩運行必不可少,所以在軟件調試的最初階段就是把各個子程序進行分別調試。

1)數碼管調試:數碼管調試部分主要是讓數碼管可以實現三種不同的量程,調試效果圖如圖10:

              

圖10 三種不同量程的數碼管顯示效果

2)輸入部分調試:由于proteus仿真中無法實現模擬紅外對管的實際效果,所以以正弦波代替紅外輸出的電壓波形,用555整形,原理圖和整形效果如圖11

圖11 555接成斯密特觸發器和整形效果

5.4使用說明

1)單片機分別接VCC和GND使單片機處于供電狀態;

2)接上TXD和RXD將程序導入單片機中;

3)按下六角開關,可到指示燈亮后,數碼管顯示000.0;

4)電機裝擋板置于紅外對管中間,工作時數碼管即可顯示當前平均1s的轉速。

軟硬件仿真圖:

六、設計總結與體會

進行了一個多月的設計在不知不覺中結束,當遇到一個細節部分的設計障礙時,那是絞盡腦汁,煞費苦心,通過我們團隊查閱資料以及同學的交流討論,老師的引導點化,一個個難點最終一一擊破。

通過這次的設計,使我們對紅外線測速儀的基本原理有了一個初步的認識,同時也使我掌握了設計的基本思想和方法。即根據設計目的和用途先進行原理的轉換,再確定電路方案,根據原理圖選擇所需要的器件,最終連線仿真測試,測試中再不斷完善電路和方案。同時我們也感到了我們數電知識的匱乏和思路的局限性,要設計好一個方案,必須縱觀全局,知難而進,銳意進取。總之這次設計讓我受益匪淺,不僅用實踐鞏固了所學的知識,而且學到了解決實際問題的方法,積累了經驗。我們在以后的學習實踐中會更加認真仔細,當然,這次設計的完成還要感謝老師的指導和幫助。


焊接說明

本說明僅以某一個例子對板子焊接方法進行說明,并不針對所購買的特定模塊,方法是一致的,希望靈活掌握與運用。拿到套件資料的時候會有以下兩個圖:

1 焊接正面圖

2 焊接背面圖(鏡像圖)


拿到套件時切忌直接焊接,請把器件清單仔細閱讀,同時仔細閱讀“焊接正面圖”和“焊接背面圖”的相關說明,并對器件的特性進行了解,比如極性、公共端、方向等。

在上述工作的基礎上建議根據“焊接正面圖”中器件的分布,用MARK筆將所有器件的管腳在洞洞板上標注出來(無焊盤的那面)MARK筆粗頭在板子上對應的孔上點一下就可以了,具體如下:

3 器件管腳分布圖

標注出器件管腳分布之后,并仔細與“焊接正面圖”進行對照,確保無誤,尤其需要注意的是模板可能和實際洞洞板尺寸有差異。在保證無誤情況下,將原件焊接到洞洞板上,焊接過程中重點注意有方向性的器件焊接,確保焊接無誤。焊接完的板子如下圖所示。

注意:

數碼管版本:晶振和單片機IC座略有點打架,先焊單片機IC座,再焊晶振,焊的時候將晶振焊至晶振底面與IC座塑料殼平齊高度,再往右邊略掰一下,不擋單片機即可;

液晶版本:發光二極管和IC座略有點打架,先焊發光二極管,發光二極管要插到底,再焊單片機IC座和邊上的復位按鍵。

4 焊完器件的洞洞板

焊接完器件之后,參考圖2,用MARK筆(那種筆頭較尖的,寫光盤的),照圖所示,將所有導線在洞洞板上繪出;飛線暫時放一邊,不要繪制;同時某些細小的連接不方便繪制,可以暫時放一邊,把主要的線路繪制完成即可。如下圖所示:

5 繪制線路圖


然后根據板上所繪制的線路,利用去皮的導線或者焊錫,貼著洞洞板,沿線路將各個焊盤連接(建議長線用去皮導線連,短線用焊錫連,這樣快捷省錫),中間適當在幾個點上點下錫,起固定作用。然后補齊各個細小的連線。最后將焊好的板子和圖2進行對照,確保線路無問題,并仔細檢查板上有無“短路和斷路”,尤其是有時候某個焊盤上焊錫有一絲絲和周圍焊盤連通的情況,需要特別注意,這種現象很容易被忽視。最后,處理飛線,用帶皮導線將紅色線標注有焊盤的地方連接上,注意飛線外皮不要剝太多,以致與周圍焊盤短路。

完成上述工作之后,仔細核對線路和短路的問題,最后上電測試。


單片機源程序如下:
  1. #include<reg52.h>
  2. #define DataPort P0//定義P1口
  3. sbit moshi = P3^3;
  4. sbit INC = P3^4;
  5. sbit DEC = P3^7;
  6. sbit SPK=P3^6;//蜂鳴器引腳
  7. unsigned long warnspeed=50;
  8. unsigned char moshicount=1;
  9. unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//斷碼
  10. unsigned char code DuanMa1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//加小數點顯示斷碼
  11. unsigned char code WeiMa[]={0xef,0xdf,0xbf,0x7f};//位碼
  12. unsigned char TempData[8];//存儲顯示值的全局變量
  13. unsigned long speedtmp=0,speed=0;                //外部中斷每秒計數,每秒速度
  14. unsigned short sectime=0;                            //單個定時2MS,定時滿sectime=50為一秒
  15. void Ini_int(void);//定時器打開
  16. void Display(unsigned char);//顯示函數
  17. void Delay(unsigned int t);//延時us級
  18. void DelayMs(unsigned char t);//延時ms級
  19. /*----------------------------------------中斷打開------------------------------------------------*/
  20. void Ini_int(void)
  21. {
  22. TMOD |= 0x01;            
  23. IP=1;                                  //外部中斷0為高優先級
  24. EA=1;            //總中斷打開
  25. ET0=1;           //定時器中斷打開
  26. TR0=1;           //定時器開關打開
  27. EX0=1;           //外部中斷打開
  28. IT0=1;           //邊沿觸發方式,不能采用電平方式
  29. }
  30. /*-------------------------------------定時器中斷子程序----------------------------------------*/
  31. void Timer0_isr(void) interrupt 1
  32. {
  33. TH0=(65536-2000)/256;                              //重新賦值 2ms
  34. TL0=(65536-2000)%256;
  35. sectime++;
  36. if(sectime>=250)                                                        //定時到一秒則開始計算速度
  37. {
  38. sectime=0;
  39. speed=speedtmp*20/4;              //10為將速度擴大10倍,為小數顯示作準備4為扇葉一周的脈沖數
  40. speedtmp=0;            
  41. }
  42. if(speed>warnspeed*10)                                                                                    //高于50轉打開警告
  43. {
  44. SPK = !SPK;
  45. }
  46. else              SPK = 1;
  47. }
  48. /*----------------------------------外部中斷子程序-----------------------------------*/
  49. void pulse(void) interrupt 0//外部中斷0
  50. {
  51. speedtmp++;//計數加1
  52. }
  53. /*----------------------------------顯示函數-----------------------------------------*/
  54. void Display(unsigned long int speed)
  55. {
  56. if(speed>10000)              speed=speed%10000;
  57. TempData[0]=DuanMa[speed%10000/1000];
  58. TempData[1]=DuanMa[speed%1000/100];
  59. TempData[2]=DuanMa1[speed%100/10];//第三位帶小數點
  60. TempData[3]=DuanMa[speed%10];
  61. P2=WeiMa[0];                   //送位選信號
  62. DataPort=TempData[0];                                           //送數據
  63. Delay(250);
  64. P2=WeiMa[1];                   //送位選信號
  65. DataPort=TempData[1];                                           //送數據
  66. Delay(250);
  67. P2=WeiMa[2];                   //送位選信號
  68. DataPort=TempData[2];                                           //送數據
  69. Delay(250);
  70. P2=WeiMa[3];                   //送位選信號
  71. DataPort=TempData[3];                                           //送數據
  72. Delay(250);
  73. P2=0xff;
  74. }
  75. /*--------------------------------延時函數us級-------------------------------------*/
  76. void Delay(unsigned int t)
  77. {
  78.               while(--t);
  79. }
  80. /*--------------------------延時函數ms級-------------------------------------------*/
  81. void DelayMs(unsigned char t)
  82. {
  83.               while(t--)
  84.               {
  85.      //大致延時1mS
  86.                             Delay(245);
  87.                             Delay(245);
  88.               }
  89. }              */
  90. //閾值設置函數
  91. void shezhi()
  92. {
  93.                 if(moshi==0)              //moshi鍵按下
  94.                 {
  95.                               Delay(250);
  96.                               if(moshi==0){
  97.                                                            moshicount++;
  98.                                                            if(moshicount>2)moshicount=1;
  99.                                                            while(moshi==0);
  100.                                }
  101.                  }
  102.                  switch(moshicount)
  103.                  {
  104.                                           case 1:
  105.                                 {            
  106.                                                         Display(speed);                                                        //顯示轉速
  107.                                                         break;
  108.                                  }
  109.                                           case 2:
  110.                                           {
  111.                                               if(INC==0)              //INC按下warnspeed加1
  112.                                               {
  113.                                                              Delay(250);
  114.                                                              if(INC==0){
  115.                                                                            warnspeed=warnspeed+10;
  116.                                                                                     if(warnspeed>200)warnspeed=200;
  117.                                                                                     while(INC==0);
  118.                                                                       }
  119.                                                }
  120.                                                if(DEC==0)   //DEC按下warnspeed減1
  121.                                                {
  122.                                                               Delay(250);
  123.                                                              if(DEC==0){
  124.                                                                                     if(warnspeed==0)warnspeed=10;
  125.                                                                                     warnspeed=warnspeed-10;
  126.                                                                 while(DEC==0);
  127. ……………………

  128. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
紅外對管測電機轉速.doc (6.68 MB, 下載次數: 29)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表