⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 电池管理及监控设计.htm

📁 wince 电池电源管理文件集 wince 电池电源管理文件集
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                  BatteryPDDInitialize、BatteryPDDDeinitialize、BatteryPDDGetStatus、BatteryPDDGetLevels、BatteryPDDSupportsChangeNotification、BatteryPDDPowerHandler、BatteryPDDResume。</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; 电池驱动初始化过程</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; 
                  在系统上电自检成功后,上层调用电池驱动入口函数,进行电池驱动初始化工作:</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; 
                  (1)判断是否已经进行中断事件初始化,如果没有初始化,则进行下面的操作,如果已经进行了一次初始化,则关闭事件句柄。</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; (2)初始化电池全局变量。</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; 
                  (3)如果中断事件成功,则调用ResumeThreadProc 
                  创建电池线程。在线程的主调函数中,设置电池线程的优先级,然后在循环中等待中断事件。</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; (4)调用PDD 
                  层的初始化函数BatteryPDDInitialize;在PDD 层中,为GPIO 
                  寄存器和电源管理寄存器开辟两段虚拟内存。</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; (5)初始化AC97 
的寄存器。</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; 
                  (6)初始化存放电池电量值的环形缓冲区。<BR>&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp; (7)调用BatteryAPIGetSystemPowerStatusEx2 
                  函数更新电池电量结构体PSYSTEM POWERSTATUS_ EX2 中的数据。</FONT></P>
                  <P><BR><FONT face=宋体>4. BatteryAPIGetSystemPowerStatusEx 
                  函数</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; 
                  BatteryAPIGetSystemPowerStatusEx 
                  函数主要获取系统电源状态值。在执行过程中是通过调用BatteryAPIGetSystemPowerStatusEx2 
                  函数来完成的。而BatteryAPIGetSystemPowerStatusEx2 
                  函数调用BatteryPDDGetStatus 函数以获取电池状态信息,BatteryPDDGetStatus 
                  函数通过调用GetMainBatteryVoltage 获取主电池电压值,通过调用GetPowerDevStatus 
                  获取电池设备状态, 并获取剩余电量的比例值。下图3 为BatteryAPIGetSystemPowerStatusEx 
                  函数调用关系图:</FONT></P>
                  <P><IMG src="电池管理及监控设计.files/200771013136293.jpg" 
                  border=0><BR><FONT face=宋体>图3 BatteryAPIGetSystemPowerStatusEx 
                  函数调用关系图</FONT></P>
                  <P><BR><FONT face=宋体>5. CalcMainBatteryVoltage 
                  获取电池电压值</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; Bq26220 通过BAT 
                  端口检测电池电源,并且通过寄存器BATH-BATL 传递给上层。这个BATH(地址=0x72——从第0 比特到第2 
                  比特)和BATL 低比特寄存器(地址=0x71——从第0 比特到第7 比特)包含电池电压经过ADC 
                  转换后的结果。这个电压以11 比特、2.44mV 为步长、并带有LSB 的二进制形式表达出来。BATH 寄存器的第3 
                  比特代表MSB,BATL 的第0 比特代表LSB。最大电压测量范围为5V。</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; BATH寄存器的第3 比特到第7 比特存储电压ADC 
                  后的偏移量信息,这个最重要的信息比特是在4 比特(第3 比特到第7 比特)偏移数据后的标记比特。</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; 
                  LSB获取修正因子,以μV为单位,主控制器负责通LSB获取修正因子和偏移量来测量ADC后的电压值。下面是计算公式:</FONT></P>
                  <P class=MsoNormal 
                  style="TEXT-ALIGN: left; mso-layout-grid-align: none" 
                  align=left><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; 
                  正确的</SPAN><FONT face=宋体><I><SPAN lang=EN-US 
                  style="FONT-SIZE: 12pt; FONT-FAMILY: TimesNewRomanPS-ItalicMT; mso-bidi-font-family: TimesNewRomanPS-ItalicMT; mso-font-kerning: 0pt">V</SPAN></I><I><SPAN 
                  lang=EN-US 
                  style="FONT-SIZE: 7pt; FONT-FAMILY: TimesNewRomanPS-ItalicMT; mso-bidi-font-family: TimesNewRomanPS-ItalicMT; mso-font-kerning: 0pt"> 
                  BAT</SPAN></I><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">=</SPAN><I><SPAN 
                  lang=EN-US 
                  style="FONT-SIZE: 12pt; FONT-FAMILY: TimesNewRomanPS-ItalicMT; mso-bidi-font-family: TimesNewRomanPS-ItalicMT; mso-font-kerning: 0pt">V</SPAN></I><I><SPAN 
                  lang=EN-US 
                  style="FONT-SIZE: 7pt; FONT-FAMILY: TimesNewRomanPS-ItalicMT; mso-bidi-font-family: TimesNewRomanPS-ItalicMT; mso-font-kerning: 0pt"> 
                  BAT</SPAN></I><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">×(</SPAN><SPAN 
                  lang=EN-US 
                  style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">2.44</SPAN><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">+</SPAN><SPAN 
                  lang=EN-US 
                  style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">LSB</SPAN><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">修正因子)-偏移量</SPAN><I><SPAN 
                  lang=EN-US 
                  style="FONT-SIZE: 12pt; FONT-FAMILY: TimesNewRomanPS-ItalicMT; mso-bidi-font-family: TimesNewRomanPS-ItalicMT; mso-font-kerning: 0pt"><o:p></o:p></SPAN></I></FONT></P>
                  <P class=MsoNormal 
                  style="TEXT-ALIGN: left; mso-layout-grid-align: none" 
                  align=left><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; 
                  计算举例如下:<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
                  <P class=MsoNormal 
                  style="TEXT-ALIGN: left; mso-layout-grid-align: none" 
                  align=left><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; 
                  例如:如果真实的</SPAN><FONT face=宋体><SPAN lang=EN-US 
                  style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">LSB</SPAN><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">=+</SPAN><SPAN 
                  lang=EN-US 
                  style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">2.45mV</SPAN><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">,偏移量=+</SPAN><SPAN 
                  lang=EN-US 
                  style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">80mV<o:p></o:p></SPAN></FONT></P>
                  <P class=MsoNormal 
                  style="TEXT-ALIGN: left; mso-layout-grid-align: none" 
                  align=left><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; 
                  计算正确的:</SPAN><FONT face=宋体><I><SPAN lang=EN-US 
                  style="FONT-SIZE: 12pt; FONT-FAMILY: TimesNewRomanPS-ItalicMT; mso-bidi-font-family: TimesNewRomanPS-ItalicMT; mso-font-kerning: 0pt">V</SPAN></I><I><SPAN 
                  lang=EN-US 
                  style="FONT-SIZE: 7pt; FONT-FAMILY: TimesNewRomanPS-ItalicMT; mso-bidi-font-family: TimesNewRomanPS-ItalicMT; mso-font-kerning: 0pt"> 
                  BAT</SPAN></I><I><SPAN lang=EN-US 
                  style="FONT-SIZE: 12pt; FONT-FAMILY: TimesNewRomanPS-ItalicMT; mso-bidi-font-family: TimesNewRomanPS-ItalicMT; mso-font-kerning: 0pt"><o:p></o:p></SPAN></I></FONT></P>
                  <P class=MsoNormal 
                  style="TEXT-ALIGN: left; mso-layout-grid-align: none" 
                  align=left><FONT face=宋体><SPAN lang=EN-US 
                  style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; 
                  LSB</SPAN><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">修正因子=+</SPAN><SPAN 
                  lang=EN-US 
                  style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">10</SPAN><SPAN 
                  style="FONT-SIZE: 12.5pt; FONT-FAMILY: SymbolMT; mso-bidi-font-family: SymbolMT; mso-font-kerning: 0pt">μ</SPAN><I><SPAN 
                  lang=EN-US 
                  style="FONT-SIZE: 12pt; FONT-FAMILY: TimesNewRomanPS-ItalicMT; mso-bidi-font-family: TimesNewRomanPS-ItalicMT; mso-font-kerning: 0pt">V</SPAN></I><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">=</SPAN><SPAN 
                  lang=EN-US 
                  style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">0.001mV<o:p></o:p></SPAN></FONT></P>
                  <P class=MsoNormal 
                  style="TEXT-ALIGN: left; mso-layout-grid-align: none" 
                  align=left><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; 
                  偏移量=+</SPAN><FONT face=宋体><SPAN lang=EN-US 
                  style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">10</SPAN><SPAN 
                  style="FONT-SIZE: 12pt; FONT-FAMILY: SymbolMT; mso-bidi-font-family: SymbolMT; mso-font-kerning: 0pt">×</SPAN><SPAN 
                  lang=EN-US 
                  style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">8mV</SPAN><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">=</SPAN><SPAN 
                  lang=EN-US 
                  style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">80mV<o:p></o:p></SPAN></FONT></P>
                  <P class=MsoNormal 
                  style="TEXT-ALIGN: left; mso-layout-grid-align: none" 
                  align=left><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; 
                  正确的</SPAN><FONT face=宋体><I><SPAN lang=EN-US 
                  style="FONT-SIZE: 12pt; FONT-FAMILY: TimesNewRomanPS-ItalicMT; mso-bidi-font-family: TimesNewRomanPS-ItalicMT; mso-font-kerning: 0pt">V</SPAN></I><I><SPAN 
                  lang=EN-US 
                  style="FONT-SIZE: 7pt; FONT-FAMILY: TimesNewRomanPS-ItalicMT; mso-bidi-font-family: TimesNewRomanPS-ItalicMT; mso-font-kerning: 0pt"> 
                  BAT</SPAN></I><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">=</SPAN><I><SPAN 
                  lang=EN-US 
                  style="FONT-SIZE: 12pt; FONT-FAMILY: TimesNewRomanPS-ItalicMT; mso-bidi-font-family: TimesNewRomanPS-ItalicMT; mso-font-kerning: 0pt">V</SPAN></I><I><SPAN 
                  lang=EN-US 
                  style="FONT-SIZE: 7pt; FONT-FAMILY: TimesNewRomanPS-ItalicMT; mso-bidi-font-family: TimesNewRomanPS-ItalicMT; mso-font-kerning: 0pt"> 
                  BAT</SPAN></I><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">×(</SPAN><SPAN 
                  lang=EN-US 
                  style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">2.44</SPAN><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">+</SPAN><SPAN 
                  lang=EN-US 
                  style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">0.01</SPAN><SPAN 
                  style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">)-</SPAN><SPAN 
                  lang=EN-US 
                  style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">80</SPAN><I><SPAN 
                  lang=EN-US 
                  style="FONT-SIZE: 12pt; FONT-FAMILY: TimesNewRomanPS-ItalicMT; mso-bidi-font-family: TimesNewRomanPS-ItalicMT; mso-font-kerning: 0pt"><o:p></o:p></SPAN></I></FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; 程序具体实现流程如下图4:</FONT></P>
                  <P><IMG src="电池管理及监控设计.files/2007710131324487.jpg" 
                  border=0><BR><FONT face=宋体>图4 CalcMainBatteryVoltage 
                  函数流程图</FONT></P>
                  <P><BR><FONT face=宋体>6. 电池电量计算方法</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; 
                  原来电池电量百分比显示的其实是电压百分比。可是硬件方面测试发现,电池电量和电池电压并非成简单的线性关系,因此需要分区间进行百分比的转换校正。常温下,我们设备获得的电池电压和电量曲线大致如下(图5):</FONT></P>
                  <P><IMG src="电池管理及监控设计.files/2007710131342353.gif" 
                  border=0><BR><FONT face=宋体>图5 电池电压和电量的关系图</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; 
                  在驱动程序中创建了一个为16个字长度的环形缓冲区,采样点数增加为16个,这样可以增加对采样结果的可靠性。电池电压采样值even_samp为16个采样值的和去掉一个最大值和一个最小值后再取平均值。</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; 
                  在我们的移动终端设备中,电池的最大电压为559(4.10V),最小电压为455(3.30V),以图5 
                  的两条虚线作为区间的分界线,可分为4.10V~3.80V,3.80V~3.60V,3.60V~3.30V 
                  这三个区间,对电池电压值进行分区间的处理,三个区间上的曲线斜率近似为:</FONT></P>
                  <P><FONT face=宋体>&nbsp;&nbsp;&nbsp; 
                  4.1V~3.80V:Kl=(100-70)/(4.10-3.80)</FONT></P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -