A. 單片機與固態繼電器控制電源的斷開,那麼檢測電源開關狀態的檢測電路怎麼畫么呢 哪位大神能解救下呢
來個最簡單的K1是一個雙刀雙執的繼電器開關,我們可通過單片機I/O口來檢測你開關狀態。將K1一個腳拉成高電平,通過單片機檢測K1腳的電平狀態來檢測繼電器開關狀態。
你說的 檢測電源開關狀態 指哪一塊的電源?
B. 單片機控制繼電器定時開關的程序流程
板設計的定時開關控制器具有簡單易制、價格低廉、控制點數多、控制時間可精確到秒等特點:
1.主板電路部分
本電路主要是利用單片機AT89C2051(-24PI)作為主控制元件,通過外圍電路控制用電設備的電源,以達到定時開、關機的目的。AT89C2051具有體積小、功能強大、運行速度快、價格低廉等優點,非常適合製作集成度較高的控制電路。圖1為主電路原理圖,圖2為按其製作的主板(雙面)大小隻有95mm×70mm的器件位置圖。主板電路包括MCUAT89C2051、鍵盤與顯示、輸入與輸出口、復位和電源濾波等電路組成。
(1)鍵盤與顯示顯示電路由U2、U3、Q1~Q7和L1A、L2A組成。U2為BCD-7段解碼器(74LS47),通過單片機U1的P1.4~P1.7口將要顯示字元的BCD碼輸出到U2的四個輸入端,經U2解碼後輸出相應的筆段驅動LED數碼管(共陽)。LED數碼管顯示採用動態掃描方式,即在某一時刻,只有一個數碼管被點亮。數碼管的位選信號由單片機U1的P3.3~P3.5輸出,經U3(74HC138)解碼後通過Q1~Q6放大,驅動相應的數碼管。R17~R24為限流電阻。
由於U2隻能輸出7段筆段碼,而數碼管除了七段筆段外,還要控制點亮小數點,因此,小數點必須有另外的驅動電路來完成,在這里,通過Q7來驅動小數點。當需要點亮小數點時,在U1的P1.3輸出高電平即可。
鍵盤電路跟顯示電路一樣,採用掃描方式,利用動態顯示時的數碼管驅動位置信號來判斷相應按鍵的狀態。U1的P3.3~P3.5口輸出的BCD碼經U3解碼後,相應Y口呈低電平,而U1的P3.7口平時為高電平(由於R8上拉),當某一鍵按下時,P3.7被下拉為低電平,這時MCU利用程序查詢P3.7是否為低電平,如果P3.7為低電平,就讀回U1P3.3~P3.5口的值(從緩沖區讀取),則可判斷是哪個按鍵按下,然後調用相應的處理程序進行處理。
(2)控制輸出、復位與電源濾波電路MCU對控制的輸出是通過P3.0~P3.2口完成的。程序開始時這三個口的輸出狀態是低電平,MCU通過程序查詢三路輸出的ON或OFF狀態預置時間是否已到,如果已到時間,則改變相應的輸出狀態,就完成了對外部電路的控制。復位電路如圖1左上角所示,C3和R25完成上電復位,S6為手動復位,按鍵輸入干擾和抖動的預防是由軟體完成的。+5V電源由JP2輸入,經C4~C9濾波後給U1和其它器件供電。
2.電源與控制電路
電源及控制電路。其中,市電經總開關K後由B降壓、V1整流、C11~C14濾波、U4、U5穩壓後給主板和控制電路板提供穩定的工作電源;主板送過來的三路控制信號通過Q12~Q14分別控制繼電器J1、J2、J3,對外部電路實施直接控制。繼電器這里沒有給出具體型號,您可根據耐壓及通流大小選用相應的繼電器,如在大電流和強電磁場干擾的環境里工作,最好利用中間繼電器來間接控制。
3.程序軟體工作過程
(1)秒脈沖發生器秒脈沖發生器是由定時器T0和內存空間TT0配合完成的。T0工作於16位計數器模式,當T0向上計數由全1變為全0時產生中斷,本程序中T0的初值為0DC00H,大約0.01s中斷一次。這里使用的晶振頻率為11.0592MHz,由此可計算出日誤差約為0.78s。
圖4為程序流程圖。系統產生中斷後,首先保存ACC和PSW的值,然後為T0重裝初值,判斷中斷次數是否小於100,是則轉出中斷服務,反之則為秒計數器加1,秒計數器如果大於59,則為分計數器加1,同時秒計數器清0。同樣分計數器如大於59則為時計數器加1,同時分計數器清0,時計數器如大於23則清0並轉出中斷服務。T0中斷100次的時間剛好為1秒鍾。
(2)主程序上電復位過程:首先P0~P2口全部置1,P3口高5位置1,低3位置0。設置定時器T0工作於16位計數器模式,並賦初值TH0=0DCH,TL0=00H,關閉外部中斷和串列口中斷,時間計數器TS、TM、TH清0,所有預置時間存儲區全部賦值FFH,至此所有初始化工作完成。
主程序工作過程:首先循環進行六個數碼管掃描顯示(DISPLY段),然後比較所有預置時間(COMP段)是否與當前時間相等,如相等則轉向相應處理程序。在比較完成(或處理完成)後判斷有無按鍵(PP2段),沒有則返回繼續顯示、比較、判斷;有按鍵則轉向相應處理程序。按鍵轉移採用偏移量加表格跳轉轉移法(KEY段),簡單、明了。預置時間比較則採用逐一比較法,即對每一個預置值進行比較,如相等則做相應處理。具體比較時(COMP1段)先比較TH值,如不相等則直接轉出並置「時間到」標志CCB為0,如TH、TM、TS全部對應相等,則置該標志為1。
本程序在顯示及按鍵處理(設置過程)中巧妙使用R1寄存器作為公用地址寄存工具,對實時時間和預置時間的顯示和修改調用同一程序完成,使源代碼長度大大縮短,提高了程序的可讀性和運行效率。在本刊的網站(www.eleworld.com)上給出了源程序,供讀者參考。
4.製作與調試
(1)主板的製作與調試主板的製作稍微復雜一點。首先是製作印刷板,利用Protel99按照本文所示器件位置圖放置好元器件,然後手動布線(雙面),線寬為0.8mm左右,太寬做出的板子太大,太窄無法進行自製。繪好印製板圖後轉成BMP格式利用電腦刻字機鏤空(要用進口的即時貼紙,不然容易斷開),貼在雙面敷銅板上,就可以用FeCl3腐蝕了。具體的製作方法這里不再贅述,但最好在印製板布線時做個阻焊層,同時在即時貼上刻出來,當板子制好清洗干凈後敷在上面,用淺綠色油漆或清漆噴上薄薄的一層,好看又防腐蝕。
(2)元器件的選擇如果按照本文所附器件位置圖布線的話,數碼管需選用圖示型號才能安裝(5361BH,一拖三數碼管),選用不同型號數碼管時可能需修改器件位置參數,然後再布線即可;晶振為11.0592MHz;S1~S5選用黑色小型輕觸開關,S6則用紅色同類型開關;變壓器B選用15V、10W左右即可,V1硅堆應與B配合選用;控制繼電器根據需要選用適合的型號,如5、12、24V等,如果選用5V的,相應的B、V1可選小一點的,7812則不要。如選用24V的,那麼B、V1、7812、7805都需同時根據實際情況來選用;交流220V輸出插座沒有特殊要求,其耐壓和通流符合受控器件要求即可。其它元器件選用通用的就行。
(3)焊接元器件元器件購回後應先進行預處理(引腳打磨、上焊錫),然後逐一焊接。在焊接MCU(當然2051要燒好程序後才能焊接)和其它集成電路時應使用有良好接地的烙鐵(斷電焊接也可),以免被擊穿。由於雙面印刷板存在一個穿孔問題,器件引腳穿過後,兩面都要點上焊錫;如只是過孔,可用細銅線穿過並在兩面焊接後剪掉即可。
在印刷板製作良好,連線沒有不應有的開路或短路,且焊接沒有虛焊的情況下,不用調試即可正常工作(本程序已製作成品並調試通過,不需再行調試)。如果您覺得自己製作的印刷板不夠漂亮或太麻煩可聯絡凱思迪郵購(焊接好的整板也有),本刊網站有與凱思迪公司網站的鏈接。
(4)電源與控制板的製作可以將電源與控制板做在同一個板子上,也可分開製作,視所使用的情況而定,但JP1與JZ1之間的連線不宜太長。印刷板的製作同前所述,要注意的是在布線時對220V市電進入和輸出(包括中線)的線寬設計要寬一點(根據工作電流大小來定為好),還要注意市電與直流電源的隔離,以免在使用中造成觸電事故。
5.操作使用
本系統在加電後數碼管顯示「00.00.00」,輸出繼電器均不動作,此時可直接按S1、S2、S3鍵分別對時、分、秒進行調整,使當前時間與北京時間相符,時間設置過程中將停止計時,在設置好後按S4退出,時鍾即進入正常計時。如果要設置輸出控制的預置時間則先按S5,數碼管顯示「95.95.95」,此時可再按S1、S2、S3鍵分別對第一路輸出狀態ON的時、分、秒進行設置,設好後再按一次S5鍵,數碼管也顯示「95.95.95」,然後按S1、S2、S3鍵則分別對第一路輸出狀態OFF的時、分、秒進行設置,依此類推,按第七次時退出設定。任一路任一狀態被執行後其預置值即被清除,24小時後並不有效,如果需要每天循環執行則對程序進行簡單的修改即可(預置值不清除就可)。
6.改進與擴展
本文所述的AT89C2051在控制輸出時只使用了P3.0~P3.2三個口,所以只能控制三路六個狀態,如果把不用的P1.0~P1.2三個口用起來,則可控制六路十二個狀態,外圍電路相應增加三路繼電器,程序軟體只需稍事修改即可。當然如果需要控制更多路輸出狀態,那麼在使用鎖存器、解碼器、觸發器等後最多可以擴展到控制26=64路128個狀態。在對控制輸出的路數要求不多,而顯示部分需要比較多的情況下,如還要顯示年月日、農歷、星期等,只要對其進行擴展就可實現:P1.4~P1.7不動,選通端用兩個138,輸出口用P3.2~P3.5就有24=16個數碼顯示。這時仍然利用上述方法最多可擴展到控制25=32路64個狀態。當然年月日、農歷、星期的計算(如大月小月、閏年、閏月等)分別匯編相應的子程序插入即可
C. 單片機現在繼電器反復動作,並一直提示正在檢測目標單片機,不知道為什麼。過去在另一個電腦上用都正常。
應該問題不大,按照下面原因分析,看一下能否解決。
1.查看單片機是否插反了;
2.下載軟體選擇正確的單片機型號(注意STC89C52和STC89C52RC是不同的) ;
3.檢測是否連接了晶振 ,時候有晶振接觸不良的現象 ;
4.查看電腦com是否有多個,是否選錯了com口 (是否安裝了相應的驅動);
5.單片機開發板是否重新上電了(下載單片機程序需要冷啟動過程) ;
6.注意是否有短路(比如開發板下面最好鋪一張紙,不要被短路) ;
7.下載軟體用的什麼版本,舊版本可能需要設置最低、最高波特率,新版本不用設置,建議盡量使用新版 ;
8.如果使用的是CH340/CH341或者PL2302,檢測RXD/TXD是否連接反了。
9.換一個單片機試試看,驗證單片機是否已損壞。
D. 51單片機檢測IO口高低變化,3秒內有變化無動作。3秒無變化立即啟動繼電器
sbit IN=P2^0;
sbit OUT=P2^1;
uint time ;
void main()
{
OUT=0;//繼電器不動作
time=0;
while(1)
{
while(IN==1)//高電平
{
delayms(10);
time++;
if(time>300) OUT=1;//超過3S,動作
}
time=0;
while(IN==0)//低電平
{ delayms(10);
time++;
if(time>300) OUT=1;//超過3S,動作
}
time=0;
}
}