一、功能描述 由鍵盤輸入每個瓶子將裝入的藥片數。當每個瓶子的藥片正好裝滿時,以下兩個事件同時發生:(1)停止藥片裝入;(2)傳送機將裝滿藥片的瓶子移走,下一個空瓶自動進入裝藥位置。一旦空瓶進入合適位置,傳送機立即發出控制信號,開始第2瓶藥片的裝入,藥片裝瓶示意圖如圖1所示。 file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps1.png 圖1 藥片裝瓶示意圖 二、電路實現的主要功能 考慮到系統中電路設計的簡單性,每瓶裝入的藥片數及瓶數限制在10以內。電路實現的主要功能如下: (1)通過鍵盤或按鍵設置每瓶將裝入的藥片數(1-9); (2)1位數碼管顯示當前已裝藥瓶數(最大值為9); (3)2位數碼管顯示當前已裝的總藥片數(最大值為81)。 三、系統模塊框圖 系統模塊框圖如圖1所示,共包括五個功能。 file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps2.jpg 圖1 系統模塊框圖 四、電路設計與功能實現 1、功能一:藥片輸入信號的模擬與移瓶模塊 (1)我們通過每一個時鐘信號的輸入來模擬單個瓶子中每一個藥片的裝入,利用555定時器設計自激多諧振蕩器,來產生所需要的時鐘信號,電路設計如下圖所示: file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps3.jpg 要實現對于藥瓶移動過程的模擬,我們可以通過74LS161芯片和與非門設計的電路實現對于自激多諧振蕩器產生的信號進行14分頻,并利用其file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps4.jpg端產生14分頻的方波。進而達到在CP信號為0(也即藥瓶移動的過程)時藥片的裝入停止。 利用置數法設計的M=14計數器的狀態轉移真值表如下圖所示: file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps5.pngfile:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps6.pngfile:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps7.pngfile:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps8.jpg 具體的電路圖如下圖所示: file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps9.jpg (2)對藥片的輸入數量進行計數的電路通過74160芯片連接而成的的M=9的計數器電路進行實現,其電路圖如下圖所示:(其中序號U20的74160芯片的CLR端在功能三的介紹中還有其他信號接入,因此此圖中暫時先不接入) file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps10.jpg 2、功能二:比較模塊與由鍵盤輸入設置單瓶裝入的最大藥片數(1~9) (1)設我們需要每瓶裝的藥片數為B,且有file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps11.jpg。其中file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps12.jpg為B由十進制轉換為二進制得到的二進制數。為了實現由鍵盤輸入設置單瓶藥片裝入的最大藥片數,我們可以通過74147BCD編碼器來實現對于B的輸入。其中B由鍵盤輸入的控制可以通過一個單刀雙擲開關來實現對于B數據輸入的選擇。電路圖如下所示: 其中74147的DCBA輸出端分別對應file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps13.jpg file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps14.jpg (2)對于當前瓶中藥片數量的增加(也即藥片的裝入),我們可以通過74LS160芯片設計的計數器電路來實現,并且為了使在第一片藥片也即第一個周期的CP信號輸入時藥片的初始計數為1,我們需要通過置數法實現 74LS160芯片的1~9的計數。為了實現使每瓶藥片裝的藥片數是我們需要的數字,我們可以利用74LS85數據比較器來實現對于每瓶藥片數的控制。設當前瓶中的藥片數為A,有file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps15.jpg,即A的二進制數為file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps16.jpg。在A<B時,7485芯片的OALTB端口輸入為1,在A=B時,OALTB端口的輸出為0。定義該端口的輸出變量為X、移瓶模塊的輸出變量為Y那么我們將藥片計數模塊的時鐘信號輸入為file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps17.jpg。在A<B時X=1,file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps18.jpg,也就是在每一次Y的下降沿使得74160芯片計數加一(裝入一個藥片)。在A=B的情況中,此時X=0,那么74160芯片的的輸入信號被與非門“封鎖”,輸入信號為file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps19.jpg始終為1,停止計數。進而實現我們對于每瓶藥片需要裝入數量的控制。電路設計如下圖所示: file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps20.jpg 3、功能三:當前已裝瓶數(1~9)的顯示于當前已裝入藥片總數(1~81)的顯示 (1)我們通過功能二實現過程中所用的7485芯片,可以實現對于當前已裝瓶數的記錄,在A=B時,7485比較器的OAEQB端會輸出高電平,定義該端口輸出變量為Z。那么在A<B時,Z=0,在A=B時Z=1。也就是在A<B到A=B的過程中Z信號會進行由0到1的變化,而在下一個時鐘周期信號時,Z又會由1變成0。對于已裝藥瓶數可以通過74160通過置數法連接形成M=9的計數器電路來實現計數。將Z作為74160的時鐘信號,在Z由0到1再到0的時鐘周期剛好與移瓶模塊的信號周期相同,并且通過與非門將file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps21.jpg作為記錄當前藥片數的74160芯片的清零端的輸入,保證在當前瓶中藥片數達到我們要求之后會清零。其電路圖如下圖所示:(前面已經連接出來的電路的接線在此處進行省略) file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps22.jpg (2)總藥片數量的記錄我們利用置數法通過兩片74160芯片實現M=81的計數器電路,其中二者的時鐘信號端與單瓶藥片計數器的74160芯片的時鐘信號端相同。電路結構如下圖所示: file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps23.jpg 四、功能四:通過數碼管顯示各個計數器所代表的數據 通過74160芯片連接形成的計數器、4511顯示譯碼器與共陰極數碼管可以實現對當前計數器的數據的顯示,電路結構如下: file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps24.jpg 綜合上述功能,以及對電路進行連接,得到最終的電路結構如下,并且經過驗證符合我們所需要的各種功能。 file:///C:/Users/Zbqxl/AppData/Local/Temp/ksohtml19576/wps25.jpg 從左往右各個顯示數碼管所代表的分別為: 左一:當前瓶子中的藥片數 左二:已裝的瓶數 左三與左四:當前已裝的總藥片數
|