王 丹
(河南省煤炭科學研究院有限公司,河南 鄭州 450001)
隨著電子技術的發展,衡器技術也在不斷進步和提高。本文設計的廉價電子秤硬件部分主要是光電斷路器中斷模塊、矩陣鍵盤模塊、單片機最小系統模塊、LED顯示模塊。該廉價電子秤的自動稱重功能由彈簧秤及光電斷路器電路構成的中斷模塊完成,價格輸入由鍵盤模塊完成,自動計算功能由單片機系統完成,計算結果由單片機送至LED顯示模塊,由LED顯示模塊進行顯示。
由于該設計是廉價電子秤的設計,材料選用原則是成本盡量低,主要體現在傳感器的選用上。該設計可以選用多種傳感器,如位移(距離)傳感器、角度傳感器、壓力傳感器。位移傳感器、角度傳感器雖可與彈簧秤讀數保持一致,但其價格居高,不予采用。壓力傳感器完全可脫離彈簧秤而獨自測重,這可能與彈簧秤得到的讀數不符,故亦不采用。最終定為光電斷路器。
1.2.1 特性與工作原理
光電斷路器是將電信號變換為光信號的發光元件與將少量光信號變換為電信號的受光元件組合成一體化結構的光敏傳感器。其種類很多,大致可分為透光型與光反射型。透光型是發光與受光元件之間有一定間隔而對向配置的光敏傳感器,結構如圖1(a)所示,主要用于檢測發光與受光元件之間通過的物體。光反射型是在發光與受光元件之間放置遮光板而并向配置的光敏傳感器,結構如圖1(b)所示,由受光元件檢測物體反射發光元件發出的光,從而達到檢測物體的目的。

圖1 光電斷路器結構示意Fig.1 Structure of photoelectric circuit breaker
透光型光電斷路器在檢測物體時,發光二極管流經恒定電流,由光敏晶體管接收其發出的紅外光,作為光敏晶體管的集電極電流。物體通過發光與受光元件之間時,紅外光被物體遮擋,光敏晶體管的集電極電流變小,若能獲取該電流的變化,就可檢測物體通達的情況。
1.2.2 基本應用電路
光電斷路器的基本輸出方式如圖2所示,光電斷路器采用GP1S05,也可采用其他光電斷路器元件[1-3]。光電斷路器的輸出形式有集電極輸出與發射極輸出。圖2(a)為集電極輸出電路,其響應頻率為數十kHz,可作為控制電機運轉的傳感器。圖2(b)為發射極輸出電路,性能與圖2(a)所示電路類似,但電壓利用率較低,入射光信號與輸出信號同相位,響應頻率也與圖2(a)所示電路相同。

圖2 光電斷路器的基本輸出方式Fig.2 Basic output mode of photoelectric circuit breaker
該設計實際上是一個計數器的設計,將質量的更變等價為計數值的更變。光電斷路器提供計數脈沖。為了使光電斷路器能提供計數脈沖,故又設計了計數器盤,配合彈簧秤,將彈簧秤測得質量轉化為光電斷路器的脈沖,單片機系統則是將計數脈沖解釋為質量信息,并與價格信息作以處理,送入LED顯示模塊,予以顯示。
所設計的計數盤如圖3所示。將計數盤邊緣切割成鋸齒狀,光電斷路器安裝在計數盤邊緣。光計數盤轉動時,便可向光電斷路器提供轉信息,光電斷路器便可提供計數脈沖。

圖3 計數盤的制作Fig.3 Making of counting disk
該設計鍵盤模塊采用通用4×4矩陣鍵盤原理如圖4所示。在軟件上加以改進,只需2次掃描,便可得到按鍵特征碼。

圖4 鍵盤模塊原理Fig.4 Principle of keyboard module
單片機最小系統選用51單片機系列中的AT89S52單片機。AT89S52是一個低功耗高性能的CMOS 8位單片機,片內含8 KBytes ISP(In-system programmable,在線系統編程)的可反復擦寫1 000次的Flash ROM(Read Only Memory,只讀存儲器),256×8 bit RAM (Random Access Memory,隨機存取存儲器)[4-8]。
單片機最小系統的電路原理圖如圖5所示。該電路可看作由單片機AT89S52(U1)、復位電路(K1、C3、R2構成)、振蕩電路(C1、C2、X1構成)、電源指示(R1、D1構成)、程序下載接口(JP1)組成。

