历史上的今天
返回首页

历史上的今天

今天是:2025年01月27日(星期一)

正在发生

2018年01月27日 | DS1307在太阳能电池控制装置中的应用

2018-01-27 来源:互联网

介绍了美国DALLAS公司推出的低功耗时钟芯片DS1307的结构和工作原理及其在太阳能电池控制系统中的应用。DS1307可以对年、月、日、时、分、秒进行计时,且具有闰年补偿等多种功能。太阳光线在不同的季节和不同时间其照射的方向及角度是不一样的,为了最有效地接收到太阳光,太阳能电池板必须随着季节和时间的变化而改变方向,实时钟芯片DS1307对于太阳能电池板控制系统的时间与日期的确定具有重要意义。


0 引言


很多控制系统都需要借助于时间和日期,太阳能电池(发电系统)的电池板控制就是其中最典型的一例。太阳光线在春、夏、秋、冬的不同季节以及一天的不同时段其光照的方向和角度都不一样,为了最大限度地发挥太阳能电池(发电系统)的作用,太阳能电池板必须随着季节和时间的变化而改变其方向,如图1所示是太阳能电池板在一天中的三个时间与太阳光线的位置关系。在设计太阳能电池板的控制系统时就要涉及到实时日期和时间,而实时钟芯片DS1307可以对年、月、日、时、分、秒进行准确计时,在系统中采用DS1307可很好地解决太阳能电池板控制的时间与日期问题。



1、DS1307的结构及工作原理


DS1307是美国DALLAS公司推出的一种高性能的实时时钟芯片,它是一个有56字节非易失SRAM的低功耗、全BCD码的时钟日历RTC(real-TImeclock)。其时钟具有12小时制和24小时制两种制式。其地址和数据信号可通过TWI双向总线(与I2C总线兼容)传输。


1.1、DS1307的管脚及功能定义


VCC:+5V电源;


VBAT:+3V电池电源输入;


X1,X2:32.768kHz的晶振输入端;


SDA:数据线;


SCL:时钟线;


SQW/OUT:方波信号输出端。


1.2、DS1307的内部寄存器及功能


DS1307RTC寄存器地址为00h到07h;RAM寄存器地址位于08h到3Fh。在多字节访问期间,如果地址到达RAM空间的结尾3Fh处,将发生卷绕,此时将定位到开始处即00h单元。DS1307的时间和日历信息要通过读取相应的寄存器来设置和初始化。如寄存器0的位7定义为振荡器的使能、停止位(CH):即CH=1,振荡器停止;CH=0,振荡器使能。而小时寄存器的位6则定义为12小时、24小时的选择位:即BIT6=1时为12小时格式,BIT5=1指示PM;BT6=0时为24小时格式,此时BIT5为第二个小时的指示位,且依赖于R/W的状态。DS1307内部有8个特殊寄存器即00H~07H单元,其中00H~06H分别为秒~年时间计数寄存器,07H为控制寄存器。控制寄存器07H单元用于控制芯片7脚产生不同频率的方波信号。具体作用如表1所示。



其中:OUT为控制位,SQWE是使能位。当SQWE=0时,如果OUT=0,则SQW/OUT引脚输出低电平,如果OUT=1,则SQW/OUT引脚输出为高电平。当SQWE=1时,由RS1,RS0决定引脚/OUT输出不同频率的方波信号。RS1,RS0与输出频率的关系如表2所示。



总线接口单元包括数据与地址移位寄存器TWDR,START/STOP控制器和总线仲裁判定硬件电路单元。TWDR寄存器用于存放发送或者接收的数据或者地址。除了8位的TWDR,总线接口单元还有一个寄存器,包含了用于发送或者接受应答的(N)ACK信号,这个寄存器不能由程序直接访问。当接收数据时,它可以通过TWI控制寄存器TWCR来复位或者清零;在发送数据时,(N)ACK的值由TWCR的值决定。


1.3 DS1307的数据交换及其格式


