文浩,宋世宇
(成都理工大學(xué) 機(jī)電工程學(xué)院,四川成都,610000)
通過電橋電路、放大電路、數(shù)模轉(zhuǎn)換電路、控制部分、顯示部分和鍵盤輸入部分構(gòu)成完整電子秤測量系統(tǒng),并完成電子秤的硬件設(shè)計(jì)調(diào)試和程序調(diào)試仿真。具體要求如下所列:
(1)利用Proteus 構(gòu)建相應(yīng)的測量系統(tǒng)硬件,主要包括:電橋電路(半差動(dòng))、放大電路(TL082 構(gòu)成儀用儀表放大器結(jié)構(gòu))、模數(shù)轉(zhuǎn)換電路(ADC0832)、單片機(jī)控制部分(AT89C51)、顯示部分(LCD1602)和鍵盤部分(矩陣鍵盤)。按照一定的器件搭建硬件仿真電路,并完成硬件電路的調(diào)試。
(2)利用keil 單片機(jī)仿真軟件對單片機(jī)進(jìn)行程序仿真,完成控制、計(jì)算、AD 采樣、鍵盤輸入、顯示部分的相應(yīng)程序編寫并調(diào)試。
(3)利用proteus 和keil 聯(lián)合調(diào)試仿真,完成整體系統(tǒng)的集成調(diào)試。
(4)根據(jù)輸入電阻的變化和顯示輸出情況,完成靜態(tài)標(biāo)定,完成對系統(tǒng)靈敏度、線性度等指標(biāo)的測量。
根據(jù)要求,作者擬采用差動(dòng)電橋來模擬應(yīng)變式電阻傳感器的工作[1],模擬有待稱量的物體放在傳感器上方,傳感器感受應(yīng)變后產(chǎn)生電阻變化后轉(zhuǎn)為電壓變化,由于變化非常微小,所以又采用儀表放大電路將微小的變化放大,將放大信號送入AD 采樣芯片,采樣后送入MCU 中,通過LCD1602 顯示出重量。通過矩陣鍵盤輸入物品的價(jià)格,可以直接在LCD1602 中顯示商品的單價(jià),重量以及總價(jià),通過此方案畫出的設(shè)計(jì)框圖如圖1 所示。
圖1 電子測量系統(tǒng)設(shè)計(jì)框圖
如圖2 所示,即為半橋差動(dòng)電路,如果讓R1和R2為工作電阻應(yīng)變片,那么他們兩個(gè)電阻值分別“一增一減”,實(shí)現(xiàn)變化互補(bǔ)達(dá)到差動(dòng),可以消除線性誤差,改善測量結(jié)果的質(zhì)量。半橋差動(dòng)電橋比單臂電橋測量結(jié)果的質(zhì)量更好。若將電橋四臂都接入電阻應(yīng)變片,則可以構(gòu)成全橋差動(dòng)電橋。這兩種都可以提高電橋的靈敏度。但本次設(shè)計(jì)只采用半橋差動(dòng)電橋。
圖2 半橋差動(dòng)電路
儀用儀表放大器電路如圖3 所示。兩個(gè)同相輸入接法的運(yùn)放A1、A2 組成第一級差分放大電路,運(yùn)放A3 組成第二級差分放大電路。在第一級電路中v1、v2分別加到A1 和A2 的同相端,R1 和兩個(gè)R2 組成的反饋網(wǎng)絡(luò),引入了負(fù)反饋,兩理想運(yùn)放A1、A2 的兩輸入端形成虛短:vp-vn= 0,因而有和,故得:
圖3 儀用儀表放大器電路圖
于是我們可以計(jì)算出電路的電壓增益為:
因?yàn)樵谇凹夒姌螂娐匪a(chǎn)生的變化非常微小,所以本文采用了TL082 構(gòu)成了儀用儀表放大電路來將其放大。以便于后面的觀察,此外增加了一個(gè)電壓表在輸出端,可以方便觀察后面AD 采樣后的輸出是否正確。電路的連接如圖3所示。
ADC0832是美國國家半導(dǎo)體公司生產(chǎn)的一種8 位分辨率、雙通道A/D 轉(zhuǎn)換芯片。由于它體積小,兼容性,性價(jià)比高而深受單片機(jī)愛好者及企業(yè)歡迎,已經(jīng)有很高的普及率[2]。
芯片各個(gè)接口說明:
①:CS_片選使能,低電平芯片使能。
②:CH0 模擬輸入通道0,或作為IN+/-使用。
③:CH1模擬輸入通道1,或作為IN+/-使用。
④:GND芯片參考0電位(地)。
⑤:DI數(shù)據(jù)信號輸入,選擇通道控制。
⑥:DO數(shù)據(jù)信號輸出,轉(zhuǎn)換數(shù)據(jù)輸出。
⑦:CLK芯片時(shí)鐘輸入。
⑧:VCC/REF電源輸入及參考電壓輸入(復(fù)用)。
作者采用CH1 為模擬輸入端,將前面電路放大后的模擬信號送入ADC0832 芯片,輸出送入AT89C51 主控芯片中去。電路連接如圖4 所示。
圖 ADC0832 模塊轉(zhuǎn)換電路
正常情況下ADC0832 與單片機(jī)的接口應(yīng)為4 條數(shù)據(jù)線,分別是CS、CLK、DO、DI,但由于DO 端與DI 端在通信時(shí)并未同時(shí)有效,并與單片機(jī)的接口是雙向的,所以電路設(shè)計(jì)時(shí)可以將DO 和DI 并聯(lián)在一根數(shù)據(jù)線上使用。當(dāng)ADC0832 未工作時(shí)其CS輸入端應(yīng)為高電平,此時(shí)芯片禁用,CLK 和DO/DI 的電平可任意。當(dāng)要進(jìn)行A/D 轉(zhuǎn)換時(shí),須先將CS使能端置于低電平并且保持低電平直到轉(zhuǎn)換完全結(jié)束。此時(shí)芯片開始轉(zhuǎn)換工作,同時(shí)由處理器向芯片時(shí)鐘輸入端CLK 輸入時(shí)鐘脈沖,DO/DI 端則使用DI 端輸入通道功能選擇的數(shù)據(jù)信號。在第1 個(gè)時(shí)鐘脈沖的下沉之前DI 端必須是高電平,表示起始信號。在第2、3 個(gè)脈沖下沉之前DI端應(yīng)輸入2 位數(shù)據(jù)用于選擇通道功能,其功能項(xiàng)見表1。
表1
如表1 所示,當(dāng)此2 位數(shù)據(jù)為“1”“0”時(shí),只對CH0 進(jìn)行單通道轉(zhuǎn)換。當(dāng)2 位數(shù)據(jù)為“1”、“1”時(shí),只對CH1 進(jìn)行單通道轉(zhuǎn)換。當(dāng)2 位數(shù)據(jù)為“0”“0”時(shí),將CH0 作為正輸入端IN+,CH1 作為負(fù)輸入端IN-進(jìn)行輸入。當(dāng)2 位數(shù)據(jù)為“0”“1”時(shí),將CH0 作為負(fù)輸入端IN-,CH1 作為正輸入端IN+進(jìn)行輸入。
到第3 個(gè)脈沖的下沉之后DI 端的輸入電平就失去輸入作用,此后DO/DI 端則開始利用數(shù)據(jù)輸出DO 進(jìn)行轉(zhuǎn)換數(shù)據(jù)的讀取。從第4 個(gè)脈沖下沉開始由DO 端輸出轉(zhuǎn)換數(shù)據(jù)最高位DATA7,隨后每一個(gè)脈沖下沉DO 端輸出下一位數(shù)據(jù)。直到第11 個(gè)脈沖時(shí)發(fā)出最低位數(shù)據(jù)DATA0,一個(gè)字節(jié)的數(shù)據(jù)輸出完成。也正是從此位開始輸出下一個(gè)相反字節(jié)的數(shù)據(jù),即從第11 個(gè)字節(jié)的下沉輸出DATD0。隨后輸出8 位數(shù)據(jù),到第19 個(gè)脈沖時(shí)數(shù)據(jù)輸出完成,也標(biāo)志著一次A/D 轉(zhuǎn)換的結(jié)束。最后將CS 置高電平禁用芯片,直接將轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行處理就可以了。更詳細(xì)的時(shí)序說明可見圖5。
LCD1602 是字符型液晶顯示器,它的主控芯片是HD44780 或者其他兼容芯片。能夠同時(shí)顯示16x2 即32 個(gè)字符。LCD1602 液晶顯示的原理是利用液晶的物理特性,通過電壓對其顯示區(qū)域進(jìn)行控制,即可以顯示出圖形。
芯片各個(gè)接口說明:
①:GND 為電源地。②:VCC 接5V 電源正極。
③:LCD 驅(qū)動(dòng)電源,也叫偏壓信號。
④:RS 為寄存器選擇,高電平1 時(shí)選擇數(shù)據(jù)寄存器、低電平0 時(shí)選擇指令寄存器。
⑤:RW 為讀寫信號線,高電平1 時(shí)進(jìn)行讀操作,低電平0 時(shí)進(jìn)行寫操作。
⑥:EN 端為使能(ENABLE)端,高電平1 時(shí)讀取信息,負(fù)跳變時(shí)執(zhí)行指令。
⑦~?:D0~D7 為8 位雙向數(shù)據(jù)端。
DDRAM(Display Data RAM)就是顯示數(shù)據(jù)RAM,用來寄存待顯示的字符代碼,共80 個(gè)字節(jié),其地址和屏幕的對應(yīng)關(guān)系如圖6 所示。
圖6 地址和屏幕對應(yīng)關(guān)系圖
DDRAM 相當(dāng)于計(jì)算機(jī)的顯存,為了在屏幕上顯示字符,就把字符代碼送入顯存,這樣該字符就可以顯示在屏幕上了。同樣LCD1602 共有80 個(gè)字節(jié)的顯存,即DDRAM。但LCD1602 的顯示屏幕只有16×2 大小,因此,并不是所有寫入DDRAM 的字符代碼都能在屏幕上顯示出來,只有寫在范圍內(nèi)的字符才可以顯示出來,寫在范圍外的字符不能顯示出來。這樣,在程序中可以利用下面的“光標(biāo)或顯示移動(dòng)指令”使字符慢慢移動(dòng)到可見的顯示范圍內(nèi),看到字符的移動(dòng)效果。前面說了,為了在液晶屏幕上顯示字符,就把字符代碼送入DDRAM。例如,如果想在屏幕左上角顯示字符“A”,那么就把字符“A”的字符代碼41H 寫入DDRAM 的00H地址處即可。LCD1602 和AT89C51 連接如圖7 所示。
圖7 系統(tǒng)整體電路圖
作者采用了MM74C922 鍵盤解碼器,這個(gè)解碼器能夠自己獨(dú)立地進(jìn)行鍵盤檢測、消抖,可以直接將鍵盤鍵值以四位BCD 碼輸出,節(jié)省MCU 的IO 口。而且能自動(dòng)消除按鍵抖動(dòng),非常方便我們使用矩陣鍵盤。它還能給出按鍵是否按下的標(biāo)志,其數(shù)據(jù)線還具有三態(tài)輸出的功能,便于進(jìn)行總線連接。具體電路可見圖7。
主控部分采用了AT89C51 芯片,AT89C51 是一種帶4K字節(jié)FLASH 存儲器,256 字節(jié)片內(nèi)數(shù)據(jù)存儲器(00H~7FH為片內(nèi)RAM,80H~FFH 為特殊功能寄存器SFR),32 個(gè)I/O口線,兩個(gè)16 位定時(shí)/計(jì)數(shù)器,5 個(gè)中斷源,一個(gè)全雙工串行通信口,片內(nèi)振蕩器及時(shí)鐘電路的單片機(jī)。
P1.0~P1.2 口分別接ADC0832 的片選使能端CS、時(shí)鐘信號端CLK、數(shù)據(jù)輸出端DI/DO;P1.6 接MM74C922的輸入提示端DA;P1.7 接蜂鳴器;P0 端口接上拉電阻作LCD0832 的D0~D7的數(shù)據(jù)輸入端;P2.4~P2.7 依次接MM74C922 的四位數(shù)據(jù)傳輸端口A、B、C、D;P3.4~P3.7依次接LCD0832 的EN、RS、RW 端。
具體連接圖見圖7 所示。
整個(gè)電路模型由以上幾個(gè)部分共同組成,將它們連接好后如圖7 所示。
在Proteus中選擇需要的元器件,按照原理畫出電路圖,將各個(gè)元件放置在合適的位置,利用總線可以簡化電路圖,調(diào)整位置后可以得到如圖7 所示仿真電路圖。
利用Keil 編寫程序,分別編寫LCD1602.h、ADC1602.h、MM74C922.h、delay.h 等程序,最后在main.c 中調(diào)用函數(shù)即可。編寫完成函數(shù)后,通過編譯后,將會(huì)生成一個(gè).hex文件,在Proteus 中雙擊AT89C51 就可以選擇生成的.hex文件下載進(jìn)單片機(jī)內(nèi),可以實(shí)現(xiàn)聯(lián)合調(diào)試。下面為Keil 中編寫的部分主函數(shù)程序代碼。
在Proteus 中,通過改變滑動(dòng)變阻器的接入阻值大小,可以模擬不同重量的物品。當(dāng)沒有放置物品,即滑片在正中間的時(shí)候,電橋電路此時(shí)處于平衡狀態(tài),輸出電壓為0;故顯示為0。此時(shí)LCD1602 顯示如圖8 所示。
圖8 LCD1602顯示圖(未放置物品)
當(dāng)改變左邊滑動(dòng)變阻器滑片位置時(shí),例如改變至65%,相應(yīng)的右邊滑動(dòng)變阻器應(yīng)該調(diào)至45%,將會(huì)顯示W(wǎng)T:1.50KG;再輸入單價(jià)為06(注意輸入應(yīng)從低位輸入,此時(shí)先按6 再按0),通過程序計(jì)算后,總價(jià)將會(huì)在TOTAL:后方顯示。此時(shí)LCD1602 顯示如圖9 所示。
圖9 LCD1602 顯示圖(放置物品)
稱量結(jié)束后,可以通過清零按鈕將輸入數(shù)據(jù)清零,做好了下一次稱量的準(zhǔn)備。按下清零后回到初始狀態(tài)。
3.4.1 靈敏度
測量電橋的輸入輸出特性(含放大電路),調(diào)節(jié)輸入端滑動(dòng)變阻器每次變化5%即10Ω,得到多組數(shù)據(jù)。導(dǎo)入Matlab 后畫出的圖像如圖10 所示。
圖10 特性曲線
3.4.2 線性度
通過擬合直線的值,如表2 所示,再根據(jù)測得值Y,可以計(jì)算出來它的最大偏差為:ΔLMAX=0.178。由此還可以知道滿量程YFS= 5,所以可以計(jì)算出線性度γL為:
表2
表3
表4
3.4.3 回程誤差
通過正反行程測量,得到反行程數(shù)據(jù),輸入Matlab 中可得正反行程最大誤差為:ΔHMAX=0.0700。
所以可以計(jì)算出回程誤差Hγ為:
在電橋電路設(shè)計(jì)過程中,總是無法得到需要放大倍數(shù)的電壓值,只修改一個(gè)參數(shù)無法滿足,可以通過修改兩個(gè)值共同作用從而得到需要的放大倍數(shù);在LCD1602 顯示部分,在值的顯示部分無法讓其完全顯示出來時(shí),需要合理安排顯示字符的位置,讓其完全顯示;在總價(jià)計(jì)算的過程中,10以內(nèi)單價(jià)計(jì)算沒有問題,超過10 后,就會(huì)出現(xiàn)計(jì)算錯(cuò)誤,輸入12 計(jì)算,結(jié)果卻是21 的計(jì)算結(jié)果,此時(shí)是因?yàn)檩斎氲闹荡娣诺臄?shù)組中,順序搞錯(cuò),才會(huì)出現(xiàn)這樣的情況,更正后即可正常計(jì)算結(jié)果并顯示出來;整個(gè)設(shè)計(jì)達(dá)到了電子秤的基本要求,之后還可以根據(jù)需要加上一些其他功能,例如去皮功能,存儲功能等,以方便使用。