圖5 單片機最小系統電路原理Fig.5 Principle of minimum system circuit of single chip microcomputer
在該最小系統中,對單片機31引腳(EA/VPP)接高電平,以期單片機在復位后從內部ROM的0000H開始執行;若此引腳接低電平,復位后直接從外部ROM的0000H開始執行,由于該系統為最小系統,不外設ROM。
(1)晶振路。若晶振X1取11.059 2 MHz,可以準確地得到9 600波特率和19 200波特率,用于串口通信場合;若X1取12 MHz,則單片機可產生微秒級間歇,方便定時。二者對于此設計而言,都無多大影響,故設計該系統時,隨意選取了11.0592 MHz的晶振。
(2)復位電路。由電容C3、電阻R2構成。結合“電容電壓不能突變”的性質可知,當系統一上電,RST腳的高電平持續兩個機器周期以上就將單片機復位。并且,這個高電平持續時間由電路的RC值來決定。
對于復位電路,可供計算高電平持續時間:
Ut=U0+(U1-U0)×[1-exp(-t/RC)]
(1)
t=RC×ln[(U1-U0)/U1-Ut]
(2)
在室溫下,一般高電平電壓是3.5 V,將U0=0 V,U1=5 V,Ut=3.5 V,R=1 000 Ω,C= 10 ×10-6F代入式(2)得:t=0.012 s,即該設計上電后RST管腳高電平保持時間為1.2 ms,比2個機器周期2 μs長得多。可知上電復位比較可靠。
上電運行后,進行初始化,之后進行鍵盤掃描。若有鍵按下,進行鍵識別。識別結果:0~10,即所按下的鍵為10個數字鍵中的一個或小數點,則接下來進行價格的更改;若鍵值為11,即清零鍵,則清零當前價格。若鍵值為14,即累計加鍵,則將當前金額累加入合計值。若鍵值為13,則更改LED顯存,使之顯示總計值,并關閉計算。若鍵值為12,即退出鍵,則退出合計值顯示,開始計算,進入正常狀態。若鍵值為15,即置零鍵,則清零重量。
下面對驅動函數的流程圖加以說明。
(1)由于驅動函數要對按鍵進行去抖動處理,這使得流程圖略顯復雜,現從流程詳圖中提取出鍵盤去抖動步驟,如圖6所示。

圖6 按鍵去抖動Fig.6 Key to remove jitter
從圖6中可看出,只是在“有鍵初按”或“有鍵初松”時,才會去避抖動及執行其后的代碼。“有鍵初按”與“有鍵初松”的辨別,靠當前鍵盤狀態與此次掃描有無按鍵按下二者組合來確定。
(2)鍵盤主要用于設定單價,為了便于輸入,將單價分為整數部分和小數部分。在輸入單價時,先輸入整數,完畢后,再輸入小數。整數輸入完畢的標志有二:①輸入了小數點;②整數值大于9(即整數部分已為1個2位數了),比如,若輸入0.95可只按“.”、“9”、“5”,輸入的“.”,輸入12.35可依次輸入“1”、“2”、“3”、“5”即為整數輸入有2種方式,這2種方式導致了價格的輸入有2種。
小數部分的輸入與整數部分輸入不同,區別主要為輸入整數時,輸入的第一個數為整數的個位,若未輸入完畢,之后輸入的數為其十位數,而輸入小數部分時,輸入的第一個數為小數部分的十位,而后才能輸入個位數。這點在原程序能明顯分辨出來。
(3)對各種“清零”的解釋。“清零鍵”對單價進行清零,“調零鍵”對質量進行清零,“退出鍵”即退出合計顯示狀態,開始新的累加,它要對合計進行清零。①“清零鍵”對價格清零后,要設定整數輸入使能,小數輸入失效。由于該設計為避免混亂,不能循環輸入單價,輸入一次單價后,必須按一次清零鍵,才能再次輸入新單價。故清零鍵才多此一項任務。②“調零鍵”對質量清零,雖然簡單,但帶來了2大好處:一是系統上電后,質量顯示可能不為零,按此鍵對其調零;二是使累計加操作更加方便。比如:顧客在稱完某一物品后,可按“累計鍵”將當次金額累加入合計金額后,可不必從彈簧秤上取下物品,此時只需按“調零鍵”,質量自動清零,接著可繼續往彈簧秤上放物品二,并可重新設置單價、再次累加操作。只要物品總質量不超過彈簧秤量程,便可重復進行上述操作。這一特點,可大大提高交易效率。③“退出鍵”,即退出合計顯示狀態。按“合計鍵”后,單價輸入與顯示、質量輸入、清零與顯示將不可用,金額處將顯示合計金額,此狀態為合計顯示狀態。退出此狀態的方法有:按一下“退出鍵”,退出合計顯示狀態;復位系統。“退出鍵”的任務是“譯碼使能”,即退出合計顯示狀態時,要允許譯碼。之所以進入合計顯示狀態后關閉譯碼,是為了節約單片機時間,減少單片機負擔。
由于設計最終要由硬件來實現,硬件的變更必會帶來軟件的重寫。為了避免硬件的改動對軟件的較大影響,硬件分塊設計,再為各塊編寫各自的軟件接口,這樣某一模塊的改動只會影響它的軟件接口,對其他模塊的軟件接口并無須改動。該設計的實現過程中,大部分時間是在進行硬件的調試,即該設計受硬件影響較大。硬件的不可重塑靠軟件是無法解決的。計數盤的制作結果并不理想,光電斷路器的固定亦不如人意。該設計的幾個便于使用的優點(亦是電子秤所沒有的),都由軟件提供。這些優點在調試過程中已調試正確。至此,該設計實物效果的不太理想,估計隨著計數盤的精確切割、光電斷路器的準確固定,效果會有所改善。