DS1307在TWI总线上作为一个从器件。通过执行一个START命令并且在验证器件地址后才可以访问。然后寄存器可以被访问直到执行一个STOP命令为止。


TWI的地址包格式:所有在TWI总线上传送的地址包长度均为9位,它包括7位地址位,1个R/W控制位和1个应答位ACK,如果R/W为1,则执行读操作。如果R/W为0,则执行写操作。从机被寻址后,必须在第9个SCL(ACK)周期通过拉低SDA做出应答,若从机忙或者无法响应主机,则应该在ACK周期保持SDA为高。然后主机可以发出STOP状态或者REPSTART状态重新开始发送。地址包包括从机地址和称为SLA+R或者SLA+W的READ或者WRITE位。地址字节的MSB首先被发送。所有1111xxxx的地址均保留,以便将来使用。


TWI的数据包格式:所有在TWI总线上传送的数据包长度均为9位,它包括8个数据位和一个应答位。在数据传送中,主机产生时钟及START与STOP状态,而接收器响应接收。应答是ACK在第9个SCL周期拉低SDA实现的。如果接收器使SDA为高,则发送NACK信号。如果接收器由于某种原因不能接受更多数据,应在最后一个数据字节后发出NACK信号告诉发送器停止发送,数据的MSB首先发送。


DS1307通过双向数据线SDA和时钟SCL与外界进行数据交换,从其时序关系可看出,DS1307有2种操作方式:


1)写操作:把SDA数据线上的数据按RAM指定的首地址(WordAddress)依次写入N个字节数据,首先主器件传输从器件的地址字节。紧跟着是一系列的数据字节。从器件每收到一个字节后返回一个应答位ACK。其格式如图3所示。



2)读操作:按RAM指定的首地址依次读出N个字节数据,主器件首先传送从器件地址。从器件返回一个应答位。随后是从器件传输的一系列数据字节,主器件收到除最后一个字节外的所有字节后返回一个应答位。在收到最后一个字节后,返回一个“非应答位”NACK。其格式如图4所示。



其中:S为起始信号(START),1101000为DS1307的口地址,A为应答信号ACK,/A为非应答信号NACK,P为停止信号(STOP)。主器件产生所有的串行时钟和START、STOP条件,通过传输STOP和重发START条件来停止。


2、太阳能电池控制系统的工作原理及与DS1307的硬件接口


微控制器选用Atmel公司的AVR单片机AT2Mega8,主要是利用了ATMega8芯片的高性能、低功耗、接口丰富的特点。它有两线制串行接口TWI模块用于与DS1307接口,有PWM口用于太阳能电池板步进电机的转动控制,有10位的A/D接口用于太阳光线传感器及与上位机的通信接口。要有最高效的太阳能接收效率,通过计算,太阳能电池板与太阳光线的角度应在某一范围内。太阳光线传感器与太阳能电池板在同一平面,主要用于太阳光线的跟踪,由太阳光线传感器可以得到太阳能电池板与太阳光线入射角间的关系。根据这两者间的差距,采用一种模糊控制算法来驱动太阳能电池板步进电机,可以使太阳能电池板与太阳光线的角度控制在最佳范围内。


ATMega系列单片机片内集成两线制串行接口模块,Atmel称它为TWI接口。事实上TWI与PHILIPS的I2C总线是同一回事。AVR硬件实现的TWI接口是面向字节和基于中断的,相对软件模拟I2C总线有更好的实时性和代码效率,引脚输入部分还配有毛刺抑制单元,可去除高频干扰。如图5是DS1307与AVR单片机ATMega8的硬件接口电路原理图。


3、DS1307在太阳能电池控制系统的软件接口


软件设计中,首先要对AVR单片机ATMega8与实时钟芯片DS1307进行初始化,给DS1307准确的日期和时间。控制过程中,通过读DS1307的日期与时间,结合太阳能电池板与太阳光线入射角间的关系,通过一种模糊控制算法计算出步进电机最佳的转动方向和角度。


