賈海云
(合肥財經職業(yè)學院,安徽合肥 230601)
大規(guī)模集成電路技術的出現(xiàn),逐漸凸顯出傳統(tǒng)單片機在電路設計方面的不足。比如,由于不同類型的芯片帶有不同的指令,而單片機程序并非都適用于這些芯片。修改程序僅滿足了電路在短期內的功能需求,卻依舊要面臨軟件升級的繁瑣。電路設計技術必須朝著高擴展性、便捷性方向發(fā)展。本文對計價器電路進行研究[1],主要通過VHDL來實現(xiàn)。
對計價器的功能定義如下:(1)白班時間段定為早上5點到晚上11點。在該時間段內行駛里程數在3公里以內的統(tǒng)一計價8元;行駛里程數在3~8公里的按照每公里2元加價。行駛里程數超出8公里的按照每公里3元加價。(2)夜班時間段的計價方式為在白班正常計價的基礎上加價20%。燃油費則按照每次載客加收2元來執(zhí)行。根據上述功能需求,構建出如圖1所示的計價系統(tǒng)結構圖。
圖1 計價系統(tǒng)結構
定義車輪直徑為52 cm,行駛完整一圈約163 cm后A計數器則計存一次CLK脈沖信號。里程數達到10 km后,A計數器輸出OCLK2來計存里程信息。同時B計數器CLK開始計數,當里程計到100 M后B計數器輸出OCLK1來計存里程信息。C計數器對10 M的OCLK2執(zhí)行累計操作,再將里程數據傳至動態(tài)掃描電路。D計數器對100 M的OCLK1執(zhí)行累計操作,同時也要控制在乘客上車開始啟動時顯示的價格,即8元。當行駛里程在3~8 km時,每增加一個100 M脈沖就執(zhí)行相應的加價金額。此外,當車輪在5分鐘內沒有跑起則不計價,5分鐘過后每5分鐘加價2元。譯碼/動態(tài)掃描電路將行駛里程信息和價格信息譯碼后以動態(tài)數據傳至數碼管顯示。這里定義低二位用于顯示小數,高二位用于顯示整數。
本次研究通過VHDL設計再將一個掃描電路和4個計數器構建的底層模塊[2]加載到FPGA上,輔以外圍數碼顯示、輪胎感應等電路組建出一套計價系統(tǒng)方案。
計價系統(tǒng)電路圖如圖2所示。試驗箱可生成脈沖信號CLK。供電電源AD-DC輸出/輸入分別為+5 V(4 A)/115~230 VAC。
圖2 計價系統(tǒng)電路
START/STOP采用雙刀雙路。由于在終止計價時要將計價信息保留并顯示于數碼顯示管上,當再次啟動計價時將上次顯示的計價數據給予清零并重新開始計價。另外兩路開關,其中一路用于啟動指示和啟動/停止輸出信號給FPGA芯片的I/O口。當按下按鍵后,清零部分和啟動計價部分同時進行。清零操作瞬間,計價指示燈亮起。再次按下按鍵后開關切換至另外兩路,空車指示燈亮起。如圖3所示。
圖3 啟動/終止電路
VHDL無法在相同的結構里對不同的動作賦值,在圖4所示電路中將FPGA I/O置為高電平1執(zhí)行清零操作。當斷開按鍵開關,清零的輸出接地,合上按鍵開關電容充電清零口置為高電平。充電結束后清零口的輸入再次置為低電平。當斷開按鍵開關,2 kΩ電阻可放電為下次充電準備。
圖4 清零電路
圖5 分頻電路
計價計數器和行駛里程計數器的計算不同。前者計數頻率為100 M,后者計數頻為10 M。因此通過定義分頻系數6和60將傳感器傳輸的車輪CLK進行分頻。分頻電路如圖5所示。
當啟動端口的START置1便開始計數,直到輪胎CLK為6,此時輸出一個如圖6所示的10 M OCLK2信號。累計輪胎CLK等于60則輸出一個如圖7所示的100 M信號。相反,當啟動端口置零則不再執(zhí)行計數直至重置為1再執(zhí)行計數。顯然仿真[3]數據與功能要求是吻合的。
圖6 輸出10 M OCLK2信號
圖7 輸出100 M OCLK1信號
將分頻模塊輸出的信號脈沖定義為計數的信號脈沖進行動態(tài)顯示。當收到一個信號脈沖時行駛里程數則增加100 M,如果再接收到一個信號脈沖,繼續(xù)按照100 M的里程數值累加,依此類推。行駛里程計數模塊如圖8所示。
圖8 行駛里程計數模塊
當將復位鍵置1,所有數據被初始化,即執(zhí)行清零操作;相反,當將復位鍵置零,里程模塊的百位開始執(zhí)行計數操作。百位的計數規(guī)則為隨著脈沖信號逐個增加,百位逐次加1直到百位達到9,此時開始執(zhí)行向十位進位操作。整個計數執(zhí)行過程如圖9至圖12所示。
圖9 百位執(zhí)行計數操作
圖10 十位執(zhí)行進位操作
圖11 個位向十位進位
圖12 復位
將分頻模塊輸出的100 M信號脈沖定義為計價模塊的計數信號脈沖。計價模塊初始化數據置為8。如果行駛里程數在3 km以內,不接受分頻模塊輸出的信號;反之,才接受脈沖驅動。當里程在3~8 km和8 km以上,則每次在收到一個信號脈沖后其數值分別增加0.2和0.3。夜班時間段則額外加價20%的加班費。終止計價時需加價燃油附加費2元。邏輯框圖如圖13所示。
圖13 計價模塊
根據設計要求,不超過3 km僅計起步費,如圖14所示。
圖14 白班的起步價
里程在3~8 km,(1)白天行駛時,每來一個脈沖均在8元基礎上加價0.2元,如圖15所示。超過8 km,則在原計價數據上每來一個脈沖增加0.3元,如圖16所示;(2)夜間行駛由于額外增加20%加班費,故不超過3 km的計價均為9.6元,如圖17所示。3~8 km區(qū)段,每來一個脈沖都在起步價基礎上加價0.24元,如圖18所示。超出8 km則在原有計價數據基礎上每來一個脈沖增加0.36元,如圖19所示。按下復位按鍵將reset置1即為重置起步價開始執(zhí)行下一次的計價,如圖20所示。
圖15 白班的3~8 km區(qū)段
圖16 白班的8 km以上區(qū)段
圖17 夜班的起步價
圖18 夜班的3~8 km區(qū)段
圖19 夜班的8 km以上區(qū)段
圖20 復位起步價
譯碼單元位于動態(tài)掃描模塊內,用于將行駛里程數據與價格數據轉換成編碼后動態(tài)驅動小數點和字段。動態(tài)掃描邏輯結構如圖21所示。定義動態(tài)掃描的周期為8,對動態(tài)掃描過程執(zhí)行如圖22所示的模擬。
圖21 動態(tài)掃描邏輯結構
圖22 模擬掃描
根據功能設計要求,車輛途徑十字路口遇紅燈等待前5分鐘不計價,過后開始加價2元的堵車費。此時CLK用于計算堵車時長,再將時間信號通過TIME out輸出。用于復位的RESET口和其它模塊的復位端相連一塊復位。START用于啟動計時,STOP用于終止計時。計時模塊如圖23所示。
圖23 計時模塊
顯示模塊的原理如圖24所示,1~8號端口用來控制a~g和dp,9~16號端口用來控制1~8數碼管,16個端口協(xié)調一起控制數碼管的亮暗以及數字的顯示[5]。所有數碼管顯示不是在同一時刻完成,剛開始對數碼管1進行賦值,用choice數據來選擇數碼管,再把data數據賦予1~8號端口,然后顯示第一位數碼管。choice進行第二次選擇,再把data數據賦予1~8號端口,然后顯示第二位數碼管。據此原理依次進行選擇、賦值最終讓數碼管依次亮起。整個工作過程都會因為數碼管較快的賦值速度、人眼較低的分辨率以及較小的延時,使人眼錯覺地認為所有的數碼管似乎同時發(fā)亮顯示。
圖24 顯示模塊
本文結合了車輛計價的實際需求提出了電子計價器的設計方案。整個過程借助FPGA芯片和VHDL[6]作為載體,并根據功能需求對整個計價系統(tǒng)展開模塊化設計。通過QuartusⅡ測試驗證了所設計的電子計價器方案的計價結果和功能指標完全吻合,具備可行性。