采用PIC16F627單片機的電源定時插座制作,Timing socket
本電源定時插座有三個操作按鍵S1、S2、S3,并用兩位LED 數(shù)碼管顯示定時時間。其中S2、S3兩個按鍵分別預置、設定個位和十位數(shù)的定時時間值,設定的定時時間調整范圍是0 ~ 99 分鐘,用一個S1 按鍵做定時插座的"啟動/ 停止"操作按鍵。
并且程序中添加了蜂鳴器提示音部分,該部分程序功能是:每按下一次S1、S2 或者S3 按鍵,蜂鳴器就會發(fā)出"嘀"的一聲響,以確定按鍵按下的有效性。
計時程序采用倒計時遞減計數(shù)的工作方式工作,程序在運行時,時間每過一分鐘數(shù)碼管的個位顯示值減"1",每過十分鐘數(shù)碼管"十位顯示值"減"1".
預設定時時間一到,插座自動切斷AC220V 電源輸出,同時蜂鳴器報警。直至再次按下"啟動/ 停止"按鍵S1 才能解除蜂鳴器的報警聲,同時二位數(shù)碼管再次顯示上一次預置的定時時間。程序也再次回復到初始狀態(tài)并可隨時預置下一次定時插座輸出AC220V 電壓供給的定時時間。
電路硬件部分如圖1 所示。
圖1 電路硬件部分 電源部分電路:AC220V 交流市電從電路圖1中左下端的三孔插頭輸入到本定時插座中,其中"火線"L 分為兩路分別加在控制電壓輸出繼電器J1 的定觸點④端和電源變壓器T1 的初級繞組的保險絲管上,"零線"N 端加在輸出插座JP1 的N 端和電源變壓器T1 的另一端,"接地線"E 端則與輸出插座的接地端E 相連,輸出插座JP1 的"火線端"L則受控于繼電器J1 的動觸點①端。由T1 電源變壓器將AC220V 交流市電變換為AC12V 電壓后加在由D2~D5 組成的橋式整流電路的兩個橋臂端,再經C1 濾波、MC7805 穩(wěn)壓、C3、C2 高、低頻濾波后得到穩(wěn)定的DC5V 直流電壓作為整機的工作電源。
本電源定時插座的主控MCU 芯片為PIC16F627 單片機。PIC16F 系列單片機優(yōu)點之一是:
端口驅動電流大,每個端口的拉電流或者灌電流均大于20mA,這樣用它的端口驅動能力就可以直接驅動LED 數(shù)碼管了,無需在加驅動三極管,使得該插座的硬件電路設計變得十分簡潔。
PIC16F627 單片機端口的設置:
單片機的RA 有6 個I/O 端口,用RA<5 :0>表示。本應用中RA0-RA2 設置為輸出端口;其中RA0、RA1 端口分別用于兩個數(shù)碼管的"個位"和"十位"的"位碼"驅動,RA2 用于控制三極管Q3 的b 極工作,連帶控制繼電器J1 觸點的閉合與否,進而,控制了定時插座JP1 的AC220V輸出電壓的有無。RA3 端口設置為輸入/ 輸出分時二重復用工作狀態(tài):①作輸入端口時:用作定時插座的"個位定時時間預置調整鍵";②作輸出端口時:用于驅動LED1 發(fā)光二極管做為本定時插座的工作指示燈。在定時插座沒有進入定時輸出供電的情況下,RA3 作為輸入端口,保持了用于設置定時器的個位數(shù)碼預置數(shù)的設置功能;在插座工作輸出電壓的情況下,RA3 轉換為輸出端口,用于驅動LED1 作為插座的工作指示燈。
RA4 端口設置為輸入端口,用于定時時間的十位數(shù)值預置調整鍵。RA5 端口為輸入端口,與之相接的按鈕開關S1 為"啟動/ 報警解除按鍵".
RB 端口的設置:電路中PIC16F627 的RB 端口設置為輸出端口。其中RB0-RB6 端口分別用于LED 數(shù)碼管的"a-g"7 個"段碼"的驅動,因這里選用的是LG5621BH(紅色)共陽極LED 數(shù)碼管,故而,只有當RB0-RB6 端口輸出"低電平"時,LED 數(shù)碼管所對應的"a-g"碼段才能被點亮。RB7 端口用于驅動有源蜂鳴器,在RB7端口輸出高電平時,該高電平電壓通過1k 電阻R9 加至三極管Q4 的b 極上,Q4 導通,蜂鳴器鳴響報警。
電源定時插座功能:定時插座初始上電時,兩位數(shù)碼管顯示值為:"99",并處于停止走時的待機狀態(tài),其輸出插孔JP1 沒有電壓輸出。要是此時按下個位定時時間數(shù)值預置調整鍵S3,則個位數(shù)碼管從當前的顯示值減小"1"個數(shù),如,第一次按下S3 并且釋放按鍵后,個位數(shù)碼管顯示值由"9"變?yōu)?8",再按一次S3,顯示值變?yōu)?7",……直至顯示值變?yōu)?0",再從"0"回到"9"往復循環(huán)顯示。
十位定時時間預置調整按鍵S2 功能與S3 相同,只不過每按動S2 一次,并且釋放后,十位數(shù)碼管顯示值減小"1",同樣,顯示值也是從9 → 8 → 7 →…→ 0 → 9 往復循環(huán)顯示。S1 為啟動/ 報警解除鍵。
當?shù)谝淮伟磩覵1 按鈕時,定時插座進入工作狀態(tài):
RA2 端口輸出高電平,此高電平經過1K 限流電阻R8 加在三極管Q3 基極b 上,Q3 導通,繼電器J1 吸合,J1 的①、④ 觸點閉合,AC220V 交流市電的"火線"L 經繼電器的定、動觸點④、①加至本插座的輸出JP1 的L 端口,從而JP1 插孔輸出AC220V 交流電壓,同時交流電壓輸出指示燈LED2 被點亮,表示插座有AC220V 電壓輸出。
同時,定時時間以倒計時的方式開始計時、遞減,定時時間為分鐘,定時時長從數(shù)碼管當前的顯示值開始到顯示00 結束。在倒計時的時間范圍內,LED1 工作指示燈開始以2S 的頻率閃爍點亮、熄滅一次,并且每過一分鐘,數(shù)碼管的個位顯示值遞減"1"個數(shù);每過10 分鐘,數(shù)碼管的十位顯示值減"1",當數(shù)碼管顯示值為"00"時,再過60 秒鐘, 輸出插孔JP1 斷電,AC220V 輸出電壓指示燈LED2 同時熄滅;蜂鳴器開始報警鳴響。
在蜂鳴器報警其間內,數(shù)碼管始終顯示"00"值不變、LED1 工作指示燈停止閃爍,并且處于常亮狀態(tài)。直至再次按下S1 按鍵時蜂鳴器才能停止報警;數(shù)碼管顯示值跳回到上一次預置的定時時間的數(shù)值上,LED1 熄滅。
在倒計器的定時時間范內,S1 ~ S3 按鍵功能均被屏蔽、失效,不能使能。
程序設計要點:程序設計包括PIC16F627 初始化程序,主程序,1 分鐘定時中斷子程序,蜂鳴器提示音子程序,查數(shù)碼表子程序等組成。
本程序設計中,LED1 閃爍點亮速度設置不宜太快或太慢,LED1 閃爍點亮速度太快,會使人看了后心理產生太"忙碌", 感受心慌,閃爍的太慢又經C1 濾波、MC7805 穩(wěn)壓、C3、C2 高、低頻濾波后得到穩(wěn)定的DC5V 直流電壓作為整機的工作電源。
本電源定時插座的主控MCU 芯片為PIC16F627 單片機。PIC16F 系列單片機優(yōu)點之一是:
端口驅動電流大,每個端口的拉電流或者灌電流均大于20mA,這樣用它的端口驅動能力就可以直接驅動LED 數(shù)碼管了,無需在加驅動三極管,使得該插座的硬件電路設計變得十分簡潔。
PIC16F627 單片機端口的設置:
單片機的RA 有6 個I/O 端口,用RA<5 :0>
表示。本應用中RA0-RA2 設置為輸出端口;其中RA0、RA1 端口分別用于兩個數(shù)碼管的"個位"和"十位"的"位碼"驅動,RA2 用于控制三極管Q3 的b 極工作,連帶控制繼電器J1 觸點的閉合與否,進而,控制了定時插座JP1 的AC220V輸出電壓的有無。RA3 端口設置為輸入/ 輸出分時二重復用工作狀態(tài):①作輸入端口時:用作定時插座的"個位定時時間預置調整鍵";②作輸出端口時:用于驅動LED1 發(fā)光二極管做為本定時插座的工作指示燈。在定時插座沒有進入定時輸出供電的情況下,RA3 作為輸入端口,保持了用于設置定時器的個位數(shù)碼預置數(shù)的設置功能;在插座工作輸出電壓的情況下,RA3 轉換為輸出端口,用于驅動LED1 作為插座的工作指示燈。
RA4 端口設置為輸入端口,用于定時時間的十位數(shù)值預置調整鍵。RA5 端口為輸入端口,與之相接的按鈕開關S1 為"啟動/ 報警解除按鍵".
RB 端口的設置:電路中PIC16F627 的RB 端口設置為輸出端口。其中RB0-RB6 端口分別用于LED 數(shù)碼管的"a-g"7 個"段碼"的驅動,因這里選用的是LG5621BH(紅色)共陽極LED 數(shù)碼管,故而,只有當RB0-RB6 端口輸出"低電平"時,LED 數(shù)碼管所對應的"a-g"碼段才能被點亮。RB7 端口用于驅動有源蜂鳴器,在RB7端口輸出高電平時,該高電平電壓通過1k 電阻R9 加至三極管Q4 的b 極上,Q4 導通,蜂鳴器鳴響報警。
電源定時插座功能:定時插座初始上電時,兩位數(shù)碼管顯示值為:"99",并處于停止走時的待機狀態(tài),其輸出插孔JP1 沒有電壓輸出。要是此時按下個位定時時間數(shù)值預置調整鍵S3,則個位數(shù)碼管從當前的顯示值減小"1"個數(shù),如,第一次按下S3 并且釋放按鍵后,個位數(shù)碼管顯示值由"9"變?yōu)?8",再按一次S3,顯示值變?yōu)?7",……直至顯示值變?yōu)?0",再從"0"回到"9"往復循環(huán)顯示。
十位定時時間預置調整按鍵S2 功能與S3 相同,只不過每按動S2 一次,并且釋放后,十位數(shù)碼管顯示值減小"1",同樣,顯示值也是從9 → 8 → 7 →…→ 0 → 9 往復循環(huán)顯示。S1 為啟動/ 報警解除鍵。
當?shù)谝淮伟磩覵1 按鈕時,定時插座進入工作狀態(tài):
RA2 端口輸出高電平,此高電平經過1K 限流電阻R8 加在三極管Q3 基極b 上,Q3 導通,繼電器J1 吸合,J1 的①、④ 觸點閉合,AC220V 交流市電的"火線"L 經繼電器的定、動觸點④、①加至本插座的輸出JP1 的L 端口,從而JP1 插孔輸出AC220V 交流電壓,同時交流電壓輸出指示燈LED2 被點亮,表示插座有AC220V 電壓輸出。
同時,定時時間以倒計時的方式開始計時、遞減,定時時間為分鐘,定時時長從數(shù)碼管當前的顯示值開始到顯示00 結束。在倒計時的時間范圍內,LED1 工作指示燈開始以2S 的頻率閃爍點亮、熄滅一次,并且每過一分鐘,數(shù)碼管的個位顯示值遞減"1"個數(shù);每過10 分鐘,數(shù)碼管的十位顯示值減"1",當數(shù)碼管顯示值為"00"時,再過60 秒鐘, 輸出插孔JP1 斷電,AC220V 輸出電壓指示燈LED2 同時熄滅;蜂鳴器開始報警鳴響。
在蜂鳴器報警其間內,數(shù)碼管始終顯示"00"值不變、LED1 工作指示燈停止閃爍,并且處于常亮狀態(tài)。直至再次按下S1 按鍵時蜂鳴器才能停止報警;數(shù)碼管顯示值跳回到上一次預置的定時時間的數(shù)值上,LED1 熄滅。
在倒計器的定時時間范內,S1 ~ S3 按鍵功能均被屏蔽、失效,不能使能。
程序設計要點:程序設計包括PIC16F627 初始化程序,主程序,1 分鐘定時中斷子程序,蜂鳴器提示音子程序,查數(shù)碼表子程序等組成。
本程序設計中,LED1 閃爍點亮速度設置不宜太快或太慢,LED1 閃爍點亮速度太快,會使人看了后心理產生太"忙碌", 感受心慌,閃爍的太慢又會使人疑惑定時插座是否在走動、工作,以每2S鐘的頻率點亮、熄滅一次為妥。另外電路中增加了LED2 作為AC220V 輸出電源指示燈,當定時插座工作時,LED2 點亮,表示JP1 插孔有AC220V電壓輸出;LED2 熄滅則表示電源JP1 插孔無AC220V 電壓輸出,以示確認插孔有否AC 電壓輸出。
PIC16F627 單片機初始化程序如下。
;*****【PIC16F627 初始化程序】***************
START
BCF STATUS,6
BSF STATUS,5
; 置STAUUS 寄存器的RP1=0,RPO=1
MOVLW 0
MOVWF TRISB
; 設B 口為輸出
MOVLW 0F8H
MOVWF TRISA
; 設A 口的R2-R0 位為輸出
; 設A 口的R5-R3 位為輸入
MOVLW 07H
MOVWF OPTION_REG
; 設置選項寄存器分頻器:TMR0
; 分頻比值設為:1 :256
BCF STATUS,5
MOVLW 07H
MOVWF CMCON
; 置數(shù)07H 到CMCON
; 關閉16F627 內部比較器
MOVLW 0
MOVWF PORTB
; 清B 口
;---------- 以下為開中斷設置--------
MOVLW 0A0H
MOVWF INTCON
; 開TMR0 中斷使能位
; 和全局中斷使能位
BCF INTCON,T0IF
MOVLW TMR0_B
; 清TMR0 中斷標志為
MOVWF TMR0
; 向TMR0 賦初值
; 并啟動TMR0 定時器
;*******【初始化程序結束】*********************
程序設計流程模塊,主程序框圖如圖2 所示。
圖2 主程序流程框圖 1 分鐘定時中斷子程序流程圖如圖3 所示。
圖2 1 分鐘定時中斷子程序流程圖 數(shù)碼管顯示子程序流程圖如4 所示。
圖4 數(shù)碼管顯示子程序流程 按鍵提示音子程序段如下,供參考。
;------ 按鍵提示音子程序開始-----;
FMQ
; 蜂鳴器提示音子程序
BSF PORTB,7
;RB<7> 端口輸出"高電平",使Q4 導通,蜂鳴器LS1 鳴響。
CALL DELAY_0.2S
; 調用0.2S 延時子程序,讓蜂鳴器響0.2S.
BCF PORTB,7
;RB<7> 輸出"低電平",讓Q4 截止,蜂鳴器關閉
RETURN
; 蜂鳴器子程序返回。
;----- 按鍵提示音子程序結束------;
程序設計要點:1) 本定時器使用了PIC16F627 的一個定時器模塊TMI0,并用TMI0 做了50mS 定時中斷,再用寄存器"遞減、判零"語句:
"DECFSZ F"判斷20×60 次中斷到了與否來確定顯示1 分鐘時間的界限,1 分鐘未到,繼續(xù)顯示當前的數(shù)碼值,1 分鐘到了,從當前顯示的數(shù)碼值減"1"后在顯示1 分鐘……,這樣:每過1 分鐘數(shù)碼管個位顯示值就減"1",每過10 分鐘,十位數(shù)碼管顯示值就減"1",直到兩位數(shù)碼管的顯示值減到"00"為止。2)定時器如何區(qū)分:預置顯示程序和定時工作顯示程序。在此程序設計中是用了一個寄存器的標志位加以區(qū)分的,標志位為"0",執(zhí)行預置顯示程序;標志位為"1",執(zhí)行定時器工做程序。
3)按鍵的防抖動問題,機械按鍵在按下和抬起的瞬間均存在著多次接通與斷開的情況,加之單片機執(zhí)行程序的速度非常之快,即在瞬間(1μS 時間內)即可檢測到開關的閉合與斷開的狀態(tài),故而,必須要做好S1-S3 按鍵開關的防抖問題,防抖使用軟件來解決,具體方法是在按鍵按下和抬起的過程中均加有延時程序,一般延時時間取10mS 左右為宜,這樣即解決了按鍵的防抖問題,又不至于讓人感覺按鍵反映的速度太慢。4)調用顯示查表程序,用查表法作數(shù)碼管的數(shù)碼值顯示是程序設計中慣用的手段之一,它可使軟、硬件設計變得更加的簡潔、易懂。但本定時器設計中把數(shù)碼管的小數(shù)點位用作了"工作指示燈",又由于數(shù)碼管采用的是"動態(tài)掃描"的方法點亮工作的,查表碼會發(fā)生了變化。以下列出了本項目此共陽極數(shù)碼所用的查表程序的碼表見表1.
表1
如將碼表的值"顛倒"書寫:RETLW 0X40 寫在最前面;RETLW 0X10 寫在最后面,則本定時插座就變成了"正"定時插座了。
程序在總體設計上是以模塊化為主,這樣讀起來思路較易清晰,流程更加明確。
元器件選擇:電路中電源變壓器T1 要選用功率大于3W、次級輸出電壓為AC12V ~ AC15V 的變壓器,這樣才能保證在繼電器工作時不至于使T1次級輸出的DC 電壓降的太低而影響單片機的正常工作。LS1 選擇5V 有源蜂鳴器。J1 也可以選擇其它型號的產品,J1 線圈工作電壓高,其工作電流就小,對電路電壓降低值影響就小,J1 觸點電流應選擇大于10A 為宜,避免該定時插座在帶動大的交流負載時觸點被燒蝕的可能性。數(shù)碼管選用2 位一體近日筆者發(fā)現(xiàn),一些人在農村的街頭巷尾、集貿市場高聲叫賣"高效電子節(jié)能器".據商販宣稱:這種高科技產品獲得國家專利,每只可帶負載1500~3000W.價格便宜,一個只有十塊錢,一般的家庭用1 個就行了,如果家里的電器多的可多買。好用且使用方便,買回家后,只需將電子節(jié)能器的兩腳插頭插在家中任意兩眼插座上,即可節(jié)電30~50%,甚至更多。
為了讓圍觀者相信該電子節(jié)能器的節(jié)電效果,商販還在現(xiàn)場做演示。演示的方法是:把100W 的燈泡接在一個電表上,接通電源后,電表飛快地轉動。
然后商販又把"電子節(jié)能器"插在事先準備好的插座上,電表鋁盤轉速立即慢了一半還多。一些村民親眼看了后,對電子節(jié)能器能節(jié)電的效果深信不疑。
紛紛索要產品介紹,使用說明書,詢問使用方法,許多人解囊掏錢購買。這種"電子節(jié)能器"真的能節(jié)電嗎?
為弄個究竟,筆者買回一只電子節(jié)能器進行了作 者街頭叫賣的"電子節(jié)能器"能節(jié)電嗎?
馬祥琴化的共陽極數(shù)碼管。晶振選用4MHz 的。
安裝、制作、調試時要注意:由于電路中有AC220V 電壓接入,建議定時插座在調試階段暫時不接插座JP1 的AC220V 電壓,以策人身安全。待程序調試通過后在將AC220V 電壓接通,保證整機的調試階段是在安全電壓下進行的。電路中元件沒有特殊要求,保證安裝、焊接的正確性就可以了,PIC16F627 芯片要裝在IC 插座中,以便于隨時取下重新燒寫程序。
程序燒寫:文章附帶的(。hex)文件讀者可直接用來將其燒錄到PIC16F627 芯片中。燒寫程序中一定要注意編程器的"配置位"設置,它在PIC 單片機中起到舉足輕重的作用,萬萬不可忽視。
性能分析:
本定時插座1 小時產生的時間誤差約8S,這個定時插座定時精準度不高是數(shù)碼管"動態(tài)顯示"和 TMI0 中斷相互影響,TMI0 溢出時要等程序做完才發(fā)生中斷,就會有延遲誤差,對于我們日常生活中一般使用,其定時的精度也算是足夠高的了。
編者后記:作者提出了PIC 定時器如何減小誤差的問題,希望愛好者給出出主意。如果把掃描定時和計時定時結合起來,每5ms 中斷一次,中斷200 次計一分鐘,是否能改善?
|
|