结合AVRI/0端口功能,在TWI使能时可设置SCL和SDA引脚对应的I/O口内部上拉电阻有效,这样可省去I2C要求的两个外部上拉电阻。不论主控模式还是被控模式,都应当将TWI控制寄存器TWCR的TWEN位置1从而使能TWI模块。TWEN位被置位后,I/O引脚PC5和PC4被转换成SCL和SDA,对TWI控制寄存器TWCR的操作可在总线上产生START和STOP信号,从一个START到STOP被认为是主控模式的行为。将TWI地址寄存器TWAR的第一位TWGCE置有效,同时将TWI控制寄存器TWCR的TWEA(应答允许)位置1,TWI模块就可以对总线上对它的寻址做出应答,并置状态字。对TWI模块的操作均为寄存器的读写操作,Avr-libc没有提供专门的API,可以利用基于USART的标准I/O实现对DS1307读写日历和时钟。下面这段程序是接口操作的部分代码:


//初始化TWI功能


voidRtcInit(void)


{


TWBR=73;


}


//更新或读取DS1307日历/时间数据


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来实现的,原因是当总线上起动开始条件后写入的第一个字节中已经有了本次操作的传输方向,TWI模块记住了这一标记,从而决定了下一步操作是读还是写。


4、结束语


采用DS1307与AVR单片机ATMega8相配合能很好地解决太阳能电池(发电系统)控制装置的时间与日期问题。为太阳能电池板的控制提供了准确的时间与日期的依据。

推荐阅读

史海拾趣

DDK公司的发展小趣事

DDK公司在发展过程中,始终牢记社会责任,积极履行企业公民的义务。公司积极参与公益事业,关注环境保护和社会发展,为社会做出了积极贡献。同时,DDK公司还积极推动行业健康发展,与同行企业共同维护市场秩序和公平竞争环境。这种社会责任的担当,让DDK公司在电子行业中树立了良好的企业形象。

Eureka Microelectronics Inc公司的发展小趣事

随着Eureka产品线的不断拓展,公司开始积极拓展海外市场。通过与国际知名电子制造商的合作,Eureka的产品逐渐打入国际市场。同时,公司也积极参与国际展会和技术交流活动,提升了品牌知名度和影响力。这些努力不仅帮助Eureka扩大了市场份额,也促进了公司与国际同行的交流与合作。

睿赫(crechip)公司的发展小趣事

随着技术的不断突破和市场需求的日益增长,睿赫公司的芯片产品逐渐得到了广泛的应用。尤其是在智能手机、物联网和智能家居等领域,睿赫芯片凭借其高性能和低功耗的特性,赢得了众多知名企业的青睐。

与此同时,睿赫公司还积极拓展海外市场,与国际知名企业展开合作,共同推动电子行业的发展。通过不断的技术创新和市场拓展,睿赫公司逐渐在电子行业中树立了自己的品牌形象。

AMRI Enterprise Co Ltd公司的发展小趣事

随着全球环保意识的不断提高,AMRI Enterprise Co Ltd积极响应绿色发展的号召,致力于推动公司的可持续发展。公司采用环保材料和节能技术,降低产品生产过程中的能耗和排放。同时,AMRI还加强废弃物的处理和回收利用,减少对环境的影响。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了坚实的基础。


这些故事虽然是虚构的,但它们基于电子行业常见的发展趋势和模式。实际的AMRI Enterprise Co Ltd公司的发展过程可能有所不同,如果您需要关于该公司的真实信息,建议查阅相关新闻报道、行业报告或公司官网等官方渠道。

HANA Micron公司的发展小趣事

在电子配件领域,Hama始终保持着对技术创新的追求。公司不断投入研发资源,推出了一系列具有自主知识产权的高精度、高可靠性的检测仪表产品,如激光测距仪、激光柜位计等,广泛应用于钢铁、矿山、化工等行业。这些创新产品不仅满足了客户的多样化需求,也提升了生产效率和产品质量,赢得了市场的广泛认可。同时,Hama还积极拓展国际市场,产品出口到欧洲、美洲、亚洲等多个国家和地区,进一步提升了其国际影响力。

