渦輪流量計(jì)系統(tǒng)系統(tǒng)軟件設(shè)計(jì)全面解析
1、下位機(jī)軟件設(shè)計(jì):
1.1、系統(tǒng)主程序的流程:
圖 4.1 系統(tǒng)軟件流程圖
2、流量一周期信號(hào)測(cè)量的流程:
信號(hào)經(jīng)低通濾波電路,預(yù)處理放大后,輸入至整形電路 1,經(jīng)整形電路 1 處理后,產(chǎn)生同頻率的方波信號(hào),再將該方波信號(hào)連接到 ATMEGA16 單片機(jī)的 PB0腳。由第二章的分析可知,流量計(jì)輸出信號(hào)頻率較低,適合采用周期法測(cè)量以獲得較高的測(cè)量精度。具體軟件流程如圖 4.2 所示。
圖 4.2 一周期測(cè)量模塊軟件流程圖
2.1、流量半周期信號(hào)測(cè)量的流程:
本模塊基于測(cè)周法原理,采用T/C1 捕捉功能實(shí)現(xiàn)流量信號(hào)的半周期測(cè)量。具體是:T/C1 初始化后,在T/C1 輸入捕捉中斷服務(wù)中需要讀取兩個(gè) ICR1 的值。個(gè)時(shí)間值就是第 0 次下降沿觸發(fā)時(shí)得到的 ICR1 的時(shí)間印記;而第二個(gè)值是第 1 次下降沿觸發(fā)時(shí)得到的時(shí)間印記。當(dāng)?shù)诙€(gè)值被記錄下來時(shí)立即禁止T/C1 的所有中斷。在測(cè)頻子程序中需要對(duì)前后得到的兩個(gè) ICR1 值進(jìn)行判斷并將它們進(jìn)行減法運(yùn)算得到差值。下一步需要判斷第二個(gè)值是否溢出。此處的溢出條件是當(dāng)?shù)?個(gè)讀取到的值大于第1個(gè)讀取到的值并且TCNT1的值出現(xiàn)過從65536到 0 的變化情況。如果判斷到溢出了就說明前后兩次的差值超過了 16 位定時(shí)計(jì)數(shù)器T/C1 的長(zhǎng)度,T/C1 的長(zhǎng)度 65536。在已經(jīng)溢出的情況下,需要記錄溢出次數(shù)。另外,為了降低被測(cè)頻率的下限值也需要記錄溢出的次數(shù),具體可以在T/C1 的溢出中斷中設(shè)置一個(gè)標(biāo)志位負(fù)責(zé)溢出次數(shù)的記錄,該溢出次數(shù)的值可以用于頻率的計(jì)算頻。具體軟件流程如圖 4.3 所示[2]。
圖 4.3 半周期測(cè)量程序流程圖
2.2、流量信號(hào) 1/4 周期測(cè)量的流程:
ATmega16 自帶 AD 轉(zhuǎn)換模塊。ADC 次轉(zhuǎn)換時(shí)序,如圖 4.4 所示。由手冊(cè)知道 ADC 轉(zhuǎn)換模塊工作時(shí)首先需要初始化 ADC,所以次 ADC 轉(zhuǎn)換需要 25 個(gè) ADC 時(shí)鐘周期 ( ADCSRA 寄存器的 ADEN 置位) 。正常轉(zhuǎn)換需要13 個(gè) ADC 時(shí)鐘周期,如圖 4.4 所示[32]。
圖 4.4 ADC 次轉(zhuǎn)換時(shí)序圖
圖 4.5 ADC 連續(xù)正常轉(zhuǎn)換時(shí)序圖
ATMEGA16 有多種 AD 轉(zhuǎn)換模式,不同的模式下,所需的轉(zhuǎn)換時(shí)間不同。如表所示[32]。
表 4.1 ADC 轉(zhuǎn)換和采用保持時(shí)間
圖 4.7 ADC 控制和狀態(tài)寄存器
本設(shè)計(jì)中,為了測(cè)量 1/4 周期,軟件方面采用 ATmega16 單片機(jī)自帶的 10位 ADC 轉(zhuǎn)換模塊和外部中斷 INT0 及定時(shí)器 T2 相結(jié)合的方式完成測(cè)量。電路方面采集信號(hào)經(jīng)濾波,放大后的模擬信號(hào),一路信號(hào)經(jīng)整形電路 2 處理后產(chǎn)生所需要中斷信號(hào) INT0;一路信號(hào)輸入至單片機(jī)的 ADC0 口,作為 AD 轉(zhuǎn)換的單端模擬輸入信號(hào)。
設(shè)計(jì)中需要注意的地方。1、因?yàn)樵搯纹瑱C(jī)的 ADC 轉(zhuǎn)換模塊在 50 k Hz 至 200k Hz 輸入時(shí)鐘的條件下,可以得到***好的轉(zhuǎn)換精度,又因?yàn)楸鞠到y(tǒng)時(shí)鐘為3.2MHZ,所以需要 16 分頻產(chǎn)生所需 200KHZ 的 ADC 時(shí)鐘。2、ADC 讀數(shù)采用默認(rèn)右對(duì)齊。讀數(shù)據(jù)時(shí)先讀取了 ADCL,那么必須緊接著讀取一次 ADCH。3、ADC 輸入電壓范圍為 0 至+5V;參考電壓采用 ADC 內(nèi)部 AVCC;4、通過外部中斷源 INT0 控制 ADC 轉(zhuǎn)換的啟動(dòng)和關(guān)閉[2]。
具體過程如圖 4.8 所示。
圖 4.8 四分之一周期測(cè)量程序流程圖 1
圖 4.8 四分之一周期測(cè)量程序流程圖 2
3、通訊模塊的流程:
在設(shè)計(jì)串口程序之前需要先簡(jiǎn)要說明一下 ATMEGA16 的 USART(同步和異步串行接收器和發(fā)送器),以及USART傳輸數(shù)據(jù)需要滿足的格式。ATMEGA16自帶的全雙工的 USART,是一個(gè)使用方便、功能強(qiáng)大的串行通訊模塊。主要特點(diǎn)為:
1) 能處于全雙工工作模式
2) 可以同步或異步通信
3) 主,從時(shí)鐘的同步信息
4) 具有生成多種波特率的波特率發(fā)生器
5) 在 XTAL 低頻率下有高的波特率
6) 8 位或 9 位數(shù)據(jù)
7) 噪聲濾波
8) 超越誤差的檢測(cè)
9) 幀錯(cuò)誤探測(cè)
10) 錯(cuò)誤起始位的檢測(cè)
11) 三個(gè)獨(dú)立的中斷
在異步串行通信中發(fā)送方和接收方要實(shí)現(xiàn)正常的通信必須采用相同的約定。首先,約定的***底層的協(xié)議。比如需要采用相同的傳輸波特率和相同格式的數(shù)據(jù)幀。通信雙方,如果所使用的波特率和數(shù)據(jù)幀格式不一樣那么通信就不能實(shí)現(xiàn)。本系統(tǒng)采用 ATMEGA16 自有的 USART 模塊[18]。
本系統(tǒng)中雖然通訊協(xié)議選擇的是 485 通訊,但和 232 串口通訊的工作模式基本相同。本系統(tǒng)串行口通信方式使用異步正常工作方式;設(shè)置波特率為9600bps;數(shù)據(jù)幀的傳輸格式設(shè)置為 8 位數(shù)據(jù)位、1 位起始位、1 位停止位、無奇偶校驗(yàn)位。首先,需要初始化異步串口通信,內(nèi)容包括確定串口工作的方式(編程寄存器為 UCSRA、UCSRB 、 UCSRC)和設(shè)定串口工作的波特率(編程寄存器為 UBBRRH、 UBBRRL)。
在具體程序設(shè)計(jì)中,串口采用中斷方式接收數(shù)據(jù);串口采用查詢方式發(fā)送數(shù)據(jù)。下位機(jī)串行接收數(shù)據(jù)時(shí),為了保證數(shù)據(jù)接收的完整性,每次需要連續(xù)接收8bit 數(shù)據(jù)。串口收發(fā)數(shù)據(jù)程序具體流程圖如圖 4.9 所示。
圖 4.9 串口通訊程序流程圖
4、渦輪流量計(jì)顯示模塊的流程:
由于本設(shè)計(jì)所需顯示內(nèi)容不是很多,在滿足顯示要求的基礎(chǔ)上,應(yīng)該盡量減少器件成本,因此在本系統(tǒng)設(shè)計(jì)中選擇太陽人電子有限公司的 1602 字符型液晶顯示屏,該模塊顯示容量為 16×2。 1602LCD 的時(shí)序在第四章顯示模塊設(shè)計(jì)有詳細(xì)的說明。模塊讀操作時(shí)序如圖 4.10 和模塊寫操作時(shí)序如圖 4.11 所示[2]。
圖 4.10 讀操作時(shí)序圖
圖 4.11 寫操作時(shí)序圖
圖 4.12 渦輪流量計(jì)顯示模塊軟件流程圖
5、渦輪流量計(jì)按鍵模塊的流程:
按鍵由四個(gè)鍵組成,分別是設(shè)置鍵、UP 鍵、DOWN 鍵 、MOVE 鍵。程序的邏輯為,當(dāng)按下四個(gè)按鍵中的任意一鍵就進(jìn)入按鍵處理程序中,然后判斷按下的按鍵類型,如果是設(shè)置鍵則顯示 K 值并且較低位閃爍,這時(shí)可以通過按上鍵和下鍵進(jìn)行數(shù)值設(shè)置,上鍵為當(dāng)前數(shù)值+1,左鍵為當(dāng)前數(shù)值-1,當(dāng)再次按下設(shè)置鍵后保存返回。若一開始是按上鍵或者下鍵或者 MOVE 鍵而不是進(jìn)入設(shè)置程序后才按的話,只會(huì)顯示當(dāng)前 K 值,再按下別的鍵無響應(yīng)。通過 MOVE 鍵和 UP 鍵組合鍵可以向左移動(dòng)閃爍位置。通過 MOVE 鍵和 DOWN 鍵組合可以向右移動(dòng)閃爍位置。具體操作是先按住 MOVE 鍵不松開,再按下 UP 鍵或者 DOWN 鍵,就可以移動(dòng)閃爍位置。軟件流程圖如圖 4.13。
圖 4.13 渦輪流量計(jì)按鍵程序流程圖
6、渦輪流量計(jì)軟件抗干擾措施:
基于軟件解決干擾的方法,都屬于軟件抗干擾。該方法具有使用靈活,不增加硬件成本的優(yōu)點(diǎn)?;舅枷胧?,如果某外界因素干擾到系統(tǒng)的正常工作,內(nèi)部程序可以自動(dòng)讓系統(tǒng)恢復(fù)到穩(wěn)定狀態(tài)?;蛘邔?duì)受干擾的輸入信號(hào)進(jìn)行軟件處理后,能滿足系統(tǒng)的輸入要求。又或者是保護(hù)軟件系統(tǒng)可靠工作的軟件輔助方法。
由于在渦輪流量計(jì)實(shí)際工作環(huán)境中,存在很多不確定的干擾信號(hào)。所以在硬件抗干擾措施的基礎(chǔ)上需要增加軟件抗干擾技術(shù),以便增強(qiáng)系統(tǒng)的整體性能。本系統(tǒng)主要采取了以下幾種軟件抗干擾措施。
(1) 系統(tǒng)初始化。在系統(tǒng)上電時(shí),程序會(huì)對(duì)單片機(jī)和各器件芯片的寄存器進(jìn)行初始化設(shè)置。初始化以后,電路中所有需要設(shè)置的芯片都回到了***初的默認(rèn)設(shè)置狀態(tài)。這樣就保證了設(shè)備復(fù)位以后能立即回到正常的工作狀態(tài)。上電初始化還可以防止內(nèi)存程序跑飛的突發(fā)故障。事實(shí)證明,無論是手動(dòng)初始化還是自動(dòng)初始化都能夠在較大程度上增強(qiáng)系統(tǒng)抗干擾的性能。
(2) 數(shù)字濾波抗干擾技術(shù)。在程序中可以通過對(duì) ADC 模塊采集的數(shù)據(jù)進(jìn)行平均值濾波處理,可以有效的去除系統(tǒng)的突發(fā)性脈沖干擾。具體可以先去掉 N個(gè)數(shù)據(jù)中的***大值和***小值再計(jì)算 N-2 個(gè)數(shù)據(jù)的算術(shù)平均值。為了加快測(cè)量速度,一般 N 取 4。其軟件流程圖如圖 4.14 所示。
(3) 防止抖動(dòng)技術(shù)。通過軟件延時(shí)和多次判斷的方式能夠避免鍵盤開關(guān)信號(hào)的抖動(dòng)。在單片機(jī)鍵盤的處理程序中,為防止四個(gè)按鍵抖動(dòng)和彈跳產(chǎn)生的干擾,采用按鍵延時(shí)檢測(cè)和多次檢測(cè)的方式加以規(guī)避[[11][21]。
本文小結(jié):
本章詳細(xì)敘述了渦輪流量計(jì)系統(tǒng)軟件部分的設(shè)計(jì)。首先概述了軟件設(shè)計(jì),然后分別介紹了下位機(jī)各個(gè)模塊軟件設(shè)計(jì),并給出了軟件流程圖。同時(shí),設(shè)計(jì)的軟件抗干擾措施,可以在一定程度上提高系統(tǒng)的可靠性。