介紹了美國DALLAS公司推出的低功耗時鐘芯片DS1307的結(jié)構(gòu)和工作原理及其在太陽能電池控制系統(tǒng)中的應(yīng)用。DS1307可以對年、月、日、時、分、秒進行計時,且具有閏年補償?shù)榷喾N功能。太陽光線在不同的季節(jié)和不同時間其照射的方向及角度是不一樣的,為了最有效地接收到太陽光,太陽能電池板必須隨著季節(jié)和時間的變化而改變方向,實時鐘芯片DS1307對于太陽能電池板控制系統(tǒng)的時間與日期的確定具有重要意義。
0 引言
很多控制系統(tǒng)都需要借助于時間和日期,太陽能電池(發(fā)電系統(tǒng))的電池板控制就是其中最典型的一例。太陽光線在春、夏、秋、冬的不同季節(jié)以及一天的不同時段其光照的方向和角度都不一樣,為了最大限度地發(fā)揮太陽能電池(發(fā)電系統(tǒng))的作用,太陽能電池板必須隨著季節(jié)和時間的變化而改變其方向,如圖1所示是太陽能電池板在一天中的三個時間與太陽光線的位置關(guān)系。在設(shè)計太陽能電池板的控制系統(tǒng)時就要涉及到實時日期和時間,而實時鐘芯片DS1307可以對年、月、日、時、分、秒進行準確計時,在系統(tǒng)中采用DS1307可很好地解決太陽能電池板控制的時間與日期問題。
1、DS1307的結(jié)構(gòu)及工作原理
DS1307是美國DALLAS公司推出的一種高性能的實時時鐘芯片,它是一個有56字節(jié)非易失SRAM的低功耗、全BCD碼的時鐘日歷RTC(real-timeclock)。其時鐘具有12小時制和24小時制兩種制式。其地址和數(shù)據(jù)信號可通過TWI雙向總線(與I2C總線兼容)傳輸。
1.1、DS1307的管腳及功能定義
DS1307具有自動掉電保護和上電復位功能,可輸出不同頻率的方波信號,其引腳排列如圖2所示。圖中:
圖2 ds1307引腳圖
VCC:+5V電源;
VBAT:+3V電池電源輸入;
X1,X2:32.768kHz的晶振輸入端;
SDA:數(shù)據(jù)線;
SCL:時鐘線;
SQW/OUT:方波信號輸出端。
1.2、DS1307的內(nèi)部寄存器及功能
DS1307RTC寄存器地址為00h到07h;RAM寄存器地址位于08h到3Fh。在多字節(jié)訪問期間,如果地址到達RAM空間的結(jié)尾3Fh處,將發(fā)生卷繞,此時將定位到開始處即00h單元。DS1307的時間和日歷信息要通過讀取相應(yīng)的寄存器來設(shè)置和初始化。如寄存器0的位7定義為振蕩器的使能、停止位(CH):即CH=1,振蕩器停止;CH=0,振蕩器使能。而小時寄存器的位6則定義為12小時、24小時的選擇位:即BIT6=1時為12小時格式,BIT5=1指示PM;BT6=0時為24小時格式,此時BIT5為第二個小時的指示位,且依賴于R/W的狀態(tài)。DS1307內(nèi)部有8個特殊寄存器即00H~07H單元,其中00H~06H分別為秒~年時間計數(shù)寄存器,07H為控制寄存器。控制寄存器07H單元用于控制芯片7腳產(chǎn)生不同頻率的方波信號。具體作用如表1所示。
其中:OUT為控制位,SQWE是使能位。當SQWE=0時,如果OUT=0,則SQW/OUT引腳輸出低電平,如果OUT=1,則SQW/OUT引腳輸出為高電平。當SQWE=1時,由RS1,RS0決定引腳/OUT輸出不同頻率的方波信號。RS1,RS0與輸出頻率的關(guān)系如表2所示。
總線接口單元包括數(shù)據(jù)與地址移位寄存器TWDR,START/STOP控制器和總線仲裁判定硬件電路單元。TWDR寄存器用于存放發(fā)送或者接收的數(shù)據(jù)或者地址。除了8位的TWDR,總線接口單元還有一個寄存器,包含了用于發(fā)送或者接受應(yīng)答的(N)ACK信號,這個寄存器不能由程序直接訪問。當接收數(shù)據(jù)時,它可以通過TWI控制寄存器TWCR來復位或者清零;在發(fā)送數(shù)據(jù)時,(N)ACK的值由TWCR的值決定。
1.3 DS1307的數(shù)據(jù)交換及其格式
DS1307在TWI總線上作為一個從器件。通過執(zhí)行一個START命令并且在驗證器件地址后才可以訪問。然后寄存器可以被訪問直到執(zhí)行一個STOP命令為止。
TWI的地址包格式:所有在TWI總線上傳送的地址包長度均為9位,它包括7位地址位,1個R/W控制位和1個應(yīng)答位ACK,如果R/W為1,則執(zhí)行讀操作。如果R/W為0,則執(zhí)行寫操作。從機被尋址后,必須在第9個SCL(ACK)周期通過拉低SDA做出應(yīng)答,若從機忙或者無法響應(yīng)主機,則應(yīng)該在ACK周期保持SDA為高。然后主機可以發(fā)出STOP狀態(tài)或者REPSTART狀態(tài)重新開始發(fā)送。地址包包括從機地址和稱為SLA+R或者SLA+W的READ或者WRITE位。地址字節(jié)的MSB首先被發(fā)送。所有1111xxxx的地址均保留,以便將來使用。
TWI的數(shù)據(jù)包格式:所有在TWI總線上傳送的數(shù)據(jù)包長度均為9位,它包括8個數(shù)據(jù)位和一個應(yīng)答位。在數(shù)據(jù)傳送中,主機產(chǎn)生時鐘及START與STOP狀態(tài),而接收器響應(yīng)接收。應(yīng)答是ACK在第9個SCL周期拉低SDA實現(xiàn)的。如果接收器使SDA為高,則發(fā)送NACK信號。如果接收器由于某種原因不能接受更多數(shù)據(jù),應(yīng)在最后一個數(shù)據(jù)字節(jié)后發(fā)出NACK信號告訴發(fā)送器停止發(fā)送,數(shù)據(jù)的MSB首先發(fā)送。
DS1307通過雙向數(shù)據(jù)線SDA和時鐘SCL與外界進行數(shù)據(jù)交換,從其時序關(guān)系可看出,DS1307有2種操作方式:
1)寫操作:把SDA數(shù)據(jù)線上的數(shù)據(jù)按RAM指定的首地址(WordAddress)依次寫入N個字節(jié)數(shù)據(jù),首先主器件傳輸從器件的地址字節(jié)。緊跟著是一系列的數(shù)據(jù)字節(jié)。從器件每收到一個字節(jié)后返回一個應(yīng)答位ACK。其格式如圖3所示。
2)讀操作:按RAM指定的首地址依次讀出N個字節(jié)數(shù)據(jù),主器件首先傳送從器件地址。從器件返回一個應(yīng)答位。隨后是從器件傳輸?shù)囊幌盗袛?shù)據(jù)字節(jié),主器件收到除最后一個字節(jié)外的所有字節(jié)后返回一個應(yīng)答位。在收到最后一個字節(jié)后,返回一個“非應(yīng)答位”NACK。其格式如圖4所示。
其中:S為起始信號(START),1101000為DS1307的口地址,A為應(yīng)答信號ACK,/A為非應(yīng)答信號NACK,P為停止信號(STOP)。主器件產(chǎn)生所有的串行時鐘和START、STOP條件,通過傳輸STOP和重發(fā)START條件來停止。
2、太陽能電池控制系統(tǒng)的工作原理及與DS1307的硬件接口
微控制器選用Atmel公司的AVR單片機AT2Mega8,主要是利用了ATMega8芯片的高性能、低功耗、接口豐富的特點。它有兩線制串行接口TWI模塊用于與DS1307接口,有PWM口用于太陽能電池板步進電機的轉(zhuǎn)動控制,有10位的A/D接口用于太陽光線傳感器及與上位機的通信接口。要有最高效的太陽能接收效率,通過計算,太陽能電池板與太陽光線的角度應(yīng)在某一范圍內(nèi)。太陽光線傳感器與太陽能電池板在同一平面,主要用于太陽光線的跟蹤,由太陽光線傳感器可以得到太陽能電池板與太陽光線入射角間的關(guān)系。根據(jù)這兩者間的差距,采用一種模糊控制算法來驅(qū)動太陽能電池板步進電機,可以使太陽能電池板與太陽光線的角度控制在最佳范圍內(nèi)。
ATMega系列單片機片內(nèi)集成兩線制串行接口模塊,Atmel稱它為TWI接口。事實上TWI與PHILIPS的I2C總線是同一回事。AVR硬件實現(xiàn)的TWI接口是面向字節(jié)和基于中斷的,相對軟件模擬I2C總線有更好的實時性和代碼效率,引腳輸入部分還配有毛刺抑制單元,可去除高頻干擾。如圖5是DS1307與AVR單片機ATMega8的硬件接口電路原理圖。
3、DS1307在太陽能電池控制系統(tǒng)的軟件接口
軟件設(shè)計中,首先要對AVR單片機ATMega8與實時鐘芯片DS1307進行初始化,給DS1307準確的日期和時間。控制過程中,通過讀DS1307的日期與時間,結(jié)合太陽能電池板與太陽光線入射角間的關(guān)系,通過一種模糊控制算法計算出步進電機最佳的轉(zhuǎn)動方向和角度。
結(jié)合AVRI/0端口功能,在TWI使能時可設(shè)置SCL和SDA引腳對應(yīng)的I/O口內(nèi)部上拉電阻有效,這樣可省去I2C要求的兩個外部上拉電阻。不論主控模式還是被控模式,都應(yīng)當將TWI控制寄存器TWCR的TWEN位置1從而使能TWI模塊。TWEN位被置位后,I/O引腳PC5和PC4被轉(zhuǎn)換成SCL和SDA,對TWI控制寄存器TWCR的操作可在總線上產(chǎn)生START和STOP信號,從一個START到STOP被認為是主控模式的行為。將TWI地址寄存器TWAR的第一位TWGCE置有效,同時將TWI控制寄存器TWCR的TWEA(應(yīng)答允許)位置1,TWI模塊就可以對總線上對它的尋址做出應(yīng)答,并置狀態(tài)字。對TWI模塊的操作均為寄存器的讀寫操作,Avr-libc沒有提供專門的API,可以利用基于USART的標準I/O實現(xiàn)對DS1307讀寫日歷和時鐘。下面這段程序是接口操作的部分代碼:
//初始化TWI功能
voidRtcInit(void)
{
TWBR=73;
}
//更新或讀取DS1307日歷/時間數(shù)據(jù)
ucharRtcUpdateData(uchardirection);
{
ucharret;
if(direction)//讀
ret=rtc_read(0,g_aTimeBuf,7);
else//寫
ret=rtc_write(0,g_aTimeBuf,7);
returnret;
}
//讀DS1307用戶RAM
ucharRtcReadRAM(ucharaddr,uchar3buf,ucharlen);
{
addr+=8;
returnrtc_read(addr,buf,len);
}
//寫DS1307用戶RAM
ucharRtcWriteRAM(ucharaddr,uchar3buf,ucharlen);
{
addr+=8;
returnrtc_write(addr,buf,len);
}
ucharbyte_bintobcd(ucharbin);
{
ucharret;
bin&=0x7f;
bin%=100;
ret=bin/10;
ret《《=4;
ret|=bin%10;
returnret;
}
ucharbyte_bcdtobin(ucharbcd);
{
ucharret;
ret=bcd&0x0f;
ret+=(bcd》》4)310;
returnret;
}
從程序中可以看出,TWI的讀和寫都是通過置位TWINT來實現(xiàn)的,原因是當總線上起動開始條件后寫入的第一個字節(jié)中已經(jīng)有了本次操作的傳輸方向,TWI模塊記住了這一標記,從而決定了下一步操作是讀還是寫。
4、結(jié)束語
采用DS1307與AVR單片機ATMega8相配合能很好地解決太陽能電池(發(fā)電系統(tǒng))控制裝置的時間與日期問題。為太陽能電池板的控制提供了準確的時間與日期的依據(jù)。
評論