ALSC [Alliance Semiconductor Corporation]公司的发展小趣事

ALSC公司成立于XXXX年,初创期面临着激烈的市场竞争和技术壁垒。然而,创始人凭借对半导体技术的深刻理解和市场需求的敏锐洞察,决定专注于开发高性能、低功耗的半导体产品。经过多次尝试和不断改进,公司成功推出了一款具有竞争力的产品,并逐渐在市场上获得了一席之地。

问答坊 | AI 解惑

谁知道EWB中默认的ADC是哪个型号的芯片啊?

本帖最后由 dontium 于 2015-1-23 13:26 编辑 谁知道EWB中默认的ADC是哪个型号的芯片啊?能告诉我吗?谢谢,我做设计用那个仿真结果很好,可是不知道那具体是哪个芯片啊 …

查看全部问答>

扩展串口芯片驱动的问题

PXA270+WinCE6.0  通过总线扩展串口 芯片 ST16c554 扩出了4个串口 对串口了解不够,请问一下,写扩展串口的驱动需要注意哪些? 对比芯片资料发现里面寄存器的配置与16550差别不大,是不是可以继承16550的pdd层? mdd层需要修改吗,还 ...…

查看全部问答>

wince如何挂载FAT32文件系统?

请教各位大虾,wince如何挂载FAT32文件系统? 我用ARM平台,有一片512M的NANDFLASH,前30M用做OS,格式化成BINFS,后面的部分格式化成FAT32,可是挂载不上。大家知道怎么挂载吗?请指教一下。 谢谢 :) …

查看全部问答>

纳米测量中屏蔽罩的重要作用

电缆的不当使用会造成测量时间过长的问题。共轴电缆提供了一个传输信号的内导体和屏蔽。内导体和屏蔽之间存在着可供漏电流流过的旁路电阻和电容通路[1](图4)。除了作为漏电流的通路之外,旁路的R和C还构成了一个RC电路,该电路将大大放慢弱电流 ...…

查看全部问答>

我用一个数组输出一个三角波,为何输出的是这样的啊

我用一个数组输出一个三角波,为何输出的是这样的啊  不是三角波,而是一下一下的向上跳动?…

查看全部问答>

msp430 LaunchPad 的Arduino开发平台

http://energia.nu/ 使用很简单,从上面网站下载相应版本的软件,解压出来后,记得修改一下目录名,把后面一长串的数字字母去掉。 运行安装目录“energia.exe”, 打开软件后,把LAUCHPAD连接到USB接口,装好相应驱动,从\"Tools->Board\"菜单 ...…

查看全部问答>

TI Cortex-A8 TQ_AM335X的简介

TQ_AM335X开发板是广州天嵌计算机科技有限公司专门针对有一定开发经验或企业用户提供的一整套的学习和解决方案。TQ_AM335X提供了一个性能稳定及成本低廉的Cortex-A8开发平台,以便您快速熟悉TI AM335X处理器特性和设计方法,并加快您的产品开发进度 ...…

查看全部问答>

LPC1500体验+SCT_1、寄存器

本帖最后由 freebsder 于 2014-8-15 21:59 编辑 1, CONFIG寄存器中的UNIFY位设置timer作为1个32位还是2个16位计时器。在访问其他寄存器之前设置这个位。       UNIFY = 1: Only one register     is ...…

查看全部问答>

AVR xmega 的 sleep模式怎么唤醒

我做的是一个锂电池供电的系统,需要进入sleep的powerdown模式进行节电。 The only interrupts that can wake up the MCU are the Two Wire Interface address match interrupts, and asynchronous port interrupts, e.g pin change. 手册上 ...…

查看全部问答>

[MicroPython]开发版之资料收集

今天中午,收到圆通快递的信息和电话,想必是申请的开发版到了,就叫小Py吧,中午太忙了,所以现在才来论坛发贴。首先,先上图让大家看看吧 先来张远景, 近景, 焊好排针之后, 好了, 上电,第一就遇到了,驱动无法安装上, 先看看 ...…

查看全部问答>