基于单总线技术的嵌入式系统电源管理电路的设计

   2023-07-11 互联网2790
核心提示:美国Dallas半导体公司推出的单总线(1-Wire Bus)技术采用单根信号线,它既可传输时钟,又能传输数据,而且数据传输是双向的。单总

美国Dallas半导体公司推出的单总线(1-Wire Bus)技术采用单根信号线,它既可传输时钟,又能传输数据,而且数据传输是双向的。单总线技术适用于单主机系统,单总线主控器能够控制一个或多个从机设备。主机可以选择专用的单总线控制器,对于小型单总线网络,可选择单片机作为主控器,从机是单总线器件,它们之间的数据交换通过单一信号线进行。当只有一个从机设备时,系统可按单节点系统操作;当有多个从设备时,系统则按多节点系统操作,如图1所示。

由于单总线系统采用主从结构,只有主机呼叫从机时,从机才能应答,因此主机访问单总线器件时必须严格遵循单总线命令序列,即初始化单总线器件、发送存储器功能命令(ROM命令)、发送暂存器功能命令(RAM命令)和数据传输。如果出现序列混乱,单总线器件将不响应主机。  单总线电源管理芯片DS2438

每片DS2438内部有一个全球唯一的64位序列号作为芯片的唯一标识,它具有以下特性:提供一个单总线接口;测量电源温度采用直接数字式温度传感器;芯片内部的A/D转换器可以采集电池电压,实现电池充、放电过程监测;芯片内部有三个电流积分器分别用于计算电池净电量、充电、放电电流总和;40字节的非易失ROM可用于存储用户数据。

DS2438上64字节的存储空间分成8页,每页8个字节,该内存空间从数据访问方式上可以分成RAM(高速暂存)和SRAM/EEPROM(非易失ROM)两部分。高速暂存RAM用于确保单总线通讯时的数据一致性:数据首先写入DS2438的高速暂存RAM,当数据被确认后,通过ROM复制命令将暂存页的数据写入相应的SRAM/EEPROM保护空间中。DS2438的存储空间内包括一些特殊功能寄存器和供用户使用的存储单元,它们通常位于存储空间的第0页(见表1)。  

状态/配置寄存器(第0页0字节)决定了DS2438的工作状态,单片机通过对状态/配置寄存器进行读、写操作,可实现DS2438的各种功能,因此在对其进行操作之前,必须对这一寄存器进行初始化,即对相应的控制位进行写操作;电压寄存器(第0页3、4字节)用来存放转换后的电压值;电流寄存器(第0页5、6字节)用来存放电流测量的结果,而电流的测量是通过测量外部传感电阻(RSENS)两端的电压来实现的。实际上电流寄存器存的是电压值,要得到流入、流出电池的电流可通过计算获得,即I=电流寄存器的值/(4096×RSENS)

DS2438操作命令分为两类,一类是进行数据采集和存储的控制功能命令;另一类是内存功能命令。控制功能命令通过指令形式发送到DS2438,实现温度测量、电源电压A/D转换等,操作结果将放到DS2438的暂存页中。然后,用户可以通过发送内存功能指令从温度、电压寄存器中读出这些数值。

电源管理系统的硬件实现

为了支持标准速率的单总线主机通信,电源管理系统必须满足以下几点要求:
  
1) 微处理器的通信端口必须是双向的,其输出为漏极开路,且总线上有弱上拉电阻(5K),以便设备在不发送数据时能够释放总线,从而允许其它设备使用总线;  
2) 微处理器必须能产生支持标准速度单总线通信所需的1µs 延时和支持高速通信所需的0.25µs延时;  
3) 通信过程不能被中断。  我们采用基于AVR精简指令集的8位低功耗CMOS单片机AT90S2313作为主控器件,组成单总线电源管理系统,具体接口电路如图2所示。通过在一个时钟周期内执行一条指令,AT90S2313 可以取得接近1MIPS/MHz 的性能,完全可以实现标准方式下单总线通信所需的1us延时。另外,AT90S2313支持休眠模式和掉电模式,用户可以采用内、外部中断源,该电路因此特别适合于实时性强的嵌入式应用产品的电源管理。

电源管理系统的程序设计

单总线通信时,每次传送的数据或命令都由一系列时序信号组成。单总线上共有四种基本时序信号:复位信号、写1位、写0位和读信号。发送字节命令可以通过多次调用这四种基本时序来实现。设计中应保证指令执行时间小于或等于时序信号中的最小时间。下面结合每种基本操作的时序图给出基于AT90S2313单片机的汇编代码。  
实现复位时序的程序

首先主控器件将总线拉低并持续480us,然后释放总线,延时70us后对总线进行采样,0表示总线上有器件应答,1表示无器件应答。采样窗口可以选择60us至240us。复位时序如图3所示:

;子函数名:resetpulse
;功能:初始化1_wire总线
;入口参数:无
;出口参数:resetflag 1:DS2438应答; 0:DS2438无应答。
resetpulse:
clr resetflag
sbi ddrb,6
cbi portb,6 ;输出清零
ldi r24,0xe0 ;延时480us;主机发出复位脉冲
ldi r25,0x01
func1:
sbiw r24,0x01
brne func1
cbi ddrb,6 ;设置为输入,释放总线
sbi portb,6
ldi r24,0x60 ;延时40us,等待DS2438的应答信号
func2:
dec r24
brne func2
cbi ddrb,6
sbis pinb,6 ;总线为高电平,没有器件应答
inc resetflag ;总线为低电平,有器件应答,置输出resetflag=1
ldi r24,0xe0 ;延时480us,等待复位周期完成
ldi r25,0x01
func3:
sbiw r24,0x01
brne func3
sbrs resetflag,0
rjmp resetpulse
ret

