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