定時器是裝有時段或時刻控制機構的開關裝置。它有一個頻率穩定的振蕩源,通過齒輪傳動或集成電路分頻計數,當將時間累加到預置數值時,或指示到預置的時刻處,定時器即發送信號控制執行機構。
定時器根據工作原理可以為以下:
1、接通延時型定時器:接通延時型定時器是各種PLC中最常見最基本的定時器,這種定時器在SIEMENS的PLC中,稱為SD型定時器
2、斷開延時型定時器:這種定時器是當輸入條件00000為ON時無延時作用,只有在輸入條件00000為OFF時產生延時作用。在SIEMENS的PLC中,稱為SF型定時器
3、保持型接通延時定時器:這種定時器是當輸入條件00000為ON后,即產生鎖存功能,即使輸入條件00000又變為OFF,仍視輸入條件為ON,當定時器的當前值等于設定值時,定時器動作,這種定時器在SIEMENS的PLC中,稱為SS型定時器
4、脈沖型定時器:這種定時器是當輸入條件00000為ON后,定時器即時動作,但經過定時器所設定的時間后,即使輸入條件00000仍為ON,定時器卻變為OFF狀態。即這種定時器ON狀態的維持時間是由設定值決定的。如果00000為ON的時續時間小于定時器的設定值,定時器的ON狀態維持時間為輸入條件00000為ON的持續時間。這種定時器在SIEMENS的PLC中,稱為SP型定時器。
5、擴張型脈沖定時器:這種定時器與脈沖型定時器的區別是,只要輸入條件00000出現了ON狀態,不管其持續時間多長,均可使定時器為ON的維持的時間與定時器的設定值一致。這種定時器在SIEMENS的PLC中,稱為SE型定時器。
定時器按結構可分為機械式、電動式和電子式:
1、機械式定時器 以發條為原動力,用擒縱調速器控制走時精度,通過齒輪傳動和凸輪,按時間控制機構預置的時段操縱執行機構動作。計時精度要求不高的定時器(如風扇定時器、洗衣機定時器、廚房用定時器、照相暗房用定時器、電視機控制用定時器、電燈開關定時器),一般采用無固有振動周期的調速器。這些定時器都是在手動上發條的同時預置時限,定時精度不高,但結構簡單,使用方便。計時精度要求高、定時范圍在3~12小時的定時器,一般采用擺輪游絲調速器。
2、電動式定時器 用交流同步電動機或石英步進電機驅動,通過齒輪傳動和凸輪簧片觸點機構,按預置的時段或時刻控制執行機構。其中短時段控制的電動式定時器可用于程序控制式洗衣機、洗碗機、微波爐、烘箱及時間繼電器等;長時段電動式定時器是一種24小時或7天程序控制的開關裝置,可預置開關動作多次,最短時間控制間隔一般為15分鐘,可用于用戶用電情況監控、照明控制、實驗室裝置控制、空調器控制和自動生產線上某些設備的定時控制等。
3、電子式定時器 利用石英振蕩器或民用交流電的標準頻率,經過分頻計數組成時間累加器或數字鐘,按照預置的時間編碼輸出控制信號。這種定時器走時精確,時間設定沒有誤差,定時精度高,控制程序多。其中長時段定時器最小控制時段一般為1分鐘,配上微處理器后能精確地編制一年的時間程序,組成多路可編程序的定時器。電子式定時器在工業自動化控制系統中應用廣泛,它也是節約能源管理中一種有效的技術措施。電子定時器類的電子定時開關鐘,可用于按高、平、低峰用電收取不同電費制度的場合,它將一天內的用電高峰、平峰、低谷時間在定時開關中設定,并分別接通3種電表進行計費。電子式定時器在科學實驗中和在微波爐、電飯鍋、洗衣機等電器中也有使用
F2810/F2812器件上有3個Q9位CPU定時器(TIMERO/1/2)。只有定時器1和2預留給實時操作系統DSP/BIOS使用,只有定時器0可以在就用程序中使用,定時器的功能如圖1所示。
圖1定時器功能框圖
若處理器采用30MHz的外部時鐘,經過鎖相環10/2倍頻后,系統的時鐘工作在150MHz。圖中的定時器選擇SYSCLKOUT作為定時器時鐘,工作頻率也是150MHz。一旦定時器被使能(TCR-Bit4=0),定時器時鐘經過預定標計數器(PSCH:PSC)遞減計數,預定標計數器產生下溢后向定時器的32位計數器(TIMH:TIM)借位p定時器計數器產生溢出使定時器向CPU發送中斷。定時器中斷結構如圖2所示。
每次預定標計數器產生溢出后使用分頻寄存器(TDDRH:TDDR)中的值重新裝載。同樣,32位周期寄存器(PRDH[_]PRD)為32位計數器提供重新裝載值。
圖2定時器中斷結構
每個通用定時器都有一個比較寄存器TxCMPR和一個PWM輸出引腳TxPWM。通用定時器計數器的值一直與相關的比較寄存器的值比較,當定時器計數器的值與比較寄存器的值相等時,就產生比較匹配??赏ㄟ^TxCON[l]位使能比較操作,產生比較匹配后將會有下列操作(如圖所示)。
●匹配1個時鐘周期后,定時器的比較中斷標志位置位。
●匹配1個CPU時鐘周期后,根據寄存器GPTCONA/B相應位的配置情況,PWM的輸出將產生跳變。
●如果比較中斷標志位已通過設置寄存器GPTCONA/B中的相應位啟動A/D轉換器,則比較中斷位置位的同時產生A/D轉換啟動信號。
●如果比較中斷未被屏蔽,將產生一個外設申斷申請。
圖通用定時器比較操作功能框圖
1前言單片機內部一般有若干個定時器。如8051單片機內部有定時器0和定時器1。在定時器計數溢出時,便向CPU發出中斷請求。當CPU正在執行某指令或某中斷服務程序時,它響應定時器溢出中斷往往延遲一段時間。這種延時雖對單片機低頻控制系統影響甚微,但對單片機高頻控制系統的實時控制精度卻有較大的影響,有時還可能造成控制事故。為擴大單片機的應用范圍,本文介紹它的定時器溢出中斷與CPU響應中斷的時間誤差、補償誤差的方法和實例。
2誤差原因、大小及特點產生單片機定時器溢出中斷與CPU響應中斷的時間誤差有兩個原因。一是定時器溢出中斷信號時,CPU正在執行某指令;二是定時器溢出中斷信號時,CPU正在執行某中斷服務程序。
2.1.CPU正在執行某指令時的誤差及大小由于CPU正在執行某指令,因此它不能及時響應定時器的溢出中斷。當CPU執行此指令后再響應中斷所延遲的最長時間為該指令的指令周期,即誤差的值為執行該指令所需的時間。由于各指令都有對應的指令周期,因此這種誤差將因CPU正在執行指令的不同而不同。如定時器溢出中斷時,CPU正在執行指令MOVA,Rn,其誤差為1個機器周期。而執行指令MOVRn,direct時,其誤差為2個機器周期。當CPU正在執行乘法或除法指令時,時間誤差可達4個機器周期。在8051單片機指令系統中,多數指令的指令周期為1~2個機器周期,因此時間誤差一般為1~2個機器周期。若振蕩器振蕩頻率為fosc,CPU正在執行指令的機器周期數為Ci,則時間誤差為Δtmax1=12/fosc×Ci(us)。例如fosc=12MHZ,CPU正在執行乘法指令(Ci=4),此時的時間誤差為:Δtmax1=12/fosc×Ci=12/(12×106)×4=4×10-6(s)=4(μs)
2.2CPU正在執行某中斷服務的程序時的誤差及大小定時器溢出中斷信號時,若CPU正在執行同級或高優先級中斷服務程序,則它仍需繼續執行這些程序,不能及時響應定時器的溢出中斷請求,其延遲時間由中斷轉移指令周期T1、中斷服務程序執行時間T2、中斷返回指令的指令周期T3及中斷返回原斷點后執行下一條指令周期T4(如乘法指令)組成。中斷轉移指令和中斷返回指令的指令周期都分別為2個機器周期。中斷服務程序的執行時間為該程序所含指令的指令周期的總和。因此,時間誤差Δtmax2為:Δtmax2=(T1+T2+T3+T4)12/fosc=(2+T2+2+4)12/fosc=12(T2+8)/fosc若設fosc=12MHZ,則時間誤差為:Δtmax2=12(T2+8)/fosc=12(T2+8)/12×106=(T2+8)×10-6(s)=T2+8(μs)。由于上式中T2一般大于8,因此,這種時間誤差一般取決于正在執行的中斷服務程序。當CPU正在執行中斷返回指令RETI、或正在讀寫IE或IP指令時,這種誤差在5個機器周期內。
2.3誤差非固定性特點定時器溢出中斷與CPU響應中斷的時間誤差具有非固定性特點。即這種誤差因CPU正在執行指令的不同而有相當大的差異。如CPU正在執行某中斷服務程序,這種誤差將遠遠大于執行一條指令時的誤差。后者誤差可能是前者誤差的幾倍、幾十倍、甚至更大。如同樣只執行一條指令,這種誤差也有較大的差別。如執行乘法指令MULAB比執行MOVA,Rn指令的時間誤差增加了3個機器周期。這種誤差的非固定不僅給誤差分析帶來不便,同時也給誤差補償帶來困難。
3誤差補償方法由于定時器產生溢出中斷與CPU響應中斷請求的時間誤差具有非固定性,因此,這種誤差很難用常規方法補償。為此,本文介紹一種新方法?,F介紹該方法的基本思路、定時器新初值及應用情況。
3.1基本思路為使定時器溢出中斷與CPU響應中斷實現同步,該方法針對中斷響應與中斷請求的時間誤差,對定時器原有的計數初值進行修改,以延長定時器計數時間,從而補償誤差。在該方法中,當定時器溢出中斷得到響應后,即停止定時器的計數,并讀出計數值。該計數值是定時器溢出后,重新從OOH開始每個機器周期繼續加1所計的值。然后,將這個值與定時器的停止計數時間求和。若在定時器原計數初值中減去這個和形成新計數初值,則定時器能在新計數初值下使溢出中斷與CPU響應中斷實現同步,從而達到誤差的補償要求。
3.2定時器新計數初值若定時器為計數方式,操作方式為1,則計數器初值X0=216-t0×fosc/12。式中fosc為振蕩器的振蕩頻率。t0為需要定時的時間,也為中斷的間隔時間。X0為定時器原計數初值。在對定時器溢出中斷與CPU響應中斷時間誤差進行補償時,定時器的新計數初值X1為:X1=216-t3×fosc/12t3=t0+t1+t2式中t0為中斷間隔時間。t1為定時器停止計數時間,該時間為定時器停止計數到重新啟動計數之間所有程序指令周期數的總和。t2為定時器溢出中斷后,重新從OOH開始直至計數器停止時計的值。在誤差補償中,若將定時器計數初值X1取代X0,則可使定時器下次的溢出中斷與CPU響應中斷實現同步。
3.3實例要求補償定時器每1ms產生一次溢出中斷時的中斷響應延遲的誤差。若振蕩器振蕩頻率fosc=12MHZ,定時器工作在計數方式,工作模式為1,則補償中斷響應時間誤差時的定時器新初值X1為:X1=216-t3×fosc/12=216-(t0+t1)-t2=216-(1000+13)-t2誤差補償程序為:……0CLREA;關CPU中斷1CLRTRi;停止定時器計數2MOVR0,#OOH;R0清零3MOVR0,#LOW(216);定時器計數值的低8位送R04MOVA,R05SUBBA,#LOW(1000+13);216的低8位減去(t0+t1)的低8位送累加器A6SUBBA,TLi;216的低8位減去(t0+t1+t2)的低8位送TLi7MOVTLi,A8MOVR0,#OOH;R0清零9MOVR0,#HIGH(216);216的高8位送R010MOVA,R011SUBBA,#HIGH(1000+13);216的高8位減去(t0+t1)的高8位送A12SUBBA,THi;216的高8位減去(t0+t1+t2)的高8位送A13MOVTHi,A14SETBTRi;重新啟動定時器……在上式和上段程序中,由于fosc=12MHZ,中斷間隔時間為1ms,因此t0的機器周期數為1000。由于第1條指令到第14條指令的指令周期的機器周期數之和為13,因此,t1為13個機器周期。CPU雖在執行條指令CLRTRi后停止定時器計數,但在TLi、THi中分別保存了t2的低位數據和高位數據。4結束語由于本文介紹的誤差補償方法能對定時器溢出中斷與CPU響應中斷的非固定性時間誤差進行有效補償,因此,該方法對于提高高頻控制系統實時控制精度和擴大單片機應用范圍都有較高的實用價值。
Copyright ? mingxiaow.com All Rights Reserved. 杭州優配網絡科技有限公司 版權所有 未經書面允許不得轉載、復制信息內容、建立鏡像
本網站內容僅供參考,請以各學校實際情況為主!內容侵權或錯誤投訴:841539661@qq.com 工信部備案號:浙ICP備20019715號