实现写位时序的程序

写时序分为写1位时序和写0位时序,写1位的时候,主控器件先将总线拉低持续6us,随后释放总线并持续延时64us,写0位,主控器件将总线拉低持续60us,随后释放总线延时10us结束写时序。时序图如图4所示:

;子函数名:write_bit
;功能:写入一位数据
;入口参数:command.0 0:写0位; 1:写1位
;出口参数:无
write_bit:
sbi ddrb,6
cbi portb,6 ;设置为输出,准备将总线拉低
ldi r24,0x0a
func4:
dec r24 ;将总线拉低,持续延时10us,产生tlow1脉冲
brne func4
sbrc command,0 ;若要输出0,则跳过下一行,总线保持为低
sbi portb,6 ;若要输出1,释放总线,准备写1
ldi r24,0x50
func5:
dec r24 ;延时50us,供DS2438采集数据
brne func5
sbi portb,6 ;写入结束,释放总线
ldi r24,0x03 ;延时2us,恢复信号,准备写下一位
func6:
dec r24
brne func6
ret

实现读位时序的程序  读取总线数据的时候,主控器首先将总线拉低并持续6us,然后释放总线延时9us等待总线数据建立,随后由主机对总线进行采样,采样结束后将总线抬高,释放总线。连续读取时应当保证采样过程至少持续55us,并且两次读时序之间留出至少1us的恢复时间。时序图如图5所示:

         ;子函数名:read_bit
;功能:读取一位数据
;入口参数:无
;出口参数:读取的1位数据存在data的最高位,同时data中原有的数据右移1位。
read_bit:
cbi portb,6 ;输出0,准备拉低总线
ldi r24,0x03 ;拉低总线(延时2us)
func7:
dec r24
brne func7
cbi ddrb,6
sbi portb,6 ;设置为输入,释放总线
ldi r24,0x08 ;延时10us,等待DS2438建立输出数据
func8:
dec r24
brne func8
clc
sbic pinb,6 ;总线为低电平,跳过下一行,C保持为0
sec ;总线为高电平,C置1
ror data ;C移入data最高位
ldi r24,0x50 ;延时80us,等待读周期结束
func9:
dec r24
brne func9
sbi ddrb,6
sbi portb,6
ret

实现写入一个字节数据的程序

;子函数名:writecmd
;功能:写入一个字节数据
writecmd:
ldi com_len,0x08 ;置计数器
write_next:
rcall write_bit ;写入一位
ror command ;要写入的数据位移入最低位
dec com_len ;计数器减1,循环8次将一个字节写入DS2438
brne write_next ;8位未完,继续下一位
ret

实现读入多字节数据的程序

;子函数名:readata
;出口参数:R30 读取的8位数据存在R30中,9个byte的数据存放于0x70开始的地址中。
readata:
ldi data,0
read_next_byte:
ldi com_len,0x08 ;置计数器
read_next_bit:
rcall read_bit ;从总线上读取一位
dec com_len
brne read_next_bit ;8位未完,继续读取下一位
st X+,data
dec data_len
brne read_next_byte ;9字节未完,继续
ret

实现字节数据的读写后,我们就可以发送控制指令或内存指令了。进行数据通信时,单片机对单总线器件操作时一般分为以下四个过程:初始化器件、发送ROM命令、发送RAM命令、数据交换。此处以采集电池的电压为例,单片机先对DS2438发出采集电压的控制命令,然后等待其采集完毕并自动将电压测量值存入相应的寄存器后,再由单片机读取寄存器的内容即可。在读取寄存器值时,若单片机与DS2438之间的数据线为低电平,则表明DS2438正在进行电压转换,此时不能读取数据,只有当数据线为高电平时,才能正确读取数据,其软件设计流程如图6所示:  

  总之,单总线系统硬件电路简洁的同时造成了软件实现较为复杂,但是只要按照基本时序进行操作,就能保证单总线通信的顺利进行。

在嵌入式系统中的典型应用

采用DS2438组成的电源智能管理系统具有接口电路简单且有效节省主控器件I/O资源的优点,按照单总线通信协议设计可实现多项电源参数的实时监控。实际的电池监控系统适用于镍氢电池、锂电池,可检测的电源电压范围0V到10V,精确度为10mV。一个采用前述电源管理电路的典型嵌入式系统结构如图7所示:

   对于采用电池供电的嵌入式系统来说,硬件设计应综合考虑处理器、总线宽度以及接口电路对系统功耗的影响。从软件看,采用动态电源管理,即通过运行时动态调节CPU频率和电压可达到降低功耗的目的。以该嵌入式系统采用的英特尔公司32位PXA255处理器为例,它支持四种工作模式(全速模式,工作模式,睡眠模式,空闲模式),如果电源管理电路能及时检测电池电量并随时提示系统,那么就能在必要时自动切换该处理器的工作模式,关闭不必要的外部接口控制器并保护数据,进而延长系统的工作时间。


 
举报收藏 0打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  隐私政策  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  RSS订阅