《某電容式燃油液位傳感器的軟件設計綜述》3500字_第1頁
《某電容式燃油液位傳感器的軟件設計綜述》3500字_第2頁
《某電容式燃油液位傳感器的軟件設計綜述》3500字_第3頁
《某電容式燃油液位傳感器的軟件設計綜述》3500字_第4頁
《某電容式燃油液位傳感器的軟件設計綜述》3500字_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

某電容式燃油液位傳感器的軟件設計綜述目錄TOC\o"1-2"\h\u3581某電容式燃油液位傳感器的軟件設計綜述 146701.1編程環境與編程語言 1128831.2總體設計 1151641.3主要功能程序設計 2220101.3.1初始化定時器 2211231.3.2初始化函數 5284311.3.3采集、輸出信號 5147601.3.4軟件修正信號輸出 7135841.3.5軟件去抖應用 81.1編程環境與編程語言單片機是整個液位測量系統的核心,振蕩電路數據使用單片機進行處理,并控制輸出,因此軟件設計主要是單片機的程序設計。由于要實現單片機采集脈沖信號,然后通過單片機內部通過數據處理轉換成相應的頻率信號;數據處理思想是兩點之間確定一條直線,根據用戶需要將輸出分成多段直線,每一段線性輸出。目前PIC單片機程序開發使用的語言主要有匯編語言、C語言。C語言具有功能強大、運用靈活、代碼小、運行速度快等先天性的優點,同時C語言可以很容易地實現系統移植,并加快軟件的開發周期。支持單片機的C語言編譯器主要有PICC、MPLAB等。PICC是一種符合ANSI標準的C語言開發工具,功能合適、使用方便、技術支持好。是綜合了編輯器和工程管理器的集成工作環境(IDE),源文件全部被組織到工程之中,文件的編輯和工程的構筑也在這個環境中完成,工程管理器還能直接生成可以直接使用的HEX格式文件,可以直接使用下載器將文件下載到單片機中運行。因此整個系統開發使用PICC作為編程環境,使用C語言作為編程語言。1.2總體設計在進行軟件總體設計時,應該采用結構化設計方法,即模塊化自頂向下的設計方法。根據需求分析的要求,明確所要解決的問題,將一個總的問題,明確為若干個部分,對每個部分給出軟件解決方案,模塊化設計有利于程序設計任務的劃分,各獨立模塊允許被任意調用,使得整個程序結構清晰,組合靈活,維護調試方便。單片機完成了以下功能:(1)整個系統的初始化:包括單片機I/O端口的初始化,整個中斷系統的初始化,定時器初始化,看門狗初始化,EEPROM設定值讀取。(2)通過捕獲端口,采集振蕩電路頻率信號,定時器計數。(3)修正數據,控制輸出。1.3主要功能程序設計主程序的主要運行流程如圖1.1所示。首先對單片機進行上電復位操作,運行初始化程序,然后通過CCP1模塊檢測引腳狀態,開中斷進行計數,對采集到的數據進行處理,通過PWM控制輸出。上電復位上電復位初始化定時器初始化函數采集信號脈沖調制,去抖動輸出圖1.1軟件控制流程圖1.3.1初始化定時器定時器選取外部12MHz晶振作為時鐘源,選擇增加計數模式,即增加到某一初值后溢出。若要實現該功能,就需要首先設定定時器的初始值,經過程序指令的不斷運行,增加計數達到累計溢出后執行中斷程序,輸出高電平或者低電平。以TMR0定時器為例,TMR0是一個8位的定時器,所能代表的數值位0~255,也就是說定時器可以從0開始一直加到255,到255后再加一就又變成0。此時TMR0定時器中斷標志位(TMR0IF)變成1。下面以兩個流程圖的形式,分別以頻率和周期的方式來說明從時鐘頻率一直到定時器中斷溢出之間的關系。假設時鐘頻率是4MHz,定時器預分頻值為2,定時器初始值為0。圖1.2時鐘頻率到定時器溢出中斷流程圖從圖1.2可以看出,整個流程期間經歷了三個步驟:首先4MHz的時鐘頻率4分頻后變成1MHz的指令頻率;然后預分頻器2分頻后變成0.5MHz的頻率供給定時器;定時器經過256分頻后變成約1952Hz的頻率溢出中斷。圖1.3時鐘周期到定時器溢出中斷流程圖同圖1.2一樣,整個流程期間也經歷了三個步驟:首先0.25μs時鐘周期4分頻后變成1us指令周期;然后預分頻器2分頻后變成2μs周期供給定時器;定時器每隔2μs加一,加到256次,256×2μs=512μs溢出中斷。結合上述內容,以時鐘晶振4MHz為例,要求每間隔50ms輸出一個高電平,50ms輸出一個低電平,即要得到周期為100ms的方波信號,需要經過的過程則有:(1)首先得到指令周期tt=1F/4(5式中,t為指令周期;F為晶振時鐘的振蕩頻率,4MHz。由式5-1可以計算得出,指令周期t=1μs。(2)得到預分頻定時器定時的最大時間要超過這50mS,所以預分頻器要選擇256,那么可以得到的最大的定時時間就是256倍的預分頻,大約61.536ms,才能滿足大于50ms的要求。(3)定時器初始化值

從上述分析中,可以推算出,定時器的初始化值設為T0,應是定時器最大值加一后,與定時時間經過預分頻后的差值,即T0=定時器最大值+1?經過計算可得,定時器的初始化值T0為60.6875,四舍五入后應為61。(4)設置相關的寄存器OPTION_REG寄存器中我們一般需要設置三處,PS<2:0>設置用來設置預分頻預分頻范圍從2~256,PSA設置成0,是將預分頻器分配給Timer0模塊,TMR0CS設置成0,內部指令周期時鐘。代碼如下例:voidInitT0(void){ PSA=0; PS2=0; PS1=0; PS0=0;INTCON|=0x20;TMR0=0x00;}1.3.2初始化函數主程序調用函數前,函數初始化,進行標志位配置。延時函數的作用,就是為了能夠控制數據采集速度,在完成一次采集之后需要延時一定的時間,但是如果使用傳統的軟件延時,不但降低了單片機的效率,占用單片機資源,而且及時精確度不高。因此采用單片機自帶的定時器,定時時間到后產生中斷,置位標志位,這種方式可以方便的實現系統定時訪問或處理事務,并且能夠獲得較為精確的延時。1.3.3采集、輸出信號PIC單片機配置有CCP(捕捉/比較/脈寬調制)模塊,即CCP1,有獨立的16位寄存器CCP1。CCP模塊的功能包括外部信號捕捉、內部比較輸出以及PWM輸出,與定時器/計數器配合使用。

CCP模塊可工作在3種模式下:捕捉方式、比較方式和脈寬調制方式。

(1)捕捉方式:是指檢測引腳上輸入信號的狀態,當信號的狀態符合設定的條件時(信號上升沿或下降沿出現時)產生中斷,并記錄當時的定時器/計數器值,當CCP模塊工作在捕捉方式時,TMR1控制寄存器必須工作在定時器或同步計數方式下。例如,在t1時刻之前把CCP1設置為捕捉脈沖上升沿。當信號上升沿到來時,產生CCP中斷,在中斷服務程序中捕捉該時刻TMR1寄存器中16位的值time1,將CCP1設置為捕捉脈沖的下降沿。當該信號下降沿到來時,產生CPP中斷,在中斷服務程序中捕捉該時刻TMR1寄存器中16位的值time2,而后再把CCP1設置為捕捉脈沖的上升沿。當信號的下一個上升沿來到時,又產生CCP中斷,在中斷服務程序中捕捉此刻TMR1寄存器中的16位的值time3,則信號的周期T=(time3-time1)μS,信號頻率f=1/T,脈沖寬度P=(time2-time1)μS,占空比D=P/T×100%。考慮到CCP捕捉方式可能發生的最大誤差為±1μs,為滿足誤差要求,可把上述過程多進行幾次,將各次測試的平均值作為最后的測量值。圖1.2捕捉模式原理示意圖如果需要測量的最高頻率為1000Hz,周期只有1000μs,且占空比的變化范圍為10%~90%,則高低電平持續的最短時間都為100μs,可以有充分的時間執行中斷服務程序。實際應用中發現兩次捕捉中斷的時間間隔小于1次中斷服務時間,通過適當設置寄存器CCP1CON的值,使CCP模塊每4個脈沖上升沿捕捉1次,這樣兩次中斷的時間間隔就可以滿足要求。(2)比較方式:是指將事先設定好的值與定時器方式或同步計數方式下的值相互比較,當兩個值相等時,產生中斷并驅動事先設定好的動作。(3)脈寬調制方式:適用于從引腳上輸出脈沖寬度隨時可調的PWM信號,來實現方波信號的控制輸出。PWM輸出是使用定時器1(Timer1)和定時器2(Timer2)作為他們的時基,Timer1和Timer2是兩個8位加法定時器,每個定時器都有一個周期寄存器,分別是PR1和PR2,并具有溢出中斷標志位,它們不僅分別作為兩個8位定時器/計數器使用,而且也可以作為一個16位定時器使用,但是當有PWM輸出時,它們不能再作為16位定時器使用。若使PWM輸出信號,需要通過將P1M<1:0>和CCP1M<3:0>位(分別為CCP1CON<7:6>和CCP1CON<3:0>)置1來選擇合適的PWM模式。相應的TRISC位也必須設置為輸出。PWM1輸出周期是由Timer1和周期寄存器(PR1)決定,PWM2輸出周期能通過軟件設定,并用Timer1和Timer2作為時基。當TM2PWM2位(PW2DCL〈5〉)被清零,時基是由Timer1和PR1決定,當TM2PWM2被置1,時基是由Timer2和PR2決定。當兩個PWM同時輸出時,兩個定時器可以產生兩個不同的PWM周期。在脈寬調制信號中,信號周期通常是保持不變的,而脈寬是可變的。如何選擇他們的輸出頻率和分辨力呢?以PWM1輸出為例,且Timer1用于時基,采用內部時鐘,則:PWM1輸出周期=[(PR1)+1]×4tosc(5-1)式中,tosc為振蕩周期。對于12MHz的振蕩頻率,振蕩周期tosc=1/(12×106)=83.3ns,如果PR1=24,則PWM的輸出周期為:25×4×83.3×10-9=8.33μs,頻率為1/(8.33×10-6)=120kHz,改變時基的周期值(PR1)可以控制PWM的輸出頻率。脈寬寄存器是雙緩沖的,當對這兩個寄存器進行寫操作時,他們首先被存儲在主存儲器中,當Timer1(或Timer2)溢出和一個新的PWM周期開始,主存儲器值被傳送到從存儲器中,防止當新的脈寬寫入時而引起的誤操作,PWM模塊利用TMR1或TMR2作為中斷,當TMR1或TMR2等于它的周期寄存器值,定時器產生中斷并被清零,開始下一個PWM周期,定時器重新運行之前,可以寫入新的脈寬值。定時器

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論